martin      98/09/17 13:23:48

  Modified:    htdocs/manual/mod directives.html core.html
               htdocs/manual ebcdic.html
               src/include ap_mmn.h httpd.h
               src/main http_core.c
               src/os/bs2000 bs2login.c
               src      CHANGES
  Log:
  BS2000 only: Change nasty BS2000AuthFile to less dangerous BS2000Account
  (no need to store a password anywhere)
  
  Revision  Changes    Path
  1.51      +1 -1      apache-1.3/htdocs/manual/mod/directives.html
  
  Index: directives.html
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/htdocs/manual/mod/directives.html,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- directives.html   1998/08/12 00:29:14     1.50
  +++ directives.html   1998/09/17 20:23:38     1.51
  @@ -67,7 +67,7 @@
   <LI><A HREF="core.html#bindaddress">BindAddress</A>
   <LI><A HREF="mod_setenvif.html#BrowserMatch">BrowserMatch</A>
   <LI><A HREF="mod_setenvif.html#BrowserMatchNoCase">BrowserMatchNoCase</A>
  -<LI><A HREF="core.html#bs2000authfile">BS2000AuthFile</A>
  +<LI><A HREF="core.html#bs2000account">BS2000Account</A>
   <LI><A HREF="mod_proxy.html#cachedefaultexpire">CacheDefaultExpire</A>
   <LI><A HREF="mod_proxy.html#cachedirlength">CacheDirLength</A>
   <LI><A HREF="mod_proxy.html#cachedirlevels">CacheDirLevels</A>
  
  
  
  1.138     +14 -16    apache-1.3/htdocs/manual/mod/core.html
  
  Index: core.html
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/htdocs/manual/mod/core.html,v
  retrieving revision 1.137
  retrieving revision 1.138
  diff -u -r1.137 -r1.138
  --- core.html 1998/09/17 14:14:56     1.137
  +++ core.html 1998/09/17 20:23:38     1.138
  @@ -28,7 +28,7 @@
   <LI><A HREF="#authname">AuthName</A>
   <LI><A HREF="#authtype">AuthType</A>
   <LI><A HREF="#bindaddress">BindAddress</A>
  -<LI><A HREF="#bs2000authfile">BS2000AuthFile</A>
  +<LI><A HREF="#bs2000account">BS2000Account</A>
   <LI><A HREF="#clearmodulelist">ClearModuleList</A>
   <LI><A HREF="#contentdigest">ContentDigest</A>
   <LI><A HREF="#coredumpdirectory">CoreDumpDirectory</A>
  @@ -363,12 +363,12 @@
   
   <HR>
   
  -<H2><A NAME="bs2000authfile">BS2000AuthFile directive</A></H2>
  -<!--%plaintext &lt;?INDEX {\tt BS2000AuthFile} directive&gt; -->
  +<H2><A NAME="bs2000account">BS2000Account directive</A></H2>
  +<!--%plaintext &lt;?INDEX {\tt BS2000Account} directive&gt; -->
   <A
    HREF="directive-dict.html#Syntax"
    REL="Help"
  -><STRONG>Syntax:</STRONG></A> BS2000AuthFile <EM>authfile</EM><BR>
  +><STRONG>Syntax:</STRONG></A> BS2000Account <EM>account</EM><BR>
   <A
    HREF="directive-dict.html#Default"
    REL="Help"
  @@ -384,20 +384,18 @@
   <A
    HREF="directive-dict.html#Compatibility"
    REL="Help"
  -><STRONG>Compatibility:</STRONG></A> BS2000AuthFile is only available for
  +><STRONG>Compatibility:</STRONG></A> BS2000Account is only available for
   BS2000 machines, as of Apache 1.3 and later.<P>
   
  -The <CODE>BS2000AuthFile</CODE> directive is available for BS2000 hosts
  -only. It must be used to define the password file which is used to
  -change the BS2000 task environment of the server to the non-privileged
  -account specified by the <A HREF="#user">User</A> directive. This is
  -required in the BS2000 POSIX subsystem (by performing a sub-LOGON) to
  -prevent CGI scripts from accessing resources of the privileged account
  -which started the server, usually <SAMP>TSOS</SAMP>.<BR>
  -Note that the specified <EM>authfile</EM> must be owned by the super
  -user and must not be readable or writable by anyone else, otherwise
  -Apache will refuse to start and exit with an error message.<BR>
  -Only one <CODE>BS2000AuthFile</CODE> directive can be used. <P>
  +The <CODE>BS2000Account</CODE> directive is available for BS2000 hosts
  +only. It must be used to define the account number for the non-privileged
  +apache server user (which was configured using the
  +<A HREF="#user">User</A> directive).
  +This is required by the BS2000 POSIX subsystem (to change the underlying
  +BS2000 task environment by performing a sub-LOGON) to prevent CGI scripts
  +from accessing resources of the privileged account which started the
  +server, usually <SAMP>SYSROOT</SAMP>.<BR>
  +Only one <CODE>BS2000Account</CODE> directive can be used. <P>
   
   <P><STRONG>See Also:</STRONG>
   <A HREF="../ebcdic.html">Apache EBCDIC port</A></P>
  
  
  
  1.7       +1 -1      apache-1.3/htdocs/manual/ebcdic.html
  
  Index: ebcdic.html
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/htdocs/manual/ebcdic.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ebcdic.html       1998/09/17 14:14:48     1.6
  +++ ebcdic.html       1998/09/17 20:23:40     1.7
  @@ -473,7 +473,7 @@
     <TR>
      <TD ALIGN=LEFT><A HREF="http://www.php.net/";>mod_php3</A>
      <TD ALIGN=CENTER>+
  -   <TD>mod_php3 runs fine
  +   <TD>mod_php3 runs fine, with LDAP and GD libraries
     </TR>
   
     <TR>
  
  
  
  1.8       +2 -1      apache-1.3/src/include/ap_mmn.h
  
  Index: ap_mmn.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/include/ap_mmn.h,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ap_mmn.h  1998/09/06 19:23:51     1.7
  +++ ap_mmn.h  1998/09/17 20:23:41     1.8
  @@ -177,10 +177,11 @@
    *                        request_rec* instead of pool*
    *                        (for implementing better error reporting).
    * 19980906 (1.3.2-dev) - added ap_md5_binary()
  + * 19980917 (1.3.2-dev) - bs2000: changed os_set_authfile() to 
