mod_auth_db.c revision 17db3022778ec47c890504b9378961c428bfddc8
ad099a822dc3de888a5294adf44b230bb9437f47rbowen/* ====================================================================
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * Copyright (c) 1995-1999 The Apache Group. All rights reserved.
c27a94ad0c1ec49cc72ccdf9796b31ab56415604nd * Redistribution and use in source and binary forms, with or without
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * modification, are permitted provided that the following conditions
031b91a62d25106ae69d4693475c79618dd5e884fielding * 1. Redistributions of source code must retain the above copyright
031b91a62d25106ae69d4693475c79618dd5e884fielding * notice, this list of conditions and the following disclaimer.
031b91a62d25106ae69d4693475c79618dd5e884fielding * 2. Redistributions in binary form must reproduce the above copyright
031b91a62d25106ae69d4693475c79618dd5e884fielding * notice, this list of conditions and the following disclaimer in
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * the documentation and/or other materials provided with the
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * distribution.
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * 3. All advertising materials mentioning features or use of this
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * software must display the following acknowledgment:
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * "This product includes software developed by the Apache Group
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * for use in the Apache HTTP server project (http://www.apache.org/)."
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * 4. The names "Apache Server" and "Apache Group" must not be used to
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * endorse or promote products derived from this software without
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * prior written permission. For written permission, please contact
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * apache@apache.org.
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * 5. Products derived from this software may not be called "Apache"
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * nor may "Apache" appear in their names without prior written
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * permission of the Apache Group.
860b4efe27e7c1c9a2bf5c872b29c90f76849b51jim * 6. Redistributions of any form whatsoever must retain the following
15533ba489eab4fd353719602c5eaa8219a58997jailletc * acknowledgment:
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar * "This product includes software developed by the Apache Group
15533ba489eab4fd353719602c5eaa8219a58997jailletc * for use in the Apache HTTP server project (http://www.apache.org/)."
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * IT'S CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * OF THE POSSIBILITY OF SUCH DAMAGE.
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * ====================================================================
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * This software consists of voluntary contributions made by many
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * individuals on behalf of the Apache Group and was originally based
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * on public domain software written at the National Center for
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * Supercomputing Applications, University of Illinois, Urbana-Champaign.
162731dcc08cbf08bad68aafe2fbd1c395bbf3c2nilgun * For more information on the Apache Group and the Apache HTTP server
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * project, please see <http://www.apache.org/>.
1cd8c9e1716ec7beeddcc151ef24e97860f6cb0cminfrin * mod_auth_db: authentication
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * Original work by Rob McCool & Brian Behlendorf.
162731dcc08cbf08bad68aafe2fbd1c395bbf3c2nilgun * Adapted to Apache by rst (mod_auth_dbm)
1cd8c9e1716ec7beeddcc151ef24e97860f6cb0cminfrin * Adapted for Berkeley DB by Andrew Cohen
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * mod_auth_db was based on mod_auth_dbm.
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * Warning, this is not a drop in replacement for mod_auth_dbm,
162731dcc08cbf08bad68aafe2fbd1c395bbf3c2nilgun * for people wanting to switch from dbm to Berkeley DB.
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * It requires the use of AuthDBUserFile and AuthDBGroupFile
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * instead of AuthDBMUserFile AuthDBMGroupFile
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * Also, in the configuration file you need to specify
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * db_auth_module rather than dbm_auth_module
7a3589941a1276dd8bf6d4e6d01720b9408ef00bpquerna * On some BSD systems (e.g. FreeBSD and NetBSD) dbm is automatically
7a3589941a1276dd8bf6d4e6d01720b9408ef00bpquerna * mapped to Berkeley DB. You can use either mod_auth_dbm or
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * mod_auth_db. The latter makes it more obvious that it's Berkeley.
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * On other platforms where you want to use the DB library you
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * usually have to install it first. See http://www.sleepycat.com/
ad099a822dc3de888a5294adf44b230bb9437f47rbowen * for the distribution. The interface this module uses is the
#include "httpd.h"
#include "http_config.h"
#include "http_core.h"
#include "http_log.h"
#include "http_protocol.h"
#include <db.h>
#define DB2
char *auth_dbpwfile;
char *auth_dbgrpfile;
int auth_dbauthoritative;
return sec;
return DECLINE_CMD;
"Set to 'no' to allow access control to be passed along to lower modules if the userID is not known to this module"},
{NULL}
DB *f;
DBT d, q;
memset(&d, 0, sizeof(d));
memset(&q, 0, sizeof(q));
#ifdef DB2
return NULL;
#ifdef DB2
if (!((f->get) (f, &q, &d, 0))) {
#ifdef DB2
(f->close) (f, 0);
(f->close) (f);
return pw;
char *grp_colon;
char *grp_colon2;
return NULL;
if (grp_colon2)
return grp_colon;
return grp_data;
const char *sent_pw;
char *invalid_pw;
int res;
return res;
return DECLINED;
return DECLINED;
return AUTH_REQUIRED;
if (colon_pw) {
return AUTH_REQUIRED;
return OK;
int m = r->method_number;
return DECLINED;
if (!reqs_arr)
return DECLINED;
return DECLINED;
return AUTH_REQUIRED;
while (groups[0]) {
if (!strcmp(v, w))
return OK;
return AUTH_REQUIRED;
return DECLINED;