# 2.11BSD#431 - /usr/src/usr.sbin/sendmail/aux/newaliases.c

##### Functions

    main              X
    syserr            X
    usrerr            X

##### Variables

    Debug             X
    Errors            X
    ExitStat          X
    LineNo            X
    Mailer            X
    NextMailer        X
    To                X
    aliases           X
    copyright         X
    dirbuf            X
    pagbuf            X

       1: /*
       2: **  Sendmail
       3: **  Copyright (c) 1983  Eric P. Allman
       4: **  Berkeley, California
       5: **
       6: **  Copyright (c) 1983 Regents of the University of California.
       7: **  All rights reserved.  The Berkeley software License Agreement
       8: **  specifies the terms and conditions for redistribution.
       9: */
      10:
      11: #if !defined(lint) && defined(DOSCCS)
      12: char copyright[] =
      13: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
      14:  All rights reserved.\n";
      15:
      16: static char SccsId[] = "@(#)newaliases.c	5.1.1 (2.11BSD) 1996/10/24";
      17: #endif
      18:
      19: # include <stdio.h>
      20: # include <ctype.h>
      21: # include "sendmail.h"
      22:
      23: typedef struct { char *dptr; int dsize; } datum;
      24: char *aliases = ALIASFILE;
      25: char dirbuf[100];
      26: char pagbuf[100];
      27: int LineNo;
      28: char *To;
      29: int ExitStat;
      30: int Errors;
      31: HDR *Header;
      32: struct mailer *Mailer[MAXMAILERS+1];
      33: int NextMailer = 0;
      34: # ifdef DEBUG
      35: int Debug;
      36: # endif DEBUG
      37:
      38: main(argc, argv)
      39:     int argc;
      40:     char *argv[];
      41: {
      42:     int f;
      43:     char line[BUFSIZ];
      44:     register char *p;
      45:     char *p2;
      46:     char *rhs;
      47:     int naliases, bytes, longest;
      48:     datum key, content;
      49:     bool skipping;
      50:     ADDRESS al, bl;
      51:     extern char *prescan();
      52:     extern ADDRESS *parse();
      53:     bool contin;
      54:     char *cffile = "/etc/sendmail.cf";
      55:
      56: # ifdef DEBUG
      57:     if (argc > 1 && strcmp(argv[1], "-T") == 0)
      58:     {
      59:         Debug = 100;
      60:         argc--;
      61:         argv++;
      62:     }
      63: # endif DEBUG
      64:     if (argc > 1)
      65:         aliases = argv[1];
      66:     if (argc > 2)
      67:         cffile = argv[2];
      68:     readcf(cffile);
      69:
      70:     (void) strcpy(dirbuf, aliases);
      71:     (void) strcat(dirbuf, ".dir");
      72:     (void) strcpy(pagbuf, aliases);
      73:     (void) strcat(pagbuf, ".pag");
      74:     f = creat(dirbuf, 0666);
      75:     if (f < 0) {
      76:         perror(dirbuf);
      77:         exit(1);
      78:     }
      79:     (void) close(f);
      80:     f = creat(pagbuf, 0666);
      81:     if (f < 0) {
      82:         perror(pagbuf);
      83:         exit(1);
      84:     }
      85:     (void) close(f);
      86:     if (dbminit(aliases) < 0)
      87:         exit(1);
      88:     if (freopen(aliases, "r", stdin) == 0) {
      89:         perror(aliases);
      90:         exit(1);
      91:     }
      92:
      93:     /* read and interpret lines */
      94:     LineNo = 0;
      95:     naliases = 0;
      96:     bytes = 0;
      97:     longest = 0;
      98:     skipping = FALSE;
      99:     while (fgets(line, sizeof (line), stdin) != NULL)
     100:     {
     101:         LineNo++;
     102:         switch (line[0])
     103:         {
     104:           case '#':
     105:           case '\n':
     106:           case '\0':
     107:             skipping = FALSE;
     108:             continue;
     109:
     110:           case ' ':
     111:           case '\t':
     112:             if (!skipping)
     113:                 usrerr("Non-continuation line starts with space");
     114:             skipping = TRUE;
     115:             continue;
     116:         }
     117:         skipping = FALSE;
     118:
     119:         /* process the LHS */
     120:         for (p = line; *p != '\0' && *p != ':' && *p != '\n'; p++)
     121:             continue;
     122:         if (*p == '\0' || *p == '\n')
     123:         {
     124:          syntaxerr:
     125:             usrerr("missing colon");
     126:             continue;
     127:         }
     128:         *p++ = '\0';
     129:         if (parse(line, &al, 1) == NULL)
     130:         {
     131:             *--p = ':';
     132:             goto syntaxerr;
     133:         }
     134:         rhs = p;
     135:         contin = FALSE;
     136:         for (;;)
     137:         {
     138:             register char c;
     139:
     140:             /* do parsing & compression of addresses */
     141:             c = *p;
     142:             while (c != '\0')
     143:             {
     144:                 p2 = p;
     145:                 while (*p != '\n' && *p != ',' && *p != '\0')
     146:                     p++;
     147:                 c = *p;
     148:                 *p++ = '\0';
     149:                 if (*p2 == '\0')
     150:                 {
     151:                     p[-1] = c;
     152:                     continue;
     153:                 }
     154:                 parse(p2, &bl, -1);
     155:                 contin = (c == ',');
     156:                 p[-1] = c;
     157:                 while (isspace(*p))
     158:                     p++;
     159:             }
     160:
     161:             /* see if there should be a continuation line */
     162:             if (!contin)
     163:                 break;
     164:
     165:             /* read continuation line */
     166:             p--;
     167:             if (fgets(p, sizeof line - (p - line), stdin) == NULL)
     168:                 break;
     169:             LineNo++;
     170:
     171:             if (!isspace(*p))
     172:                 usrerr("continuation line missing");
     173:         }
     174:         if (al.q_mailer != MN_LOCAL)
     175:         {
     176:             usrerr("cannot alias non-local names");
     177:             continue;
     178:         }
     179:         naliases++;
     180:         key.dsize = strlen(al.q_user) + 1;
     181:         key.dptr = al.q_user;
     182:         content.dsize = strlen(rhs) + 1;
     183:         if (content.dsize > longest)
     184:             longest = content.dsize;
     185:         content.dptr = rhs;
     186:         bytes += key.dsize + content.dsize;
     187:         if (store(key, content), 0)
     188:         /* if (f = store(key, content)) */
     189:             usrerr("Dbm internal error return %d from store\n", f);
     190:     }
     191:     fprintf(stderr, "%d aliases, %d bytes, longest %d bytes, %d errors\n",
     192:         naliases, bytes, longest, Errors);
     193:
     194:     exit(ExitStat);
     195: }
     196:
     197: usrerr(fmt, a, b, c, d, e)
     198:     char *fmt;
     199: {
     200:     Errors++;
     201:     fprintf(stderr, "line %d: ", LineNo);
     202:     fprintf(stderr, fmt, a, b, c, d, e);
     203:     fprintf(stderr, "\n");
     204:     return (-1);
     205: }
     206:
     207: syserr(fmt, a, b, c, d, e)
     208:     char *fmt;
     209: {
     210:     return (usrerr(fmt, a, b, c, d, e));
     211: }

