[2019] in Moira Commits

home help back first fref pref prev next nref lref last post

/svn/moira r4160 - in trunk/moira: clients/addusr clients/blanche clients/lib clients/mitch clients/stanley clients/stella include

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Tue Apr 22 11:51:11 2014

Date: Tue, 22 Apr 2014 11:51:03 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>
Message-Id: <201404221551.s3MFp3i0026280@drugstore.mit.edu>
To: moira-commits@MIT.EDU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Author: zacheiss
Date: 2014-04-22 11:51:03 -0400 (Tue, 22 Apr 2014)
New Revision: 4160

Modified:
   trunk/moira/clients/addusr/addusr.c
   trunk/moira/clients/blanche/blanche.c
   trunk/moira/clients/lib/member.c
   trunk/moira/clients/mitch/mitch.c
   trunk/moira/clients/stanley/stanley.c
   trunk/moira/clients/stella/stella.c
   trunk/moira/include/mrclient.h
Log:
Move parse_member() into libmrclient.

Modified: trunk/moira/clients/addusr/addusr.c
===================================================================
--- trunk/moira/clients/addusr/addusr.c	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/clients/addusr/addusr.c	2014-04-22 15:51:03 UTC (rev 4160)
@@ -21,17 +21,6 @@
 
 RCSID("$HeadURL$ $Id$");
 
-struct owner_type {
-  int type;
-  char *name;
-};
-
-#define M_ANY		0
-#define M_USER		1
-#define M_LIST		2
-#define M_KERBEROS	3
-#define M_NONE		4
-
 #ifdef ATHENA
 #define DEFAULT_SHELL "/bin/athena/bash"
 #else
@@ -46,7 +35,7 @@
 char *class, *comment, *status_str, *shell, *winconsoleshell, *filename;
 char *expiration;
 int reg_only, reg, verbose, nodupcheck, securereg, nocaps;
-struct owner_type *sponsor;
+struct mrcl_ace_type *sponsor;
 
 /* argument parsing macro */
 #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
@@ -57,7 +46,6 @@
 void usage(char **argv);
 int usercheck(int argc, char **argv, void *qargv);
 int get_uid(int argc, char **argv, void *qargv);
