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.1 (Berkeley) 06/07/93"; 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", 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 } 75 } 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; 92 content = dbm_fetch(dbp, key); 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); 97 } 98 #ifdef NEWDB 99 } 100 #endif 101 exit(EX_OK); 102 } 103