randy       96/12/24 11:10:32

  Modified:    htdocs/manual/mod  mod_auth.html mod_auth_db.html
                        mod_auth_dbm.html
  Log:
  Update docs to reflect addition of Authoritative directive.
  Submitted by: Dirk vanGulik
  
  Revision  Changes    Path
  1.4       +27 -0     apache/htdocs/manual/mod/mod_auth.html
  
  Index: mod_auth.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_auth.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -C3 -r1.3 -r1.4
  *** mod_auth.html     1996/12/02 18:14:00     1.3
  --- mod_auth.html     1996/12/24 19:08:23     1.4
  ***************
  *** 17,22 ****
  --- 17,23 ----
    <menu>
    <li><A HREF="#authgroupfile">AuthGroupFile</A>
    <li><A HREF="#authuserfile">AuthUserFile</A>
  + <li><A HREF="#authauthoritative">AuthAuthoritative</A>
    </menu>
    <hr>
    
  ***************
  *** 69,74 ****
  --- 70,101 ----
    document tree of the web-server; do <em>not</em> put it in the directory 
that
    it protects. Otherwise, clients will be able to download the 
AuthUserFile.<p>
    
  + See also <A HREF="core.html#authname">AuthName</A>,
  + <A HREF="core.html#authtype">AuthType</A> and
  + <A HREF="#authgroupfile">AuthGroupFile</A>.<p>
  + <hr>
  + <A name="authauthoritative"><h2>AuthAuthoritative</h2></A>
  + <!--%plaintext &lt;?INDEX {\tt AuthAuthoritative} directive&gt; -->
  + <strong>Syntax:</strong> AuthAuthoritative &lt; <strong> 
on</strong>(default) | off &gt; <br>
  + <Strong>Context:</strong> directory, .htaccess<br>
  + <Strong>Override:</strong> AuthConfig<br>
  + <strong>Status:</strong> Base<br>
  + <strong>Module:</strong> mod_auth<p>
  + 
  + Setting the AuthAuthoritative directive explicitly to <b>'off'</b> allows 
