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