'c' code in mod_auth seems to work similar as the perl code below.

----- snip -----
    for (x = 0; x < reqs_arr->nelts; x++) {

        if (!(reqs[x].method_mask & (1 << m)))
            continue;

        method_restricted = 1;

        t = reqs[x].requirement;
        w = ap_getword_white(r->pool, &t);
        if (!strcmp(w, "valid-user"))
            return OK;
        if (!strcmp(w, "user")) {
            while (t[0]) {
                w = ap_getword_conf(r->pool, &t);
                if (!strcmp(user, w))
                    return OK;
            }
        }
        else if (!strcmp(w, "group")) {
            if (!grpstatus)
                return DECLINED;        /* DBM group?  Something else? */

            while (t[0]) {
                w = ap_getword_conf(r->pool, &t);
                if (ap_table_get(grpstatus, w))
                    return OK;
            }
        } else if (sec->auth_authoritative) {
            /* if we aren't authoritative, any require directive could be
             * valid even if we don't grok it.  However, if we are
             * authoritative, we can warn the user they did something wrong.
             * That something could be a missing "AuthAuthoritative off", but
             * more likely is a typo in the require directive.
             */
            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
                "access to %s failed, reason: unknown require directive:"
                "\"%s\"", r->uri, reqs[x].requirement);
        }
    }

    if (!method_restricted)
        return OK;

    if (!(sec->auth_authoritative))
        return DECLINED;

    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
        "access to %s failed, reason: user %s not allowed access",
        r->uri, user);

    ap_note_basic_auth_failure(r);
    return AUTH_REQUIRED;
}
----- snip -----

cliff rayman
genwax.com

Ken Williams wrote:

> Hi,
>
> I'm looking at the AuthCookie code, getting ready to release a new version to
> CPAN.  It looks to me like currently only the first 'require' directive will be
> processed and obeyed.  Here's the code from the old authz():
>
> ************************************************************
>   foreach $reqs (@$reqs_arr) {
>     ($requirement, $args) = split /\s+/, $reqs->{requirement}, 2;
>     $args = "" unless defined $args;
>     $r->log_error("requirement := $requirement, $args") if ($debug >= 2);
>
>     if ($requirement eq "valid-user") {
>       return OK;
>     } elsif ($requirement eq "user") {
>       return OK if ($args =~ m/\b$user\b/);
>     } else {
>       my $ret_val = $auth_type->$requirement($r, $args);
>       $r->log_error("$auth_type->$requirement returned $ret_val")
>         if $debug >= 3;
>       return OK if $ret_val == OK;
>     }
>     $restricted++;
>   }
>
>   return OK unless $restricted;
>   return FORBIDDEN;
> ************************************************************
>
> Is anyone actually using this with multiple "require' directives?  Or would
> anyone like to?
>
>   -------------------                            -------------------
>   Ken Williams                             Last Bastion of Euclidity
>   [EMAIL PROTECTED]                            The Math Forum

Reply via email to