]> 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 02107188a5039a5f6e7dad4f7f1fa0e5e535a3d6..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>
@@ -105,7 +106,7 @@ char **argv;
              verbose++;
            else if (argis("r","recursive"))
              recursflg++;
-           else if (argis("S","server"))
+           else if (argis("S","server") || argis("db","database"))
                if (arg - argv < argc - 1) {
                    ++arg;
                    server = *arg;
@@ -214,8 +215,10 @@ char **argv;
     if (syncflg) {
        status = mr_query("get_members_of_list", 1, &listname,
                           get_list_members, (char *)memberlist);
-       if (status)
-         com_err(whoami, status, "getting members of list %s", listname);
+       if (status) {
+           com_err(whoami, status, "getting members of list %s", listname);
+           exit (2);
+       }
        while (sq_get_data(synclist, &memberstruct)) {
            struct save_queue *q;
            int removed = 0;
@@ -239,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(1);
-       }
        /* canonicalize string if necessary */
        if (memberstruct->type == M_STRING &&
            (p = strchr(memberstruct->name, '@'))) {
@@ -304,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;
@@ -389,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;
@@ -445,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.03019 seconds and 4 git commands to generate.