From: Jim Jagielski Date: Fri, 9 May 2008 13:28:09 +0000 (+0000) Subject: Backport r639079 and r468042. This patch also lacked the X-Git-Tag: 2.2.9~196 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdc49b698ded70ffcc7c0fb3f2e7f03c48794f87;p=thirdparty%2Fapache%2Fhttpd.git Backport r639079 and r468042. This patch also lacked the corresponding CHANGEs entry, so I grabbed from trunk git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@654801 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 593e0b3a1bc..1b8f24b7d0e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.9 + *) mod_authn_dbd: Disambiguate and tidy database authentication + error messages. PR 43210. [Chris Darroch, Phil Endecott + ] + *) mod_headers: Add 'merge' option to avoid duplicate values within the same header. [Chris Darroch] diff --git a/STATUS b/STATUS index 4d4a22e2cf1..f0590d339ec 100644 --- a/STATUS +++ b/STATUS @@ -88,16 +88,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_authn_dbd: Disambiguate and tidy database authentication - error messages. Also move assignment statements after #if blocks - to avoid having them treated as variable declarations. - PR: 43210. - Trunk version of patch: - http://svn.apache.org/viewvc?view=rev&revision=639079 - http://svn.apache.org/viewvc?view=rev&revision=468042 - Backport version for 2.2.x of patch: - http://people.apache.org/~chrisd/patches/mod_authn_dbd_msgs/mod_authn_dbd-msgs-2.2.x.patch - +1: chrisd, niq, rpluem PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/aaa/mod_authn_dbd.c b/modules/aaa/mod_authn_dbd.c index 3bcde864e84..3341171e67d 100644 --- a/modules/aaa/mod_authn_dbd.c +++ b/modules/aaa/mod_authn_dbd.c @@ -98,24 +98,29 @@ static authn_status authn_dbd_password(request_rec *r, const char *user, ap_dbd_t *dbd = authn_dbd_acquire_fn(r); if (dbd == NULL) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "Error looking up %s in database", user); + "Failed to acquire database connection to look up " + "user '%s'", user); return AUTH_GENERAL_ERROR; } if (conf->user == NULL) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No AuthDBDUserPWQuery has been specified."); + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, + "No AuthDBDUserPWQuery has been specified"); return AUTH_GENERAL_ERROR; } statement = apr_hash_get(dbd->prepared, conf->user, APR_HASH_KEY_STRING); if (statement == NULL) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "A prepared statement could not be found for AuthDBDUserPWQuery, key '%s'.", conf->user); + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, + "A prepared statement could not be found for " + "AuthDBDUserPWQuery with the key '%s'", conf->user); return AUTH_GENERAL_ERROR; } if (apr_dbd_pvselect(dbd->driver, r->pool, dbd->handle, &res, statement, 0, user, NULL) != 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "Error looking up %s in database", user); + "Query execution error looking up '%s' " + "in database", user); return AUTH_GENERAL_ERROR; } for (rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1); @@ -123,12 +128,11 @@ static authn_status authn_dbd_password(request_rec *r, const char *user, rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1)) { if (rv != 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, - "Error looking up %s in database", user); + "Error retrieving results while looking up '%s' " + "in database", user); return AUTH_GENERAL_ERROR; } if (dbd_password == NULL) { - dbd_password = apr_dbd_get_entry(dbd->driver, row, 0); - #if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 3) /* add the rest of the columns to the environment */ int i = 1; @@ -155,6 +159,7 @@ static authn_status authn_dbd_password(request_rec *r, const char *user, i++; } #endif + dbd_password = apr_dbd_get_entry(dbd->driver, row, 0); } /* we can't break out here or row won't get cleaned up */ } @@ -185,22 +190,27 @@ static authn_status authn_dbd_realm(request_rec *r, const char *user, ap_dbd_t *dbd = authn_dbd_acquire_fn(r); if (dbd == NULL) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "Error looking up %s in database", user); + "Failed to acquire database connection to look up " + "user '%s:%s'", user, realm); return AUTH_GENERAL_ERROR; } if (conf->realm == NULL) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No AuthDBDUserRealmQuery has been specified."); + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, + "No AuthDBDUserRealmQuery has been specified"); return AUTH_GENERAL_ERROR; } statement = apr_hash_get(dbd->prepared, conf->realm, APR_HASH_KEY_STRING); if (statement == NULL) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "A prepared statement could not be found for AuthDBDUserRealmQuery, key '%s'.", conf->realm); + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, + "A prepared statement could not be found for " + "AuthDBDUserRealmQuery with the key '%s'", conf->realm); return AUTH_GENERAL_ERROR; } if (apr_dbd_pvselect(dbd->driver, r->pool, dbd->handle, &res, statement, 0, user, realm, NULL) != 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "Error looking up %s:%s in database", user, realm); + "Query execution error looking up '%s:%s' " + "in database", user, realm); return AUTH_GENERAL_ERROR; } for (rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1); @@ -208,12 +218,11 @@ static authn_status authn_dbd_realm(request_rec *r, const char *user, rv = apr_dbd_get_row(dbd->driver, r->pool, res, &row, -1)) { if (rv != 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, - "Error looking up %s in database", user); + "Error retrieving results while looking up '%s:%s' " + "in database", user, realm); return AUTH_GENERAL_ERROR; } if (dbd_hash == NULL) { - dbd_hash = apr_dbd_get_entry(dbd->driver, row, 0); - #if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 3) /* add the rest of the columns to the environment */ int i = 1; @@ -240,6 +249,7 @@ static authn_status authn_dbd_realm(request_rec *r, const char *user, i++; } #endif + dbd_hash = apr_dbd_get_entry(dbd->driver, row, 0); } /* we can't break out here or row won't get cleaned up */ }