Loading CHANGES +3 −0 Changes for CHANGES: 3 added lines, 0 removed lines. Original line number Diff line number Diff line Changes with Apache 2.0.37 *) Fix the combination of mod_cgid, mod_setuexec, and mod_userdir. PR 7810 [Colm MacCarthaigh <colmmacc@redbrick.dcu.ie>] *) Fix suexec execution of CGI scripts from mod_include. PR 7791, 8291 [Colm MacCarthaigh <colmmacc@redbrick.dcu.ie>] Loading modules/generators/mod_cgid.c +25 −17 Changes for modules/generators/mod_cgid.c: 25 added lines, 17 removed lines. Original line number Diff line number Diff line Loading @@ -329,16 +329,8 @@ static int get_req(int fd, request_rec *r, char **argv0, char ***env, int *req_t if (rc != sizeof(int)) { return 1; } rc = read(fd, &suexec_cfg->ugid.uid, sizeof(uid_t)); if (rc != sizeof(uid_t)) { return 1; } rc = read(fd, &suexec_cfg->ugid.gid, sizeof(gid_t)); if (rc != sizeof(gid_t)) { return 1; } rc = read(fd, &suexec_cfg->active, sizeof(int)); if (rc != sizeof(int)) { rc = read(fd, suexec_cfg, sizeof(*suexec_cfg)); if (rc != sizeof(*suexec_cfg)) { return 1; } dconf[i] = (void *)suexec_cfg; Loading Loading @@ -379,12 +371,20 @@ static int get_req(int fd, request_rec *r, char **argv0, char ***env, int *req_t } #endif #endif /* For right now, just make the notes table. At some point we will need * to actually fill this out, but for now we just don't want suexec to * seg fault. */ /* basic notes table to avoid segfaults */ r->notes = apr_table_make(r->pool, 1); /* mod_userdir requires the mod_userdir_user note */ rc = read(fd, &len, sizeof(len)); if ((rc == sizeof(len)) && len) { data = apr_pcalloc(r->pool, len + 1); /* last byte is '\0' */ rc = read(fd, data, len); if(rc != len) { return 1; } apr_table_set(r->notes,"mod_userdir_user", data); } return 0; } Loading Loading @@ -441,9 +441,7 @@ static void send_req(int fd, request_rec *r, char *argv0, char **env, int req_ty suexec_mod); write(fd, &suexec_mod->module_index, sizeof(int)); write(fd, &suexec_cfg->ugid.uid, sizeof(uid_t)); write(fd, &suexec_cfg->ugid.gid, sizeof(gid_t)); write(fd, &suexec_cfg->active, sizeof(int)); write(fd, suexec_cfg, sizeof(*suexec_cfg)); } #if 0 Loading Loading @@ -483,6 +481,16 @@ static void send_req(int fd, request_rec *r, char *argv0, char **env, int req_ty } #endif #endif /* send a minimal notes table */ data = (char *) apr_table_get(r->notes, "mod_userdir_user"); if(data != NULL) { len = strlen(data); write(fd, &len, sizeof(len)); write(fd, data, len); } else { len = 0; write(fd, &len, sizeof(len)); } } static void daemon_signal_handler(int sig) Loading Loading
CHANGES +3 −0 Changes for CHANGES: 3 added lines, 0 removed lines. Original line number Diff line number Diff line Changes with Apache 2.0.37 *) Fix the combination of mod_cgid, mod_setuexec, and mod_userdir. PR 7810 [Colm MacCarthaigh <colmmacc@redbrick.dcu.ie>] *) Fix suexec execution of CGI scripts from mod_include. PR 7791, 8291 [Colm MacCarthaigh <colmmacc@redbrick.dcu.ie>] Loading
modules/generators/mod_cgid.c +25 −17 Changes for modules/generators/mod_cgid.c: 25 added lines, 17 removed lines. Original line number Diff line number Diff line Loading @@ -329,16 +329,8 @@ static int get_req(int fd, request_rec *r, char **argv0, char ***env, int *req_t if (rc != sizeof(int)) { return 1; } rc = read(fd, &suexec_cfg->ugid.uid, sizeof(uid_t)); if (rc != sizeof(uid_t)) { return 1; } rc = read(fd, &suexec_cfg->ugid.gid, sizeof(gid_t)); if (rc != sizeof(gid_t)) { return 1; } rc = read(fd, &suexec_cfg->active, sizeof(int)); if (rc != sizeof(int)) { rc = read(fd, suexec_cfg, sizeof(*suexec_cfg)); if (rc != sizeof(*suexec_cfg)) { return 1; } dconf[i] = (void *)suexec_cfg; Loading Loading @@ -379,12 +371,20 @@ static int get_req(int fd, request_rec *r, char **argv0, char ***env, int *req_t } #endif #endif /* For right now, just make the notes table. At some point we will need * to actually fill this out, but for now we just don't want suexec to * seg fault. */ /* basic notes table to avoid segfaults */ r->notes = apr_table_make(r->pool, 1); /* mod_userdir requires the mod_userdir_user note */ rc = read(fd, &len, sizeof(len)); if ((rc == sizeof(len)) && len) { data = apr_pcalloc(r->pool, len + 1); /* last byte is '\0' */ rc = read(fd, data, len); if(rc != len) { return 1; } apr_table_set(r->notes,"mod_userdir_user", data); } return 0; } Loading Loading @@ -441,9 +441,7 @@ static void send_req(int fd, request_rec *r, char *argv0, char **env, int req_ty suexec_mod); write(fd, &suexec_mod->module_index, sizeof(int)); write(fd, &suexec_cfg->ugid.uid, sizeof(uid_t)); write(fd, &suexec_cfg->ugid.gid, sizeof(gid_t)); write(fd, &suexec_cfg->active, sizeof(int)); write(fd, suexec_cfg, sizeof(*suexec_cfg)); } #if 0 Loading Loading @@ -483,6 +481,16 @@ static void send_req(int fd, request_rec *r, char *argv0, char **env, int req_ty } #endif #endif /* send a minimal notes table */ data = (char *) apr_table_get(r->notes, "mod_userdir_user"); if(data != NULL) { len = strlen(data); write(fd, &len, sizeof(len)); write(fd, data, len); } else { len = 0; write(fd, &len, sizeof(len)); } } static void daemon_signal_handler(int sig) Loading