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 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