X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=ppmanager.c;h=f67714b9a918135827e7eca898f5900e95c0f9f6;hb=cd4f92d6945a7611e1221958450c734d7b939784;hp=4fdc08aa78a243f9d163c88265fdf3408df51974;hpb=9ce7c1ab475a5b65c05eaf1a5f8a6da9e2206597;p=cascardo%2Frnetproxy.git diff --git a/ppmanager.c b/ppmanager.c index 4fdc08a..f67714b 100644 --- a/ppmanager.c +++ b/ppmanager.c @@ -21,7 +21,8 @@ #include #include #include -#include +#include +#include enum { @@ -31,15 +32,17 @@ 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); } } @@ -54,17 +57,19 @@ usage (char *programname) 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")) @@ -77,9 +82,16 @@ main (int argc, char **argv) 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); @@ -87,19 +99,19 @@ main (int argc, char **argv) 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; }