Commit c6cd082e authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

  *) Adopt apr user/group name features for mod_rewrite.  Eliminates some
     'extra' stat's for user/group since they should never occur, and now
     resolves the SCRIPT_USER and SCRIPT_GROUP, including on WinNT NTFS
     volumes.

  No-one commented on loosing the 'stat' calls, can anyone invent a scenario
  where they could be required?  Also, I don't like the casts either, so if
  you have a better solution, don't whine, just fix it :)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87904 13f79535-47bb-0310-9956-ffa450edef68
parent 84572a6a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
Changes with Apache 2.0b1

  *) Adopt apr user/group name features for mod_rewrite.  Eliminates some
     'extra' stat's for user/group since they should never occur, and now
     resolves the SCRIPT_USER and SCRIPT_GROUP, including on WinNT NTFS
     volumes.  [William Rowe]

  *) Adopt apr features to simplify mod_includes.  This changes the
     behavior of the USER_NAME variable, unknown uid's are now reported
     as USER_NAME="<unknown>" rather than the old user#000 result.
+4 −40
Original line number Diff line number Diff line
@@ -113,12 +113,6 @@
#include <sys/uio.h>
#endif
#endif
#ifdef HAVE_PWD_H
#include <pwd.h>
#endif
#ifdef HAVE_GRP_H
#include <grp.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -3395,11 +3389,6 @@ static char *lookup_variable(request_rec *r, char *var)
    char resultbuf[LONG_STRING_LEN];
    apr_exploded_time_t tm;
    request_rec *rsub;
#ifndef WIN32
    struct passwd *pw;
    struct group *gr;
    apr_finfo_t finfo;
#endif

    result = NULL;

@@ -3588,44 +3577,19 @@ static char *lookup_variable(request_rec *r, char *var)
        LOOKAHEAD(ap_sub_req_lookup_file)
    }

#if !defined(WIN32) && !defined(NETWARE)
    /* Win32 has a rather different view of file ownerships.
       For now, just forget it */

    /* file stuff */
    else if (strcasecmp(var, "SCRIPT_USER") == 0) {
        result = "<unknown>";
        if (r->finfo.protection != 0) {
            if ((pw = getpwuid(r->finfo.user)) != NULL) {
                result = pw->pw_name;
            }
        }
        else {
            if (apr_stat(&finfo, r->filename,
                         APR_FINFO_NORM, r->pool) == APR_SUCCESS) {
                if ((pw = getpwuid(finfo.user)) != NULL) {
                    result = pw->pw_name;
                }
            }
        if (r->finfo.valid & APR_FINFO_USER) {
            apr_get_username(&(char*)result, r->finfo.user, r->pool);
        }
    }
    else if (strcasecmp(var, "SCRIPT_GROUP") == 0) {
        result = "<unknown>";
        if (r->finfo.protection != 0) {
            if ((gr = getgrgid(r->finfo.group)) != NULL) {
                result = gr->gr_name;
            }
        }
        else {
            if (apr_stat(&finfo, r->filename,
                         APR_FINFO_NORM, r->pool) == 0) {
                if ((gr = getgrgid(finfo.group)) != NULL) {
                    result = gr->gr_name;
                }
            }
        if (r->finfo.valid & APR_FINFO_GROUP) {
            apr_get_groupname(&(char*)result, r->finfo.group, r->pool);
        }
    }
#endif /* ndef WIN32 && NETWARE*/

    if (result == NULL) {
        return apr_pstrdup(r->pool, "");