randy 97/04/24 22:29:55
Modified: src util_script.c Log: Get this right. Roy pointed out a couple of Bad Things (tm) and it seems this patch even broke the non ~user functionality by not setting the group. Revision Changes Path 1.50 +12 -9 apache/src/util_script.c Index: util_script.c =================================================================== RCS file: /export/home/cvs/apache/src/util_script.c,v retrieving revision 1.49 retrieving revision 1.50 diff -C3 -r1.49 -r1.50 *** util_script.c 1997/04/24 23:25:09 1.49 --- util_script.c 1997/04/25 05:29:53 1.50 *************** *** 433,442 **** void call_exec (request_rec *r, char *argv0, char **env, int shellcmd) { char *execuser; core_dir_config *conf; struct passwd *pw; struct group *gr; - char *grpname; conf = (core_dir_config *)get_module_config(r->per_dir_config, &core_module); --- 433,443 ---- void call_exec (request_rec *r, char *argv0, char **env, int shellcmd) { char *execuser; + char *grpname; + char *useruri; core_dir_config *conf; struct passwd *pw; struct group *gr; conf = (core_dir_config *)get_module_config(r->per_dir_config, &core_module); *************** *** 543,566 **** if ( suexec_enabled && ((r->server->server_uid != user_id) || (r->server->server_gid != group_id) || ! (!strncmp("/~",r->uri,2))) ) { if (!strncmp("/~",r->uri,2)) { ! r->uri += 2; ! if ((pw = getpwnam (getword_nc (r->pool, &r->uri, '/'))) == NULL) { log_unixerr("getpwnam", NULL, "invalid username", r->server); return; } ! r->uri -= 2; if ((gr = getgrgid (pw->pw_gid)) == NULL) { if ((grpname = palloc (r->pool, 16)) == NULL) return; else ! ap_snprintf(grpname, sizeof(grpname), "%d\0", pw->pw_gid); } ! else grpname = gr->gr_name; ! execuser = (char *) palloc (r->pool, (sizeof(pw->pw_name) + 1)); execuser = pstrcat (r->pool, "~", pw->pw_name, NULL); } else { --- 544,568 ---- if ( suexec_enabled && ((r->server->server_uid != user_id) || (r->server->server_gid != group_id) || ! (!strncmp("/~", r->uri, 2))) ) { if (!strncmp("/~",r->uri,2)) { ! useruri = r->uri; ! useruri += 2; ! if ((pw = getpwnam (getword_nc (r->pool, &useruri, '/'))) == NULL) { log_unixerr("getpwnam", NULL, "invalid username", r->server); return; } ! useruri -= 2; if ((gr = getgrgid (pw->pw_gid)) == NULL) { if ((grpname = palloc (r->pool, 16)) == NULL) return; else ! ap_snprintf(grpname, sizeof(grpname), "%d", pw->pw_gid); } ! else grpname = gr->gr_name; ! execuser = pstrcat (r->pool, "~", pw->pw_name, NULL); } else { *************** *** 572,578 **** log_unixerr("getgrgid", NULL, "invalid groupid", r->server); return; } ! execuser = (char *) palloc (r->pool, sizeof(pw->pw_name)); execuser = pw->pw_name; } --- 574,581 ---- log_unixerr("getgrgid", NULL, "invalid groupid", r->server); return; } ! ! grpname = gr->gr_name; execuser = pw->pw_name; }