add support for NEWDB
[unix-history] / usr / src / usr.sbin / sendmail / praliases / praliases.c
CommitLineData
d8a9c561 1/*
5e8b0e60 2 * Copyright (c) 1983 Eric P. Allman
d8a9c561
KB
3 * Copyright (c) 1988 Regents of the University of California.
4 * All rights reserved.
5 *
417f7a11 6 * %sccs.include.redist.c%
d8a9c561 7 */
43937410 8
d8a9c561
KB
9#ifndef lint
10char copyright[] =
11"@(#) Copyright (c) 1988 Regents of the University of California.\n\
12 All rights reserved.\n";
13#endif /* not lint */
14
15#ifndef lint
75be036c 16static char sccsid[] = "@(#)praliases.c 6.3 (Berkeley) %G%";
d8a9c561
KB
17#endif /* not lint */
18
e4328fb1 19#include <ndbm.h>
d8a9c561 20#include <sendmail.h>
75be036c
EA
21#ifdef NEWDB
22#include <db.h>
23#endif
d8a9c561 24
e4328fb1 25int
43937410 26main(argc, argv)
e4328fb1 27 int argc;
43937410
KB
28 char **argv;
29{
d8a9c561
KB
30 extern char *optarg;
31 extern int optind;
e4328fb1
KB
32 DBM *dbp;
33 datum content, key;
34 char *filename;
d8a9c561 35 int ch;
75be036c
EA
36#ifdef NEWDB
37 const DB *db;
38 DBT newdbkey, newdbcontent;
39 char buf[MAXNAME];
40#endif
43937410 41
e4328fb1 42 filename = "/etc/aliases";
d8a9c561
KB
43 while ((ch = getopt(argc, argv, "f:")) != EOF)
44 switch((char)ch) {
45 case 'f':
46 filename = optarg;
47 break;
48 case '?':
49 default:
e4328fb1 50 (void)fprintf(stderr, "usage: praliases [-f file]\n");
d8a9c561
KB
51 exit(EX_USAGE);
52 }
53 argc -= optind;
54 argv += optind;
43937410 55
75be036c
EA
56#ifdef NEWDB
57 (void) strcpy(buf, filename);
58 (void) strcat(buf, ".db");
59 if (db = dbopen(buf, O_RDONLY, 0444 , DB_HASH, NULL)) {
60 if (!argc) {
61 while(!db->seq(db, &newdbkey, &newdbcontent, R_NEXT))
62 printf("%s:%s\n", newdbkey.data,
63 newdbcontent.data);
64 }
65 else for (; *argv; ++argv) {
66 newdbkey.data = *argv;
67 newdbkey.size = strlen(*argv) + 1;
68 if ( !db->get(db, &newdbkey, &newdbcontent, 0) )
69 printf("%s:%s\n", newdbkey.data,
70 newdbcontent.data);
71 else
72 printf("%s: No such key\n",
73 newdbkey.data);
74 }
e4328fb1 75 }
75be036c
EA
76 else {
77#endif
78 if ((dbp = dbm_open(filename, O_RDONLY, 0)) == NULL) {
79 (void)fprintf(stderr,
80 "praliases: %s: %s\n", filename, strerror(errno));
81 exit(EX_OSFILE);
82 }
83 if (!argc)
84 for (key = dbm_nextkey(dbp);
85 key.dptr != NULL; key = dbm_nextkey(dbp)) {
86 content = dbm_fetch(dbp, key);
87 (void)printf("%s:%s\n", key.dptr, content.dptr);
88 }
89 else for (; *argv; ++argv) {
90 key.dptr = *argv;
91 key.dsize = strlen(*argv) + 1;
e4328fb1 92 content = dbm_fetch(dbp, key);
75be036c
EA
93 if (!content.dptr)
94 (void)printf("%s: No such key\n", key.dptr);
95 else
96 (void)printf("%s:%s\n", key.dptr, content.dptr);
43937410 97 }
75be036c 98#ifdef NEWDB
43937410 99 }
75be036c 100#endif
43937410
KB
101 exit(EX_OK);
102}