#### Defined functions

main defined in line 38; never used
syserr defined in line 207; used 7 times

- in /usr/src/usr.sbin/sendmail/aux/4.1a_daemon.c line 89, 210, 233, 329
- in /usr/src/usr.sbin/sendmail/aux/bbn_daemon.c line 91, 113, 154

usrerr defined in line 197; used 8 times

- in line 113, 125, 172-176(2), 189, 210
- in /usr/src/usr.sbin/sendmail/aux/4.1a_daemon.c line 302
- in /usr/src/usr.sbin/sendmail/aux/bbn_daemon.c line 216

#### Defined variables

Debug defined in line 35; used 1 times

- in line 59

Errors defined in line 30; used 2 times

- in line 192, 200

ExitStat defined in line 29; used 1 times

- in line 194

LineNo defined in line 27; used 4 times

- in line 94, 101, 169, 201

Mailer defined in line 32; never used
NextMailer defined in line 33; never used
SccsId defined in line 16; never used
To defined in line 28; never used
aliases defined in line 24; used 6 times

- in line 65-72(3), 86-89(3)

copyright defined in line 12; never used
dirbuf defined in line 25; used 4 times

- in line 70-76(4)

pagbuf defined in line 26; used 4 times

- in line 72-73(2), 80-82(2)

Last modified: 1996-10-25 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 925 |