#define M_USER 1
#define M_LIST 2
#define M_STRING 3
+#define M_KERBEROS 4
/* argument parsing macro */
#define argis(a,b) ((strcmp(*arg+1, a) == 0) || (strcmp(*arg+1, b) == 0))
/* flags from command line */
int infoflg, verbose, syncflg, memberflg, recursflg, debugflg, noauth;
-int showusers, showstrings, showlists;
+int showusers, showstrings, showkerberos, showlists;
/* various member lists */
struct save_queue *addlist, *dellist, *memberlist, *synclist;
char **arg = argv;
char *membervec[3], *motd;
struct member *memberstruct;
+ char *server = SMS_SERVER;
/* clear all flags & lists */
infoflg = verbose = syncflg = memberflg = debugflg = recursflg = 0;
- noauth = showusers = showstrings = showlists = 0;
+ noauth = showusers = showstrings = showkerberos = showlists = 0;
listname = NULL;
addlist = sq_create();
dellist = sq_create();
showstrings++;
else if (argis("l", "lists"))
showlists++;
+ else if (argis("k", "kerberos"))
+ showkerberos++;
else if (argis("D", "debug"))
debugflg++;
else if (argis("i","information"))
verbose++;
else if (argis("r","recursive"))
recursflg++;
+ else if (argis("S","server"))
+ if (arg - argv < argc - 1) {
+ ++arg;
+ server = *arg;
+ } else
+ usage(argv);
else if (argis("a","add"))
if (arg - argv < argc - 1) {
++arg;
addlist->q_next != addlist || dellist->q_next != dellist))
memberflg++;
- /* If none of {users,strings,lists} specified, turn them all on */
- if (!(showusers || showstrings || showlists))
- showusers = showstrings = showlists = 1;
+ /* If none of {users,strings,lists,kerberos} specified, turn them all on */
+ if (!(showusers || showstrings || showlists || showkerberos))
+ showusers = showstrings = showlists = showkerberos = 1;
/* fire up SMS */
- if (status = sms_connect(SMS_SERVER)) {
+ if (status = sms_connect(server)) {
com_err(whoami, status, " unable to connect to SMS");
exit(2);
}
if (status != SMS_SUCCESS)
com_err(whoami, status, " while adding member %s to %s",
memberstruct->name, listname);
+ break;
+ case M_KERBEROS:
+ membervec[1] = "KERBEROS";
+ status = sms_query("add_member_to_list", 3, membervec,
+ scream, NULL);
+ if (status != SMS_SUCCESS)
+ com_err(whoami, status, " while adding member %s to %s",
+ memberstruct->name, listname);
}
}
else if (status != SMS_SUCCESS)
com_err(whoami, status, " while deleteing member %s from %s",
memberstruct->name, listname);
+ break;
+ case M_KERBEROS:
+ membervec[1] = "KERBEROS";
+ status = sms_query("delete_member_from_list", 3, membervec,
+ scream, NULL);
+ if (status != SMS_SUCCESS)
+ com_err(whoami, status, " while deleteing member %s from %s",
+ memberstruct->name, listname);
}
}
fprintf(stderr, " -u | -users\n");
fprintf(stderr, " -l | -lists\n");
fprintf(stderr, " -s | -strings\n");
+ fprintf(stderr, " -k | -kerberos\n");
fprintf(stderr, " -i | -info\n");
fprintf(stderr, " -r | -recursive\n");
fprintf(stderr, " -a | -add member\n");
fprintf(stderr, " -d | -delete member\n");
fprintf(stderr, " -f | -file filename\n");
fprintf(stderr, " -n | -noauth\n");
+ fprintf(stderr, " -S | -server host:port\n");
fprintf(stderr, " -D | -debug\n");
exit(1);
}
return;
s = "STRING";
break;
+ case M_KERBEROS:
+ if (!showkerberos)
+ return;
+ s = "KERBEROS";
+ break;
case M_ANY:
printf("%s\n", memberstruct->name);
return;
else {
if (memberstruct->type == M_LIST)
printf("LIST:%s\n", memberstruct->name);
+ else if (memberstruct->type == M_KERBEROS)
+ printf("KERBEROS:%s\n", memberstruct->name);
else if (memberstruct->type == M_STRING &&
!index(memberstruct->name, '@'))
printf("STRING:%s\n", memberstruct->name);
case 'S':
m->type = M_STRING;
break;
+ case 'K':
+ m->type = M_KERBEROS;
+ break;
}
m->name = strsave(argv[1]);
sq_save_data(q, m);
m->type = M_LIST;
else if (!strcasecmp("string", s))
m->type = M_STRING;
+ else if (!strcasecmp("kerberos", s))
+ m->type = M_KERBEROS;
else {
m->type = M_STRING;
*(--p) = ':';