-/* $Id: filter_auth_simple.cpp,v 1.6 2006-01-17 17:30:49 mike Exp $
+/* $Id: filter_auth_simple.cpp,v 1.9 2006-01-18 10:50:13 mike Exp $
Copyright (c) 2005, Index Data.
%LICENSE%
// Read XML config.. Put config info in m_p.
void yp2::filter::AuthSimple::configure(const xmlNode * ptr)
{
- std::string filename;
- bool got_filename = false;
+ std::string userRegisterName;
+ bool got_userRegisterName = false;
for (ptr = ptr->children; ptr != 0; ptr = ptr->next) {
if (ptr->type != XML_ELEMENT_NODE)
continue;
- if (!strcmp((const char *) ptr->name, "filename")) {
- filename = yp2::xml::get_text(ptr);
- got_filename = true;
+ if (!strcmp((const char *) ptr->name, "userRegister")) {
+ userRegisterName = yp2::xml::get_text(ptr);
+ got_userRegisterName = true;
} else {
throw yp2::filter::FilterException("Bad element in auth_simple: <"
+ std::string((const char *)
}
}
- if (!got_filename)
+ if (!got_userRegisterName)
throw yp2::filter::FilterException("auth_simple: no user-register "
"filename specified");
- FILE *fp = fopen(filename.c_str(), "r");
+ FILE *fp = fopen(userRegisterName.c_str(), "r");
if (fp == 0)
throw yp2::filter::FilterException("can't open auth_simple "
- "user-register '" + filename +
- "': " + strerror(errno));
+ "user-register '" + userRegisterName
+ + "': " + strerror(errno));
char buf[1000];
while (fgets(buf, sizeof buf, fp)) {
char *passwdp = strchr(buf, ':');
if (passwdp == 0)
throw yp2::filter::FilterException("auth_simple user-register '" +
- filename + "': " +
+ userRegisterName + "': " +
"no password on line: '"
+ buf + "'");
*passwdp++ = 0;
char *databasesp = strchr(passwdp, ':');
if (databasesp == 0)
throw yp2::filter::FilterException("auth_simple user-register '" +
- filename + "': " +
+ userRegisterName + "': " +
"no databases on line: '" +
buf + ":" + passwdp + "'");
*databasesp++ = 0;
boost::split(tmp.dbs, databasesp, boost::is_any_of(","));
m_p->userRegister[buf] = tmp;
- if (1) { // debugging
+ if (0) { // debugging
printf("Added user '%s' -> password '%s'\n", buf, passwdp);
std::list<std::string>::const_iterator i;
for (i = tmp.dbs.begin(); i != tmp.dbs.end(); i++) {
std::string user = m_p->userBySession[package.session()];
yf::AuthSimple::Rep::PasswordAndDBs pdb = m_p->userRegister[user];
for (int i = 0; i < req->num_databaseNames; i++) {
- if (!contains(pdb.dbs, req->databaseNames[i])) {
+ if (!contains(pdb.dbs, req->databaseNames[i]) &&
+ !contains(pdb.dbs, "*")) {
// Make an Search rejection APDU
yp2::odr odr;
Z_APDU *apdu = odr.create_searchResponse(