Files
Arquivotheca.Solaris-2.5/cmd/sendmail/_aux/aliasadm.c
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

185 lines
3.6 KiB
C
Executable File

/*
* Copyright (c) 1991, 1992, 1993 by Sun Microsystems, Inc.
*/
#include <stdio.h>
#include <string.h>
#include "conf.h"
#include <stdlib.h>
#undef NIS /* symbol conflict in nis.h */
#include <rpcsvc/nis.h>
#include "nisplus.h"
# define DEFAULT_ALIAS_MAP "mail_aliases.org_dir"
FILE *fp = NULL;
char *domain, *alias_map;
char *match_arg;
struct nis_mailias alias = {NULL, NULL, NULL, NULL};
t_mode mode;
main(argc, argv)
int argc;
char **argv;
{
int i;
nis_result *res;
print_comments = TRUE;
alias_map = DEFAULT_ALIAS_MAP;
if ((domain = nis_local_directory()) == NULL) {
fprintf(stderr, "Can't get current domain\n");
exit(-1);
}
argparse(argc, argv);
switch (mode) {
case ADD:
nis_mailias_add(alias, alias_map, domain);
break;
case CHANGE:
nis_mailias_change(alias, alias_map, domain);
break;
case DELETE:
nis_mailias_delete(alias, alias_map, domain);
break;
case MATCH:
res = nis_mailias_match(match_arg,
alias_map, domain, ALIAS_COL);
if (res->status == SUCCESS) {
int i;
for (i = 0; i < res->objects.objects_len; i++)
mailias_print(fp? fp: stdout,
(&res->objects.objects_val[0])+i);
}
break;
case LIST:
nis_mailias_list(fp? fp: stdout, alias_map, domain);
break;
case INIT:
nis_mailias_init(alias_map, domain);
break;
case EDIT:
nis_mailias_edit(fp, alias_map, domain);
break;
case NONE:
default:
usage(argv[0]);
exit(-1);
break;
}
exit(0);
}
argparse(argc, argv)
int argc;
char **argv;
{
int c;
int narg;
int ind;
mode = NONE;
while ((c = getopt(argc, argv, "D:M:f:a:c:d:m:leIn")) != EOF) {
ind = (int) optind; /* optind doesn't seem to be recognized
* as an extern int (which it is)
* for now cast it
*/
switch(c) {
case 'a':
mode = ADD;
narg = argc - ind + 1;
if (narg < 2) {
usage(argv[0]);
fprintf(stderr,"Invalid argument\n");
exit(-1);
}
alias.name = strdup(optarg);
alias.expn = strdup(argv[ind]);
if (narg >= 3 && *argv[ind + 1] != '-')
alias.comments = strdup(argv[ind + 1]);
if (narg >= 4 && *argv[ind + 1] != '-' &&
*argv[ind + 2] != '-') {
alias.options = strdup(argv[ind + 2]);
}
break;
case 'c':
mode = CHANGE;
narg = argc - ind + 1;
if (narg < 2) {
usage(argv[0]);
fprintf(stderr,"Invalid argument\n");
exit(-1);
}
alias.name = optarg;
alias.expn = strdup(argv[ind]);
if (narg >= 3 && *argv[ind + 1] != '-')
alias.comments = strdup(argv[ind + 1]);
if (narg >= 4 && *argv[ind + 1] != '-' &&
*argv[ind + 2] != '-') {
alias.options = strdup(argv[ind + 2]);
}
break;
case 'D':
domain = strdup(optarg);
break;
case 'd':
mode = DELETE;
alias.name = strdup(optarg);
break;
case 'M':
alias_map = strdup(optarg);
break;
case 'm':
mode = MATCH;
match_arg = strdup(optarg);
break;
case 'n':
print_comments = FALSE;
break;
case 'f':
fp = fopen(optarg, "a+");
if (fp == NULL) {
fprintf(stderr, "%s:", optarg);
perror("Can not open:");
exit(-1);
}
break;
case 'e':
mode = EDIT;
break;
case 'l':
mode = LIST;
break;
case 'I':
mode = INIT;
break;
default:
fprintf(stderr,"Invalid argument\n");
usage(argv[0]);
exit(-1);
break;
}
}
}
usage(pname)
char *pname;
{
fprintf(stderr,
"usage:\t%s -a alias expansion [comments] [options]\n", pname);
fprintf(stderr,"\t%s -c alias expansion [comments] [options]\n", pname);
fprintf(stderr, "\t%s -e\n", pname);
fprintf(stderr,"\t%s -d alias\n", pname);
fprintf(stderr, "\t%s -m alias\n", pname);
fprintf(stderr, "\t%s -l\n", pname);
}