]> andersk Git - moira.git/blobdiff - clients/blanche/blanche.c
Punt restriction against apostrophes in strings: the new server
[moira.git] / clients / blanche / blanche.c
index 4226b13b901f903c411c33b08b29f8a8ba695478..8174e86c70372effc9eade84c810e5d2387a3870 100644 (file)
@@ -17,6 +17,7 @@
 #include <mit-copyright.h>
 #include <errno.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
 #include <moira.h>
@@ -241,14 +242,6 @@ char **argv;
 
     /* Process the add list */
     while (sq_get_data(addlist, &memberstruct)) {
-       if ((memberstruct->type == M_STRING ||
-            memberstruct->type == M_ANY) &&
-           strchr(memberstruct->name, '\'')) {
-               fprintf(stderr, "Illegal character \"'\" in \"STRING:%s\", aborting blanche.\n",
-                       memberstruct->name);
-               fprintf(stderr, "No changes were made.\n");
-               exit(2);
-       }
        /* canonicalize string if necessary */
        if (memberstruct->type == M_STRING &&
            (p = strchr(memberstruct->name, '@'))) {
@@ -306,9 +299,18 @@ char **argv;
            membervec[1] = "LIST";
            status = mr_query("add_member_to_list", 3, membervec,
                               scream, NULL);
-           if (status == MR_SUCCESS)
-             break;
-           else if (status != MR_LIST || memberstruct->type != M_ANY) {
+           if (status == MR_SUCCESS) {
+               if (!strcmp(membervec[0], getenv("USER"))) {
+                   fprintf(stderr, "\nWARNING: \"LIST:%s\" was just added to list \"%s\".\n",
+                           membervec[2], membervec[0]);
+                   fprintf(stderr, "If you meant to add yourself to the list \"%s\", type:\n", membervec[2]);
+                   fprintf(stderr, "\tblanche %s -d %s\t(to undo this)\n",
+                           membervec[0], membervec[2]);
+                   fprintf(stderr, "\tblanche %s -a %s\t(to add yourself to that list)\n",
+                           membervec[2], membervec[0]);
+               }
+               break;
+           } else if (status != MR_LIST || memberstruct->type != M_ANY) {
                com_err(whoami, status, "while adding member %s to %s",
                        memberstruct->name, listname);
                break;
@@ -391,10 +393,15 @@ char **argv;
            membervec[1] = "STRING";
            status = mr_query("delete_member_from_list", 3, membervec,
                               scream, NULL);
-           if (status == MR_STRING && memberstruct->type == M_ANY)
+           if (status == MR_STRING && memberstruct->type == M_ANY) {
              com_err(whoami, 0, " Unable to find member %s to delete from %s",
                      memberstruct->name, listname);
-           else if (status != MR_SUCCESS)
+             if (!strcmp(membervec[0], getenv("USER"))) {
+               fprintf(stderr, "(If you were trying to remove yourself from the list \"%s\",\n", membervec[2]);
+               fprintf(stderr, "the correct command is \"blanche %s -d %s\".)\n",
+                       membervec[2], membervec[0]);
+             }
+           } else if (status != MR_SUCCESS)
              com_err(whoami, status, "while deleting member %s from %s",
                      memberstruct->name, listname);
            break;
@@ -447,7 +454,7 @@ char **argv;
     fprintf(stderr, "   -dl | -deletelist filename\n");
     fprintf(stderr, "   -f | -file filename\n");
     fprintf(stderr, "   -n | -noauth\n");
-    fprintf(stderr, "   -S | -server host[:port]\n");
+    fprintf(stderr, "   -db | -database host[:port]\n");
     fprintf(stderr, "   -D | -debug\n");
     exit(1);
 }
This page took 0.04056 seconds and 4 git commands to generate.