Changeset View
Changeset View
Standalone View
Standalone View
head/www/mod_fastcgi/files/patch-fcgi_util.c
--- fcgi_util.c.orig | --- fcgi_util.c.orig 2017-03-29 21:11:44 UTC | ||||
+++ fcgi_util.c | +++ fcgi_util.c | ||||
@@ -268,13 +268,17 @@ | @@ -268,13 +268,17 @@ fcgi_util_check_access(pool *tp, | ||||
/* Get the user membership for the file's group. If the | /* Get the user membership for the file's group. If the | ||||
* uid is a member, check the group bits. */ | * uid is a member, check the group bits. */ | ||||
{ | { | ||||
- const struct group * const gr = getgrgid(statBuf->st_gid); | - const struct group * const gr = getgrgid(statBuf->st_gid); | ||||
- const struct passwd * const pw = getpwuid(uid); | - const struct passwd * const pw = getpwuid(uid); | ||||
+ char buf[1024], buf2[1024]; | + char buf[1024], buf2[1024]; | ||||
+ struct group gr, *r; | + struct group gr, *r; | ||||
+ struct passwd pw, *r2; | + struct passwd pw, *r2; | ||||
- if (gr != NULL && pw != NULL) { | - if (gr != NULL && pw != NULL) { | ||||
- char **user = gr->gr_mem; | - char **user = gr->gr_mem; | ||||
+ getgrgid_r(statBuf->st_gid, &gr, buf, sizeof(buf), &r); | + getgrgid_r(statBuf->st_gid, &gr, buf, sizeof(buf), &r); | ||||
+ getpwuid_r(uid, &pw, buf2, sizeof(buf2), &r2); | + getpwuid_r(uid, &pw, buf2, sizeof(buf2), &r2); | ||||
+ | + | ||||
+ if (r != NULL && r2 != NULL) { | + if (r != NULL && r2 != NULL) { | ||||
+ char **user = r->gr_mem; | + char **user = r->gr_mem; | ||||
for ( ; *user != NULL; user++) { | for ( ; *user != NULL; user++) { | ||||
- if (strcmp(*user, pw->pw_name) == 0) { | - if (strcmp(*user, pw->pw_name) == 0) { | ||||
+ if (strcmp(*user, r2->pw_name) == 0) { | + if (strcmp(*user, r2->pw_name) == 0) { | ||||
if (mode & R_OK && !(statBuf->st_mode & S_IRGRP)) | if (mode & R_OK && !(statBuf->st_mode & S_IRGRP)) | ||||
return "read not allowed by group"; | return "read not allowed by group"; | ||||
if (mode & W_OK && !(statBuf->st_mode & S_IWGRP)) | if (mode & W_OK && !(statBuf->st_mode & S_IWGRP)) | ||||
@@ -445,8 +449,9 @@ | @@ -445,8 +449,9 @@ fcgi_util_fs_set_uid_n_gid(pool *p, fcgi_server *s, ui | ||||
{ | { | ||||
#ifndef WIN32 | #ifndef WIN32 | ||||
+ char buf[1024]; | + char buf[1024]; | ||||
struct passwd *pw; | struct passwd *pw; | ||||
- struct group *gr; | - struct group *gr; | ||||
+ struct group gr, *r; | + struct group gr, *r; | ||||
if (fcgi_wrapper == NULL) | if (fcgi_wrapper == NULL) | ||||
return NULL; | return NULL; | ||||
@@ -467,14 +472,14 @@ | @@ -467,14 +472,14 @@ fcgi_util_fs_set_uid_n_gid(pool *p, fcgi_server *s, ui | ||||
s->username = s->user; | s->username = s->user; | ||||
s->gid = gid; | s->gid = gid; | ||||
- gr = getgrgid(gid); | - gr = getgrgid(gid); | ||||
- if (gr == NULL) { | - if (gr == NULL) { | ||||
+ getgrgid_r(gid, &gr, buf, sizeof(buf), &r); | + getgrgid_r(gid, &gr, buf, sizeof(buf), &r); | ||||
+ if (r == NULL) { | + if (r == NULL) { | ||||
return ap_psprintf(p, | return ap_psprintf(p, | ||||
Show All 9 Lines |