]> andersk Git - moira.git/blobdiff - clients/moira/main.c
corrected the usage message (was missing -db arg)
[moira.git] / clients / moira / main.c
index 0a4fff291f32a08d499f68ca382aca4cc4e1d9a7..a528b6b5c5055880603826cabbcff195a62fa9c2 100644 (file)
@@ -2,9 +2,9 @@
   static char rcsid_module_c[] = "$Header$";
 #endif lint
 
-/*     This is the file main.c for the SMS Client, which allows a nieve
- *      user to quickly and easily maintain most parts of the SMS database.
- *     It Contains: The main driver for the SMS Client.
+/*     This is the file main.c for the Moira Client, which allows a nieve
+ *      user to quickly and easily maintain most parts of the Moira database.
+ *     It Contains: The main driver for the Moira Client.
  *     
  *     Created:        4/12/88
  *     By:             Chris D. Peterson
 #include <pwd.h>
 #include <signal.h>
 #include <stdio.h>
-#include <strings.h>
+#include <string.h>
 #include <sys/types.h>
-#include <sms.h>
+#include <moira.h>
 #include <menu.h>
+#include <krb_et.h>
 
 #include "mit-copyright.h"
 #include "defs.h"
 #include "globals.h"
 
 char * whoami;                 /* used by menu.c ugh!!! */
+char * moira_server;
+int interrupt = 0;
 
-extern Menu sms_top_menu;
+extern Menu moira_top_menu, list_menu, user_menu, dcm_menu;
 
 #ifndef DEBUG
-static void SignalHandler();
+static void SignalHandler(), CatchInterrupt();
 #endif DEBUG
 
 static void ErrorExit(), Usage();
@@ -48,7 +51,7 @@ struct passwd *getpwuid();
 Bool use_menu = TRUE;          /* whether or not we are using a menu. */
 
 /*     Function Name: main
- *     Description: The main driver for the SMS Client.
+ *     Description: The main driver for the Moira Client.
  *     Arguments: argc, argv - standard command line args.
  *     Returns: doesn't return.
  */
