X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/235fd664da3457a03081ebdeb60919e6f4695140..e681e918d9651f673c209d5cbca880d128ad69fc:/clients/blanche/blanche.c diff --git a/clients/blanche/blanche.c b/clients/blanche/blanche.c index 8174e86c..e867faf0 100644 --- a/clients/blanche/blanche.c +++ b/clients/blanche/blanche.c @@ -66,7 +66,7 @@ main(argc, argv) int argc; char **argv; { - int status; + int status, success; char **arg = argv; char *membervec[3], *motd; struct member *memberstruct; @@ -82,6 +82,8 @@ char **argv; synclist = sq_create(); whoami = argv[0]; + success = 1; + /* parse args, building addlist, dellist, & synclist */ while (++arg - argv < argc) { if (**arg == '-') @@ -293,6 +295,7 @@ char **argv; else if (status != MR_USER || memberstruct->type != M_ANY) { com_err(whoami, status, "while adding member %s to %s", memberstruct->name, listname); + success = 0; break; } case M_LIST: @@ -313,15 +316,18 @@ char **argv; } else if (status != MR_LIST || memberstruct->type != M_ANY) { com_err(whoami, status, "while adding member %s to %s", memberstruct->name, listname); + success = 0; break; } case M_STRING: membervec[1] = "STRING"; status = mr_query("add_member_to_list", 3, membervec, scream, NULL); - if (status != MR_SUCCESS) + if (status != MR_SUCCESS) { com_err(whoami, status, "while adding member %s to %s", memberstruct->name, listname); + success = 0; + } else if (!strchr(memberstruct->name, '@') && !strchr(memberstruct->name, '!') && !strchr(memberstruct->name, '%')) { @@ -335,9 +341,11 @@ char **argv; membervec[1] = "KERBEROS"; status = mr_query("add_member_to_list", 3, membervec, scream, NULL); - if (status != MR_SUCCESS) + if (status != MR_SUCCESS) { com_err(whoami, status, "while adding member %s to %s", memberstruct->name, listname); + success = 0; + } } } @@ -361,6 +369,7 @@ char **argv; memberstruct->type != M_ANY) { com_err(whoami, status, "while deleting member %s from %s", memberstruct->name, listname); + success = 0; break; } case M_LIST: @@ -387,6 +396,7 @@ char **argv; } com_err(whoami, status, "while deleting member %s from %s", memberstruct->name, listname); + success = 0; break; } case M_STRING: @@ -396,22 +406,27 @@ char **argv; if (status == MR_STRING && memberstruct->type == M_ANY) { com_err(whoami, 0, " Unable to find member %s to delete from %s", memberstruct->name, listname); + success = 0; 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) + } else if (status != MR_SUCCESS) { com_err(whoami, status, "while deleting member %s from %s", memberstruct->name, listname); + success = 0; + } break; case M_KERBEROS: membervec[1] = "KERBEROS"; status = mr_query("delete_member_from_list", 3, membervec, scream, NULL); - if (status != MR_SUCCESS) + if (status != MR_SUCCESS) { com_err(whoami, status, "while deleting member %s from %s", memberstruct->name, listname); + success = 0; + } } } @@ -432,7 +447,7 @@ char **argv; /* We're done! */ mr_disconnect(); - exit(0); + exit(success?0:1); } usage(argv) @@ -666,8 +681,10 @@ struct save_queue *queue; while (fgets(buf, BUFSIZ, in)) if (memberstruct = parse_member(buf)) sq_save_data(queue, memberstruct); - if (!feof(in)) + if (!feof(in)) { com_err(whoami, errno, "while reading from %s", filename); + exit(2); + } }