]> andersk Git - moira.git/commitdiff
*** empty log message ***
authormar <mar>
Wed, 5 Jun 1991 11:10:56 +0000 (11:10 +0000)
committermar <mar>
Wed, 5 Jun 1991 11:10:56 +0000 (11:10 +0000)
clients/mmoira/Makefile
clients/mmoira/display.c
clients/mmoira/formup.c
clients/mmoira/help.c
clients/mmoira/main.c
clients/mmoira/menus.awk
clients/mmoira/menus.txt
clients/mmoira/mmoira.h
clients/mmoira/queries.c
clients/mmoira/stubs.c

index 9263f4aee0874752a839fc6f3fb613a60e94e2f5..271044059f148579ee8d181b2c1a93c9d3289ed1 100644 (file)
@@ -1,11 +1,11 @@
 # $Header$
 
-CFLAGS = -I/mit/motif/include -g
-LIBS = -L/mit/motif/$(MACHINE)lib -lMu -lXm -lXt -lX11 \
+CFLAGS = -I/mit/motif/include -g -D_NO_PROTO
+LIBS = -L/mit/motif/$(MACHINE)lib -lXm -lXt -lX11 \
        -lmoira -lmrgdb -lhesiod -lkrb -ldes -lcom_err
 
 OBJS = form_data.o form_setup.o menu_data.o main.o formup.o \
-       moira_cb.o help.o       
+       queries.o help.o stubs.o display.o
 
 mmoira: $(OBJS)
        $(CC) -o mmoira $(OBJS) $(LIBS) 
@@ -15,3 +15,6 @@ form_data.c: forms.txt forms.awk
 
 menu_data.c: menus.txt menus.awk
        awk -f menus.awk menus.txt > menu_data.c
+
+clean:
+       rm -f *.o mmoira form_data.c menu_data.c
index 83db5e3a15876590d33f5fcd55b6e2d72148088e..3cc8b42465064a4ed58947202bff86b695dea480 100644 (file)
 char *atot(s) char *s; { return s; }
 
 
+static save_info(argc, argv, sq)
+int argc;
+char **argv;
+struct save_queue *sq;
+{
+    sq_save_args(argc, argv, sq);
+}
+
 
 int DisplayCallback(argc, info, form)
 int argc;
@@ -42,14 +50,14 @@ EntryForm *form;
        AppendToLog(buf);
        break;
     case MM_SHOW_FINGER:
-       sprintf(buf, "Nickname: %-29s Department: %s\n", info[F_NICKNAME],
-               info[F_MIT_DEPT]);
-       AppendToLog(buf);
-       sprintf(buf, "finger %s =>\n", info[F_NAME]);
+       sprintf(buf, "Finger information for user %s:\n", info[F_NAME]);
        AppendToLog(buf);
        sprintf(buf, "Login name: %-27s In real life: %s\n", info[F_NAME],
                info[F_FULLNAME]);
        AppendToLog(buf);
+       sprintf(buf, "Nickname: %-29s Department: %s\n", info[F_NICKNAME],
+               info[F_MIT_DEPT]);
+       AppendToLog(buf);
        sprintf(buf, "Home: %-33s Home phone: %s\n", info[F_HOME_ADDR],
                info[F_HOME_PHONE]);
        AppendToLog(buf);
@@ -61,14 +69,15 @@ EntryForm *form;
        AppendToLog(buf);
        break;
     case MM_SHOW_POBOX:
-       sprintf(buf, "Address: %-10s Box: %-35s Type: %s\n", info[PO_NAME],
-               info[PO_BOX], info[PO_TYPE]);
+       sprintf(buf, "Post Office information for user %s:\n", info[PO_NAME]);
+       AppendToLog(buf);
+       sprintf(buf, "type: %-8s Box: %s\n", info[PO_TYPE], info[PO_BOX]);
        AppendToLog(buf);
        sprintf(buf, MOD_FORMAT, info[4], info[3], info[5]);
        AppendToLog(buf);
        break;
     case MM_SHOW_KRBMAP:
-       sprintf(buf, "User: %-9s Principal: %s\n",
+       sprintf(buf, "Kerberos mapping: User %-9s Principal %s\n",
                info[KMAP_USER], info[KMAP_PRINCIPAL]);
        AppendToLog(buf);
        break;
@@ -76,7 +85,8 @@ EntryForm *form;
     case MM_SHOW_FSGROUP:
        if (!strcmp(info[FS_TYPE], "FSGROUP")) {
            int stat;
-/*         struct qelem *elem = NULL; */
+           char **argv;
+           struct save_queue *sq;
 
            sprintf(buf,"%20s Filesystem Group: %s\n", " ", info[FS_NAME]);
            AppendToLog(buf);
@@ -87,21 +97,26 @@ EntryForm *form;
                    info[FS_MODWITH]);
            AppendToLog(buf);
            AppendToLog("Containing the filesystems (in order):");
-/*
-           if ((stat = do_moira_query("get_fsgroup_members", 1, &info[FS_NAME],
-                                   StoreInfo, (char *)&elem)) != 0) {
+
+           sq = sq_create();
+           if ((stat = MoiraQuery("get_fsgroup_members", 1, &info[FS_NAME],
+                                   save_info, (char *)sq)) != 0) {
                if (stat == MR_NO_MATCH)
                  AppendToLog("    [no members]");
                else
                  com_err(program_name, stat, NULL);
            } else {
-               fsgCount = 1;
-               Loop(QueueTop(elem), (void *) PrintFSGMembers);
-               FreeQueue(elem);
+               while (sq_get_data(sq, &argv)) {
+                   sprintf(buf, "  Filesystem: %-32s (sort key: %s)",
+                           info[0], info[1]);
+                   free(argv[0]);
+                   free(argv[1]);
+                   free(argv);
+               }
+               sq_destroy(sq);
            }
-*/
        } else {
-           sprintf(buf,"%20s Filesystem: %s\n", " ", info[FS_NAME]);
+           sprintf(buf,"Filesystem: %s\n", info[FS_NAME]);
            AppendToLog(buf);
            sprintf(buf,"Type: %-40s Machine: %-15s\n",
                    info[FS_TYPE], info[FS_MACHINE]);
@@ -127,9 +142,8 @@ EntryForm *form;
        sprintf(buf,"Machine: %-20s Directory: %-15s Device: %s\n",
                info[NFS_NAME], info[NFS_DIR], info[NFS_DEVICE]);
        AppendToLog(buf);
-    
        sprintf(buf, "Status: %s\n",
-               format_filesys_type(atoi(info[NFS_STATUS])));
+               format_filesys_type(info[NFS_STATUS]));
        AppendToLog(buf);
        sprintf(buf, "Quota Allocated: %-17s Size: %s\n",
                info[NFS_ALLOC], info[NFS_SIZE]);
@@ -154,7 +168,7 @@ EntryForm *form;
        AppendToLog(buf);
        break;
     case MM_SHOW_LIST:
-       (void) sprintf(buf, "%20sList: %s\n", "", info[L_NAME]);
+       (void) sprintf(buf, "List: %s\n", info[L_NAME]);
        AppendToLog(buf);
        (void) sprintf(buf, "Description: %s\n", info[L_DESC]);
        AppendToLog(buf);
@@ -204,6 +218,10 @@ EntryForm *form;
                info[CD_NAME], info[CD_LABEL], info[CD_DATA]);
        AppendToLog(buf);
        break;
+    case MM_SHOW_MCMAP:
+       sprintf(buf, "Machine: %-20s Cluster: %s\n", info[0], info[1]);
+       AppendToLog(buf);
+       break;
     case MM_SHOW_MEMBERS:
        if (argc == 2)
          sprintf(buf, "%-9s %s\n", info[0], info[1]);
@@ -281,6 +299,51 @@ EntryForm *form;
          sprintf(buf, "%s\n", info[0]);
        AppendToLog(buf);
        break;
+    case MM_SHOW_PCAP:
+       sprintf(buf, "Printer: %-35s Spool host: %s\n", info[PCAP_NAME],
+               info[PCAP_SPOOL_HOST]);
+       AppendToLog(buf);
+       sprintf(buf, "Spool directory: %-27s Remote Printer Name: %s\n",
+               info[PCAP_SPOOL_DIR], info[PCAP_RPRINTER]);
+       AppendToLog(buf);
+       sprintf(buf, "Authentication: %-3s Price/page: %-3s  Quota Server: %s\n",
+               atoi(info[PCAP_AUTH]) ? "yes" : "no",
+               info[PCAP_PRICE], info[PCAP_QSERVER]);
+       AppendToLog(buf);
+       sprintf(buf, "Comments: %s\n", info[PCAP_COMMENTS]);
+       AppendToLog(buf);
+       sprintf(buf, MOD_FORMAT, info[PCAP_MODBY], info[PCAP_MODTIME], 
+               info[PCAP_MODWITH]);
+       AppendToLog(buf);
+       break;
+    case MM_SHOW_ZEPHYR:
+       sprintf(buf, "Zephyr class: %s\n", info[ZA_CLASS]);
+       AppendToLog(buf);
+       if (!strcmp("NONE", info[ZA_XMT_TYPE]))
+         name[0] = 0;
+       else
+         sprintf(name, "Name: %s", info[ZA_XMT_ID]);
+       sprintf(buf, "XMT ACL Type %s %s\n", info[ZA_XMT_TYPE], name);
+       AppendToLog(buf);
+       if (!strcmp("NONE", info[ZA_SUB_TYPE]))
+         name[0] = 0;
+       else
+         sprintf(name, "Name: %s", info[ZA_SUB_ID]);
+       sprintf(buf, "SUB ACL Type %s %s\n", info[ZA_SUB_TYPE], name);
+       AppendToLog(buf);
+       if (!strcmp("NONE", info[ZA_IWS_TYPE]))
+         name[0] = 0;
+       else
+         sprintf(name, "Name: %s", info[ZA_IWS_ID]);
+       sprintf(buf, "IWS ACL Type %s %s\n", info[ZA_IWS_TYPE], name);
+       AppendToLog(buf);
+       if (!strcmp("NONE", info[ZA_IUI_TYPE]))
+         name[0] = 0;
+       else
+         sprintf(name, "Name: %s", info[ZA_IUI_ID]);
+       sprintf(buf, "IUI ACL Type %s %s\n", info[ZA_IUI_TYPE], name);
+       AppendToLog(buf);
+       break;
     default:
        for (i = 0; i < argc; i++) {
            if (i != 0) AppendToLog(", ");
index 38cc51c1d754ad31b41fd37bff1e98cf6fcc166b..32bd89b0935dfbe7fb60f487f47e0ed37a61fe79 100644 (file)
@@ -54,15 +54,30 @@ XmAnyCallbackStruct *call_data;
 }
 
 int
-button_callback(w, f, call_data)
-Widget w;
-EntryForm *f;
+button_callback(w, client_data, call_data)
+Widget         w;
+EntryForm      *client_data;
 XmAnyCallbackStruct    *call_data;
 {
        char    output[100];
        static int      mode = 0;
 
-       XtUnmanageChild(f->formpointer);        
+/*     sprintf (output, "Button %x was hit...\n", w);
+       if (mode) {
+               MakeWatchCursor(toplevel);
+               MakeWatchCursor(entryformwidget);
+               mode = 0;
+       }
+       else {
+               MakeNormalCursor(toplevel);
+               MakeNormalCursor(entryformwidget);
+               mode = 1;
+       }
+       AppendToLog(output);
+       PopupErrorMessage("Sorry, no functionality here!\nSecond line", "No further help is available");
+*/
+       XtUnmanageChild(client_data->formpointer);
+
 }
 
 
@@ -167,11 +182,12 @@ EntryForm *spec;
        Widget          shellparent;
 
        if (spec->formpointer) {
-               printf ("Form %s already exists\n", spec->formname);
                UpdateForm(spec);
                return(spec->formpointer);
        }
 
+       height_so_far = vpad;
+
 #define GETSIZE(foo)   n = 0; \
                        XtSetArg(wargs[n], XtNwidth, &width);   n++; \
                        XtSetArg(wargs[n], XtNheight, &height); n++; \
@@ -205,7 +221,7 @@ EntryForm   *spec;
        XtSetArg(wargs[n], XmNlabelString, label);              n++;
        XtSetArg(wargs[n], XtNx, 0);                            n++;
        XtSetArg(wargs[n], XtNy, height_so_far);                n++;
-       instructionW = XtCreateManagedWidget(   "title",
+       instructionW = XtCreateManagedWidget(   "instructions",
                                xmLabelWidgetClass,
                                bb, wargs, n);
        GETSIZE(instructionW);
@@ -221,10 +237,10 @@ EntryForm *spec;
        MakeButtons(bb, &height, &width, spec);
        STORESIZE;
 
-#ifdef FORMTITLES
 /*
 ** Center the title of the form
 */
+#ifdef FORMTITLES
        n = 0;
        XtSetArg(wargs[n], XtNwidth, &width);                   n++;
        XtGetValues (titleW, wargs, n);
@@ -235,6 +251,16 @@ EntryForm  *spec;
        XtSetArg(wargs[n], XtNx, x);                            n++;
        XtSetValues (titleW, wargs, n);
 #endif
+       n = 0;
+       XtSetArg(wargs[n], XtNwidth, &width);                   n++;
+       XtGetValues (instructionW, wargs, n);
+
+       x = (width_so_far - width) / 2;
+
+       n = 0;
+       XtSetArg(wargs[n], XtNx, x);                            n++;
+       XtSetValues (instructionW, wargs, n);
+
        return((Widget) bb);
 }
 