-struct owner_type *parse_member(char *s);
 
 int main(int argc, char **argv)
 {
@@ -74,7 +62,7 @@
   filename = "-";
   shell = DEFAULT_SHELL;
   winconsoleshell = DEFAULT_WINCONSOLESHELL;
-  class = "TEMP";
+  class = "TEST";
   comment = "";
   expiration = "";
   status_str = "0";
@@ -141,8 +129,8 @@
 	      if (arg - argv < argc - 1)
 		{
 		  ++arg;
-		  sponsor = parse_member(*arg);
-		  if (!sponsor)
+		  sponsor = mrcl_parse_member(*arg);
+		  if (!sponsor || sponsor->type == MRCL_M_STRING || sponsor->type == MRCL_M_MACHINE)
 		    {
 		      com_err(whoami, 0, "Invalid sponsor format. Must be one of USER, LIST, KERBEROS, or NONE.");
 		      exit(1);
@@ -349,19 +337,19 @@
 	      qargv[U_SPONSOR_NAME] = sponsor->name;
 	      switch (sponsor->type)
 		{
-		case M_ANY:
-		case M_USER:
+		case MRCL_M_ANY:
+		case MRCL_M_USER:
 		  qargv[U_SPONSOR_TYPE] = "USER";
 		  status = mr_query("add_user_account", 20, qargv, NULL, NULL);
-		  if (sponsor->type != M_ANY || status != MR_USER)
+		  if (sponsor->type != MRCL_M_ANY || status != MR_USER)
 		    break;
 		  
-		case M_LIST:
+		case MRCL_M_LIST:
 		  qargv[U_SPONSOR_TYPE] = "LIST";
 		  status = mr_query("add_user_account", 20, qargv, NULL, NULL);
 		  break;
 		  
-		case M_KERBEROS:
+		case MRCL_M_KERBEROS:
 		  qargv[U_SPONSOR_TYPE] = "KERBEROS";
 		  status = mrcl_validate_kerberos_member(qargv[U_SPONSOR_NAME],
 							 &qargv[U_SPONSOR_NAME]);
@@ -372,7 +360,7 @@
 		  status = mr_query("add_user_account", 20, qargv, NULL, NULL);
 		  break;
 		  
-		case M_NONE:
+		case MRCL_M_NONE:
 		  qargv[U_SPONSOR_TYPE] = "NONE";
 		  status = mr_query("add_user_account", 20, qargv, NULL, NULL);
 		  break;
@@ -488,57 +476,3 @@
 
   return MR_CONT;
 }
-
-/* Parse a line of input, fetching a member.  NULL is returned if a member
- * is not found.  ';' is a comment character.
- */
-struct owner_type *parse_member(char *s)
-{
-  struct owner_type *m;
-  char *p, *lastchar;
-
-  while (*s && isspace(*s))
-    s++;
-  lastchar = p = s;
-  while (*p && *p != '\n' && *p != ';')
-    {
-      if (isprint(*p) && !isspace(*p))
-	lastchar = p++;
-      else
-	p++;
-    }
-  lastchar++;
-  *lastchar = '\0';
-  if (p == s || strlen(s) == 0)
-    return NULL;
-
-  if (!(m = malloc(sizeof(struct owner_type))))
-    return NULL;
-
-  if ((p = strchr(s, ':')))
-    {
-      *p = '\0';
-      m->name = ++p;
-      if (!strcasecmp("user", s))
-	m->type = M_USER;
-      else if (!strcasecmp("list", s))
-	m->type = M_LIST;
-      else if (!strcasecmp("kerberos", s))
-	m->type = M_KERBEROS;
-      else if (!strcasecmp("none", s))
-	m->type = M_NONE;
-      else
-	{
-	  m->type = M_ANY;
-	  *(--p) = ':';
-	  m->name = s;
-	}
-      m->name = strdup(m->name);
-    }
-  else
-    {
-      m->name = strdup(s);
-      m->type = strcasecmp(s, "none") ? M_ANY : M_NONE;
-    }
-  return m;
-}

Modified: trunk/moira/clients/blanche/blanche.c
===================================================================
--- trunk/moira/clients/blanche/blanche.c	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/clients/blanche/blanche.c	2014-04-22 15:51:03 UTC (rev 4160)
@@ -22,23 +22,6 @@
 
 RCSID("$HeadURL$ $Id$");
 
-struct member {
-  int type;
-  char *name, *tag;
-};
-
-/* It is important to membercmp that M_USER < M_LIST < M_STRING */
-#define M_ANY		0
-#define M_USER		1
-#define M_LIST		2
-#define M_STRING	3
-#define M_KERBEROS	4
-#define M_MACHINE       5
-#define M_NONE		6
-
-char *typename[] = { "ANY", "USER", "LIST", "STRING", "KERBEROS", "MACHINE",
-		     "NONE" };
-
 /* argument parsing macro */
 #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
 
@@ -47,7 +30,7 @@
 int showusers, showstrings, showkerberos, showlists, showtags, showmachines;
 int createflag, setinfo, active, public, hidden, maillist, grouplist;
 int nfsgroup, mailman;
-struct member *owner, *memacl;
+struct mrcl_ace_type *owner, *memacl;
 char *desc, *newname, *mailman_server, *gid;
 
 /* various member lists */
@@ -56,16 +39,15 @@
 char *listname, *whoami;
 
 void usage(char **argv);
-void show_list_member(struct member *memberstruct);
+void show_list_member(struct mrcl_ace_type *memberstruct);
 int show_list_info(int argc, char **argv, void *hint);
 int save_list_info(int argc, char **argv, void *hint);
 int show_list_count(int argc, char **argv, void *hint);
 void recursive_display_list_members(void);
-void unique_add_member(struct save_queue *q, struct member *m);
+void unique_add_member(struct save_queue *q, struct mrcl_ace_type *m);
 int get_list_members(int argc, char **argv, void *sq);
 void get_members_from_file(char *filename, struct save_queue *queue);
 int collect(int argc, char **argv, void *l);
-struct member *parse_member(char *s);
 int membercmp(const void *mem1, const void *mem2);
 int sq_count_elts(struct save_queue *q);
 char *get_username(void);
@@ -75,7 +57,7 @@
   int status, success;
   char **arg = argv;
   char *membervec[4];
-  struct member *memberstruct;
+  struct mrcl_ace_type *memberstruct;
   char *server = NULL, *p;
 
   /* clear all flags & lists */
@@ -135,7 +117,7 @@
 	      if (arg - argv < argc - 1)
 		{
 		  ++arg;
-		  memberstruct = parse_member(*arg);
+		  memberstruct = mrcl_parse_member(*arg);
 		  if (memberstruct)
 		    sq_save_data(addlist, memberstruct);
 		  else 
@@ -149,7 +131,7 @@
 	      if (arg - argv < argc - 2)
 		{
 		  ++arg;
-		  memberstruct = parse_member(*arg);
+		  memberstruct = mrcl_parse_member(*arg);
 		  if (memberstruct)
 		    {
 		      sq_save_data(addlist, memberstruct);
@@ -176,7 +158,7 @@
 	      if (arg - argv < argc - 1)
 		{
 		  ++arg;
-		  memberstruct = parse_member(*arg);
+		  memberstruct = mrcl_parse_member(*arg);
 		  if (memberstruct)
 		    sq_save_data(dellist, memberstruct);
 		  else
@@ -211,7 +193,7 @@
 	      if (arg - argv < argc - 2)
 		{
 		  ++arg;
-		  memberstruct = parse_member(*arg);
+		  memberstruct = mrcl_parse_member(*arg);
 		  if (memberstruct)
 		    {
 		      sq_save_data(taglist, memberstruct);
@@ -323,8 +305,8 @@
 		{
 		  setinfo++;
 		  ++arg;
-		  owner = parse_member(*arg);
-		  if (!owner)
+		  owner = mrcl_parse_member(*arg);
+		  if (!owner || owner->type == MRCL_M_STRING || owner->type == MRCL_M_MACHINE)
 		    {
 		      com_err(whoami, 0, "Invalid owner format.  Must be one of USER, LIST, KERBEROS, or NONE.");
 		      exit(1);
@@ -339,8 +321,8 @@
 		{
 		  setinfo++;
 		  ++arg;
-		  memacl = parse_member(*arg);
-		  if (!memacl)
+		  memacl = mrcl_parse_member(*arg);
+		  if (!memacl || memacl->type == MRCL_M_STRING || memacl->type == MRCL_M_MACHINE)
 		    {
 		      com_err(whoami, 0, "Invalid memacl format.  Must be one of USER, LIST, KERBEROS, or NONE.");
 		      exit(1);
@@ -443,25 +425,39 @@
 
       if (memacl)
 	{
-	  if (memacl->type == M_ANY)
+	  argv[L_MEMACE_NAME] = memacl->name;
+	  switch (memacl->type)
 	    {
+	    case MRCL_M_ANY:
 	      status = mr_query("get_user_account_by_login", 1,
 				&memacl->name, NULL, NULL);
 	      if (status == MR_NO_MATCH)
-		memacl->type = M_LIST;
+		argv[L_MEMACE_TYPE] = "LIST";
 	      else
-		memacl->type = M_USER;
-	    }
-	  argv[L_MEMACE_TYPE] = typename[memacl->type];
-	  argv[L_MEMACE_NAME] = memacl->name;
-	  if (memacl->type == M_KERBEROS)
-	    {
+		argv[L_MEMACE_TYPE] = "USER";
+	      break;
+
+	    case MRCL_M_USER:
+	      argv[L_MEMACE_TYPE] = "USER";
+	      break;
+
+	    case MRCL_M_LIST:
+	      argv[L_MEMACE_TYPE] = "LIST";
+	      break;
+
+	    case MRCL_M_KERBEROS:
 	      status = mrcl_validate_kerberos_member(argv[L_MEMACE_NAME],
 						     &argv[L_MEMACE_NAME]);
 	      if (mrcl_get_message())
 		mrcl_com_err(whoami);
 	      if (status == MRCL_REJECT)
 		exit(1);
+	      argv[L_MEMACE_TYPE] = "KERBEROS";
+	      break;
+
+	    case MRCL_M_NONE:
+	      argv[L_MEMACE_TYPE] = argv[L_MEMACE_NAME] = "NONE";
+	      break;
 	    }
 	}
       else 
@@ -472,19 +468,19 @@
 	  argv[L_ACE_NAME] = owner->name;
 	  switch (owner->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[L_ACE_TYPE] = "USER";
 	      status = mr_query("add_list", 15, argv, NULL, NULL);
-	      if (owner->type != M_ANY || status != MR_USER)
+	      if (owner->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[L_ACE_TYPE] = "LIST";
 	      status = mr_query("add_list", 15, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[L_ACE_TYPE] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[L_ACE_NAME], 
 						     &argv[L_ACE_NAME]);
@@ -494,7 +490,7 @@
 		exit(1);
 	      status = mr_query("add_list", 15, argv, NULL, NULL);
 	      break;
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[L_ACE_TYPE] = argv[L_ACE_NAME] = "NONE";
 	      status = mr_query("add_list", 15, argv, NULL, NULL);
 	      break;
@@ -559,25 +555,38 @@
 
       if (memacl)
 	{
-	  if (memacl->type == M_ANY)
+	  argv[L_MEMACE_NAME + 1] = memacl->name;
+	  switch (memacl->type)
 	    {
+	    case MRCL_M_ANY:
 	      status = mr_query("get_user_account_by_login", 1,
 				&memacl->name, NULL, NULL);
 	      if (status == MR_NO_MATCH)
-		memacl->type = M_LIST;
+		argv[L_MEMACE_TYPE + 1] = "LIST";
 	      else
-		memacl->type = M_USER;
-	    }
-	  argv[L_MEMACE_TYPE + 1] = typename[memacl->type];
-	  argv[L_MEMACE_NAME + 1] = memacl->name;
-	  if (memacl->type == M_KERBEROS)
-	    {
+		argv[L_MEMACE_TYPE + 1] = "USER";
+	      break;
+
+	    case MRCL_M_USER:
+	      argv[L_MEMACE_TYPE + 1] = "USER";
+	      break;
+
+	    case MRCL_M_LIST:
+	      argv[L_MEMACE_TYPE + 1] = "LIST";
+	      break;
+
+	    case MRCL_M_KERBEROS:
 	      status = mrcl_validate_kerberos_member(argv[L_MEMACE_NAME + 1],
 						     &argv[L_MEMACE_NAME + 1]);
 	      if (mrcl_get_message())
 		mrcl_com_err(whoami);
 	      if (status == MRCL_REJECT)
 		exit(1);
+	      argv[L_MEMACE_TYPE + 1] = "KERBEROS";
+	      break;
+
+	    case MRCL_M_NONE:
+	      argv[L_MEMACE_TYPE + 1] = argv[L_MEMACE_NAME + 1] = "NONE";
 	    }
 	}
 
@@ -586,19 +595,19 @@
 	  argv[L_ACE_NAME + 1] = owner->name;
 	  switch (owner->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[L_ACE_TYPE + 1] = "USER";
 	      status = mr_query("update_list", 16, argv, NULL, NULL);
-	      if (owner->type != M_ANY || status != MR_USER)
+	      if (owner->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[L_ACE_TYPE + 1] = "LIST";
 	      status = mr_query("update_list", 16, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[L_ACE_TYPE + 1] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[L_ACE_NAME + 1],
 						     &argv[L_ACE_NAME + 1]);
@@ -608,7 +617,7 @@
 		exit(1);
 	      status = mr_query("update_list", 16, argv, NULL, NULL);
 	      break;
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[L_ACE_TYPE + 1] = argv[L_ACE_NAME + 1] = "NONE";
 	      status = mr_query("update_list", 16, argv, NULL, NULL);
 	      break;
@@ -700,34 +709,34 @@
         }
       switch (memberstruct->type)
         {
-        case M_ANY:
-        case M_USER:
+        case MRCL_M_ANY:
+        case MRCL_M_USER:
           membervec[1] = "USER";
           status = mr_query("delete_member_from_list", 3, membervec,
                             NULL, NULL);
           if (status == MR_SUCCESS)
             break;
           else if ((status != MR_USER && status != MR_NO_MATCH) ||
-                   memberstruct->type != M_ANY)
+                   memberstruct->type != MRCL_M_ANY)
             {
               com_err(whoami, status, "while deleting member %s from %s",
                       memberstruct->name, listname);
               success = 0;
               break;
             }
-        case M_LIST:
+        case MRCL_M_LIST:
           membervec[1] = "LIST";
           status = mr_query("delete_member_from_list", 3, membervec,
                             NULL, NULL);
           if (status == MR_SUCCESS)
             break;
           else if ((status != MR_LIST && status != MR_NO_MATCH) ||
-                   memberstruct->type != M_ANY)
+                   memberstruct->type != MRCL_M_ANY)
             {
-              if (status == MR_PERM && memberstruct->type == M_ANY &&
+              if (status == MR_PERM && memberstruct->type == MRCL_M_ANY &&
                   !strcmp(membervec[2], get_username()))
                 {
-		  /* M_ANY means we've fallen through from the user
+		  /* MRCL_M_ANY means we've fallen through from the user
                    * case. The user is trying to remove himself from a
                    * list, but we got MR_USER or MR_NO_MATCH above,
                    * meaning he's not really on it, and we got MR_PERM
@@ -746,11 +755,11 @@
               success = 0;
               break;
             }
-        case M_STRING:
+        case MRCL_M_STRING:
           membervec[1] = "STRING";
           status = mr_query("delete_member_from_list", 3, membervec,
                             NULL, NULL);
-          if (status == MR_STRING && memberstruct->type == M_ANY)
+          if (status == MR_STRING && memberstruct->type == MRCL_M_ANY)
             {
               com_err(whoami, 0, " Unable to find member %s to delete from %s",
                       memberstruct->name, listname);
@@ -770,7 +779,7 @@
               success = 0;
             }
           break;
-        case M_KERBEROS:
+        case MRCL_M_KERBEROS:
           membervec[1] = "KERBEROS";
           status = mr_query("delete_member_from_list", 3, membervec,
                             NULL, NULL);
@@ -797,7 +806,7 @@
               success = 0;
             }
           break;
-        case M_MACHINE:
+        case MRCL_M_MACHINE:
           membervec[1] = "MACHINE";
           membervec[2] = canonicalize_hostname(memberstruct->name);
           status = mr_query("delete_member_from_list", 3, membervec,
@@ -816,7 +825,7 @@
   while (sq_get_data(addlist, &memberstruct))
     {
       /* canonicalize string if necessary */
-      if (memberstruct->type != M_KERBEROS &&
+      if (memberstruct->type != MRCL_M_KERBEROS &&
 	  (p = strchr(memberstruct->name, '@')))
 	{
 	  char *host = canonicalize_hostname(strdup(++p));
@@ -846,8 +855,8 @@
 		{
 		  host = strdup(memberstruct->name);
 		  *(strchr(memberstruct->name, '@')) = 0;
-		  if (memberstruct->type == M_STRING)
-		      memberstruct->type = M_ANY;
+		  if (memberstruct->type == MRCL_M_STRING)
+		      memberstruct->type = MRCL_M_ANY;
 		  fprintf(stderr, "Warning: \"%s\" converted to "
 			  "\"%s\" because it is a local name.\n",
 			  host, memberstruct->name);
@@ -867,21 +876,21 @@
 	}
       switch (memberstruct->type)
 	{
-	case M_ANY:
-	case M_USER:
+	case MRCL_M_ANY:
+	case MRCL_M_USER:
 	  membervec[1] = "USER";
 	  status = mr_query("add_tagged_member_to_list", 4, membervec,
 			    NULL, NULL);
 	  if (status == MR_SUCCESS)
 	    break;
-	  else if (status != MR_USER || memberstruct->type != M_ANY)
+	  else if (status != MR_USER || memberstruct->type != MRCL_M_ANY)
 	    {
 	      com_err(whoami, status, "while adding member %s to %s",
 		      memberstruct->name, listname);
 	      success = 0;
 	      break;
 	    }
-	case M_LIST:
+	case MRCL_M_LIST:
 	  membervec[1] = "LIST";
 	  status = mr_query("add_tagged_member_to_list", 4, membervec,
 			    NULL, NULL);
@@ -900,16 +909,16 @@
 		}
 	      break;
 	    }
-	  else if (status != MR_LIST || memberstruct->type != M_ANY)
+	  else if (status != MR_LIST || memberstruct->type != MRCL_M_ANY)
 	    {
 	      com_err(whoami, status, "while adding member %s to %s",
 		      memberstruct->name, listname);
 	      success = 0;
 	      break;
 	    }
-	case M_STRING:
+	case MRCL_M_STRING:
 	  status = mrcl_validate_string_member(memberstruct->name);
-	  if (memberstruct->type == M_ANY && status == MRCL_WARN)
+	  if (memberstruct->type == MRCL_M_ANY && status == MRCL_WARN)
 	    {
 	      /* if user is trying to add something which isn't a
 		 remote string, or a list, or a user, and didn't
@@ -938,7 +947,7 @@
 	      success = 0;
 	    }
 	  break;
-	case M_KERBEROS:
+	case MRCL_M_KERBEROS:
 	  membervec[1] = "KERBEROS";
 	  status = mrcl_validate_kerberos_member(membervec[2], &membervec[2]);
 	  if (mrcl_get_message())
@@ -958,7 +967,7 @@
 	    }
 	  free(membervec[2]);
 	  break;
-	case M_MACHINE:
+	case MRCL_M_MACHINE:
 	  membervec[1] = "MACHINE";
 	  membervec[2] = canonicalize_hostname(strdup(memberstruct->name));
 	  status = mr_query("add_tagged_member_to_list", 4, membervec,
@@ -986,40 +995,40 @@
 	}
       switch (memberstruct->type)
 	{
-	case M_ANY:
-	case M_USER:
+	case MRCL_M_ANY:
+	case MRCL_M_USER:
 	  membervec[1] = "USER";
 	  status = mr_query("tag_member_of_list", 4, membervec,
 			    NULL, NULL);
 	  if (status == MR_SUCCESS)
 	    break;
 	  else if ((status != MR_USER && status != MR_NO_MATCH) ||
-		   memberstruct->type != M_ANY)
+		   memberstruct->type != MRCL_M_ANY)
 	    {
 	      com_err(whoami, status, "while changing tag on member %s of %s",
 		      memberstruct->name, listname);
 	      success = 0;
 	      break;
 	    }
-	case M_LIST:
+	case MRCL_M_LIST:
 	  membervec[1] = "LIST";
 	  status = mr_query("tag_member_of_list", 4, membervec,
 			    NULL, NULL);
 	  if (status == MR_SUCCESS)
 	    break;
 	  else if ((status != MR_LIST && status != MR_NO_MATCH) ||
-		   memberstruct->type != M_ANY)
+		   memberstruct->type != MRCL_M_ANY)
 	    {
 	      com_err(whoami, status, "while changing tag on member %s of %s",
 		      memberstruct->name, listname);
 	      success = 0;
 	      break;
 	    }
-	case M_STRING:
+	case MRCL_M_STRING:
 	  membervec[1] = "STRING";
 	  status = mr_query("tag_member_of_list", 4, membervec,
 			    NULL, NULL);
-	  if (status == MR_STRING && memberstruct->type == M_ANY)
+	  if (status == MR_STRING && memberstruct->type == MRCL_M_ANY)
 	    {
 	      com_err(whoami, 0, " Unable to find member %s on list %s",
 		      memberstruct->name, listname);
@@ -1032,7 +1041,7 @@
 	      success = 0;
 	    }
 	  break;
-	case M_KERBEROS:
+	case MRCL_M_KERBEROS:
 	  membervec[1] = "KERBEROS";
 	  status = mr_query("tag_member_of_list", 4, membervec,
 			    NULL, NULL);
@@ -1058,7 +1067,7 @@
 		      memberstruct->name, listname);
 	      success = 0;
 	    }
-	case M_MACHINE:
+	case MRCL_M_MACHINE:
 	  membervec[1] = "MACHINE";
 	  status = mr_query("tag_member_of_list", 4, membervec,
 			    NULL, NULL);
@@ -1143,38 +1152,38 @@
 
 /* Display the members stored in the queue */
 
-void show_list_member(struct member *memberstruct)
+void show_list_member(struct mrcl_ace_type *memberstruct)
 {
   char *s = "";
 
   switch (memberstruct->type)
     {
-    case M_USER:
+    case MRCL_M_USER:
       if (!showusers)
 	return;
       s = "USER";
       break;
-    case M_LIST:
+    case MRCL_M_LIST:
       if (!showlists)
 	return;
       s = "LIST";
       break;
-    case M_STRING:
+    case MRCL_M_STRING:
       if (!showstrings)
 	return;
       s = "STRING";
       break;
-    case M_KERBEROS:
+    case MRCL_M_KERBEROS:
       if (!showkerberos)
 	return;
       s = "KERBEROS";
       break;
-    case M_MACHINE:
+    case MRCL_M_MACHINE:
       if (!showmachines)
 	return;
       s = "MACHINE";
       break;
-    case M_ANY:
+    case MRCL_M_ANY:
       printf("%s\n", memberstruct->name);
       return;
     }
@@ -1183,14 +1192,14 @@
     printf("%s:%s", s, memberstruct->name);
   else
     {
-      if (memberstruct->type == M_LIST)
+      if (memberstruct->type == MRCL_M_LIST)
 	printf("LIST:%s", memberstruct->name);
-      else if (memberstruct->type == M_KERBEROS)
+      else if (memberstruct->type == MRCL_M_KERBEROS)
 	printf("KERBEROS:%s", memberstruct->name);
-      else if (memberstruct->type == M_STRING &&
+      else if (memberstruct->type == MRCL_M_STRING &&
 	       !strchr(memberstruct->name, '@'))
 	printf("STRING:%s", memberstruct->name);
-      else if (memberstruct->type == M_MACHINE)
+      else if (memberstruct->type == MRCL_M_MACHINE)
 	printf("MACHINE:%s", memberstruct->name);
       else
 	printf("%s", memberstruct->name);
@@ -1262,12 +1271,12 @@
 {
   int status, count, savecount;
   struct save_queue *lists, *members;
-  struct member *m, *m1, *data;
+  struct mrcl_ace_type *m, *m1, *data;
 
   lists = sq_create();
   members = sq_create();
-  m = malloc(sizeof(struct member));
-  m->type = M_LIST;
+  m = malloc(sizeof(struct mrcl_ace_type));
+  m->type = MRCL_M_LIST;
   m->name = listname;
   sq_save_data(lists, m);
 
@@ -1281,26 +1290,26 @@
 	com_err(whoami, status, "while getting members of list %s", m->name);
       while (sq_get_data(memberlist, &m1))
 	{
-	  if (m1->type == M_LIST)
+	  if (m1->type == MRCL_M_LIST)
 	    unique_add_member(lists, m1);
 	  else
 	    unique_add_member(members, m1);
 	}
     }
   savecount = count = sq_count_elts(members);
-  data = malloc(count * sizeof(struct member));
+  data = malloc(count * sizeof(struct mrcl_ace_type));
   count = 0;
   while (sq_get_data(members, &m))
-    memcpy(&data[count++], m, sizeof(struct member));
-  qsort(data, count, sizeof(struct member), membercmp);
+    memcpy(&data[count++], m, sizeof(struct mrcl_ace_type));
+  qsort(data, count, sizeof(struct mrcl_ace_type), membercmp);
   for (count = 0; count < savecount; count++)
     show_list_member(&data[count]);
 }
 
 
-/* add a struct member to a queue if that member isn't already there. */
+/* add a struct mrcl_ace_type to a queue if that member isn't already there. */
 
-void unique_add_member(struct save_queue *q, struct member *m)
+void unique_add_member(struct save_queue *q, struct mrcl_ace_type *m)
 {
   struct save_queue *qp;
 
@@ -1318,25 +1327,25 @@
 int get_list_members(int argc, char **argv, void *sq)
 {
   struct save_queue *q = sq;
-  struct member *m;
+  struct mrcl_ace_type *m;
 
-  m = malloc(sizeof(struct member));
+  m = malloc(sizeof(struct mrcl_ace_type));
   switch (argv[0][0])
     {
     case 'U':
-      m->type = M_USER;
+      m->type = MRCL_M_USER;
       break;
     case 'L':
-      m->type = M_LIST;
+      m->type = MRCL_M_LIST;
       break;
     case 'S':
-      m->type = M_STRING;
+      m->type = MRCL_M_STRING;
       break;
     case 'K':
-      m->type = M_KERBEROS;
+      m->type = MRCL_M_KERBEROS;
       break;
     case 'M':
-      m->type = M_MACHINE;
+      m->type = MRCL_M_MACHINE;
       break;
     }
   m->name = strdup(argv[1]);
@@ -1354,7 +1363,7 @@
 {
   FILE *in;
   char buf[BUFSIZ];
-  struct member *memberstruct;
+  struct mrcl_ace_type *memberstruct;
 
   if (!strcmp(filename, "-"))
     in = stdin;
@@ -1370,7 +1379,7 @@
 
   while (fgets(buf, BUFSIZ, in))
     {
-      memberstruct = parse_member(buf);
+      memberstruct = mrcl_parse_member(buf);
       if (memberstruct)
 	sq_save_data(queue, memberstruct);
       else
@@ -1399,68 +1408,6 @@
   return MR_CONT;
 }
 
-
-/* Parse a line of input, fetching a member.  NULL is returned if a member
- * is not found.  ';' is a comment character.
- */
-
-struct member *parse_member(char *s)
-{
-  struct member *m;
-  char *p, *lastchar;
-
-  while (*s && isspace(*s))
-    s++;
-  lastchar = p = s;
-  while (*p && *p != '\n' && *p != ';')
-    {
-      if (isprint(*p) && !isspace(*p))
-	lastchar = p++;
-      else
-	p++;
-    }
-  lastchar++;
-  *lastchar = '\0';
-  if (p == s || strlen(s) == 0)
-    return NULL;
-
-  if (!(m = malloc(sizeof(struct member))))
-    return NULL;
-  m->tag = strdup("");
-
-  if ((p = strchr(s, ':')))
-    {
-      *p = '\0';
-      m->name = ++p;
-      if (!strcasecmp("user", s))
-	m->type = M_USER;
-      else if (!strcasecmp("list", s))
-	m->type = M_LIST;
-      else if (!strcasecmp("string", s))
-	m->type = M_STRING;
-      else if (!strcasecmp("kerberos", s))
-	m->type = M_KERBEROS;
-      else if (!strcasecmp("machine", s))
-	m->type = M_MACHINE;
-      else if (!strcasecmp("none", s))
-	m->type = M_NONE;
-      else
-	{
-	  m->type = M_ANY;
-	  *(--p) = ':';
-	  m->name = s;
-	}
-      m->name = strdup(m->name);
-    }
-  else
-    {
-      m->name = strdup(s);
-      m->type = strcasecmp(s, "none") ? M_ANY : M_NONE;
-    }
-  return m;
-}
-
-
 /*
  * This routine two compares members by the following rules:
  * 1.  A USER is less than a LIST
@@ -1473,9 +1420,9 @@
 
 int membercmp(const void *mem1, const void *mem2)
 {
-  const struct member *m1 = mem1, *m2 = mem2;
+  const struct mrcl_ace_type *m1 = mem1, *m2 = mem2;
 
-  if (m1->type == M_ANY || m2->type == M_ANY || (m1->type == m2->type))
+  if (m1->type == MRCL_M_ANY || m2->type == MRCL_M_ANY || (m1->type == m2->type))
     return strcmp(m1->name, m2->name);
   else
     return m1->type - m2->type;

Modified: trunk/moira/clients/lib/member.c
===================================================================
--- trunk/moira/clients/lib/member.c	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/clients/lib/member.c	2014-04-22 15:51:03 UTC (rev 4160)
@@ -136,3 +136,63 @@
 
   return MRCL_SUCCESS;
 }
+
+/* Parse a line of input, fetching a member.  NULL is returned if a member
+ * is not found.  ';' is a comment character.
+ */
+
+struct mrcl_ace_type *mrcl_parse_member(char *s)
+{
+  struct mrcl_ace_type *m;
+  char *p, *lastchar;
+  
+  while (*s && isspace(*s))
+    s++;
+  lastchar = p = s;
+  while (*p && *p != '\n' && *p != ';')
+    {
+      if (isprint(*p) && !isspace(*p))
+        lastchar = p++;
+      else
+        p++;
+    }
+  lastchar++;
+  *lastchar = '\0';
+  if (p == s || strlen(s) == 0)
+    return NULL;
+  
+  if (!(m = malloc(sizeof(struct mrcl_ace_type))))
+    return NULL;
+  m->tag = strdup("");
+
+  if ((p = strchr(s, ':')))
+    {
+      *p = '\0';
+      m->name = ++p;
+      if (!strcasecmp("user", s))
+        m->type = MRCL_M_USER;
+      else if (!strcasecmp("list", s))
+        m->type = MRCL_M_LIST;
+      else if (!strcasecmp("string", s))
+        m->type = MRCL_M_STRING;
+      else if (!strcasecmp("kerberos", s))
+        m->type = MRCL_M_KERBEROS;
+      else if (!strcasecmp("machine", s))
+        m->type = MRCL_M_MACHINE;
+      else if (!strcasecmp("none", s))
+        m->type = MRCL_M_NONE;
+      else
+        {
+          m->type = MRCL_M_ANY;
+          *(--p) = ':';
+          m->name = s;
+        }
+      m->name = strdup(m->name);
+    }
+  else
+    {
+      m->name = strdup(s);
+      m->type = strcasecmp(s, "none") ? MRCL_M_ANY : MRCL_M_NONE;
+    }
+  return m;
+}

Modified: trunk/moira/clients/mitch/mitch.c
===================================================================
--- trunk/moira/clients/mitch/mitch.c	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/clients/mitch/mitch.c	2014-04-22 15:51:03 UTC (rev 4160)
@@ -24,11 +24,6 @@
 
 RCSID("$HeadURL$ $Id$");
 
-struct owner_type {
-  int type;
-  char *name;
-};
-
 struct mqelem {
   struct mqelem *q_forw;
   struct mqelem *q_back;
@@ -40,14 +35,6 @@
   struct string_list *next;
 };
 
-#define M_ANY		0
-#define M_USER		1
-#define M_LIST		2
-#define M_KERBEROS	3
-#define M_NONE		4
-
-char *typename[] = { "ANY", "USER", "LIST", "KERBEROS", "NONE" };
-
 /* argument parsing macro */
 #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
 
@@ -62,7 +49,7 @@
 
 char *newname, *desc, *location, *contact;
 int public;
-struct owner_type *owner, *memacl;
+struct mrcl_ace_type *owner, *memacl;
 
 void usage(char **argv);
 int store_container_info(int argc, char **argv, void *hint);
@@ -72,7 +59,6 @@
 int show_container_list_unformatted(int argc, char **argv, void *hint);
 int show_machine_in_container(int argc, char **argv, void *hint);
 int show_subcontainers_of_container(int argc, char **argv, void *hint);
-struct owner_type *parse_member(char *s);
 struct string_list *add_to_string_list(struct string_list *old_list, char *s);
 int wrap_mr_query(char *handle, int argc, char **argv,
 		  int (*callback)(int, char **, void *), void *callarg);
@@ -153,8 +139,8 @@
 	    if (arg - argv < argc - 1) {
 	      arg++;
 	      update_flag++;
-	      owner = parse_member(*arg);
-	      if (!owner)
+	      owner = mrcl_parse_member(*arg);
+	      if (!owner || owner->type == MRCL_M_STRING || owner->type == MRCL_M_MACHINE)
 		{
 		  com_err(whoami, 0, "Invalid owner format. Must be one of USER, LIST, KERBEROS, or NONE.");
 		  exit(1);
@@ -166,8 +152,8 @@
 	    if (arg - argv < argc - 1) {
 	      arg++;
 	      update_flag++;
-	      memacl = parse_member(*arg);
-	      if (!memacl)
+	      memacl = mrcl_parse_member(*arg);
+	      if (!memacl || memacl->type == MRCL_M_STRING || memacl->type == MRCL_M_MACHINE)
 		{
 		  com_err(whoami, 0, "Invalid memacl format. Must be one of USER, LIST, KERBEROS, or NONE.");
 		  exit(1);
@@ -262,25 +248,40 @@
 
       if (memacl)
 	{
-	  if (memacl->type == M_ANY)
+	  argv[CON_MEMACE_NAME] = memacl->name;
+	  switch (memacl->type)
 	    {
+	    case MRCL_M_ANY:
 	      status = wrap_mr_query("get_user_account_by_login", 1,
 				     &memacl->name, NULL, NULL);
 	      if (status == MR_NO_MATCH)
-		memacl->type = M_LIST;
+		argv[CON_MEMACE_TYPE] = "LIST";
 	      else
-		memacl->type = M_USER;
-	    }
-	  argv[CON_MEMACE_TYPE] = typename[memacl->type];
-	  argv[CON_MEMACE_NAME] = memacl->name;
-	  if (memacl->type == M_KERBEROS)
-	    {
+		argv[CON_MEMACE_TYPE] = "USER";
+	      break;
+
+	    case MRCL_M_USER:
+	      argv[CON_MEMACE_TYPE] = "USER";
+	      break;
+
+	    case MRCL_M_LIST:
+	      argv[CON_MEMACE_TYPE] = "LIST";
+	      break;
+
+	    case MRCL_M_KERBEROS:
 	      status = mrcl_validate_kerberos_member(argv[CON_MEMACE_NAME],
 						     &argv[CON_MEMACE_NAME]);
 	      if (mrcl_get_message())
 		mrcl_com_err(whoami);
 	      if (status == MRCL_REJECT)
 		exit(1);
+	      argv[CON_MEMACE_TYPE] = "KERBEROS";
+	      break;
+
+	    case MRCL_M_NONE:
+	      argv[CON_MEMACE_NAME] = argv[CON_MEMACE_TYPE] = "NONE";
+	      break;
+
 	    }
 	}
       else
@@ -291,19 +292,19 @@
 	  argv[CON_OWNER_NAME] = owner->name;
 	  switch (owner->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[CON_OWNER_TYPE] = "USER";
 	      status = wrap_mr_query("add_container", 9, argv, NULL, NULL);
-	      if (owner->type != M_ANY || status != MR_USER)
+	      if (owner->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[CON_OWNER_TYPE] = "LIST";
 	      status = wrap_mr_query("add_container", 9, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[CON_OWNER_TYPE] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[CON_OWNER_TYPE],
 						     &argv[CON_OWNER_TYPE]);
@@ -313,7 +314,7 @@
 		exit(1);
 	      status = wrap_mr_query("add_container", 9, argv, NULL, NULL);
 	      break;
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[CON_OWNER_TYPE] = argv[CON_OWNER_NAME] = "NONE";
 	      status = wrap_mr_query("add_containr", 9, argv, NULL, NULL);
 	      break;
@@ -370,25 +371,38 @@
 
       if (memacl)
 	{
-	  if (memacl->type == M_ANY)
+	  argv[CON_MEMACE_NAME + 1] = memacl->name;
+	  switch (memacl->type)
 	    {
+	    case MRCL_M_ANY:
 	      status = wrap_mr_query("get_user_account_by_login", 1,
 				     &memacl->name, NULL, NULL);
 	      if (status == MR_NO_MATCH)
-		memacl->type = M_LIST;
+		argv[CON_MEMACE_TYPE + 1] = "LIST";
 	      else
-		memacl->type = M_USER;
-	    }
-	  argv[CON_MEMACE_TYPE + 1] = typename[memacl->type];
-	  argv[CON_MEMACE_NAME + 1] = memacl->name;
-	  if (memacl->type == M_KERBEROS)
-	    {
+		argv[CON_MEMACE_TYPE + 1] = "USER";
+	      break;
+
+	    case MRCL_M_USER:
+	      argv[CON_MEMACE_TYPE + 1] = "USER";
+	      break;
+
+	    case MRCL_M_LIST:
+	      argv[CON_MEMACE_TYPE + 1] = "LIST";
+	      break;
+
+	    case MRCL_M_KERBEROS:
 	      status = mrcl_validate_kerberos_member(argv[CON_MEMACE_NAME + 1],
 						     &argv[CON_MEMACE_NAME + 1]);
 	      if (mrcl_get_message())
 		mrcl_com_err(whoami);
 	      if (status == MRCL_REJECT)
 		exit(1);
+	      argv[CON_MEMACE_TYPE + 1] = "KERBEROS";
+	      break;
+
+	    case MRCL_M_NONE:
+	      argv[CON_MEMACE_TYPE + 1] = "NONE";
 	    }
 	}
 
@@ -397,19 +411,19 @@
 	  argv[CON_OWNER_NAME + 1] = owner->name;
 	  switch (owner->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[CON_OWNER_TYPE + 1] = "USER";
 	      status = wrap_mr_query("update_container", 10, argv, NULL, NULL);
-	      if (owner->type != M_ANY || status != MR_USER)
+	      if (owner->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[CON_OWNER_TYPE + 1] = "LIST";
 	      status = wrap_mr_query("update_container", 10, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[CON_OWNER_TYPE + 1] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[CON_OWNER_NAME + 1],
 						     &argv[CON_OWNER_NAME + 1]);
@@ -420,7 +434,7 @@
 	      status = wrap_mr_query("update_container", 10, argv, NULL, NULL);
 	      break;
 	      
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[CON_OWNER_TYPE + 1] = argv[CON_OWNER_NAME + 1] = "NONE";
 	      status = wrap_mr_query("update_container", 10, argv, NULL, NULL);
 	      break;
@@ -670,61 +684,6 @@
   return MR_CONT;
 }
 
-/* Parse a line of input, fetching a member.  NULL is returned if a member
- * is not found.  ';' is a comment character.
- */
-
-struct owner_type *parse_member(char *s)
-{
-  struct owner_type *m;
-  char *p, *lastchar;
-
-  while (*s && isspace(*s))
-    s++;
-  lastchar = p = s;
-  while (*p && *p != '\n' && *p != ';')
-    {
-      if (isprint(*p) && !isspace(*p))
-	lastchar = p++;
-      else
-	p++;
-    }
-  lastchar++;
-  *lastchar = '\0';
-  if (p == s || strlen(s) == 0)
-    return NULL;
-
-  if (!(m = malloc(sizeof(struct owner_type))))
-    return NULL;
-
-  if ((p = strchr(s, ':')))
-    {
-      *p = '\0';
-      m->name = ++p;
-      if (!strcasecmp("user", s))
-	m->type = M_USER;
-      else if (!strcasecmp("list", s))
-	m->type = M_LIST;
-      else if (!strcasecmp("kerberos", s))
-	m->type = M_KERBEROS;
-      else if (!strcasecmp("none", s))
-	m->type = M_NONE;
-      else
-	{
-	  m->type = M_ANY;
-	  *(--p) = ':';
-	  m->name = s;
-	}
-      m->name = strdup(m->name);
-    }
-  else
-    {
-      m->name = strdup(s);
-      m->type = strcasecmp(s, "none") ? M_ANY : M_NONE;
-    }
-  return m;
-}
-
 struct string_list *add_to_string_list(struct string_list *old_list, char *s) {
   struct string_list *new_list;
 

Modified: trunk/moira/clients/stanley/stanley.c
===================================================================
--- trunk/moira/clients/stanley/stanley.c	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/clients/stanley/stanley.c	2014-04-22 15:51:03 UTC (rev 4160)
@@ -24,22 +24,11 @@
 
 RCSID("$HeadURL$ $Id$");
 
-struct owner_type {
-  int type;
-  char *name;
-};
-
 struct string_list {
   char *string;
   struct string_list *next;
 };
 
-#define M_ANY		0
-#define M_USER		1
-#define M_LIST		2
-#define M_KERBEROS	3
-#define M_NONE		4
-
 /* argument parsing macro */
 #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
 
@@ -49,7 +38,7 @@
 
 int count;
 
-struct owner_type *sponsor;
+struct mrcl_ace_type *sponsor;
 struct string_list *reservation_add_queue, *reservation_remove_queue;
 
 char *username, *whoami;
@@ -58,8 +47,6 @@
 char *clearid, *class, *comment, *secure, *winhomedir, *winprofiledir, *expiration;
 char *alternate_email, *alternate_phone;
 
-struct owner_type *parse_member(char *s);
-
 static char *states[] = {
   "Registerable (0)",
   "Active (1)",
@@ -253,8 +240,8 @@
 	    if (arg - argv < argc - 1) {
 	      arg++;
 	      update_flag++;
-	      sponsor = parse_member(*arg);
-	      if (!sponsor)
+	      sponsor = mrcl_parse_member(*arg);
+	      if (!sponsor || sponsor->type == MRCL_M_STRING || sponsor->type == MRCL_M_MACHINE)
 		{
 		  com_err(whoami, 0, "Invalid sponsor format. Must be one of USER, LIST, KERBEROS, or NONE.");
 		  exit(1);
@@ -444,19 +431,19 @@
 	  argv[U_SPONSOR_NAME] = sponsor->name;
 	  switch (sponsor->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[U_SPONSOR_TYPE] = "USER";
 	      status = wrap_mr_query("add_user_account", 20, argv, NULL, NULL);
-	      if (sponsor->type != M_ANY || status != MR_USER)
+	      if (sponsor->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[U_SPONSOR_TYPE] = "LIST";
 	      status = wrap_mr_query("add_user_account", 20, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[U_SPONSOR_TYPE] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[U_SPONSOR_NAME],
 						     &argv[U_SPONSOR_NAME]);
@@ -467,7 +454,7 @@
 	      status = wrap_mr_query("add_user_account", 20, argv, NULL, NULL);
 	      break;
 
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[U_SPONSOR_TYPE] = "NONE";
 	      status = wrap_mr_query("add_user_account", 20, argv, NULL, NULL);
 	      break;
@@ -564,21 +551,21 @@
 	  argv[17] = sponsor->name;
 	  switch (sponsor->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[16] = "USER";
 	      status = wrap_mr_query("update_user_account", 21, argv, NULL, 
 				     NULL);
-	      if (sponsor->type != M_ANY || status != MR_USER)
+	      if (sponsor->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[16] = "LIST";
 	      status = wrap_mr_query("update_user_account", 21, argv, NULL,
 				     NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[16] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[17], &argv[17]);
 	      if (mrcl_get_message())
@@ -589,7 +576,7 @@
 				     NULL);
 	      break;
 
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[16] = "NONE";
 	      status = wrap_mr_query("update_user_account", 21, argv, NULL,
 				     NULL);
@@ -941,57 +928,3 @@
 
   exit(1);
 }
-
-/* Parse a line of input, fetching a member.  NULL is returned if a member
- * is not found.  ';' is a comment character.
- */
-struct owner_type *parse_member(char *s)
-{
-  struct owner_type *m;
-  char *p, *lastchar;
-
-  while (*s && isspace(*s))
-    s++;
-  lastchar = p = s;
-  while (*p && *p != '\n' && *p != ';')
-    {
-      if (isprint(*p) && !isspace(*p))
-	lastchar = p++;
-      else
-	p++;
-    }
-  lastchar++;
-  *lastchar = '\0';
-  if (p == s || strlen(s) == 0)
-    return NULL;
-
-  if (!(m = malloc(sizeof(struct owner_type))))
-    return NULL;
-
-  if ((p = strchr(s, ':')))
-    {
-      *p = '\0';
-      m->name = ++p;
-      if (!strcasecmp("user", s))
-	m->type = M_USER;
-      else if (!strcasecmp("list", s))
-	m->type = M_LIST;
-      else if (!strcasecmp("kerberos", s))
-	m->type = M_KERBEROS;
-      else if (!strcasecmp("none", s))
-	m->type = M_NONE;
-      else
-	{
-	  m->type = M_ANY;
-	  *(--p) = ':';
-	  m->name = s;
-	}
-      m->name = strdup(m->name);
-    }
-  else
-    {
-      m->name = strdup(s);
-      m->type = strcasecmp(s, "none") ? M_ANY : M_NONE;
-    }
-  return m;
-}

Modified: trunk/moira/clients/stella/stella.c
===================================================================
--- trunk/moira/clients/stella/stella.c	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/clients/stella/stella.c	2014-04-22 15:51:03 UTC (rev 4160)
@@ -34,11 +34,6 @@
 
 RCSID("$HeadURL$ $Id$");
 
-struct owner_type {
-  int type;
-  char *name;
-};
-
 struct mqelem {
   struct mqelem *q_forw;
   struct mqelem *q_back;
@@ -50,12 +45,6 @@
   struct string_list *next;
 };
 
-#define M_ANY		0
-#define M_USER		1
-#define M_LIST		2
-#define M_KERBEROS	3
-#define M_NONE		4
-
 /* argument parsing macro */
 #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
 
@@ -79,7 +68,7 @@
 char *adm_cmt, *op_cmt, *opt, *ttl;
 
 in_addr_t ipaddress;
-struct owner_type *owner;
+struct mrcl_ace_type *owner;
 
 void usage(char **argv);
 int store_host_info(int argc, char **argv, void *hint);
@@ -89,7 +78,6 @@
 int show_machine_in_container(int argc, char **argv, void *hint);
 int show_host_hwaddrs(int argc, char **argv, void *hint);
 int show_dynamic_hostname(int argc, char **argv, void *hint);
-struct owner_type *parse_member(char *s);
 struct string_list *add_to_string_list(struct string_list *old_list, char *s);
 int wrap_mr_query(char *handle, int argc, char **argv,
 		  int (*callback)(int, char **, void *), void *callarg);
@@ -151,8 +139,8 @@
 	    if (arg - argv < argc - 1) {
 	      arg++;
 	      update_flag++;
-	      owner = parse_member(*arg);
-	      if (!owner)
+	      owner = mrcl_parse_member(*arg);
+	      if (!owner || owner->type == MRCL_M_STRING || owner->type == MRCL_M_MACHINE)
 		{
 		  com_err(whoami, 0, "Invalid owner format. Must be one of USER, LIST, KERBEROS, or NONE.");
 		  exit(1);
@@ -361,14 +349,19 @@
 	    add_dynamic_host_flag++;
             if (arg - argv < argc - 1) {
               arg++;
-              owner = parse_member(*arg);
-	      if (!owner)
+              owner = mrcl_parse_member(*arg);
+	      if (!owner || owner->type == MRCL_M_STRING || owner->type == MRCL_M_MACHINE)
 		{
 		  com_err(whoami, 0, "Invalid owner format. Must be one of USER, LIST, KERBEROS, or NONE.");
 		  exit(1);
 		}
             } else {
-	      owner = parse_member(get_username());
+	      owner = mrcl_parse_member(get_username());
+	      if (!owner)
+		{
+		  com_err(whoami, 0, "Invalid owner format. Must be one of USER, LIST, KERBEROS, or NONE.");
+		  exit(1);
+		}
 	    }
 	  }
 	  else if (argis("u", "unformatted"))
@@ -498,19 +491,19 @@
 	  argv[13] = owner->name;
 	  switch (owner->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[12] = "USER";
 	      status = wrap_mr_query("add_host", 16, argv, NULL, NULL);
-	      if (owner->type != M_ANY || status != MR_USER)
+	      if (owner->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[12] = "LIST";
 	      status = wrap_mr_query("add_host", 16, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[12] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[13], &argv[13]);
 	      if (mrcl_get_message())
@@ -520,7 +513,7 @@
 	      status = wrap_mr_query("add_host", 16, argv, NULL, NULL);
 	      break;
 
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[12] = "NONE";
 	      status = wrap_mr_query("add_host", 16, argv, NULL, NULL);
 	      break;
@@ -607,19 +600,19 @@
 	  argv[14] = owner->name;
 	  switch (owner->type)
 	    {
-	    case M_ANY:
-	    case M_USER:
+	    case MRCL_M_ANY:
+	    case MRCL_M_USER:
 	      argv[13] = "USER";
 	      status = wrap_mr_query("update_host", 17, argv, NULL, NULL);
-	      if (owner->type != M_ANY || status != MR_USER)
+	      if (owner->type != MRCL_M_ANY || status != MR_USER)
 		break;
 
-	    case M_LIST:
+	    case MRCL_M_LIST:
 	      argv[13] = "LIST";
 	      status = wrap_mr_query("update_host", 17, argv, NULL, NULL);
 	      break;
 
-	    case M_KERBEROS:
+	    case MRCL_M_KERBEROS:
 	      argv[13] = "KERBEROS";
 	      status = mrcl_validate_kerberos_member(argv[14], &argv[14]);
 	      if (mrcl_get_message())
@@ -629,7 +622,7 @@
 	      status = wrap_mr_query("update_host", 17, argv, NULL, NULL);
 	      break;
 
-	    case M_NONE:
+	    case MRCL_M_NONE:
 	      argv[13] = "NONE";
 	      status = wrap_mr_query("update_host", 17, argv, NULL, NULL);
 	      break;
@@ -952,19 +945,19 @@
     argv[1] = owner->name;
     switch (owner->type)
       {
-      case M_ANY:
-      case M_USER:
+      case MRCL_M_ANY:
+      case MRCL_M_USER:
 	argv[0] = "USER";
 	status = wrap_mr_query("add_dynamic_host_record", 2, argv, show_dynamic_hostname, NULL);
-	if (owner->type != M_ANY || status != MR_USER)
+	if (owner->type != MRCL_M_ANY || status != MR_USER)
 	  break;
 
-      case M_LIST:
+      case MRCL_M_LIST:
 	argv[0] = "LIST";
 	status = wrap_mr_query("add_dynamic_host_record", 2, argv, show_dynamic_hostname, NULL);
 	break;
 
-      case M_KERBEROS:
+      case MRCL_M_KERBEROS:
 	argv[0] = "KERBEROS";
 	status = mrcl_validate_kerberos_member(argv[2], &argv[2]);
 	if (mrcl_get_message())
@@ -974,7 +967,7 @@
 	status = wrap_mr_query("add_dynamic_host_record", 2, argv, show_dynamic_hostname, NULL);
 	break;
 
-      case M_NONE:
+      case MRCL_M_NONE:
 	argv[0] = "NONE";
 	status = wrap_mr_query("add_dynamic_host_record", 2, argv, show_dynamic_hostname, NULL);
 	break;
@@ -1240,61 +1233,6 @@
   return MR_CONT;
 }
 
-/* Parse a line of input, fetching a member.  NULL is returned if a member
- * is not found.  ';' is a comment character.
- */
-
-struct owner_type *parse_member(char *s)
-{
-  struct owner_type *m;
-  char *p, *lastchar;
-
-  while (*s && isspace(*s))
-    s++;
-  lastchar = p = s;
-  while (*p && *p != '\n' && *p != ';')
-    {
-      if (isprint(*p) && !isspace(*p))
-	lastchar = p++;
-      else
-	p++;
-    }
-  lastchar++;
-  *lastchar = '\0';
-  if (p == s || strlen(s) == 0)
-    return NULL;
-
-  if (!(m = malloc(sizeof(struct owner_type))))
-    return NULL;
-
-  if ((p = strchr(s, ':')))
-    {
-      *p = '\0';
-      m->name = ++p;
-      if (!strcasecmp("user", s))
-	m->type = M_USER;
-      else if (!strcasecmp("list", s))
-	m->type = M_LIST;
-      else if (!strcasecmp("kerberos", s))
-	m->type = M_KERBEROS;
-      else if (!strcasecmp("none", s))
-	m->type = M_NONE;
-      else
-	{
-	  m->type = M_ANY;
-	  *(--p) = ':';
-	  m->name = s;
-	}
-      m->name = strdup(m->name);
-    }
-  else
-    {
-      m->name = strdup(s);
-      m->type = strcasecmp(s, "none") ? M_ANY : M_NONE;
-    }
-  return m;
-}
-
 struct string_list *add_to_string_list(struct string_list *old_list, char *s) {
   struct string_list *new_list;
 

Modified: trunk/moira/include/mrclient.h
===================================================================
--- trunk/moira/include/mrclient.h	2014-04-15 17:55:21 UTC (rev 4159)
+++ trunk/moira/include/mrclient.h	2014-04-22 15:51:03 UTC (rev 4160)
@@ -15,12 +15,28 @@
 #define MRCL_MOIRA_ERROR	5
 #define MRCL_AUTH_ERROR		6
 
+/* It is important that M_USER < M_LIST < M_STRING */
+#define MRCL_M_ANY           0
+#define MRCL_M_USER          1
+#define MRCL_M_LIST          2
+#define MRCL_M_STRING        3
+#define MRCL_M_KERBEROS      4
+#define MRCL_M_MACHINE       5
+#define MRCL_M_NONE          6
+
+struct mrcl_ace_type {
+  int type;
+  char *name, *tag;
+};
+
 int mrcl_connect(char *server, char *client, int version, int auth);
 char *mrcl_krb_user(void);
 char *partial_canonicalize_hostname(char *s);
 
 int mrcl_validate_pobox_smtp(char *user, char *address, char **ret);
 
+struct mrcl_ace_type *mrcl_parse_member(char *s);
+
 char *mrcl_get_message(void);
 void mrcl_com_err(char *whoami);
 


home help back first fref pref prev next nref lref last post