This will make it easier to support CentOS 5 without extra requirements.
AC_PROG_INSTALL
AM_PATH_GLIB_2_0(,,AC_MSG_ERROR(GLib not found))
PKG_CHECK_MODULES(GNUTLS, gnutls >= 1.4.0, , AC_MSG_ERROR(Could not find gnutls))
-PKG_CHECK_MODULES(QDBM, qdbm, , AC_MSG_ERROR(Could not find qdbm))
-LIBS="$GLIB_LIBS $GNUTLS_LIBS $QDBM_LIBS $LIBS"
-CFLAGS="$GLIB_CFLAGS $GNUTLS_CFLAGS $QDBM_CFLAGS $CFLAGS"
+LIBS="$GLIB_LIBS $GNUTLS_LIBS $LIBS"
+CFLAGS="-lgdbm $GLIB_CFLAGS $GNUTLS_CFLAGS $CFLAGS"
if test "${sysconfdir}x" = '${prefix}/etcx'; then
if test "${prefix}x" = 'NONEx'; then
AC_DEFINE_UNQUOTED(SYSCONFDIR, "${ac_default_prefix}/etc")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <depot.h>
+#include <gdbm.h>
+#include <errno.h>
enum
{
};
void
-pp_dplistkeys (DEPOT *dp)
+pp_dblistkeys (GDBM_FILE db)
{
- char *key;
- dpiterinit (dp);
- int ksz;
- while ((key = dpiternext (dp, &ksz)) != NULL && ksz > 0)
+ datum key;
+ datum oldkey;
+ key = gdbm_firstkey (db);
+ while (key.dptr != NULL)
{
- printf ("%s\n", key);
- free (key);
+ printf ("%s\n", key.dptr);
+ oldkey = key;
+ key = gdbm_nextkey (db, oldkey);
+ free (oldkey.dptr);
}
}
int
main (int argc, char **argv)
{
- DEPOT *dp;
+ GDBM_FILE db;
int action;
- char *db;
+ char *db_fn;
char *username;
+ datum key;
+ datum data;
int r = 0;
if (argc < 3)
usage (argv[0]);
if (!strcmp (argv[1], "deny"))
- db = "/var/lib/popproxy/deny.db";
+ db_fn = "/var/lib/popproxy/deny.db";
else if (!strcmp (argv[1], "allow"))
- db = "/var/lib/popproxy/allow.db";
+ db_fn = "/var/lib/popproxy/allow.db";
else
usage (argv[0]);
if (!strcmp (argv[2], "add"))
usage (argv[0]);
if ((action == ACTION_ADD || action == ACTION_DEL) && argc < 4)
usage (argv[0]);
- username = argv[3];
- dp = dpopen (db, DP_OWRITER | DP_OCREAT, 0);
- if (dp == NULL)
+ if (action != ACTION_LIST)
+ {
+ username = argv[3];
+ key.dptr = username;
+ key.dsize = strlen (username);
+ data.dptr = "";
+ data.dsize = 1;
+ }
+ db = gdbm_open (db_fn, 0, GDBM_WRCREAT, 0600, NULL);
+ if (db == NULL)
{
fprintf (stderr, "Could not create database.\n");
exit (1);
switch (action)
{
case ACTION_ADD:
- dpput (dp, username, -1, "", -1, DP_DOVER);
+ r = gdbm_store (db, key, data, GDBM_REPLACE);
break;
case ACTION_DEL:
- dpout (dp, username, -1);
+ r = gdbm_delete (db, key);
break;
case ACTION_LIST:
- pp_dplistkeys (dp);
- r = 1;
+ pp_dblistkeys (db);
+ r = 0;
break;
default:
fprintf (stderr, "Action unrecognized.\n");
r = 1;
}
- dpclose (dp);
+ gdbm_close (db);
return r;
}
*/
#include <string.h>
-#include <depot.h>
+#include <gdbm.h>
+#include <stdlib.h>
#include "usermap.h"
int
usermap_perm (char *user)
{
- DEPOT* allow_dp = NULL;
- DEPOT* deny_dp = NULL;
- char* allow = NULL;
- char* deny = NULL;
+ GDBM_FILE allow_db = NULL;
+ GDBM_FILE deny_db = NULL;
+ int allow = 0;
+ int deny = 0;
+ datum key;
+ key.dptr = user;
+ key.dsize = strlen (user);
int allow_users = 0;
- allow_dp = dpopen ("/var/lib/popproxy/allow.db", DP_OREADER, 0);
- deny_dp = dpopen ("/var/lib/popproxy/deny.db", DP_OREADER, 0);
- if (allow_dp)
+ allow_db = gdbm_open ("/var/lib/popproxy/allow.db",
+ 0, GDBM_READER, 0, NULL);
+ deny_db = gdbm_open ("/var/lib/popproxy/deny.db",
+ 0, GDBM_READER, 0, NULL);
+ if (allow_db)
{
- allow = dpget (allow_dp, user, -1, 0, -1, NULL);
- allow_users = dprnum (allow_dp);
- dpclose (allow_dp);
+ datum allow_fk;
+ allow = gdbm_exists (allow_db, key);
+ allow_fk = gdbm_firstkey (allow_db);
+ if (allow_fk.dptr)
+ {
+ allow_users = 1;
+ free (allow_fk.dptr);
+ }
+ gdbm_close (allow_db);
}
- if (deny_dp)
+ if (deny_db)
{
- deny = dpget (deny_dp, user, -1, 0, -1, NULL);
- dpclose (deny_dp);
- }
- if (allow && deny)
- {
- free (allow);
- free (deny);
- return ACCESS_DENY;
- }
- if (allow)
- {
- free (allow);
- return ACCESS_ALLOW;
+ deny = gdbm_exists (deny_db, key);
+ gdbm_close (deny_db);
}
if (deny)
- {
- free (deny);
- return ACCESS_DENY;
- }
+ return ACCESS_DENY;
+ if (allow)
+ return ACCESS_ALLOW;
if (allow_users == 0)
return ACCESS_ALLOW;
return ACCESS_DENY;