Changeset 428 for trunk/src/trustfile.c
- Timestamp:
- Mar 12, 2013, 9:42:07 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/trustfile.c
r230 r428 414 414 */ 415 415 /* not static to circumvent stupid gcc 4 bug */ 416 int isingrp(gid_t grp, uid_t *ulist )416 int isingrp(gid_t grp, uid_t *ulist, int * errval) 417 417 { 418 418 struct passwd *w; /* info about group member */ … … 420 420 register char **p; /* points to current group member */ 421 421 struct group *g; /* pointer to group information */ 422 423 int status; 422 424 423 425 #if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R) … … 430 432 SL_ENTER(_("isingrp")); 431 433 434 *errval = 0; 435 432 436 #if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R) 433 437 buffer = malloc(SH_GRBUF_SIZE); 434 sh_getgrgid_r(grp, &gr, buffer, SH_GRBUF_SIZE, &g); 435 #else 438 status = sh_getgrgid_r(grp, &gr, buffer, SH_GRBUF_SIZE, &g); 439 #else 440 errno = 0; 436 441 g = sh_getgrgid(grp); 442 status = errno; 437 443 #endif 438 444 439 445 if (g == NULL) 440 446 { 447 if (status == ERANGE) 448 *errval = status; 449 441 450 goto end_false; 442 451 } … … 510 519 */ 511 520 /* not static to circumvent stupid gcc 4 bug */ 512 int onlytrustedingrp(gid_t grp, uid_t *ulist )521 int onlytrustedingrp(gid_t grp, uid_t *ulist, int * errval) 513 522 { 514 523 struct passwd *w; /* info about group member */ … … 518 527 register int flag = -1; /* group member found */ 519 528 529 int status; 530 520 531 #if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R) 521 532 struct group gr; … … 529 540 SL_ENTER(_("onlytrustedingrp")); 530 541 542 *errval = 0; 543 531 544 #ifdef TRUST_DEBUG 532 545 fprintf(stderr, "trustfile: group writeable, group_gid: %ld\n", … … 536 549 #if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R) 537 550 buffer = malloc(SH_GRBUF_SIZE); 538 sh_getgrgid_r(grp, &gr, buffer, SH_GRBUF_SIZE, &g); 539 #else 551 status = sh_getgrgid_r(grp, &gr, buffer, SH_GRBUF_SIZE, &g); 552 #else 553 errno = 0; 540 554 g = sh_getgrgid(grp); 555 status = errno; 541 556 #endif 542 557 543 558 if (g == NULL) 544 559 { 560 if (status == ERANGE) 561 *errval = status; 562 545 563 #ifdef TRUST_DEBUG 546 564 fprintf(stderr, … … 722 740 char c; /* used to hold temp char */ 723 741 742 int errgrp = 0; 743 724 744 SL_ENTER(_("sl_trustfile")); 725 745 if (fname == NULL) … … 1010 1030 */ 1011 1031 if (((stbuf.st_mode & S_IWGRP) == S_IWGRP) && 1012 ((okusers != NULL && !onlytrustedingrp((gid_t)stbuf.st_gid,okusers ))||1013 (badusers != NULL && isingrp((gid_t)stbuf.st_gid, badusers )))1032 ((okusers != NULL && !onlytrustedingrp((gid_t)stbuf.st_gid,okusers,&errgrp))|| 1033 (badusers != NULL && isingrp((gid_t)stbuf.st_gid, badusers,&errgrp))) 1014 1034 #ifdef STICKY 1015 1035 && ((stbuf.st_mode&S_IFDIR) != S_IFDIR || … … 1035 1055 tf_badgid = (gid_t) stbuf.st_gid; 1036 1056 free(fexp); 1037 SL_IRETURN( SL_EBADGID, _("sl_trustfile"));1057 SL_IRETURN((errgrp == ERANGE) ? SL_ERANGE : SL_EBADGID, _("sl_trustfile")); 1038 1058 } 1039 1059 /*
Note:
See TracChangeset
for help on using the changeset viewer.