@@ -59,41 +62,66 @@ main(argc, argv)
     char ** argv;
 {
     int status;
+    Menu *menu;
+    char *motd, **arg;
+#ifdef POSIX
+    struct sigaction act;
+#endif
 
     if ((user = getlogin()) == NULL) 
        user = getpwuid((int) getuid())->pw_name;
     user = (user && strlen(user)) ? Strsave(user) : "";
 
-    init_sms_err_tbl();
-    init_krb_err_tbl();
-    verbose = TRUE;
+    if ((program_name = strrchr(argv[0], '/')) == NULL)
+      program_name = argv[0];
+    else
+      program_name++;
+    program_name = Strsave(program_name);
+    whoami = Strsave(program_name); /* used by menu.c,  ugh !!! */
 
-    switch (argc) {
-    case 2:
-      if (strcmp(argv[1], "-nomenu") == 0)
-       use_menu = FALSE;
-      else 
-       Usage();
-                               /* Fall Through. */
-    case 1:
-      if ((program_name = rindex(argv[0], '/')) == NULL)
-       program_name = argv[0];
-      else
-       program_name++;
-      break;
-    default:
-      Usage();
-      break;
+    verbose = TRUE;
+    arg = argv;
+    moira_server = NULL;
+
+    while (++arg - argv < argc) {
+       if (**arg == '-') {
+           if (!strcmp(*arg, "-nomenu"))
+             use_menu = FALSE;
+           else if (!strcmp(*arg, "-db"))
+             if (arg - argv < argc - 1) {
+                 ++arg;
+                 moira_server = *arg;
+             } else
+               Usage(argv);
+           else
+             Usage(argv);
+       }
     }
 
-    program_name = Strsave(program_name);
-    whoami = Strsave(program_name); /* used by menu.c,  ugh !!! */
+    if ( status = mr_connect(moira_server) ) 
+       ErrorExit("\nConnection to Moira server failed", status);
 
-    if ( status = sms_connect() ) 
-       ErrorExit("\nConnection to SMS server failed", status);
+    if ( status = mr_motd(&motd) )
+        ErrorExit("\nUnable to check server status", status);
+    if (motd) {
+       fprintf(stderr, "The Moira server is currently unavailable:\n%s\n", motd);
+       mr_disconnect();
+       exit(1);
+    }
 
-    if ( status = sms_auth(program_name) ) 
-       ErrorExit("\nAuthorization failed -- please run kinit", status);
+    if ( status = mr_auth(program_name) ) {
+       if (status == MR_USER_AUTH) {
+           char buf[BUFSIZ];
+           com_err(program_name, status, "\nPress [RETURN] to continue");
+           gets(buf);
+       } else {
+         if (status >= ERROR_TABLE_BASE_krb &&
+             status <= ERROR_TABLE_BASE_krb + 256)
+           ErrorExit("\nAuthorization failed -- please run kinit", status);
+         else
+           ErrorExit("\nAuthorization failed.", status);
+       }
+    }
 
 /*
  * These signals should not be set until just before we fire up the menu
@@ -101,20 +129,48 @@ main(argc, argv)
  */
 
 #ifndef DEBUG
+#ifdef POSIX
+    sigemptyset(&act.sa_mask);
+    act.sa_flags = 0;
+    act.sa_handler= (void (*)()) SignalHandler;
+    (void) sigaction(SIGHUP, &act, NULL);
+    (void) sigaction(SIGQUIT, &act, NULL);
+    if (use_menu)
+      (void) sigaction(SIGINT, &act, NULL); 
+    else {
+       act.sa_handler= (void (*)()) CatchInterrupt;
+       (void) sigaction(SIGINT, &act, NULL); 
+    }
+#else
     (void) signal(SIGHUP, SignalHandler);
-    (void) signal(SIGINT, SignalHandler); 
     (void) signal(SIGQUIT, SignalHandler);
-#endif DEBUG
+    if (use_menu)
+      (void) signal(SIGINT, SignalHandler); 
+    else
+      (void) signal(SIGINT, CatchInterrupt); 
+#endif /* POSIX */
+#endif /* DEBUG */
+
+    initialize_gdss_error_table();
+
+    if (!strcmp(program_name, "listmaint"))
+      menu = &list_menu;
+    else if (!strcmp(program_name, "usermaint"))
+      menu = &user_menu;
+    else if (!strcmp(program_name, "dcmmaint"))
+      menu = &dcm_menu;
+    else
+      menu = &moira_top_menu;
 
     if (use_menu) {            /* Start menus that execute program */
         Start_paging();
-       Start_menu(&sms_top_menu);
+       Start_menu(menu);
        Stop_paging();
     }
     else                       /* Start program without menus. */
-       Start_no_menu(&sms_top_menu);
+       Start_no_menu(menu);
 
-    sms_disconnect();
+    mr_disconnect();
     exit(0);
 }
 
@@ -131,7 +187,7 @@ int status;
 char * buf;    
 {
     com_err(program_name, status, buf);
-    sms_disconnect();
+    mr_disconnect();
     exit(1);
 }
 
@@ -144,7 +200,7 @@ char * buf;
 static void
 Usage()
 {
-    fprintf(stderr, "Usage: %s [-nomenu]\n", program_name);
+    fprintf(stderr, "Usage: %s [-nomenu] [-db server[:port]]\n", program_name);
     exit(1);
 }
 
@@ -161,7 +217,15 @@ SignalHandler()
     Put_message("Signal caught - exiting");
     if (use_menu)
       Cleanup_menu();
-    sms_disconnect();
+    mr_disconnect();
     exit(1);
 }
+
+
+static void
+CatchInterrupt()
+{
+    Put_message("Interrupt! Press RETURN to continue");
+    interrupt = 1;
+}
 #endif DEBUG
This page took 0.044207 seconds and 4 git commands to generate.