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;
            }
      
  
  
  

Reply via email to