Commit 17893af9 authored by Eric Covener's avatar Eric Covener
Browse files

mod_auth_digest: Detect during startup when AuthDigestProvider

is configured to use an incompatible provider via AuthnProviderAlias.
PR 45196 



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@672639 13f79535-47bb-0310-9956-ffa450edef68
parent 48e08e12
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGES: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@
Changes with Apache 2.3.0
[ When backported to 2.2.x, remove entry from this file ]

  *) mod_auth_digest: Detect during startup when AuthDigestProvider
     is configured to use an incompatible provider via AuthnProviderAlias.
     PR 45196 [Eric Covener] 

  *) mod_rewrite: Preserve the query string with [proxy,noescape]. PR 45247
     [Tom Donovan]

+2 −1
Changes for include/ap_mmn.h: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@
 * 20080528.0 (2.3.0-dev)  Switch order of ftp_directory_charset and
 *                         interpolate_env in proxy_dir_conf.
 *                         Rationale: see r661069.
 * 20080528.1 (2.3.0-dev)  add get_realm_hash() to mod_auth.h
 */

#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */
@@ -168,7 +169,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20080528
#endif
#define MODULE_MAGIC_NUMBER_MINOR 0                     /* 0...n */
#define MODULE_MAGIC_NUMBER_MINOR 1                     /* 0...n */

/**
 * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
+4 −0
Changes for include/mod_auth.h: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -93,6 +93,10 @@ typedef struct {
     */
    authn_status (*get_realm_hash)(request_rec *r, const char *user,
                                   const char *realm, char **rethash);

    /* OK if provider can satisfy get_realm_hash(), APR_ENOTIMPL otherwise. */
    apr_status_t (*has_realm_hash)(cmd_parms *cmd, const char *provider_name);

} authn_provider;

/* A linked-list of authn providers. */
+3 −1
Changes for modules/aaa/mod_auth_digest.c: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -463,7 +463,9 @@ static const char *add_authn_provider(cmd_parms *cmd, void *config,
                            newp->provider_name);
    }

    if (!newp->provider->get_realm_hash) {
    if (!newp->provider->get_realm_hash ||
       (newp->provider->has_realm_hash && 
        newp->provider->has_realm_hash(cmd, newp->provider_name) == APR_ENOTIMPL)) { 
        /* if it doesn't provide the appropriate function, reject it */
        return apr_psprintf(cmd->pool,
                            "The '%s' Authn provider doesn't support "
+22 −0
Changes for modules/aaa/mod_authn_core.c: 22 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -132,6 +132,27 @@ static authn_status authn_alias_check_password(request_rec *r, const char *user,
    return ret;
}

static apr_status_t authn_alias_has_realm_hash(cmd_parms *cmd, const char *provider_name) 
{
    /* No merge, just a query to be passed on to the provider */
    authn_alias_srv_conf *authcfg =
        (authn_alias_srv_conf *)ap_get_module_config(cmd->server->module_config,
                                                     &authn_core_module);
    apr_status_t ret = APR_ENOTIMPL;

    provider_alias_rec *prvdraliasrec = apr_hash_get(authcfg->alias_rec,
                                                     provider_name, 
                                                     APR_HASH_KEY_STRING);
    if (prvdraliasrec->provider->has_realm_hash) { 
        ret = prvdraliasrec->provider->has_realm_hash(cmd, provider_name);
    }
    else if (prvdraliasrec->provider->get_realm_hash) { 
        /* provider didn't register has_realm_hash, but does have get_realm_hash */
        ret = OK;
    }

    return ret;
}
static authn_status authn_alias_get_realm_hash(request_rec *r, const char *user,
                                               const char *realm, char **rethash)
{
@@ -179,6 +200,7 @@ static const authn_provider authn_alias_provider =
{
    &authn_alias_check_password,
    &authn_alias_get_realm_hash,
    &authn_alias_has_realm_hash,
};

static const char *authaliassection(cmd_parms *cmd, void *mconfig, const char *arg)
Loading