|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T n
Length: 4874 (0x130a) Types: TextFile Names: »newaliases.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦02f44f254⟧ »EurOpenD3/mail/sendmail.5.65.tar.Z« └─⟦4e8d58309⟧ └─⟦this⟧ »./aux/newaliases.c« └─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦bfebc70e2⟧ »EurOpenD3/mail/sendmail-5.65b+IDA-1.4.3.tar.Z« └─⟦f9e35cd84⟧ └─⟦this⟧ »sendmail/aux/newaliases.c«
/* * Copyright (c) 1983 Eric P. Allman * Copyright (c) 1988 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted provided * that: (1) source distributions retain this entire copyright notice and * comment, and (2) distributions including binaries display the following * acknowledgement: ``This product includes software developed by the * University of California, Berkeley and its contributors'' in the * documentation or other materials provided with the distribution and in * all advertising materials mentioning features or use of this software. * Neither the name of the University nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #ifndef lint char copyright[] = "@(#) Copyright (c) 1988 Regents of the University of California.\n\ All rights reserved.\n"; #endif /* not lint */ #ifndef lint static char sccsid[] = "@(#)newaliases.c 5.4 (Berkeley) 6/1/90"; #endif /* not lint */ # include <stdio.h> # include <ctype.h> # include "sendmail.h" # include "pathnames.h" static char SccsId[] = "@(#)newaliases.c 5.4 6/1/90"; typedef struct { char *dptr; int dsize; } datum; char *aliases = ALIASFILE; char dirbuf[100]; char pagbuf[100]; int LineNo; char *To; int ExitStat; int Errors; HDR *Header; struct mailer *Mailer[MAXMAILERS+1]; int NextMailer = 0; # ifdef DEBUG int Debug; # endif DEBUG main(argc, argv) int argc; char *argv[]; { int f; char line[BUFSIZ]; register char *p; char *p2; char *rhs; int naliases, bytes, longest; datum key, content; bool skipping; ADDRESS al, bl; extern char *prescan(); extern ADDRESS *parse(); bool contin; char *cffile = _PATH_SENDMAILCF; # ifdef DEBUG if (argc > 1 && strcmp(argv[1], "-T") == 0) { Debug = 100; argc--; argv++; } # endif DEBUG if (argc > 1) aliases = argv[1]; if (argc > 2) cffile = argv[2]; readcf(cffile); (void) strcpy(dirbuf, aliases); (void) strcat(dirbuf, ".dir"); (void) strcpy(pagbuf, aliases); (void) strcat(pagbuf, ".pag"); f = creat(dirbuf, 0666); if (f < 0) { perror(dirbuf); exit(1); } (void) close(f); f = creat(pagbuf, 0666); if (f < 0) { perror(pagbuf); exit(1); } (void) close(f); if (dbminit(aliases) < 0) exit(1); if (freopen(aliases, "r", stdin) == 0) { perror(aliases); exit(1); } /* read and interpret lines */ LineNo = 0; naliases = 0; bytes = 0; longest = 0; skipping = FALSE; while (fgets(line, sizeof (line), stdin) != NULL) { LineNo++; switch (line[0]) { case '#': case '\n': case '\0': skipping = FALSE; continue; case ' ': case '\t': if (!skipping) usrerr("Non-continuation line starts with space"); skipping = TRUE; continue; } skipping = FALSE; /* process the LHS */ for (p = line; *p != '\0' && *p != ':' && *p != '\n'; p++) continue; if (*p == '\0' || *p == '\n') { syntaxerr: usrerr("missing colon"); continue; } *p++ = '\0'; if (parse(line, &al, 1) == NULL) { *--p = ':'; goto syntaxerr; } rhs = p; contin = FALSE; for (;;) { register char c; /* do parsing & compression of addresses */ c = *p; while (c != '\0') { p2 = p; while (*p != '\n' && *p != ',' && *p != '\0') p++; c = *p; *p++ = '\0'; if (*p2 == '\0') { p[-1] = c; continue; } parse(p2, &bl, -1); contin = (c == ','); p[-1] = c; while (isspace(*p)) p++; } /* see if there should be a continuation line */ if (!contin) break; /* read continuation line */ p--; if (fgets(p, sizeof line - (p - line), stdin) == NULL) break; LineNo++; if (!isspace(*p)) usrerr("continuation line missing"); } if (al.q_mailer != MN_LOCAL) { usrerr("cannot alias non-local names"); continue; } naliases++; key.dsize = strlen(al.q_user) + 1; key.dptr = al.q_user; content.dsize = strlen(rhs) + 1; if (content.dsize > longest) longest = content.dsize; content.dptr = rhs; bytes += key.dsize + content.dsize; if (store(key, content), 0) /* if (f = store(key, content)) */ usrerr("Dbm internal error return %d from store\n", f); } fprintf(stderr, "%d aliases, %d bytes, longest %d bytes, %d errors\n", naliases, bytes, longest, Errors); exit(ExitStat); } usrerr(fmt, a, b, c, d, e) char *fmt; { Errors++; fprintf(stderr, "line %d: ", LineNo); fprintf(stderr, fmt, a, b, c, d, e); fprintf(stderr, "\n"); return (-1); } syserr(fmt, a, b, c, d, e) char *fmt; { return (usrerr(fmt, a, b, c, d, e)); }