[1625] in Moira
blanche changes, membership acls
daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Mon Aug 7 04:57:33 2000
Message-Id: <200008070857.EAA16791@alice-whacker.mit.edu>
To: moiradev@MIT.EDU
Date: Mon, 07 Aug 2000 04:57:30 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>
Part 3 of 4, this time implementing client support for
membership acls in blanche.
Garry
Index: blanche.c
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/clients/blanche/blanche.c,v
retrieving revision 1.47
diff -c -r1.47 blanche.c
*** blanche.c 2000/07/16 23:02:31 1.47
--- blanche.c 2000/08/07 08:31:56
***************
*** 34,39 ****
--- 34,41 ----
#define M_STRING 3
#define M_KERBEROS 4
+ char *typename[] = { "ANY", "USER", "LIST", "STRING", "KERBEROS" };
+
/* argument parsing macro */
#define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
***************
*** 42,48 ****
int showusers, showstrings, showkerberos, showlists, showtags;
int createflag, setinfo, active, public, hidden, maillist, grouplist;
int nfsgroup;
! struct member *owner;
char *desc, *newname;
/* various member lists */
--- 44,50 ----
int showusers, showstrings, showkerberos, showlists, showtags;
int createflag, setinfo, active, public, hidden, maillist, grouplist;
int nfsgroup;
! struct member *owner, *memacl;
char *desc, *newname;
/* various member lists */
***************
*** 80,85 ****
--- 82,88 ----
active = public = hidden = maillist = grouplist = nfsgroup = -1;
listname = newname = desc = NULL;
owner = NULL;
+ memacl = NULL;
addlist = sq_create();
dellist = sq_create();
memberlist = sq_create();
***************
*** 285,290 ****
--- 288,304 ----
else
usage(argv);
}
+ else if (argis("MA", "memacl"))
+ {
+ if (arg - argv < argc -1)
+ {
+ setinfo++;
+ ++arg;
+ memacl = parse_member(*arg);
+ }
+ else
+ usage(argv);
+ }
else if (argis("R", "rename"))
{
if (arg - argv < argc - 1)
***************
*** 318,324 ****
showusers = showstrings = showlists = showkerberos = 1;
/* fire up Moira */
! status = mrcl_connect(server, "blanche", 3, !noauth);
if (status == MRCL_AUTH_ERROR)
{
com_err(whoami, 0, "Try the -noauth flag if you don't "
--- 332,338 ----
showusers = showstrings = showlists = showkerberos = 1;
/* fire up Moira */
! status = mrcl_connect(server, "blanche", 4, !noauth);
if (status == MRCL_AUTH_ERROR)
{
com_err(whoami, 0, "Try the -noauth flag if you don't "
***************
*** 340,346 ****
/* create if needed */
if (createflag)
{
! char *argv[11];
argv[L_NAME] = listname;
argv[L_ACTIVE] = (active == 0) ? "0" : "1";
--- 354,360 ----
/* create if needed */
if (createflag)
{
! char *argv[13];
argv[L_NAME] = listname;
argv[L_ACTIVE] = (active == 0) ? "0" : "1";
***************
*** 352,357 ****
--- 366,388 ----
argv[L_NFSGROUP] = (nfsgroup == 1) ? "1" : "0";
argv[L_DESC] = desc ? desc : "none";
+ if (memacl)
+ {
+ if (memacl->type == M_ANY)
+ {
+ status = mr_query("get_user_account_by_login", 1,
+ &memacl->name, NULL, NULL);
+ if (status == MR_NO_MATCH)
+ memacl->type = M_LIST;
+ else
+ memacl->type = M_USER;
+ }
+ argv[L_MEMACE_TYPE] = typename[memacl->type];
+ argv[L_MEMACE_NAME] = memacl->name;
+ }
+ else
+ argv[L_MEMACE_TYPE] = argv[L_MEMACE_NAME] = "NONE";
+
if (owner)
{
argv[L_ACE_NAME] = owner->name;
***************
*** 360,377 ****
case M_ANY:
case M_USER:
argv[L_ACE_TYPE] = "USER";
! status = mr_query("add_list", 11, 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", 11, argv, NULL, NULL);
break;
case M_KERBEROS:
argv[L_ACE_TYPE] = "KERBEROS";
! status = mr_query("add_list", 11, argv, NULL, NULL);
break;
}
}
--- 391,408 ----
case M_ANY:
case M_USER:
argv[L_ACE_TYPE] = "USER";
! status = mr_query("add_list", 13, 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);
break;
case M_KERBEROS:
argv[L_ACE_TYPE] = "KERBEROS";
! status = mr_query("add_list", 13, argv, NULL, NULL);
break;
}
}
***************
*** 380,386 ****
argv[L_ACE_TYPE] = "USER";
argv[L_ACE_NAME] = get_username();
! status = mr_query("add_list", 11, argv, NULL, NULL);
}
if (status)
--- 411,417 ----
argv[L_ACE_TYPE] = "USER";
argv[L_ACE_NAME] = get_username();
! status = mr_query("add_list", 13, argv, NULL, NULL);
}
if (status)
***************
*** 391,397 ****
}
else if (setinfo)
{
! char *argv[12];
status = mr_query("get_list_info", 1, &listname,
save_list_info, argv);
--- 422,428 ----
}
else if (setinfo)
{
! char *argv[14];
status = mr_query("get_list_info", 1, &listname,
save_list_info, argv);
***************
*** 419,424 ****
--- 450,472 ----
if (desc)
argv[L_DESC + 1] = desc;
+ if (memacl)
+ {
+ if (memacl->type == M_ANY)
+ {
+ status = mr_query("get_user_account_by_login", 1,
+ &memacl->name, NULL, NULL);
+ if (status == MR_NO_MATCH)
+ memacl->type = M_LIST;
+ else
+ memacl->type = M_USER;
+ }
+ argv[L_MEMACE_TYPE + 1] = typename[memacl->type];
+ argv[L_MEMACE_NAME + 1] = memacl->name;
+ }
+ else
+ argv[L_MEMACE_TYPE + 1] = argv[L_MEMACE_NAME + 1] = "NONE";
+
if (owner)
{
argv[L_ACE_NAME + 1] = owner->name;
***************
*** 427,449 ****
case M_ANY:
case M_USER:
argv[L_ACE_TYPE + 1] = "USER";
! status = mr_query("update_list", 12, 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", 12, argv, NULL, NULL);
break;
case M_KERBEROS:
argv[L_ACE_TYPE + 1] = "KERBEROS";
! status = mr_query("update_list", 12, argv, NULL, NULL);
break;
}
}
else
! status = mr_query("update_list", 12, argv, NULL, NULL);
if (status)
{
--- 475,497 ----
case M_ANY:
case M_USER:
argv[L_ACE_TYPE + 1] = "USER";
! status = mr_query("update_list", 14, 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);
break;
case M_KERBEROS:
argv[L_ACE_TYPE + 1] = "KERBEROS";
! status = mr_query("update_list", 14, argv, NULL, NULL);
break;
}
}
else
! status = mr_query("update_list", 14, argv, NULL, NULL);
if (status)
{
--- 903,908 ----
***************
*** 877,883 ****
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-t | -tags",
"-O | -owner owner");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-n | -noauth",
! "-db | -database host[:port]");
exit(1);
}
--- 964,972 ----
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-t | -tags",
"-O | -owner owner");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-n | -noauth",
! "-MA | -memacl membership_acl");
! fprintf(stderr, USAGE_OPTIONS_FORMAT, "-db | -database host[:port]",
! "");
exit(1);
}
***************
*** 958,963 ****
--- 1047,1055 ----
else
printf("\n");
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],
+ argv[L_MEMACE_NAME]);
printf("Last modified by %s with %s on %s\n",
argv[L_MODBY], argv[L_MODWITH], argv[L_MODTIME]);
return MR_CONT;