add support for NEWDB
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Fri, 21 May 1993 23:54:42 +0000 (15:54 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Fri, 21 May 1993 23:54:42 +0000 (15:54 -0800)
SCCS-vsn: usr.sbin/sendmail/praliases/praliases.c 6.3

usr/src/usr.sbin/sendmail/praliases/praliases.c

index 8e5e8ea..19ee8c4 100644 (file)
@@ -13,11 +13,14 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)praliases.c        6.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)praliases.c        6.3 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <ndbm.h>
 #include <sendmail.h>
 #endif /* not lint */
 
 #include <ndbm.h>
 #include <sendmail.h>
+#ifdef NEWDB
+#include <db.h>
+#endif
 
 int
 main(argc, argv)
 
 int
 main(argc, argv)
@@ -30,6 +33,11 @@ main(argc, argv)
        datum content, key;
        char *filename;
        int ch;
        datum content, key;
        char *filename;
        int ch;
+#ifdef NEWDB
+       const DB *db;
+       DBT newdbkey, newdbcontent;
+       char buf[MAXNAME];
+#endif
 
        filename = "/etc/aliases";
        while ((ch = getopt(argc, argv, "f:")) != EOF)
 
        filename = "/etc/aliases";
        while ((ch = getopt(argc, argv, "f:")) != EOF)
@@ -45,25 +53,50 @@ main(argc, argv)
        argc -= optind;
        argv += optind;
 
        argc -= optind;
        argv += optind;
 
-       if ((dbp = dbm_open(filename, O_RDONLY, 0)) == NULL) {
-               (void)fprintf(stderr,
-                   "praliases: %s: %s\n", filename, strerror(errno));
-               exit(EX_OSFILE);
+#ifdef NEWDB
+       (void) strcpy(buf, filename);
+       (void) strcat(buf, ".db");
+       if (db = dbopen(buf, O_RDONLY, 0444 , DB_HASH, NULL)) {
+               if (!argc) {
+                       while(!db->seq(db, &newdbkey, &newdbcontent, R_NEXT))
+                               printf("%s:%s\n", newdbkey.data,
+                                               newdbcontent.data);
+               }
+               else for (; *argv; ++argv) {
+                       newdbkey.data = *argv;
+                       newdbkey.size = strlen(*argv) + 1;
+                       if ( !db->get(db, &newdbkey, &newdbcontent, 0) )
+                               printf("%s:%s\n", newdbkey.data,
+                                       newdbcontent.data);
+                       else
+                               printf("%s: No such key\n",
+                                       newdbkey.data);
+               }
        }
        }
-       if (!argc)
-               for (key = dbm_nextkey(dbp);
-                   key.dptr != NULL; key = dbm_nextkey(dbp)) {
+       else {
+#endif
+               if ((dbp = dbm_open(filename, O_RDONLY, 0)) == NULL) {
+                       (void)fprintf(stderr,
+                           "praliases: %s: %s\n", filename, strerror(errno));
+                       exit(EX_OSFILE);
+               }
+               if (!argc)
+                       for (key = dbm_nextkey(dbp);
+                           key.dptr != NULL; key = dbm_nextkey(dbp)) {
+                               content = dbm_fetch(dbp, key);
+                               (void)printf("%s:%s\n", key.dptr, content.dptr);
+                       }
+               else for (; *argv; ++argv) {
+                       key.dptr = *argv;
+                       key.dsize = strlen(*argv) + 1;
                        content = dbm_fetch(dbp, key);
                        content = dbm_fetch(dbp, key);
-                       (void)printf("%s:%s\n", key.dptr, content.dptr);
+                       if (!content.dptr)
+                               (void)printf("%s: No such key\n", key.dptr);
+                       else
+                               (void)printf("%s:%s\n", key.dptr, content.dptr);
                }
                }
-       else for (; *argv; ++argv) {
-               key.dptr = *argv;
-               key.dsize = strlen(*argv) + 1;
-               content = dbm_fetch(dbp, key);
-               if (!content.dptr)
-                       (void)printf("%s: No such key\n", key.dptr);
-               else
-                       (void)printf("%s:%s\n", key.dptr, content.dptr);
+#ifdef NEWDB
        }
        }
+#endif
        exit(EX_OK);
 }
        exit(EX_OK);
 }