for both authentification and authorization to be passed on to lower level 
modules (as defined in the <code>Configuration</code> and 
<code>modules.c</code> file if there is <b>no userID</b> or <b>rule</b> 
matching the supplied userID. If there is a userID and/or rule specified; the 
usual password and access checks will be applied and a failure will give an 
Authorization Required reply.
  + <p>
  + So if a userID appears in the database of more than one module; or if a 
valid require directive applies to more than one module; then the first module 
will verify the credentials; and no access is passed on; regardless of the 
AuthAuthoritative setting.
  + <p>
  + A common use for this is in conjection with one of the database modules; 
such
  + as <a href="mod_auth_anon.c"><code>mod_auth_db.c</code></a>, <a 
href="mod_auth_anon.c"><code>mod_auth_dbm.c</code></a>, 
  + <a href="mod_auth_anon.c"><code>mod_auth_msql.c</code></a> and <a 
href="mod_auth_anon.c"><code>mod_auth_anon.c</code></a>. These modules supply 
the bulk of the user credential checking; but a few (administrator) related 
accesses fall through to a lower level with a well protected AuthUserFile.
  + <p>
  + <b>Default:</b> By default; control is not passed on; and an unkown userID 
or rule will result in an Authorization Required reply. Not setting it thus 
keeps the system secure; and forces an NSCA compliant behaviour.
  + <p>
  + Security: Do consider the implications of allowing a user to allow 
fall-through in his .htaccess file; and verify that this is really what you 
want; Generally it is easier to just secure a single .htpasswd file, than it is 
to secure a database such as mSQL. Make sure that the AuthUserFile is stored 
outside the
  + document tree of the web-server; do <em>not</em> put it in the directory 
that
  + it protects. Otherwise, clients will be able to download the AuthUserFile.
  + <p>
    See also <A HREF="core.html#authname">AuthName</A>,
    <A HREF="core.html#authtype">AuthType</A> and
    <A HREF="#authgroupfile">AuthGroupFile</A>.<p>
  
  
  
  1.5       +25 -0     apache/htdocs/manual/mod/mod_auth_db.html
  
  Index: mod_auth_db.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_auth_db.html,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -C3 -r1.4 -r1.5
  *** mod_auth_db.html  1996/12/02 18:14:01     1.4
  --- mod_auth_db.html  1996/12/24 19:08:23     1.5
  ***************
  *** 18,23 ****
  --- 18,24 ----
    <menu>
    <li><A HREF="#authdbgroupfile">AuthDBGroupFile</A>
    <li><A HREF="#authdbuserfile">AuthDBUserFile</A>
  + <li><A HREF="#authdbauthoritative">AuthDBAuthoritative</A>
    </menu>
    <hr>
    
  ***************
  *** 103,108 ****
  --- 104,133 ----
    See also <A HREF="core.html#authname">AuthName</A>,
    <A HREF="core.html#authtype">AuthType</A> and
    <A HREF="#authdbgroupfile">AuthDBGroupFile</A>.<p>
  + <hr>
  + <A name="authdbauthoritative"><h2>AuthDBAuthoritative</h2></A>
  + <!--%plaintext &lt;?INDEX {\tt AuthDBAuthoritative} directive&gt; -->
  + <strong>Syntax:</strong> AuthDBAuthoritative &lt; <strong> 
on</strong>(default) | off &gt; <br>
  + <Strong>Context:</strong> directory, .htaccess<br>
  + <Strong>Override:</strong> AuthConfig<br>
  + <strong>Status:</strong> Base<br>
  + <strong>Module:</strong> mod_auth<p>
  + 
  + Setting the AuthDBAuthoritative directive explicitly to <b>'off'</b> allows 
for both authentification and authorization to be passed on to lower level 
modules (as defined in the <code>Configuration</code> and 
<code>modules.c</code> file if there is <b>no userID</b> or <b>rule</b> 
matching the supplied userID. If there is a userID and/or rule specified; the 
usual password and access checks will be applied and a failure will give an 
Authorization Required reply.
  + <p>
  + So if a userID appears in the database of more than one module; or if a 
valid require directive applies to more than one module; then the first module 
will verify the credentials; and no access is passed on; regardless of the 
AuthAuthoritative setting.
  + <p>
  + A common use for this is in conjection with one of the basic auth modules; 
such
  + as <a href="mod_auth.c"><code>mod_auth.c</code></a>. Whereas this DB module 
supplies the bulk of the user credential checking; a few (administrator) 
related accesses fall through to a lower level with a well protected .htpasswd 
file.
  + <p>
  + <b>Default:</b> By default; control is not passed on; and an unkown userID 
or rule will result in an Authorization Required reply. Not setting it thus 
keeps the system secure; and forces an NSCA compliant behaviour.
  + <p>
  + Security: Do consider the implications of allowing a user to allow 
fall-through in his .htaccess file; and verify that this is really what you 
want; Generally it is easier to just secure a single .htpasswd file, than it is 
to secure a database which might have more access interfaces. 
  + 
  + <p>
  + See also <A HREF="core.html#authname">AuthName</A>,
  + <A HREF="core.html#authtype">AuthType</A> and
  + <A HREF="#authgroupfile">AuthGroupFile</A>.<p>
    
    <!--#include virtual="footer.html" -->
    </BODY>
  
  
  
  1.6       +26 -0     apache/htdocs/manual/mod/mod_auth_dbm.html
  
  Index: mod_auth_dbm.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_auth_dbm.html,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -C3 -r1.5 -r1.6
  *** mod_auth_dbm.html 1996/12/10 01:19:36     1.5
  --- mod_auth_dbm.html 1996/12/24 19:08:24     1.6
  ***************
  *** 17,22 ****
  --- 17,23 ----
    <menu>
    <li><A HREF="#authdbmgroupfile">AuthDBMGroupFile</A>
    <li><A HREF="#authdbmuserfile">AuthDBMUserFile</A>
  + <li><A HREF="#authdbmauthoritative">AuthDBMAuthoritative</A>
    </menu>
    <hr>
    
  ***************
  *** 103,108 ****
  --- 104,134 ----
    See also <A HREF="core.html#authname">AuthName</A>,
    <A HREF="core.html#authtype">AuthType</A> and
    <A HREF="#authdbmgroupfile">AuthDBMGroupFile</A>.<p>
  + 
  + <hr>
  + <A name="authdbmauthoritative"><h2>AuthDBMAuthoritative</h2></A>
  + <!--%plaintext &lt;?INDEX {\tt AuthDBMAuthoritative} directive&gt; -->
  + <strong>Syntax:</strong> AuthDBMAuthoritative &lt; <strong> 
on</strong>(default) | off &gt; <br>
  + <Strong>Context:</strong> directory, .htaccess<br>
  + <Strong>Override:</strong> AuthConfig<br>
  + <strong>Status:</strong> Base<br>
  + <strong>Module:</strong> mod_auth<p>
  + 
  + Setting the AuthDBMAuthoritative directive explicitly to <b>'off'</b> 
allows for both authentification and authorization to be passed on to lower 
level modules (as defined in the <code>Configuration</code> and 
<code>modules.c</code> file if there is <b>no userID</b> or <b>rule</b> 
matching the supplied userID. If there is a userID and/or rule specified; the 
usual password and access checks will be applied and a failure will give an 
Authorization Required reply.
  + <p>
  + So if a userID appears in the database of more than one module; or if a 
valid require directive applies to more than one module; then the first module 
will verify the credentials; and no access is passed on; regardless of the 
AuthAuthoritative setting.
  + <p>
  + A common use for this is in conjection with one of the basic auth modules; 
such
  + as <a href="mod_auth.c"><code>mod_auth.c</code></a>. Whereas this DBM 
module supplies the bulk of the user credential checking; a few (administrator) 
related accesses fall through to a lower level with a well protected .htpasswd 
file.
  + <p>
  + <b>Default:</b> By default; control is not passed on; and an unkown userID 
or rule will result in an Authorization Required reply. Not setting it thus 
keeps the system secure; and forces an NSCA compliant behaviour.
  + <p>
  + Security: Do consider the implications of allowing a user to allow 
fall-through in his .htaccess file; and verify that this is really what you 
want; Generally it is easier to just secure a single .htpasswd file, than it is 
to secure a database which might have more access interfaces. 
  + 
  + <p>
  + See also <A HREF="core.html#authname">AuthName</A>,
  + <A HREF="core.html#authtype">AuthType</A> and
  + <A HREF="#authgroupfile">AuthGroupFile</A>.<p>
    
    <!--#include virtual="footer.html" -->
    </BODY>
  
  
  

  Modified:    src       CHANGES mod_auth.c mod_auth_db.c mod_auth_dbm.c
  Log:
  Add Authoritative control for authentication modules giving this same
  control across all supplied authentication modules.
  Submitted by: Dirk vanGulik
  Reviewed by: Chuck Murcko, Randy Terbush
  
  Revision  Changes    Path
  1.96      +7 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.95
  retrieving revision 1.96
  diff -C3 -r1.95 -r1.96
  *** CHANGES   1996/12/24 18:48:31     1.95
  --- CHANGES   1996/12/24 19:10:28     1.96
  ***************
  *** 1,5 ****
  --- 1,12 ----
    Changes with Apache 1.2b3:
    
  +   *) Add "Authoratative" directive for Auth modules that don't
  +      currently have it. This gives admin control to assign authoritative
  +      control to an authentication scheme and allow "fall through" for
  +      those authentication modules that aren't "Authoritative" thereby
  +      allowing multiple authentication mechanisms to be chained.
  +      [Dirk vanGulik]
  + 
      *) Remove requirement for ResourceConfig/AccessConfig if not using
         the three config file layout. [Randy Terbush]
    
  
  
  
  1.10      +22 -1     apache/src/mod_auth.c
  
  Index: mod_auth.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_auth.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -C3 -r1.9 -r1.10
  *** mod_auth.c        1996/12/01 20:28:47     1.9
  --- mod_auth.c        1996/12/24 19:10:29     1.10
  ***************
  *** 56,61 ****
  --- 56,67 ----
     * Rob McCool
     * 
     * Adapted to Apache by rst.
  +  *
  +  * dirkx - Added Authoratative control to allow passing on to lower
  +  *     modules if and only if the user-id is not known to this
  +  *     module. A known user with a faulty or absent password still
  +  *     causes an AuthRequired. The default is 'Authoratative', i.e.
  +  *     no control is passed along.
     */
    
    #include "httpd.h"
  ***************
  *** 70,80 ****
    typedef struct auth_config_struct {
        char *auth_pwfile;
        char *auth_grpfile;
    } auth_config_rec;
    
    void *create_auth_dir_config (pool *p, char *d)
    {
  !     return pcalloc (p, sizeof(auth_config_rec));
    }
    
    const char *set_auth_slot (cmd_parms *cmd, void *offset, char *f, char *t)
  --- 76,92 ----
    typedef struct auth_config_struct {
        char *auth_pwfile;
        char *auth_grpfile;
  +     int auth_authoritative;
    } auth_config_rec;
    
    void *create_auth_dir_config (pool *p, char *d)
    {
  !     auth_config_rec *sec =
  !             (auth_config_rec *) pcalloc (p, sizeof(auth_config_rec));
  !     sec->auth_pwfile = NULL; /* just to illustrate the default really */ 
  !     sec->auth_grpfile = NULL; /* unless you have a broken HP cc */
  !     sec->auth_authoritative = 1; /* keep the fortress secure by default */
  !     return sec;
    }
    
    const char *set_auth_slot (cmd_parms *cmd, void *offset, char *f, char *t)
  ***************
  *** 90,95 ****
  --- 102,111 ----
      (void*)XtOffsetOf(auth_config_rec,auth_pwfile), OR_AUTHCFG, TAKE12, NULL 
},
    { "AuthGroupFile", set_auth_slot,
      (void*)XtOffsetOf(auth_config_rec,auth_grpfile), OR_AUTHCFG, TAKE12, NULL 
},
  + { "Auth_MSQL_Authoritative", set_flag_slot,
  +   (void*)XtOffsetOf(auth_config_rec,auth_authoritative), 
  +     OR_AUTHCFG, FLAG, 
  +    "Set to 'no' to allow access control to be passed along to lower modules 
if the UserID is not known to this module" },
    { NULL }
    };
    
  ***************
  *** 180,185 ****
  --- 196,203 ----
            return DECLINED;
        
        if (!(real_pw = get_pw(r, c->user, sec->auth_pwfile))) {
  +     if (!(sec->auth_authoritative))
  +         return DECLINED;
            sprintf(errstr,"user %s not found",c->user);
        log_reason (errstr, r->uri, r);
        note_basic_auth_failure (r);
  ***************
  *** 252,257 ****
  --- 270,278 ----
        
        if (!method_restricted)
          return OK;
  + 
  +     if (!(sec -> auth_authoritative))
  +       return DECLINED;
    
        note_basic_auth_failure (r);
        return AUTH_REQUIRED;
  
  
  
  1.7       +21 -2     apache/src/mod_auth_db.c
  
  Index: mod_auth_db.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_auth_db.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -C3 -r1.6 -r1.7
  *** mod_auth_db.c     1996/12/01 20:28:49     1.6
  --- mod_auth_db.c     1996/12/24 19:10:29     1.7
  ***************
  *** 72,77 ****
  --- 72,83 ----
     * On some BSD systems (e.g. FreeBSD and NetBSD) dbm is automatically
     * mapped to Berkeley DB. You can use either mod_auth_dbm or
     * mod_auth_db. The latter makes it more obvious that it's Berkeley.
  +  *
  +  * dirkx - Added Authoratative control to allow passing on to lower  
  +  *         modules if and only if the user-id is not known to this
  +  *         module. A known user with a faulty or absent password still
  +  *         causes an AuthRequired. The default is 'Authoratative', i.e.
  +  *         no control is passed along.
     */
    
    #include "httpd.h"
  ***************
  *** 85,96 ****
    
        char *auth_dbpwfile;
        char *auth_dbgrpfile;
  ! 
    } db_auth_config_rec;
    
    void *create_db_auth_dir_config (pool *p, char *d)
    {
  !     return pcalloc (p, sizeof(db_auth_config_rec));
    }
    
    const char *set_db_slot (cmd_parms *cmd, void *offset, char *f, char *t)
  --- 91,107 ----
    
        char *auth_dbpwfile;
        char *auth_dbgrpfile;
  !     int   auth_dbauthoritative;
    } db_auth_config_rec;
    
    void *create_db_auth_dir_config (pool *p, char *d)
    {
  !     db_auth_config_rec *sec
  !     = (db_auth_config_rec *)pcalloc (p, sizeof(db_auth_config_rec));
  !     sec->auth_dbpwfile = NULL;
  !     sec->auth_dbgrpfile = NULL;
  !     sec->auth_dbauthoritative=1; /* fortress is secure by default */
  !     return sec;
    }
    
    const char *set_db_slot (cmd_parms *cmd, void *offset, char *f, char *t)
  ***************
  *** 114,119 ****
  --- 125,134 ----
    { "AuthGroupFile", set_db_slot,
        (void*)XtOffsetOf(db_auth_config_rec, auth_dbgrpfile),
        OR_AUTHCFG, TAKE12, NULL },
  + { "AuthDBAuthoratative", set_flag_slot,
  +     (void*)XtOffsetOf(db_auth_config_rec, auth_dbauthoritative),
  +     OR_AUTHCFG, FLAG, 
  +     "Set to 'no' to allow access control to be passed along to lower 
modules if the userID is not known to this module" },
    { NULL }
    };
    
  ***************
  *** 184,189 ****
  --- 199,206 ----
            return DECLINED;
        
        if(!(real_pw = get_db_pw(r, c->user, sec->auth_dbpwfile))) {
  +     if (!(sec -> auth_dbauthoritative))
  +         return DECLINED; 
            sprintf(errstr,"DB user %s not found", c->user);
        log_reason (errstr, r->filename, r);
        note_basic_auth_failure (r);
  ***************
  *** 234,239 ****
  --- 251,258 ----
               char *v;
    
               if (!(groups = get_db_grp(r, user, sec->auth_dbgrpfile))) {
  +            if (!(sec->auth_dbauthoritative))
  +              return DECLINED:
                   sprintf(errstr,"user %s not in DB group file %s",
                       user, sec->auth_dbgrpfile);
               log_reason (errstr, r->filename, r);
  
  
  
  1.11      +22 -1     apache/src/mod_auth_dbm.c
  
  Index: mod_auth_dbm.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_auth_dbm.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -C3 -r1.10 -r1.11
  *** mod_auth_dbm.c    1996/12/01 20:28:51     1.10
  --- mod_auth_dbm.c    1996/12/24 19:10:30     1.11
  ***************
  *** 56,61 ****
  --- 56,67 ----
     * Rob McCool & Brian Behlendorf.
     * 
     * Adapted to Apache by rst.
  +  *
  +  * dirkx - Added Authoratative control to allow passing on to lower  
  +  *         modules if and only if the user-id is not known to this
  +  *         module. A known user with a faulty or absent password still
  +  *         causes an AuthRequired. The default is 'Authoratative', i.e.
  +  *         no control is passed along.
     */
    
    #include "httpd.h"
  ***************
  *** 69,80 ****
    
        char *auth_dbmpwfile;
        char *auth_dbmgrpfile;
    
    } dbm_auth_config_rec;
    
    void *create_dbm_auth_dir_config (pool *p, char *d)
    {
  !     return pcalloc (p, sizeof(dbm_auth_config_rec));
    }
    
    const char *set_dbm_slot (cmd_parms *cmd, void *offset, char *f, char *t)
  --- 75,94 ----
    
        char *auth_dbmpwfile;
        char *auth_dbmgrpfile;
  +     int   auth_dbmauthoritative;
    
    } dbm_auth_config_rec;
    
    void *create_dbm_auth_dir_config (pool *p, char *d)
    {
  !     dbm_auth_config_rec *sec
  !        = (dbm_auth_config_rec *)pcalloc (p, sizeof(dbm_auth_config_rec));
  ! 
  !     sec->auth_dbmpwfile = NULL;
  !     sec->auth_dbmgrpfile = NULL;
  !     sec->auth_dbmauthoritative = 1; /* fortress is secure by default */
  ! 
  !     return sec;
    }
    
    const char *set_dbm_slot (cmd_parms *cmd, void *offset, char *f, char *t)
  ***************
  *** 98,103 ****
  --- 112,120 ----
    { "AuthGroupFile", set_dbm_slot,
        (void*)XtOffsetOf(dbm_auth_config_rec, auth_dbmgrpfile),
        OR_AUTHCFG, TAKE12, NULL },
  + { "AuthDBMAuthoritative", set_flag_slot,
  +     (void*)XtOffsetOf(dbm_auth_config_rec, auth_dbmauthoritative),
  +     OR_AUTHCFG, FLAG, "Set to 'no' to allow access control to be passed 
along to lower modules, if the UserID is not known in this module" },
    { NULL }
    };
    
  ***************
  *** 170,175 ****
  --- 187,194 ----
            return DECLINED;
        
        if(!(real_pw = get_dbm_pw(r, c->user, sec->auth_dbmpwfile))) {
  +     if (!(sec->auth_dbmauthoritative))
  +         return DECLINED;
            sprintf(errstr,"DBM user %s not found", c->user);
        log_reason (errstr, r->filename, r);
        note_basic_auth_failure (r);
  ***************
  *** 220,225 ****
  --- 239,246 ----
           char *v;
    
               if (!(groups = get_dbm_grp(r, user, sec->auth_dbmgrpfile))) {
  +            if (!(sec->auth_dbmauthoritative))
  +                return DECLINED;
                   sprintf(errstr,"user %s not in DBM group file %s",
                       user, sec->auth_dbmgrpfile);
               log_reason (errstr, r->filename, r);
  
  
  

Reply via email to