static char SccsId
[] = "@(#)newaliases.c 3.5 8/21/81";
typedef struct { char *dptr
; int dsize
; } datum
;
char *aliases
= ALIASFILE
;
struct mailer
*Mailer
[MAXMAILERS
+1];
int naliases
, bytes
, longest
;
char *cffile
= "/usr/lib/sendmail.cf";
if (argc
> 1 && strcmp(argv
[1], "-T") == 0)
(void) strcpy(dirbuf
, aliases
);
(void) strcat(dirbuf
, ".dir");
(void) strcpy(pagbuf
, aliases
);
(void) strcat(pagbuf
, ".pag");
if (dbminit(aliases
) < 0)
if (freopen(aliases
, "r", stdin
) == 0) {
/* read and interpret lines */
while (fgets(line
, sizeof (line
), stdin
) != NULL
)
usrerr("Non-continuation line starts with space");
for (p
= line
; *p
!= '\0' && *p
!= ':' && *p
!= '\n'; p
++)
if (*p
== '\0' || *p
== '\n')
if (parse(line
, &al
, 1) == NULL
)
/* do parsing & compression of addresses */
while (*p
!= '\n' && *p
!= ',' && *p
!= '\0')
/* see if there should be a continuation line */
/* read continuation line */
if (fgets(p
, sizeof line
- (p
- line
), stdin
) == NULL
)
usrerr("continuation line missing");
if (al
.q_mailer
!= MN_LOCAL
)
usrerr("cannot alias non-local names");
key
.dsize
= strlen(al
.q_user
) + 1;
content
.dsize
= strlen(rhs
) + 1;
if (content
.dsize
> longest
)
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
);
usrerr(fmt
, a
, b
, c
, d
, e
)
fprintf(stderr
, "line %d: ", LineNo
);
fprintf(stderr
, fmt
, a
, b
, c
, d
, e
);
syserr(fmt
, a
, b
, c
, d
, e
)
return (usrerr(fmt
, a
, b
, c
, d
, e
));