os_set_account()
    */
   
   #ifndef MODULE_MAGIC_NUMBER_MAJOR
  -#define MODULE_MAGIC_NUMBER_MAJOR 19980906
  +#define MODULE_MAGIC_NUMBER_MAJOR 19980917
   #endif
   #define MODULE_MAGIC_NUMBER_MINOR 0                     /* 0...n */
   #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR        /* backward 
compat */
  
  
  
  1.241     +2 -2      apache-1.3/src/include/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/include/httpd.h,v
  retrieving revision 1.240
  retrieving revision 1.241
  diff -u -r1.240 -r1.241
  --- httpd.h   1998/09/17 15:56:03     1.240
  +++ httpd.h   1998/09/17 20:23:42     1.241
  @@ -984,12 +984,12 @@
   #endif
   
   #ifdef _OSD_POSIX
  -extern const char *os_set_authfile(pool *p, const char *filename);
  +extern const char *os_set_account(pool *p, const char *account);
   extern int os_init_job_environment(server_rec *s, const char *user_name);
   #endif /* _OSD_POSIX */
   
   char *ap_get_local_host(pool *);
  -unsigned long ap_get_virthost_addr(char *hostname, unsigned short *port);
  +unsigned long ap_get_virthost_addr(const char *hostname, unsigned short 
*port);
   
   extern API_VAR_EXPORT time_t ap_restart_time;
   
  
  
  
  1.230     +4 -4      apache-1.3/src/main/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/http_core.c,v
  retrieving revision 1.229
  retrieving revision 1.230
  diff -u -r1.229 -r1.230
  --- http_core.c       1998/09/10 17:36:15     1.229
  +++ http_core.c       1998/09/17 20:23:45     1.230
  @@ -2302,14 +2302,14 @@
   }
   
   #ifdef _OSD_POSIX /* BS2000 Logon Passwd file */
  -static const char *set_bs2000_authfile(cmd_parms *cmd, void *dummy, char 
*name)
  +static const char *set_bs2000_account(cmd_parms *cmd, void *dummy, char 
*name)
   {
       const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
       if (err != NULL) {
           return err;
       }
   
  -    return os_set_authfile(cmd->pool, name);
  +    return os_set_account(cmd->pool, name);
   }
   #endif /*_OSD_POSIX*/
   
  @@ -2624,8 +2624,8 @@
   { "NameVirtualHost", ap_set_name_virtual_host, NULL, RSRC_CONF, TAKE1,
     "A numeric IP address:port, or the name of a host" },
   #ifdef _OSD_POSIX
  -{ "BS2000AuthFile", set_bs2000_authfile, NULL, RSRC_CONF, TAKE1,
  -  "Name of server User's bs2000 logon password file (read-protected)" },
  +{ "BS2000Account", set_bs2000_account, NULL, RSRC_CONF, TAKE1,
  +  "Name of server User's bs2000 logon account name" },
   #endif
   { "ServerTokens", set_serv_tokens, NULL, RSRC_CONF, TAKE1,
     "Determine tokens displayed in the Server: header - Min(imal), OS or Full" 
},
  
  
  
  1.4       +22 -98    apache-1.3/src/os/bs2000/bs2login.c
  
  Index: bs2login.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/os/bs2000/bs2login.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- bs2login.c        1998/07/08 17:47:24     1.3
  +++ bs2login.c        1998/09/17 20:23:46     1.4
  @@ -60,125 +60,49 @@
   #include "http_config.h"
   #include "http_log.h"
   
  -static const char *bs2000_authfile = NULL;
  +static const char *bs2000_account = NULL;
   
   
  -/* This routine is called by http_core for the BS2000AuthFile directive */
  -/* It stores the file name (after a quick check for validity) for later use 
*/
  -const char *os_set_authfile(pool *p, const char *name)
  +/* This routine is called by http_core for the BS2000Account directive */
  +/* It stores the account name for later use */
  +const char *os_set_account(pool *p, const char *account)
   {
  -    struct stat stbuf;
  -    char *filename;
  +    if (bs2000_account != NULL && strcasecmp(bs2000_account, account) != 0)
  +        return "BS2000Account: can be defined only once.";
   
  -    filename = ap_server_root_relative(p, name);
  -
  -    /* auth file must exist */
  -    if (stat(filename, &stbuf) != 0) {
  -     return ap_pstrcat(p, "Unable to access bs2000 auth file ",
  -                    filename, NULL);
  -     exit(APEXIT_CHILDFATAL);
  -    }
  -
  -    /* auth file must be owned by root, and not readable/writable by 
everyone else */
  -    if (stbuf.st_uid != 0) {
  -     return ap_pstrcat(p, "BS2000 auth file ", filename,
  -                    " is not owned by SYSROOT - "
  -                    "change owner!", NULL);
  -    }
  -
  -    if (stbuf.st_mode & (S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) {
  -     return ap_pstrcat(p, "BS2000 auth file ", filename,
  -                    " is readable/writable by others - "
  -                    "check permissions!", NULL);
  -    }
  -
  -    bs2000_authfile = filename;
  +    bs2000_account = ap_pstrdup(p, account);
       return NULL;
   }
   
   int os_init_job_environment(server_rec *server, const char *user_name)
   {
  -    _checkuser_struct       chk_usr;
       _rini_struct            inittask; 
  -    struct {
  -     char username[8+1];     /* Length of a user name including \0 */
  -     char password[8+1];     /* Length of a password including \0 */
  -     char account [8+1];     /* Length of a account number including \0 */
  -     char exp_date[10+1];    /* Length of a date including \0 */
  -     char exp_pass[10+1];    /* Length of a date including \0 */
  -     char processor[8+1];
  -    } lcl_data;
  -    char *cp;
  -    FILE *pwfile;
  -    struct stat stbuf;
  -
  -    memset (&lcl_data, '\0', sizeof lcl_data);
  -
  -    /* BS2000 requires the user name to be in upper case for authentication 
*/
  -    ap_snprintf(lcl_data.username, sizeof lcl_data.username,
  -             "%s", user_name);
  -    for (cp = lcl_data.username; *cp; ++cp) {
  -     *cp = ap_toupper(*cp);
  -    }
   
  -    if (bs2000_authfile == NULL) {
  +    /* We can be sure that no change to uid==0 is possible because of
  +     * the checks in http_core.c:set_user()
  +     */
  +
  +    /* An Account is required for _rini() */
  +    if (bs2000_account == NULL)
  +    {
        ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, server,
  -                  "Use the 'BS2000AuthFile <passwdfile>' directive to 
specify "
  -                  "an authorization file for User %s",
  +                  "No BS2000Account configured - cannot switch to User %S",
                     user_name);
        exit(APEXIT_CHILDFATAL);
       }
   
  -    if ((pwfile = fopen(bs2000_authfile, "r")) == NULL) {
  -     ap_log_error(APLOG_MARK, APLOG_ALERT, server,
  -                  "Unable to open bs2000 auth file %s for User %s",
  -                  bs2000_authfile, user_name);
  -     exit(APEXIT_CHILDFATAL);
  -    }
  +    inittask.username       = user_name;
  +    inittask.account        = bs2000_account;
  +    inittask.processor_name = "        ";
   
  -    if (fgets(lcl_data.password, sizeof lcl_data.password, pwfile) == NULL
  -     || strlen(lcl_data.password) == 0) {
  -     ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, server,
  -                  "Unable ro read BS2000 auth file %s",
  -                  bs2000_authfile);
  -     exit(APEXIT_CHILDFATAL);
  -    }
  -
  -    fclose(pwfile);
  -
  -    chk_usr.username      = lcl_data.username;
  -    chk_usr.password      = lcl_data.password;
  -    chk_usr.account       = lcl_data.account; /* Account and Expiration go 
here*/
  -    chk_usr.logon_expdate = lcl_data.exp_date;
  -    chk_usr.pw_expdate    = lcl_data.exp_pass;
  -
  -    /* Now perform validity check of user and password, filling in account */
  -    if(_checkuser(&chk_usr) != 0) {
  -     ap_log_error(APLOG_MARK, APLOG_ALERT, server,
  -                  "_checkuser: BS2000 auth failed for user %s", 
chk_usr.username);
  -     exit(APEXIT_CHILDFATAL);
  -    }
  -
  -    inittask.username = chk_usr.username;
  -    inittask.account  = chk_usr.account;
  -    inittask.processor_name = strncpy(lcl_data.processor,
  -                                   "        ",
  -                                   sizeof lcl_data.processor);
  -
  -    /* And switch to the new logon user (setuid() and setgid() are done 
later) */
  +    /* Switch to the new logon user (setuid() and setgid() are done later) */
  +    /* Only the super use can switch identities. */
       if (_rini(&inittask) != 0) {
        ap_log_error(APLOG_MARK, APLOG_ALERT, server,
  -                  "_rini: BS2000 auth failed for user %s",
  -                  inittask.username);
  +                  "_rini: BS2000 auth failed for user \"%s\" acct \"%s\"",
  +                  inittask.username, inittask.account);
        exit(APEXIT_CHILDFATAL);
       }
  -
  -    /*ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, server,
  -                  "BS2000 logon for user %s account=%s completed, pid=%d.",
  -                  inittask.username, inittask.account, getpid());*/
  -
  -    /* Don't leave the password on the stack */
  -    memset (&lcl_data, '\0', sizeof lcl_data);
   
       return 0;
   }
  
  
  
  1.1067    +5 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1066
  retrieving revision 1.1067
  diff -u -r1.1066 -r1.1067
  --- CHANGES   1998/09/17 14:43:18     1.1066
  +++ CHANGES   1998/09/17 20:23:47     1.1067
  @@ -1,5 +1,10 @@
   Changes with Apache 1.3.2
   
  +  *) BS2000 platform only: get rid of the nasty BS2000AuthFile.
  +     You now must define a BS2000Account name for the server User.
  +     This has fewer security implications than the old approach.
  +     [Martin Kraemer]
  +
     *) Fix SHARED_CORE feature for HPUX platform: We now use extension `.sl'
        instead of `.so' and `SHLIB_PATH' instead of `LD_LIBRARY_PATH' on this
        platform to make the braindead HPUX linker happy. Notice, for the module
  
  
  

Reply via email to