]> andersk Git - moira.git/commitdiff
Initial revision
authormar <mar>
Fri, 4 Jan 1991 17:00:10 +0000 (17:00 +0000)
committermar <mar>
Fri, 4 Jan 1991 17:00:10 +0000 (17:00 +0000)
clients/moira/namespace.c [new file with mode: 0644]

diff --git a/clients/moira/namespace.c b/clients/moira/namespace.c
new file mode 100644 (file)
index 0000000..c244af6
--- /dev/null
@@ -0,0 +1,350 @@
+#if (!defined(lint) && !defined(SABER))
+  static char rcsid_module_c[] = "$Header$";
+#endif lint
+
+/*     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
+ *
+ *      $Source$
+ *      $Author$
+ *      $Header$
+ *     
+ *     Copyright 1988 by the Massachusetts Institute of Technology.
+ *
+ *     For further information on copyright and distribution 
+ *     see the file mit-copyright.h
+ */
+
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <moira.h>
+#include <menu.h>
+#include <krb.h>
+
+
+#include "mit-copyright.h"
+#include "defs.h"
+#include "f_defs.h"
+#include "globals.h"
+
+char * whoami;                 /* used by menu.c ugh!!! */
+char * moira_server;
+int NewListHelp();
+
+/*
+ * List Information Menu
+ */
+
+Menu list_info_menu = {
+    NULLFUNC,
+    NULLFUNC,
+    "List Information Menu",
+    4,
+    {
+        SIMPLEFUNC("member", "Show all lists to which a given member belongs",
+                  ListByMember),
+       SIMPLEFUNC("admin",
+                  "Show all items which a given member can administer",
+                  ListByAdministrator),
+       SIMPLEFUNC("public", "Show all public mailing lists",
+                  ListAllPublicMailLists),
+       SIMPLEFUNC("maillists", "Show all mailing lists",
+                  ListAllMailLists)
+    }
+};
+
+/*
+ * List Member Menu
+ */
+
+Menu list_member_menu = {
+    ListmaintMemberMenuEntry,
+    ListmaintMemberMenuExit,
+    NULL,
+    4,
+    {
+       SIMPLEFUNC("add", "Add a member to this list", AddMember),
+       SIMPLEFUNC("remove", "Remove a member from this list", DeleteMember),
+       SIMPLEFUNC("show", "Show the members of this list", ListAllMembers),
+       SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
+    } 
+};
+
+/*
+ * List Menu
+ */
+
+Menu list_menu = {
+    NULLFUNC,
+    NULLFUNC,
+    "List Menu",
+    6,
+    {
+       { ShowListInfo, NULLMENU, 2, {
+           {"show", "Display information about a list"},
+           {"list name", "Name of list: "}
+       } },
+       { UpdateList, NULLMENU, 2, {
+           {"update", "Update characteristics of a list"},
+           {"list name", "Name of list: "}
+       } },
+       SIMPLEFUNC("query_remove",
+                  "Interactively remove a member from all lists",
+                  InterRemoveItemFromLists),
+       { NULLFUNC, &list_member_menu, 2, {
+           {"members", "Member Menu - Change/Show Members of a List."},
+           {"list name", "Name of list: "}
+       } },
+       SUBMENU("lists", "Find Mailing Lists Menu",
+               &list_info_menu),
+       SIMPLEFUNC("help", "Print Help", NewListHelp)
+    } 
+};
+
+/* 
+ * Post Office Box Menu
+ */
+
+Menu pobox_menu = {
+  NULLFUNC,
+  NULLFUNC,
+  "Mail Forwarding Menu",
+  3,
+  {
+    {GetUserPOBox, NULLMENU, 2, {
+      {"show", "Show a user's post office box"},
+      {"user name", "user name: "}
+    } },
+    {SetUserPOBox, NULLMENU, 2, {
+      {"set", "Set a user's post office box (mail forwarding)"},
+      {"user name", "user name: "}
+    } },
+    {RemoveUserPOBox, NULLMENU, 2, {
+      {"remove", "Remove a user's post office box"},
+      {"user name", "user name: "}
+    } },
+  }
+};
+   
+/*
+ * Miscellaneous Menu
+ */
+
+Menu misc_menu = {
+    NULLFUNC,
+    NULLFUNC,
+    "Miscellaneous Menu",
+    2,
+    {
+       SIMPLEFUNC("statistics", "Show database statistics", TableStats),
+       SIMPLEFUNC("clients", "Show active Moira clients", ShowClients),
+    }
+};
+
+
+Menu namespace_menu = {
+  NULLFUNC,
+  NULLFUNC,
+  "Campus Namespace Database Manipulation",
+  4,
+  {
+    SUBMENU("mail","Mail Forwarding", &pobox_menu),
+    SUBMENU("list","Mailing Lists", &list_menu),
+    {ShowUserByLogin, NULLMENU, 2, {
+       {"account", "Show user account information"},
+       {"login name", "Desired login name: "}
+     } },
+    SUBMENU("misc", "Miscellaneous", &misc_menu)
+  }
+};
+
+
+#ifndef DEBUG
+static void SignalHandler();
+#endif DEBUG
+
+static void ErrorExit(), Usage();
+char *getlogin();
+uid_t getuid();
+struct passwd *getpwuid();
+
+Bool use_menu = TRUE;          /* whether or not we are using a menu. */
+
+/*     Function Name: main
+ *     Description: The main driver for the Moira Client.
+ *     Arguments: argc, argv - standard command line args.
+ *     Returns: doesn't return.
+ */
+
+void
+main(argc, argv)
+    int argc;
+    char ** argv;
+{
+    int status;
+    Menu *menu;
+    char *motd, **arg;
+    char pname[ANAME_SZ];
+
+    if ((program_name = rindex(argv[0], '/')) == NULL)
+      program_name = argv[0];
+    else
+      program_name++;
+    program_name = Strsave(program_name);
+    whoami = Strsave(program_name); /* used by menu.c,  ugh !!! */
+
+    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);
+       }
+    }
+
+    if ( status = mr_connect(moira_server) ) 
+       ErrorExit("\nConnection to Moira server failed", status);
+
+    /* do this now since calling mr_connect initialized the krb error table
+     * for us.
+     */
+    if ((status = tf_init(TKT_FILE, R_TKT_FIL)) ||
+       (status = tf_get_pname(pname))) {
+       com_err(whoami, status, "cannot find your ticket file");
+       exit(1);
+    }
+    tf_close();
+    user = Strsave(pname);
+
+    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 = mr_auth(program_name) ) {
+       if (status == MR_USER_AUTH) {
+           char buf[BUFSIZ];
+           com_err(program_name, status, "\nPress [RETURN] to continue");
+           gets(buf);
+       } else
+         ErrorExit("\nAuthorization failed -- please run kinit", status);
+    }
+
+/*
+ * These signals should not be set until just before we fire up the menu
+ * system. 
+ */
+
+#ifndef DEBUG
+    (void) signal(SIGHUP, SignalHandler);
+    (void) signal(SIGINT, SignalHandler); 
+    (void) signal(SIGQUIT, SignalHandler);
+#endif DEBUG
+
+    menu = &namespace_menu;
+
+    if (use_menu) {            /* Start menus that execute program */
+        Start_paging();
+       Start_menu(menu);
+       Stop_paging();
+    }
+    else                       /* Start program without menus. */
+       Start_no_menu(menu);
+
+    mr_disconnect();
+    exit(0);
+}
+
+/*     Function Name: ErrorExit
+ *     Description: This function does the error handling and exits.
+ *     Arguments: buf - the error message to print.
+ *                 status - the error code.
+ *     Returns: doesn't return.
+ */
+
+static void
+ErrorExit(buf,status)
+int status;
+char * buf;    
+{
+    com_err(program_name, status, buf);
+    mr_disconnect();
+    exit(1);
+}
+
+/*     Function Name: usage
+ *     Description: Prints usage info and then exits.
+ *     Arguments: none
+ *     Returns: doesn't return.
+ */
+
+static void
+Usage()
+{
+    fprintf(stderr, "Usage: %s [-nomenu]\n", program_name);
+    exit(1);
+}
+
+#ifndef DEBUG
+/*     Function Name: SignalHandler
+ *     Description: This function cleans up from a signal interrupt.
+ *     Arguments: none.
+ *     Returns: doesn't
+ */
+
+static void
+SignalHandler()
+{
+    Put_message("Signal caught - exiting");
+    if (use_menu)
+      Cleanup_menu();
+    mr_disconnect();
+    exit(1);
+}
+#endif DEBUG
+
+
+/* Dummy routine to be able to link against the rest of the moira client */
+
+DeleteUser()
+{
+    return(DM_QUIT);
+};
+
+
+int
+NewListHelp()
+{
+    static char * message[] = {
+       "A list can be a mailing list, an Athena group list, or both.  Each",
+       "list has an owner and members.  The owner of a list may be the list",
+       "itself, another list, or a user.  The members of a list can be users",
+       "(login names), other lists, or foreign address strings.  You can use",
+       "certain keys to do the following:",
+       "    Refresh the screen - Type ctrl-L.",
+       "    Escape from a function - Type ctrl-C.",
+       NULL,
+    };
+
+    return(PrintHelp(message));
+}
This page took 0.0488 seconds and 5 git commands to generate.