int infoflg, verbose, syncflg, memberflg, recursflg, noauth;
int showusers, showstrings, showkerberos, showlists, showtags, showmachines;
int createflag, setinfo, active, public, hidden, maillist, grouplist;
-int nfsgroup;
+int nfsgroup, mailman;
struct member *owner, *memacl;
-char *desc, *newname;
+char *desc, *newname, *mailman_server;
/* various member lists */
struct save_queue *addlist, *dellist, *memberlist, *synclist, *taglist;
infoflg = verbose = syncflg = memberflg = recursflg = 0;
noauth = showusers = showstrings = showkerberos = showlists = 0;
showtags = showmachines = createflag = setinfo = 0;
- active = public = hidden = maillist = grouplist = nfsgroup = -1;
+ active = public = hidden = maillist = grouplist = nfsgroup = mailman = -1;
listname = newname = desc = NULL;
owner = NULL;
memacl = NULL;
setinfo++;
nfsgroup = 0;
}
+ else if (argis("mm", "mailman"))
+ {
+ setinfo++;
+ mailman = 1;
+ }
+ else if (argis("nmm", "notmailman"))
+ {
+ setinfo++;
+ mailman = 0;
+ }
+ else if (argis("ms", "mailman_server"))
+ {
+ if (arg - argv < argc - 1)
+ {
+ setinfo++;
+ ++arg;
+ mailman_server = canonicalize_hostname(strdup(*arg));
+ }
+ else
+ usage(argv);
+ }
else if (argis("D", "desc"))
{
if (arg - argv < argc - 1)
showusers = showstrings = showlists = showkerberos = showmachines = 1;
/* fire up Moira */
- status = mrcl_connect(server, "blanche", 4, !noauth);
+ status = mrcl_connect(server, "blanche", 10, !noauth);
if (status == MRCL_AUTH_ERROR)
{
com_err(whoami, 0, "Authentication error while working on list %s",
argv[L_GROUP] = (grouplist == 1) ? "1" : "0";
argv[L_GID] = UNIQUE_GID;
argv[L_NFSGROUP] = (nfsgroup == 1) ? "1" : "0";
+ argv[L_MAILMAN] = (mailman == 1) ? "1" : "0";
argv[L_DESC] = desc ? desc : "none";
+ if (mailman)
+ argv[L_MAILMAN_SERVER] = mailman_server ? mailman_server : "[ANY]";
+ else
+ argv[L_MAILMAN_SERVER] = "[NONE]";
+
if (memacl)
{
if (memacl->type == M_ANY)
case M_ANY:
case M_USER:
argv[L_ACE_TYPE] = "USER";
- status = mr_query("add_list", 13, argv, NULL, NULL);
+ status = mr_query("add_list", 15, argv, NULL, NULL);
if (owner->type != M_ANY || status != MR_USER)
break;
case M_LIST:
argv[L_ACE_TYPE] = "LIST";
- status = mr_query("add_list", 13, argv, NULL, NULL);
+ status = mr_query("add_list", 15, argv, NULL, NULL);
break;
case M_KERBEROS:
mrcl_com_err(whoami);
if (status == MRCL_REJECT)
exit(1);
- status = mr_query("add_list", 13, argv, NULL, NULL);
+ status = mr_query("add_list", 15, argv, NULL, NULL);
break;
case M_NONE:
argv[L_ACE_TYPE] = argv[L_ACE_NAME] = "NONE";
- status = mr_query("add_list", 13, argv, NULL, NULL);
+ status = mr_query("add_list", 15, argv, NULL, NULL);
break;
}
}
argv[L_ACE_TYPE] = "USER";
argv[L_ACE_NAME] = get_username();
- status = mr_query("add_list", 13, argv, NULL, NULL);
+ status = mr_query("add_list", 15, argv, NULL, NULL);
}
if (status)
argv[L_GROUP + 1] = grouplist ? "1" : "0";
if (nfsgroup != -1)
argv[L_NFSGROUP + 1] = nfsgroup ? "1" : "0";
+ if (mailman != -1)
+ argv[L_MAILMAN + 1] = mailman ? "1" : "0";
+ if (mailman_server)
+ argv[L_MAILMAN_SERVER + 1] = mailman_server;
if (desc)
argv[L_DESC + 1] = desc;
case M_ANY:
case M_USER:
argv[L_ACE_TYPE + 1] = "USER";
- status = mr_query("update_list", 14, argv, NULL, NULL);
+ status = mr_query("update_list", 16, argv, NULL, NULL);
if (owner->type != M_ANY || status != MR_USER)
break;
case M_LIST:
argv[L_ACE_TYPE + 1] = "LIST";
- status = mr_query("update_list", 14, argv, NULL, NULL);
+ status = mr_query("update_list", 16, argv, NULL, NULL);
break;
case M_KERBEROS:
mrcl_com_err(whoami);
if (status == MRCL_REJECT)
exit(1);
- status = mr_query("update_list", 14, argv, NULL, NULL);
+ status = mr_query("update_list", 16, argv, NULL, NULL);
break;
case M_NONE:
argv[L_ACE_TYPE + 1] = argv[L_ACE_NAME + 1] = "NONE";
- status = mr_query("update_list", 14, argv, NULL, NULL);
+ status = mr_query("update_list", 16, argv, NULL, NULL);
break;
}
}
else
- status = mr_query("update_list", 14, argv, NULL, NULL);
+ status = mr_query("update_list", 16, argv, NULL, NULL);
if (status)
{
fprintf(stderr, "Usage: %s listname [options]\n", argv[0]);
fprintf(stderr, "Options are\n");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-v | -verbose",
- "-C | -create");
+ "-C | -create");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-m | -members",
- "-R | -rename newname");
+ "-R | -rename newname");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-u | -users",
- "-P | -public");
+ "-P | -public");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-l | -lists",
- "-NP | -private");
+ "-NP | -private");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-s | -strings",
- "-A | -active");
+ "-A | -active");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-k | -kerberos",
- "-I | -inactive");
+ "-I | -inactive");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-i | -info",
- "-V | -visible");
+ "-V | -visible");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-r | -recursive",
- "-H | -hidden");
+ "-H | -hidden");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-a | -add member",
- "-M | -mail");
+ "-M | -mail");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-d | -delete member",
- "-NM | -notmail");
+ "-NM | -notmail");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-al | -addlist filename",
- "-G | -group");
+ "-G | -group");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-dl | -deletelist filename",
- "-NG | -notgroup");
+ "-NG | -notgroup");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-f | -file filename",
- "-N | -nfs");
+ "-N | -nfs");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-at | -addtagged member tag",
- "-NN | -notnfs");
+ "-NN | -notnfs");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-ct | -changetag member tag",
- "-D | -desc description");
+ "-mm | -mailman");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-t | -tags",
- "-O | -owner owner");
+ "-nmm | -notmailman");
+ fprintf(stderr, USAGE_OPTIONS_FORMAT, "-D | -desc description",
+ "-ms | -mailman_server server");
+ fprintf(stderr, USAGE_OPTIONS_FORMAT, "-O | -owner owner",
+ "-MA | -memacl membership_acl");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-n | -noauth",
- "-MA | -memacl membership_acl");
- fprintf(stderr, USAGE_OPTIONS_FORMAT, "-db | -database host[:port]",
- "");
+ "-db | -database host[:port]");
exit(1);
}
}
else
printf("\n");
+ if (atoi(argv[L_MAILMAN]))
+ printf("%s is a Mailman list on server %s\n", argv[L_NAME],
+ argv[L_MAILMAN_SERVER]);
printf("Owner: %s %s\n", argv[L_ACE_TYPE], argv[L_ACE_NAME]);
if (strcmp(argv[L_MEMACE_TYPE], "NONE"))
printf("Membership ACL: %s %s\n", argv[L_MEMACE_TYPE],
{
char **nargv = hint;
- for (argc = 0; argc < 14; argc++)
+ for (argc = 0; argc < 16; argc++)
nargv[argc + 1] = strdup(argv[argc]);
return MR_CONT;
}
#define GLOM 2
#define ACE_USE 3
-#define DEFAULT_ACTIVE DEFAULT_YES
-#define DEFAULT_PUBLIC DEFAULT_YES
-#define DEFAULT_HIDDEN DEFAULT_NO
-#define DEFAULT_MAILLIST DEFAULT_YES
-#define DEFAULT_GROUP DEFAULT_NO
-#define DEFAULT_GID UNIQUE_GID
-#define DEFAULT_NFSGROUP DEFAULT_NO
-#define DEFAULT_ACE_TYPE "user"
-#define DEFAULT_ACE_NAME (user)
-#define DEFAULT_MEMACE_TYPE "NONE"
-#define DEFAULT_MEMACE_NAME "NONE"
-#define DEFAULT_DESCRIPTION DEFAULT_COMMENT
+#define DEFAULT_ACTIVE DEFAULT_YES
+#define DEFAULT_PUBLIC DEFAULT_YES
+#define DEFAULT_HIDDEN DEFAULT_NO
+#define DEFAULT_MAILLIST DEFAULT_YES
+#define DEFAULT_GROUP DEFAULT_NO
+#define DEFAULT_GID UNIQUE_GID
+#define DEFAULT_NFSGROUP DEFAULT_NO
+#define DEFAULT_MAILMAN DEFAULT_NO
+#define DEFAULT_MAILMAN_SERVER "[ANY]"
+#define DEFAULT_ACE_TYPE "user"
+#define DEFAULT_ACE_NAME (user)
+#define DEFAULT_MEMACE_TYPE "NONE"
+#define DEFAULT_MEMACE_NAME "NONE"
+#define DEFAULT_DESCRIPTION DEFAULT_COMMENT
/* globals only for this file. */
else
Put_message("This list is NOT a Group.");
+ if (atoi(info[L_MAILMAN]))
+ {
+ sprintf(buf, "This list is a Mailman list on server %s",
+ info[L_MAILMAN_SERVER]);
+ Put_message(buf);
+ }
+
if (!strcmp(info[L_ACE_TYPE], "NONE"))
Put_message("This list has no Administrator, how strange?!");
else
return NULL;
}
+ if (GetYesNoValueFromUser("Is this a Mailman list", &info[L_MAILMAN]) ==
+ SUB_ERROR)
+ return NULL;
+ if (atoi(info[L_MAILMAN]))
+ {
+ if (GetValueFromUser("Mailman server", &info[L_MAILMAN_SERVER]) ==
+ SUB_ERROR)
+ return NULL;
+ info[L_MAILMAN_SERVER] = canonicalize_hostname(info[L_MAILMAN_SERVER]);
+ }
+
do {
if (GetTypeFromUser("What Type of Administrator", "ace_type",
&info[L_ACE_TYPE]) == SUB_ERROR)
info[L_GROUP] = strdup(DEFAULT_GROUP);
info[L_GID] = strdup(DEFAULT_GID);
info[L_NFSGROUP] = strdup(DEFAULT_NFSGROUP);
+ info[L_MAILMAN] = strdup(DEFAULT_MAILMAN);
+ info[L_MAILMAN_SERVER] = strdup(DEFAULT_MAILMAN_SERVER);
info[L_ACE_TYPE] = strdup(DEFAULT_ACE_TYPE);
info[L_ACE_NAME] = strdup(DEFAULT_ACE_NAME);
info[L_MEMACE_TYPE] = strdup(DEFAULT_MEMACE_TYPE);