@@ -301,10 +327,10 @@ EntryForm *spec;
                        !(current->insensitive));               n++;
                switch (current->type) {
                case FT_STRING:
-                       children[i] = XtCreateManagedWidget(    "child",
+                       children[i] = XtCreateManagedWidget(    "textwidget",
                                                xmTextWidgetClass,
                                                parent, wargs, n);
-                       XtAddCallback(  children[i], XmNlosingFocusCallback,
+                       XtAddCallback(  children[i], XmNvalueChangedCallback,
                                string_callback, current);
                        if (current->returnvalue.stringvalue) {
                                XmTextSetString (children[i], current->returnvalue.stringvalue);
@@ -316,7 +342,8 @@ EntryForm   *spec;
                        break;
 
                case FT_BOOLEAN:
-                       XtSetArg(wargs[n], XmNset, current->returnvalue.booleanvalue);  n++;
+                       XtSetArg(wargs[n], XmNset,
+                                current->returnvalue.booleanvalue ? True : False);     n++;
 
                        if (current->returnvalue.booleanvalue)
                                label = XmStringCreate( "(True)", XmSTRING_DEFAULT_CHARSET);
@@ -410,8 +437,7 @@ Dimension   *pheight;
        XtSetArg(wargs[n], XmNspacing, 0);      n++;
 
        if (count > 5) {
-               printf ("Special case:  Asking for %d columns\n",1 + count/5);
-               XtSetArg(wargs[n], XmNnumColumns, 1 + count / 5);               n++;
+               XtSetArg(wargs[n], XmNnumColumns, 1 + (count-1) / 5);           n++;
                XtSetArg(wargs[n], XmNorientation, XmVERTICAL); n++;
                XtSetArg(wargs[n], XmNpacking, XmPACK_COLUMN);  n++;
        }
@@ -423,7 +449,8 @@ Dimension   *pheight;
                n = 0;
                label = XmStringCreate(current, XmSTRING_DEFAULT_CHARSET);
                XtSetArg(wargs[n], XmNlabelString, label);      n++;
-               if (!strcmp (current, prompt->returnvalue.stringvalue)) {
+               if ((prompt->returnvalue.stringvalue) &&
+                       (!strcmp (current, prompt->returnvalue.stringvalue))) {
                        XtSetArg(wargs[n], XmNset, True);       n++;
                }
                else {
@@ -443,7 +470,7 @@ Dimension   *pheight;
 */
 
        GETSIZE (child);
-       *pheight = (height * MIN(5, count));
+       *pheight = (height * MIN(5, count)) + vpad; 
 
        return(radioparent);
 }
@@ -531,10 +558,8 @@ XmAnyCallbackStruct        *call_data;
 ** Fortunately, I was smart enough to use the button label as the name 
 ** of the widget, and I can extract it via XtName().  Thanks, Motif!
 */
-       if (strcmp(prompt->returnvalue.stringvalue, XtName(w))) {
-               printf ("Replacing old value of selection, '%s', with '%s'\n",
-                               prompt->returnvalue.stringvalue,
-                               XtName(w));
+       if (prompt->returnvalue.stringvalue &&
+                       (strcmp(prompt->returnvalue.stringvalue, XtName(w)))) {
                strcpy(prompt->returnvalue.stringvalue, XtName(w));
        }
 
@@ -580,6 +605,12 @@ XmAnyCallbackStruct        *call_data;
 {
        MenuItem        *itemhit = (MenuItem *) client_data;
 
+/*     printf  ("menu_callback: item '%s', op %d and string '%s'\n", 
+                       itemhit->label, 
+                       itemhit->operation, 
+                       itemhit->form);
+       XtManageChild(entryformwidget); 
+*/
        MoiraMenuRequest(itemhit);
 }
 
@@ -596,10 +627,10 @@ XmAnyCallbackStruct       *call_data;
        newvalue = XmTextGetString(w);
 
        if (strcmp(current->returnvalue.stringvalue, newvalue)) {
-               printf ("Replacing old value of selection, '%s', with '%s'\n",
+/*             printf ("Replacing old value of selection, '%s', with '%s'\n",
                                current->returnvalue.stringvalue,
                                newvalue);
-               strcpy(current->returnvalue.stringvalue, newvalue);
+*/             strcpy(current->returnvalue.stringvalue, newvalue);
        }
        XtFree(newvalue);
 }
index fce5a182f016638e3ec67856bad4103aa1d9a4fa..0648820c3808a74f4bfc80f003c022ab72156680 100644 (file)
@@ -9,6 +9,7 @@
 #include       <mit-copyright.h>
 #include       <stdio.h>
 #include       <Xm/Xm.h>
+#include       <moira.h>
 #include       "mmoira.h"
 
 
@@ -16,10 +17,14 @@ help(node)
 char *node;
 {
     FILE *helpfile = NULL;
-    char buf[1024], key[32];
+    char buf[1024], key[32], *msg, helpbuf[10240], *filename;
+    char *realloc(), *getenv();
 
     sprintf(key, "*%s\n", node);
-    helpfile = fopen(HELPFILE, "r");
+    filename = getenv("MOIRAHELPFILE");
+    if (filename == NULL)
+      filename = HELPFILE;
+    helpfile = fopen(filename, "r");
     if (helpfile == NULL) {
        display_error("Sorry, help is currently unavailable.\n");
        return;
@@ -33,12 +38,24 @@ char *node;
        fclose(helpfile);
        return;
     }
+    msg = NULL;
     while (fgets(buf, sizeof(buf), helpfile))
       if (buf[0] == '*')
        break;
-      else
-       fprintf(stderr, buf);
+      else {
+         if (msg) {
+             if (!strcmp(buf, "\n"))
+               strcpy(buf, " \n");
+             msg = realloc(msg, strlen(msg) + strlen(buf));
+             strcat(msg, buf);
+         } else
+           msg = strsave(buf);
+      }
     fclose(helpfile);
+    if (msg) {
+       PopupHelpWindow(msg);
+       free(msg);
+    }
     return;
 }
 
index e64ddfce4f8ee39b52ead04840a7f8849ddcf8ca..532827ce2e877ee4f9b47fd64d541150bd531ebd 100644 (file)
@@ -17,7 +17,7 @@ extern MenuItem MenuRoot;
 
 Widget CreateMenu(), CreateForm();
 Widget BuildMenuTree();
-void popup_error_hook();
+void popup_error_hook(), mr_x_input();
 
 Widget  toplevel;
 char *user, *program_name, *moira_server;
@@ -27,14 +27,52 @@ int argc;
 char *argv[];
 {
        Widget  button, bboard, menuwidget;
-       int     n;
+       char *motd;
+       int     n, status;
 
-       user = "mar";
-       program_name = argv[0];
+       if ((user = getlogin()) == NULL)
+         user = getpwuid((int) getuid())->pw_name;
+       user = (user && strlen(user)) ? Strsave(user) : "";
+
+       if ((program_name = rindex(argv[0], '/')) == NULL)
+         program_name = argv[0];
+       else
+         program_name++;
+       program_name = Strsave(program_name);
+
+       /* Need to parse command line argument here */
        moira_server = "";
 
-       mr_connect(moira_server);
-       mr_auth("mmoira");
+       status = mr_connect(moira_server);
+       if (status) {
+           com_err(program_name, status, " connecting to server");
+           exit(1);
+       }
+       status = mr_motd(&motd);
+       if (status) {
+           com_err(program_name, status, " connecting to server");
+           exit(1);
+       }
+       if (motd) {
+           fprintf(stderr, "The Moira server is currently unavailable:\n%s\n",
+                   motd);
+           mr_disconnect();
+           exit(1);
+       }
+
+       status = mr_auth("mmoira");
+       if (status == MR_USER_AUTH) {
+           char buf[BUFSIZ];
+           com_err(program_name, status, "\nPress [RETURN] to continue");
+           gets(buf);
+       } else if (status) {
+           if (status >= ERROR_TABLE_BASE_krb &&
+               status <= ERROR_TABLE_BASE_krb + 256)
+             com_err(program_name, status, "; authorization failed - please run kinit");
+           else
+             com_err(program_name, status, "; authorization failed");
+           exit(1);
+       }
 
        toplevel = XtInitialize("toplevel", "Moira", NULL, 0, 
                                &argc, argv);
@@ -48,6 +86,8 @@ char *argv[];
        XtRealizeWidget(toplevel);
 
        set_com_err_hook(popup_error_hook);
+       mr_set_alternate_input(ConnectionNumber(XtDisplay(toplevel)),
+                              mr_x_input);
        XtMainLoop();
 }
 
@@ -61,17 +101,17 @@ caddr_t data;
 {
     int status;
 
-    MakeWatchCursor();
+    MakeWatchCursor(toplevel);
     status = mr_query(query, argc, argv, callback, data);
     if (status != MR_ABORTED && status != MR_NOT_CONNECTED) {
-       MakeNormalCursor();
+       MakeNormalCursor(toplevel);
        return(status);
     }
     status = mr_connect(moira_server);
     if (status) {
        com_err(program_name, status, " while re-connecting to server %s",
                moira_server);
-       MakeNormalCursor();
+       MakeNormalCursor(toplevel);
        return(MR_ABORTED);
     }
     status = mr_auth("mmoira");
@@ -79,11 +119,11 @@ caddr_t data;
        com_err(program_name, status, " while re-authenticating to server %s",
                moira_server);
        mr_disconnect();
-       MakeNormalCursor();
+       MakeNormalCursor(toplevel);
        return(MR_ABORTED);
     }
     status = mr_query(query, argc, argv, callback, data);
-    MakeNormalCursor();
+    MakeNormalCursor(toplevel);
     return(status);
 
 }
@@ -119,3 +159,12 @@ caddr_t arg1, arg2, arg3, arg4, arg5;
     sprintf(cp, fmt, arg1, arg2, arg3, arg4, arg5);
     display_error(buf);
 }
+
+
+void mr_x_input()
+{
+    XEvent event;
+
+    XtAppNextEvent(_XtDefaultAppContext(), &event);
+    XtDispatchEvent(&event);
+}
index 932c83fdcd61b9de1ee244a63024a388ae2fdc73..45e94a3646d6b7a11dc47d3a7448a4d99f66756f 100644 (file)
@@ -3,8 +3,7 @@
 BEGIN          { numfields = 0; nummenus = 0;
                  printf("/* This file is machine generated, do not edit. */");
                  printf("\n#include <Xm/Text.h>\n");
-                 printf("#include \"data.h\"\n\n");
-                 printf("#include \"operations.h\"\n\n");
+                 printf("#include \"mmoira.h\"\n\n");
                }
 
 /^;/           { next }
@@ -31,8 +30,9 @@ $NF == "}"    { itemname = $1;
                  for (i = 2; i <= NF && $i != "{"; i++)
                        itemname = sprintf("%s %s", itemname, $i);
                  menuno = nummenus++;
-                 printf("static MenuItem menu%d = { \"%s\", NULL, %s \"%s\" };\n", \
-                       menuno, itemname, $(i + 1), $(i + 2));
+                 printf("static MenuItem menu%d = { \"%s\", NULL, %s \"%s\", \"%s\", %d };\n", \
+                       menuno, itemname, \
+                       $(i + 1), $(i + 2), $(i + 3), $(i + 4));
                  save[count++] = menuno;
                  next
                }
index a86b550f7b289d9fa88198f9fc5ae29c8d8dc547..66f19b64f2fbcfe34ea1a9739a936ab6d09eb2fa 100644 (file)
 ;      submenu name
 
 
-= miscellaneous
-       show database statistics { MM_STATS, 0 }
-       show active Moira clients { MM_CLIENTS, 0 }
-       show numeric value      { MM_SHOW_VALUE, show_value }
-       show alias              { MM_SHOW_ALIAS, show_alias }
+= misc
+       show database statistics { MM_STATS, 0 get_all_table_stats 0 }
+       show active Moira clients { MM_CLIENTS, 0 _list_users 0 }
+       show numeric value { MM_SHOW_VALUE, show_value get_value 1 }
+       show alias      { MM_SHOW_ALIAS, show_alias get_alias 3 }
 
 = hosts
-       show                    { MM_SHOW_HOST, show_host }
-       add                     { MM_ADD_HOST, add_host }
-       modify                  { MM_MOD_HOST, show_host }
-       delete                  { MM_DEL_HOST, show_host }
-       clear error             { MM_CLEAR_HOST, show_host }
-       reset state             { MM_RESET_HOST, show_host }
+       show            { MM_SHOW_HOST, show_host get_server_host_info 2 }
+       add             { MM_ADD_HOST, add_host add_server_host_info 6 }
+       modify          { MM_MOD_HOST, select_host get_server_host_info 2 }
+       delete          { MM_DEL_HOST, select_host delete_server_host_info 2 }
+       clear error     { MM_CLEAR_HOST, select_host reset_server_host_error 2 }
+       reset state     { MM_RESET_HOST, select_host set_server_host_internal 9 }
 
 = services
-       show                    { MM_SHOW_SERVICE, show_service }
-       add                     { MM_ADD_SERVICE, add_service }
-       modify                  { MM_MOD_SERVICE, show_service }
-       delete                  { MM_DEL_SERVICE, show_service }
-       clear error             { MM_CLEAR_SERVICE, show_service }
-       reset state             { MM_RESET_SERVICE, show_service }
-
-= server updates
-       show status             { MM_SHOW_DCMM, 0 }
-       enable/disable          { MM_ENABLE_DCM, dcm_enable }
-       invoke update           { MM_TRIGGER_DCM, trigger_dcm }
+       show            { MM_SHOW_SERVICE, show_service get_server_info 1 }
+       add             { MM_ADD_SERVICE, add_service add_server_info 8 }
+       modify          { MM_MOD_SERVICE, select_service get_server_info 1 }
+       delete          { MM_DEL_SERVICE, select_service delete_server_info 1 }
+       clear error     { MM_CLEAR_SERVICE, select_service reset_server_error 1 }
+       reset state     { MM_RESET_SERVICE, select_service set_server_internal_flags 6 }
+
+= updates
+       show status     { MM_SHOW_DCM, 0 qualified_get_server 3 }
+       enable/disable  { MM_ENABLE_DCM, dcm_enable get_value 1 }
+       invoke update   { MM_TRIGGER_DCM, trigger_dcm trigger_dcm 0 }
        services
        hosts
 
 = zephyr
-       show                    { MM_SHOW_ZEPHYR, show_zephyr }
-       add                     { MM_ADD_ZEPHYR, add_zephyr }
-       modify                  { MM_MOD_ZEPHYR, show_zephyr }
-       delete                  { MM_DEL_ZEPHYR, show_zephyr }
+       show            { MM_SHOW_ZEPHYR, show_zephyr get_zephyr_class 1 }
+       add             { MM_ADD_ZEPHYR, add_zephyr add_zephyr_class 9 }
+       modify          { MM_MOD_ZEPHYR, select_zephyr get_zephyr_class 1 }
+       delete          { MM_DEL_ZEPHYR, select_zephyr delete_zephyr_class 1 }
 
 = printer
-       show                    { MM_SHOW_PCAP, show_printer }
-       add                     { MM_ADD_PCAP, add_printer }
-       modify                  { MM_MOD_PCAP, show_printer }
-       delete                  { MM_DEL_PCAP, show_printer }
+       show            { MM_SHOW_PCAP, show_printer get_printcap_entry 1 }
+       add             { MM_ADD_PCAP, add_printer add_printcap_entry 8 }
+       modify          { MM_MOD_PCAP, select_printer get_printcap_entry 1 }
+       delete          { MM_DEL_PCAP, del_printer delete_printcap_entry 1 }
 
 = cluster data
-       show                    { MM_SHOW_CLDATA, show_cldata }
-       add                     { MM_ADD_CLDATA, add_cldata }
-       delete                  { MM_DEL_CLDATA, del_cldata }
+       show            { MM_SHOW_CLDATA, show_cldata get_cluster_data 2 }
+       add             { MM_ADD_CLDATA, add_cldata add_cluster_data 3 }
+       delete          { MM_DEL_CLDATA, del_cldata delete_cluster_data 3 }
 
 = cluster mappings
-       show                    { MM_SHOW_MCMAP, mcmap }
-       add                     { MM_ADD_MCMAP, add_mcmap }
-       delete                  { MM_DEL_MCMAP, add_mcmap }
+       show            { MM_SHOW_MCMAP, mcmap get_machine_to_cluster_map 2 }
+       add             { MM_ADD_MCMAP, add_mcmap add_machine_to_cluster 2 }
+       delete          { MM_DEL_MCMAP, del_mcmap delete_machine_from_cluster 2 }
 
 = cluster
-       show                    { MM_SHOW_CLUSTER, show_cluster }
-       add                     { MM_ADD_CLUSTER, add_cluster }
-       modify                  { MM_MOD_CLUSTER, show_cluster }
-       delete                  { MM_DEL_CLUSTER, show_cluster }
+       show            { MM_SHOW_CLUSTER, show_cluster get_cluster 1 }
+       add             { MM_ADD_CLUSTER, add_cluster add_cluster 3 }
+       modify          { MM_MOD_CLUSTER, select_cluster get_cluster 1 }
+       delete          { MM_DEL_CLUSTER, del_cluster delete_cluster 1 }
        cluster mappings
        cluster data
 
 = machine
-       show                    { MM_SHOW_MACH, show_machine }
-       add                     { MM_ADD_MACH, add_machine }
-       modify                  { MM_MOD_MACH, show_machine }
-       delete                  { MM_DEL_MACH, show_machine }
+       show            { MM_SHOW_MACH, show_machine get_machine 1 }
+       add             { MM_ADD_MACH, add_machine add_machine 2 }
+       modify          { MM_MOD_MACH, select_machine get_machine 1 }
+       delete          { MM_DEL_MACH, del_machine delete_machine 1 }
 
-= list membership
-       show                    { MM_SHOW_MEMBERS, show_members }
-       add                     { MM_ADD_MEMBER, add_member }
-       delete                  { MM_DEL_MEMBER, add_member }
-       delete a member from all lists { MM_DEL_ALL_MEMBER, del_all_member }
+= members
+       show            { MM_SHOW_MEMBERS, show_members get_members_of_list 1 }
+       add             { MM_ADD_MEMBER, add_member add_member_to_list 3 }
+       delete          { MM_DEL_MEMBER, del_member delete_member_from_list 3 }
+       delete a member from all lists { MM_DEL_ALL_MEMBER, del_all_member get_lists_of_member 2 }
 
 = list
-       show                    { MM_SHOW_LIST, show_list }
-       show all public mailing lists { MM_SHOW_MAILLIST, 0 }
-       show all items a list or user can administer { MM_SHOW_ACE_USE, show_ace_use }
-       add                     { MM_ADD_LIST, add_list }
-       modify                  { MM_MOD_LIST, show_list }
-       delete                  { MM_DEL_LIST, show_list }
+       show            { MM_SHOW_LIST, show_list get_list_info 1 }
+       show all public mailing lists { MM_SHOW_MAILLIST, 0 qualified_get_lists 5 }
+       show all items a list or user can administer { MM_SHOW_ACE_USE, show_ace_use get_ace_use 2 }
+       add             { MM_ADD_LIST, add_list add_list 10 }
+       modify          { MM_MOD_LIST, select_list get_list_info 1 }
+       delete          { MM_DEL_LIST, del_list delete_list 1 }
 
 = quota
-       show                    { MM_SHOW_QUOTA, show_quota }
-       add                     { MM_ADD_QUOTA, add_quota }
-       modify                  { MM_MOD_QUOTA, show_quota }
-       delete                  { MM_DEL_QUOTA, show_quota }
-       show default            { MM_SHOW_DQUOTA, 0 }
-       set default             { MM_SET_DQUOTA, set_dquota }
+       show            { MM_SHOW_QUOTA, show_quota get_quota 3 }
+       add             { MM_ADD_QUOTA, add_quota add_quota 4 }
+       modify          { MM_MOD_QUOTA, mod_quota update_quota 4 }
+       delete          { MM_DEL_QUOTA, show_quota delete_quota 3 }
+       show default    { MM_SHOW_DQUOTA, 0 get_value 1 }
+       set default     { MM_SET_DQUOTA, set_dquota set_value 2 }
 
 = nfs partition
-       show                    { MM_SHOW_NFS, show_nfs }
-       add                     { MM_ADD_NFS, add_nfs }
-       modify                  { MM_MOD_NFS, show_nfs }
-       delete                  { MM_DEL_NFS, del_nfs }
+       show            { MM_SHOW_NFS, show_nfs get_nfsphys 2 }
+       add             { MM_ADD_NFS, add_nfs add_nfsphys 6 }
+       modify          { MM_MOD_NFS, select_nfs get_nfsphys 2 }
+       delete          { MM_DEL_NFS, del_nfs delete_nfsphys 2 }
 
 = filesystem alias
-       show alias              { MM_SHOW_FS_ALIAS, show_fs_alias }
-       add alias               { MM_ADD_FS_ALIAS, add_fs_alias }
-       delete alias            { MM_DEL_FS_ALIAS, add_fs_alias }
+       show alias      { MM_SHOW_FS_ALIAS, show_fs_alias get_alias 3 }
+       add alias       { MM_ADD_FS_ALIAS, add_fs_alias add_alias 3 }
+       delete alias    { MM_DEL_FS_ALIAS, del_fs_alias delete_alias 3 }
 
 = filesystem group
-       show                    { MM_SHOW_FSGROUP, show_fsgroup }
-       insert                  { MM_ADD_FSGROUP, add_fsgroup }
-       re-order                { MM_MOV_FSGROUP, add_fsgroup }
-       remove                  { MM_DEL_FSGROUP, del_fsgroup }
+       show            { MM_SHOW_FSGROUP, show_fsgroup get_filesys 1 }
+       insert          { MM_ADD_FSGROUP, add_fsgroup add_filesys_to_fsgroup 3 }
+       re-order        { MM_MOV_FSGROUP, order_fsgroup 0 -1 }
+       remove          { MM_DEL_FSGROUP, del_fsgroup remove_filesys_from_fsgroup 2 }
 
 = filesystem
-       show                    { MM_SHOW_FILSYS, show_filsys }
-       add                     { MM_ADD_FILSYS, add_filsys }
-       modify                  { MM_MOD_FILSYS, show_filsys }
-       delete                  { MM_DEL_FILSYS, del_filsys }
-       filesystem group
+       show            { MM_SHOW_FILSYS, show_filsys get_filesys_by_label 1 }
+       add             { MM_ADD_FILSYS, add_filsys add_filesys 11 }
+       modify          { MM_MOD_FILSYS, select_filsys get_filesys_by_label 1 }
+       delete          { MM_DEL_FILSYS, del_filsys delete_filesys 1 }
+;      filesystem group
        filesystem alias
        nfs partition
 
 = kerberos mapping
-       show                    { MM_SHOW_KRBMAP, show_krbmap }
-       add                     { MM_ADD_KRBMAP, add_krbmap }
-       delete                  { MM_DEL_KRBMAP, add_krbmap }
+       show            { MM_SHOW_KRBMAP, show_krbmap get_kerberos_user_map 2 }
+       add             { MM_ADD_KRBMAP, add_krbmap add_kerberos_user_map 2 }
+       delete          { MM_DEL_KRBMAP, del_krbmap delete_kerberos_user_map 2 }
 
 = pobox
-       show                    { MM_SHOW_POBOX, select_pobox }
-       set                     { MM_SET_POBOX, set_pobox }
-       delete                  { MM_DEL_POBOX, select_pobox }
+       show            { MM_SHOW_POBOX, select_pobox get_pobox 1 }
+       set             { MM_SET_POBOX, set_pobox set_pobox 3 }
+       reset           { MM_RESET_POBOX, reset_pobox set_pobox_pop 1 }
+       delete          { MM_DEL_POBOX, del_pobox delete_pobox 1 }
 
 = user
-       show                    { MM_SHOW_USER, show_user }
-       add                     { MM_ADD_USER, add_user }
-       register                { MM_REGISTER, register_user }
-       modify                  { MM_MOD_USER, select_user }
-       deactivate              { MM_DEACTIVATE, select_user }
-       expunge                 { MM_EXPUNGE, select_user }
-       show finger info        { MM_SHOW_FINGER, select_user }
-       modify finger info      { MM_MOD_FINGER, mod_finger }
+       show            { MM_SHOW_USER, show_user get_user_by_login 1 }
+       add             { MM_ADD_USER, add_user add_user 9 }
+       register        { MM_REGISTER, register_user register_user 3 }
+       modify          { MM_MOD_USER, select_user get_user_by_login 1 }
+       deactivate      { MM_DEACTIVATE, deactivate_user update_user_status 2 }
+       expunge         { MM_EXPUNGE, expunge_user delete_user 1 }
+       show finger info { MM_SHOW_FINGER, show_finger get_finger_by_login 1 }
+       modify finger info { MM_MOD_FINGER, select_finger get_finger_by_login 1 }
        kerberos mapping
 
+= help
+       about moira     { MM_HELP_MOIRA, 0 about_moira 0 }
+       wildcards       { MM_HELP_WILDCARDS, 0 wildcards 0 }
+       reporting bugs  { MM_HELP_BUGS, 0, bugs 0 }
+       authors         { MM_HELP_AUTHORS, 0 authors 0 }
+
+= file
+       save log buffer { MM_SAVE_LOG, save_log 0 0 }
+       sticky forms { MM_PERSISTANT_FORMS, sticky_forms 0 0 }
+       quit            { MM_QUIT, 0 0 0 }
+
 = toplevel
+       file
        user
        pobox
        list
-       list membership
+       members
        filesystem
        quota
        machine
        cluster
        printer
        zephyr
-       server updates
-       miscellaneous
-
+       updates
+       misc
+       help
index baafcab6aac7d6fb9dc354006b7ceb565caab943..9e63de5fd01ef6edd0c630d1a332e798168f1629 100644 (file)
@@ -1,5 +1,15 @@
 /* $Header$ */
 
+#include "data.h"
+
+extern EntryForm *GetAndClearForm(), *GetForm();
+extern char *user, *program_name;
+extern char *user_states[], *nfs_states[];
+extern char *StringValue();
+extern int DisplayCallback();
+
+#define HELPFILE       "/usr/athena/lib/moira.help"
+
 #define MM_STATS       1
 #define MM_CLIENTS     2
 #define MM_SHOW_VALUE  3
@@ -16,7 +26,7 @@
 #define MM_DEL_SERVICE 14
 #define MM_CLEAR_SERVICE       15
 #define MM_RESET_SERVICE       16
-#define MM_SHOW_DCMM   17
+#define MM_SHOW_DCM    17
 #define MM_ENABLE_DCM  18
 #define MM_TRIGGER_DCM 19
 #define MM_SHOW_ZEPHYR 20
 #define MM_EXPUNGE     84
 #define MM_SHOW_FINGER 85
 #define MM_MOD_FINGER  86
+#define MM_RESET_POBOX 87
+#define MM_HELP_MOIRA  88
+#define MM_HELP_WILDCARDS 89
+#define MM_HELP_AUTHORS 90
+#define MM_HELP_BUGS   91
+#define MM_SAVE_LOG    92
+#define MM_PERSISTANT_FORMS 93
+#define MM_QUIT                94
index deb1f8ce61efed034db6a90ba1ee761f1f7d55bb..afcb15c62bade146471413989d3faab0934ef364 100644 (file)
@@ -50,6 +50,35 @@ EntryForm *form;
        fn = "mod_filsys";
        count = FS_MODTIME;
        break;
+    case MM_MOD_NFS:
+       f = GetAndClearForm("mod_nfs");
+       if (f == NULL) {
+           display_error("Unknown form in ModifyCallback of mod_nfs\n");
+           return;
+       }
+       f->extrastuff = form->extrastuff;
+       f->menu = form->menu;
+       StoreField(f, 0, argv[0]);
+       StoreField(f, 1, argv[1]);
+       StoreField(f, 2, argv[2]);
+       f->inputlines[3]->keywords = nfs_states;
+       for (i = 0; nfs_states[i]; i++)
+         if ((atoi(nfs_states[i]) & ~MR_FS_GROUPQUOTA) == atoi(argv[3]))
+           StoreField(f, 3, nfs_states[i]);
+       StoreField(f, 3, argv[3]);
+       if (atoi(argv[3]) && MR_FS_GROUPQUOTA)
+         f->inputlines[4]->returnvalue.booleanvalue = 1;
+       StoreField(f, 5, argv[4]);
+       StoreField(f, 6, argv[5]);
+       return;
+    case MM_MOD_MACH:
+       fn = "mod_machine";
+       count = M_MODTIME;
+       break;
+    case MM_MOD_CLUSTER:
+       fn = "mod_cluster";
+       count = C_MODTIME;
+       break;
     }
 
     if (count > 0) {
@@ -80,9 +109,10 @@ MoiraFormComplete(dummy1, form)
 int dummy1;
 EntryForm *form;
 {
-    char *qy, *argv[32], buf[256];
+    char *qy, *argv[32], buf[256], *s;
     int (*retfunc)(), argc, i;
     EntryForm *f;
+    static int persistant_forms = 0;
 
     retfunc = DisplayCallback;
     argc = -1;
@@ -139,7 +169,7 @@ EntryForm *form;
            i = MoiraQuery("get_user_by_name", 2, argv,
                           ModifyCallback, (char *)form);
            if (i) {
-               com_err(program_name, i, "looking up user by name");
+               com_err(program_name, i, " looking up user by name");
                return;
            }
            if (form->extrastuff == NULL) {
@@ -223,12 +253,17 @@ EntryForm *form;
        if (!*stringval(form, 0)) {
            qy = "get_lists_of_member";
            argv[0] = stringval(form, 1);
+           sprintf(buf, "Lists of %s %s:\n", stringval(form, 1), argv[1]);
+           AppendToLog(buf);
            if (boolval(form, 3)) {
                sprintf(buf, "R%s", stringval(form, 1));
                argv[0] = buf;
            }
            argv[1] = stringval(form, 2);
            argc = 2;
+       } else {
+           sprintf(buf, "Members of list %s:\n", argv[0]);
+           AppendToLog(buf);
        }
        break;
     case MM_DEL_ALL_MEMBER:
@@ -241,7 +276,7 @@ EntryForm *form;
            argv[0] = stringval(form, 0);
            argc = 1;
        } else if (*stringval(form, 1)) {
-           argv[0] = canonicalize_hostname(stringval(form, 1));
+           StoreHost(form, 1, &argv[0]);
            if (*stringval(form, 2)) {
                qy = "get_filesys_by_nfsphys";
                argv[1] = stringval(form, 2);
@@ -257,16 +292,17 @@ EntryForm *form;
        }
        break;
     case MM_ADD_FILSYS:
-       argv[FS_MACHINE] = canonicalize_hostname(stringval(form, FS_MACHINE));
+       StoreHost(form, FS_MACHINE, &argv[FS_MACHINE]);
        if (!strcmp(stringval(form, FS_TYPE), "AFS") ||
            !strcmp(stringval(form, FS_TYPE), "FSGROUP"))
          argv[FS_MACHINE] = "\\[NONE\\]";
        break;
     case MM_MOD_FILSYS:
        if (!strcmp(form->formname, "mod_filsys")) {
-           qy = "update_filsys";
+           qy = "update_filesys";
            for (i = 0; i < FS_MODTIME; i++)
              argv[i + 1] = StringValue(form, i);
+           StoreHost(form, FS_MACHINE, &argv[FS_MACHINE + 1]);
            argv[0] = form->extrastuff;
            argc = FS_MODTIME + 1;
            break;
@@ -274,6 +310,41 @@ EntryForm *form;
        form->extrastuff = (caddr_t) "mod_filsys";
        retfunc = ModifyCallback;
        break;
+    case MM_ADD_FSGROUP:
+       
+       break;
+    case MM_SHOW_FS_ALIAS:
+    case MM_ADD_FS_ALIAS:
+    case MM_DEL_FS_ALIAS:
+       argv[1] = "FILESYS";
+       argv[2] = stringval(form, 1);
+       break;
+    case MM_SHOW_NFS:
+       StoreHost(form, NFS_NAME, &argv[NFS_NAME]);
+       if (!*stringval(form, 1))
+         argv[1] = "*";
+       break;
+    case MM_ADD_NFS:
+       StoreHost(form, NFS_NAME, &argv[NFS_NAME]);
+       sprintf(buf, "%d", atoi(stringval(form, NFS_STATUS)) +
+               (boolval(form, 4) ? MR_FS_GROUPQUOTA : 0));
+       argv[NFS_STATUS] = buf;
+       argv[NFS_ALLOC] = stringval(form, 5);
+       argv[NFS_SIZE] = stringval(form, 6);
+       break;
+    case MM_MOD_NFS:
+       StoreHost(form, NFS_NAME, &argv[NFS_NAME]);
+       if (!strcmp(form->formname, "mod_nfs")) {
+           qy = "update_nfsphys";
+           argc = NFS_MODTIME;
+           break;
+       }
+       form->extrastuff = (caddr_t) "mod_nfs";
+       retfunc = ModifyCallback;
+       break;
+    case MM_DEL_NFS:
+       StoreHost(form, NFS_NAME, &argv[NFS_NAME]);
+       break;
     case MM_SHOW_QUOTA:
        if (!*stringval(form, 0))
          argv[0] = "*";
@@ -294,7 +365,7 @@ EntryForm *form;
     case MM_SHOW_MACH:
     case MM_ADD_MACH:
     case MM_DEL_MACH:
-       argv[0] = canonicalize_hostname(stringval(form, 0));    
+       StoreHost(form, 0, &argv[0]);
        break;
     case MM_MOD_MACH:
        if (!strcmp(form->formname, "mod_machine")) {
@@ -305,11 +376,51 @@ EntryForm *form;
            argc = M_MODTIME + 1;
            break;
        }
-       argv[0] = canonicalize_hostname(stringval(form, 0));    
+       StoreHost(form, 0, &argv[0]);
        form->extrastuff = (caddr_t) "mod_machine";
        retfunc = ModifyCallback;
        break;
-
+    case MM_MOD_CLUSTER:
+       if (!strcmp(form->formname, "mod_cluster")) {
+           qy = "update_cluster";
+           for (i = 0; i < C_MODTIME; i++)
+             argv[i + 1] = StringValue(form, i);
+           argv[0] = form->extrastuff;
+           argc = C_MODTIME + 1;
+           break;
+       }
+       form->extrastuff = (caddr_t) "mod_cluster";
+       retfunc = ModifyCallback;
+       break;
+    case MM_SHOW_MCMAP:
+       if (!*stringval(form, 0))
+         argv[0] = "*";
+       else
+         StoreHost(form, 0, &argv[0]);
+       if (!*stringval(form, 1))
+         argv[1] = "*";
+       AppendToLog("Cluster mappings:\n");
+       break;
+    case MM_ADD_MCMAP:
+    case MM_DEL_MCMAP:
+       StoreHost(form, 0, &argv[0]);
+       break;
+    case MM_SHOW_CLDATA:
+       if (!*stringval(form, 1))
+         argv[1] = "*";
+       break;
+    case MM_ADD_PCAP:
+       StoreHost(form, PCAP_SPOOL_HOST, &argv[PCAP_SPOOL_HOST]);
+       StoreHost(form, PCAP_QSERVER, &argv[PCAP_QSERVER]);
+       break;
+    case MM_SAVE_LOG:
+       display_error("Not yet implemented.");
+       return;
+    case MM_PERSISTANT_FORMS:
+       persistant_forms = boolval(form, 0);
+       if (!persistant_forms)
+         XtUnmanageChild(form->formpointer);
+       return;
     }
 
     if (argc == -1) {
@@ -318,7 +429,7 @@ EntryForm *form;
     }
     i = MoiraQuery(qy, argc, argv, retfunc, (char *)form);
     if (i) {
-       com_err(program_name, i, "executing database query");
+       com_err(program_name, i, " executing database query");
        return;
     }
     
@@ -342,6 +453,7 @@ EntryForm *form;
          AppendToLog("Done.\n");
        break;
     case MM_MOD_FINGER:
+    case MM_MOD_CLUSTER:
        if (!f)
          AppendToLog("Done.\n");         
        break;
@@ -368,6 +480,12 @@ EntryForm *form;
        else
          AppendToLog("Done.\n");         
        break;
+    case MM_MOD_NFS:
+       if (f)
+         f->inputlines[3]->keywords = nfs_states;
+       else
+         AppendToLog("Done.\n");         
+       break;
     case MM_ADD_HOST:
     case MM_DEL_HOST:
     case MM_CLEAR_HOST:
@@ -419,6 +537,9 @@ EntryForm *form;
        AppendToLog("Done.\n");
     }
 
+    if (!persistant_forms)
+      XtUnmanageChild(form->formpointer);
+
     if (f)
       DisplayForm(f);
     else
@@ -444,23 +565,35 @@ MenuItem *m;
        argv[0] = argv[1] = argv[3] = "TRUE";
        argv[2] = "FALSE";
        argv[4] = "DONTCARE";
+       AppendToLog("Public Mailinglists:\n");
        break;
     case MM_SHOW_DQUOTA:
        argv[0] = "def_quota";
        break;
     case MM_SHOW_DCM:
-       AppendToLog("Services and Hosts with failed updates:");
+       AppendToLog("Services and Hosts with failed updates:\n");
        argv[0] = argv[2] = "DONTCARE";
        argv[1] = "TRUE";
        i = MoiraQuery("qualified_get_server", 3, argv, retfunc, NULL);
        if (i && i != MR_NO_MATCH)
-         com_err(program_name, i, "executing database query");
-       qy = "qualified_get_server_host";
+         com_err(program_name, i, " executing database query");
        argv[0] = "*";
        argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
        argv[4] = "TRUE";
-       argc = 6;
-       break;
+       i = MoiraQuery("qualified_get_server_host", 6, argv, retfunc, NULL);
+       if (i && i != MR_NO_MATCH)
+         com_err(program_name, i, " executing database query");
+       AppendToLog("\n");
+       return;
+    case MM_HELP_MOIRA:
+    case MM_HELP_WILDCARDS:
+    case MM_HELP_AUTHORS:
+    case MM_HELP_BUGS:
+       help(m->query);
+       return;
+    case MM_QUIT:
+       mr_disconnect();
+       exit(0);
     }
     if (argc == -1) {
        display_error("Unknown function in menu callback.\n");
@@ -468,7 +601,8 @@ MenuItem *m;
     }
     i = MoiraQuery(qy, argc, argv, retfunc, (char *)&dummy);
     if (i)
-      com_err(program_name, i, "executing database query");
+      com_err(program_name, i, " executing database query");
+    AppendToLog("\n");
 }
 
 
index bf1c7ee744133b9506b8ae8de4bf1f8e2045e2a4..d9055c4a440d234263c8c3e6606ba2a71bb02841 100644 (file)
@@ -56,10 +56,15 @@ PopupErrorMessage(text, extrahelp)
 char   *text;
 char   *extrahelp;
 {
-       Widget          child;
+       static Widget           child;
        Arg             wargs[10];
        int             n;
-       XmString        label;          /* !@#$%^ compound string required */
+       static XmString        label;
+
+       if (label) {
+               XtFree(label);
+               XtDestroyWidget(child);
+       }
 
 
        label = XmStringCreateLtoR( text, XmSTRING_DEFAULT_CHARSET);
@@ -89,11 +94,15 @@ void
 PopupHelpWindow(text)
 char   *text;
 {
-       Widget          child;
+       static Widget           child;
        Arg             wargs[10];
        int             n;
-       XmString        label;          /* !@#$%^ compound string required */
 
+       static XmString        label;
+       if (label) {
+               XtFree(label);
+               XtDestroyWidget(child);
+       }
 
        label = XmStringCreateLtoR( text, XmSTRING_DEFAULT_CHARSET);
 
@@ -180,20 +189,21 @@ EntryForm *spec;
 
                case FT_BOOLEAN:
                        n = 0;
-                       XtSetArg(wargs[n], XmNset, current->returnvalue.booleanvalue);  n++;
+                       XtSetArg(wargs[n], XmNset,
+                                current->returnvalue.booleanvalue ? True : False);     n++;
                        XtSetValues (current->mywidget, wargs, n);
                        break;
 
                case FT_KEYWORD:
                        kidcount = ((CompositeRec *)(current->mywidget))->
                                        composite.num_children;
-                       printf ("Keyword field has %d children\n", kidcount);
 
                        while(kidcount--) {
                                n = 0;
                                kid = ((CompositeRec *)(current->mywidget))->
                                        composite.children[kidcount];
-                               if (!strcmp (XtName(kid), current->returnvalue.stringvalue)) {
+                               if (current->returnvalue.stringvalue &&
+                                       (!strcmp (XtName(kid), current->returnvalue.stringvalue))) {
                                        XtSetArg(wargs[n], XmNset, True);
                                        n++;
                                }
This page took 0.185725 seconds and 5 git commands to generate.