]> andersk Git - moira.git/commitdiff
Use the new STRING and KERBEROS member checking provided by libmrclient.
authorzacheiss <zacheiss>
Thu, 10 Aug 2000 02:16:53 +0000 (02:16 +0000)
committerzacheiss <zacheiss>
Thu, 10 Aug 2000 02:16:53 +0000 (02:16 +0000)
clients/blanche/blanche.c
clients/moira/lists.c

index df25f15794c24014aa782bfb37f92849a919c64c..5ebf678551a41080a819851610c414cae00c0a88 100644 (file)
@@ -612,10 +612,14 @@ int main(int argc, char **argv)
              break;
            }
        case M_STRING:
-         if (memberstruct->type == M_ANY &&
-             !strchr(memberstruct->name, '@') &&
-             !strchr(memberstruct->name, '!') &&
-             !strchr(memberstruct->name, '%'))
+         status = mrcl_validate_string_member(memberstruct->name);
+         if (status == MRCL_REJECT)
+           {
+             mrcl_com_err(whoami);
+             success = 0;
+             break;
+           }
+         else if (memberstruct->type == M_ANY && status != MR_SUCCESS)
            {
              /* if user is trying to add something which isn't a
                 remote string, or a list, or a user, and didn't
@@ -638,6 +642,9 @@ int main(int argc, char **argv)
          break;
        case M_KERBEROS:
          membervec[1] = "KERBEROS";
+         status = mrcl_validate_kerberos_member(membervec[2], &membervec[2]);
+         if (mrcl_get_message())
+           mrcl_com_err(whoami);
          status = mr_query("add_tagged_member_to_list", 4, membervec,
                            NULL, NULL);
          if (status != MR_SUCCESS)
@@ -646,6 +653,7 @@ int main(int argc, char **argv)
                      memberstruct->name, listname);
              success = 0;
            }
+         free(membervec[2]);
        }
     }
 
@@ -734,6 +742,22 @@ int main(int argc, char **argv)
          membervec[1] = "KERBEROS";
          status = mr_query("delete_member_from_list", 3, membervec,
                            NULL, NULL);
+         if (status == MR_STRING || status == MR_NO_MATCH)
+           {
+             /* Try canonicalizing the Kerberos principal and trying
+              * again.  If we succeed, print the message from mrcl.
+              * Otherwise, just pretend we never did this and print 
+              * the original error message.
+              */
+             mrcl_validate_kerberos_member(membervec[2], &membervec[2]);
+             if (mrcl_get_message())
+               {
+                 if (mr_query("delete_member_from_list", 3, membervec,
+                              NULL, NULL) == MR_SUCCESS)
+                   mrcl_com_err(whoami);
+                 status = MR_SUCCESS;
+               }
+           }
          if (status != MR_SUCCESS)
            {
              com_err(whoami, status, "while deleting member %s from %s",
@@ -806,6 +830,22 @@ int main(int argc, char **argv)
          membervec[1] = "KERBEROS";
          status = mr_query("tag_member_of_list", 4, membervec,
                            NULL, NULL);
+         if (status == MR_STRING || status == MR_NO_MATCH)
+           {
+             /* Try canonicalizing the Kerberos principal and trying
+              * again.  If we succeed, print the message from mrcl.
+              * Otherwise, just pretend we never did this and print 
+              * the original error message.
+              */
+             mrcl_validate_kerberos_member(membervec[2], &membervec[2]);
+             if (mrcl_get_message())
+               {
+                 if (mr_query("tag_member_of_list", 4, membervec,
+                              NULL, NULL) == MR_SUCCESS)
+                   mrcl_com_err(whoami);
+                 status = MR_SUCCESS;
+               }
+           }
          if (status != MR_SUCCESS)
            {
              com_err(whoami, status, "while changing tag on member %s of %s",
@@ -815,7 +855,6 @@ int main(int argc, char **argv)
        }
     }
 
-
   /* Display the members of the list now, if requested */
   if (memberflg)
     {
index c3897e6bc9216205472ef35b3fb8dab21c0d0e6e..dbccaacc697d3e33f58bab12a2947db51f7cb36a 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <mit-copyright.h>
 #include <moira.h>
+#include <mrclient.h>
 #include <moira_site.h>
 #include "defs.h"
 #include "f_defs.h"
@@ -652,35 +653,22 @@ int AddMember(int argc, char **argv)
 
   if (!strcmp(args[LM_TYPE], "STRING"))
     {
-      if ((p = strchr(args[LM_MEMBER], '@')))
+      if (mrcl_validate_string_member(args[LM_MEMBER]) != MRCL_SUCCESS)
        {
-         char *host = canonicalize_hostname(strdup(++p));
-         mailhubs = GetTypeValues("mailhub");
-         for (elem = mailhubs; elem; elem = elem->q_forw)
-           {
-             if (!strcasecmp(host, elem->q_data))
-               {
-                 free(host);
-                 host = strdup(args[LM_MEMBER]);
-                 *(--p) = 0;
-                 sprintf(temp_buf, "String \"%s\" should be USER or LIST "
-                         "\"%s\" because it is a local name.", host,
-                         args[LM_MEMBER]);
-                 Put_message(temp_buf);
-                 free(args[LM_TYPE]);
-                 free(host);
-                 return DM_NORMAL;
-               }
-           }
-         free(host);
-       }
-      else if (!strchr(args[LM_MEMBER], '!'))
-       {
-         Put_message("Member which is not a foreign mail address "
-                     "should not be type STRING.");
+         Put_message(mrcl_get_message());
          return DM_NORMAL;
        }
     }
+  else if (!strcmp(args[LM_TYPE], "KERBEROS"))
+    {
+      char *canon;
+
+      mrcl_validate_kerberos_member(args[LM_MEMBER], &canon);
+      if (mrcl_get_message())
+       Put_message(mrcl_get_message());
+      free(args[LM_MEMBER]);
+      args[LM_MEMBER] = canon;
+    }
 
   if ((status = do_mr_query("add_member_to_list", CountArgs(args), args,
                            NULL, NULL)) != MR_SUCCESS)
@@ -717,6 +705,26 @@ int DeleteMember(int argc, char **argv)
     {
       if ((status = do_mr_query("delete_member_from_list", CountArgs(args),
                                args, NULL, NULL)))
+       {
+         if ((status == MR_STRING || status == MR_NO_MATCH) &&
+             !strcmp(args[LM_TYPE], "KERBEROS"))
+           {
+             char *canon;
+             mrcl_validate_kerberos_member(args[LM_MEMBER], &canon);
+             if (mrcl_get_message())
+               {
+                 free(args[LM_MEMBER]);
+                 args[LM_MEMBER] = canon;
+                 if (do_mr_query("delete_member_from_list", CountArgs(args),
+                                 args, NULL, NULL) == MR_SUCCESS)
+                   {
+                     Put_message(mrcl_get_message());
+                     status = MR_SUCCESS;
+                   }
+               }
+           }
+       }
+      if (status)
        com_err(program_name, status, " in DeleteMember");
       else
        Put_message("Deletion Completed.");
This page took 0.04948 seconds and 5 git commands to generate.