3 * This is the file menus.c for the Moira Client, which allows users
4 * to quickly and easily maintain most parts of the Moira database.
5 * It Contains: All menu definitions.
8 * By: Chris D. Peterson
10 * Copyright (C) 1988-1998 by the Massachusetts Institute of Technology.
11 * For copying and distribution information, please see the file
17 #include "mit-copyright.h"
27 /* ------------------------- Second Tier Menus ------------------------- */
33 Menu cluster_data_menu = {
39 { ShowClusterData, NULLMENU, 3, {
40 {"show", "Show Data on a given Cluster"},
41 {"clus", "Cluster's Name: "},
42 {"label", "Label Identifing the data: "},
44 { AddClusterData, NULLMENU, 4, {
45 {"add", "Add Data to a given Cluster"},
46 {"clus", "Cluster Name: "},
47 {"label", "Label Identifing the data: "},
48 {"data", "The data to be added: "},
50 { RemoveClusterData, NULLMENU, 3, {
51 {"delete", "Remove Data from a given Cluster"},
52 {"clus", "Cluster's Name: "},
53 {"label", "Label Identifing the data: "},
55 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
60 * List Information Menu
63 Menu list_info_menu = {
66 "List Information Menu",
70 "Show all lists to which a given member belongs",
73 "Show all items which a given member can administer",
75 SIMPLEFUNC("public", "Show all public mailing lists",
76 ListAllPublicMailLists),
81 * List Member Tags Menu
84 Menu list_tags_menu = {
87 "List Member Tags Menu",
90 SIMPLEFUNC("change", "Change the tag on a list member", TagMember),
91 SIMPLEFUNC("show", "Show all list members with tags", ListMembersWithTags),
99 Menu list_member_menu = {
100 ListmaintMemberMenuEntry,
101 ListmaintMemberMenuExit,
105 SIMPLEFUNC("add", "Add a member to this list", AddMember),
106 SIMPLEFUNC("remove", "Remove a member from this list", DeleteMember),
107 SIMPLEFUNC("all", "Show the members of this list", ListAllMembers),
108 SIMPLEFUNC("user", "Show the members of type USER", ListUserMembers),
109 SIMPLEFUNC("list", "Show the members of type LIST", ListListMembers),
110 SIMPLEFUNC("string", "Show the members of type STRING",
112 SUBMENU("tags", "List Member Tags Menu", &list_tags_menu),
113 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
118 * Machine To Cluster Mappings Menu
121 Menu mappings_menu = {
124 "Machine To Cluster Mappings Menu",
127 { MachineToClusterMap, NULLMENU, 3, {
128 {"map", "Show Machine to cluster mapping"},
129 {"name", "Machine's Name: "},
130 {"cluster", "Cluster's Name: "},
132 { AddMachineToCluster, NULLMENU, 3, {
133 {"addcluster", "Add machine to a cluster"},
134 {"name", "Machine's Name: "},
135 {"cluster", "Cluster's Name: "},
137 { RemoveMachineFromCluster, NULLMENU, 3, {
138 {"remcluster", "Remove machines from clusters"},
139 {"name", "Machine's Name: "},
140 {"cluster", "Cluster's Name: "},
142 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode),
147 * Machine to Container Mappings Menu
150 Menu cmappings_menu = {
153 "Machine to Container Mappings Menu",
156 { MachineToContainerMap, NULLMENU, 2, {
157 {"map", "Show Machine to container mapping"},
158 {"name", "Machine's Name: "}
160 { AddMachineToContainer, NULLMENU, 3, {
161 {"addcontainer", "Add machine to a container"},
162 {"name", "Machine's Name: "},
163 {"container", "Container's Name: "},
165 { RemoveMachineFromContainer, NULLMENU, 3, {
166 {"remcontainer", "Remove machine from a container"},
167 {"name", "Machine's Name: "},
168 {"container", "Container's Name: "},
170 { GetMachinesOfContainer, NULLMENU, 2, {
171 {"machofcont", "Show all machines in a container"},
172 {"name", "Container's Name: "},
174 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode),
179 * Post Office Box Menu
185 "Post Office Box Menu",
188 {GetUserPOBox, NULLMENU, 2, {
189 {"show", "Show a user's post office box"},
190 {"login name", "login name: "}
192 {SetUserPOBox, NULLMENU, 2, {
193 {"set", "Set (Add or Change) a user's post office box"},
194 {"login name", "login name: "}
196 {SplitUserPOBox, NULLMENU, 2, {
197 {"split", "Split a user's post office box"},
198 {"login name", "login name: "}
200 {RemoveUserPOBox, NULLMENU, 2, {
201 {"remove", "Remove a user's post office box"},
202 {"login name", "login name: "}
204 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
218 SIMPLEFUNC("shdef", "Show default user quota (in KB)", ShowDefaultQuota),
219 {ChangeDefaultQuota, NULLMENU, 2, {
220 {"chdef", "Change default user quota"},
221 {"quota", "New quota (in KB): "}
223 SIMPLEFUNC("getquota", "Show a quota on a filesystem",
225 SIMPLEFUNC("getfsquotas", "Show all quotas on a filesystem",
227 SIMPLEFUNC("addquota", "Add a new disk quota on a filesystem",
229 SIMPLEFUNC("upquota", "Change a quota on a filesystem",
231 SIMPLEFUNC("delquota", "Delete a quota on a filesystem",
233 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
237 Menu fsgroup_menu = {
240 "Filesystem Group Menu",
243 { GetFS, NULLMENU, 2, {
244 {"get", "Get individual or group filesystem information"},
245 {"name", "Name of Filesystem: "}
247 { AddFSToGroup, NULLMENU, 3, {
248 {"add", "Add a new filesystem to an FS group"},
249 {"group", "FS Group name: "},
250 {"filsys", "Filesystem name: "}
252 { RemoveFSFromGroup, NULLMENU, 3, {
253 {"remove", "Remove a filesystem from an FS group"},
254 {"group", "FS Group name: "},
255 {"filsys", "Filesystem name: "}
257 { ChangeFSGroupOrder, NULLMENU, 2, {
258 {"order", "Change the order of filesystems in a group"},
259 {"group", "FS Group name: "}
261 SIMPLEFUNC("help", "Info on Filesystem Groups", FSGroupHelp),
262 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
266 Menu service_menu = {
272 { showserv, NULLMENU, 2, {
273 { "showserv", "Show service information" },
274 { "service name", "Name of service: " },
276 { addserv, NULLMENU, 2, {
277 { "addserv", "Add a new service" },
278 { "service name", "Name of service: " },
280 { updateserv, NULLMENU, 2, {
281 { "updateserv", "Update service information" },
282 { "service name", "Name of service: " },
284 { resetsrverr, NULLMENU, 2, {
285 { "resetsrverr", "Reset service error" },
286 { "service name", "Name of service: " },
288 { resetsrvc, NULLMENU, 2, {
289 { "resetsrvc", "Reset service state" },
290 { "service name", "Name of service: " },
292 { delserv, NULLMENU, 2, {
293 { "delserv", "Delete service info" },
294 { "service name", "Name of service: " },
305 { showhost, NULLMENU, 3, {
306 { "showhost", "Show service/host tuple information" },
307 { "service name", "Name of service: " },
308 { "host name", "Name of machine: " },
310 { addhost, NULLMENU, 3, {
311 { "addhost", "Add a new service/host tuple" },
312 { "service name", "Name of service: " },
313 { "host name", "Name of machine: " },
315 { updatehost, NULLMENU, 3, {
316 { "updatehost", "Update a service/host tuple" },
317 { "service name", "Name of service: " },
318 { "host name", "Name of machine: " },
320 { resethosterr, NULLMENU, 3, {
321 { "resethosterr", "Reset service/host error" },
322 { "service name", "Name of service: " },
323 { "host name", "Name of machine: " },
325 { resethost, NULLMENU, 3, {
326 { "resethost", "Reset service/host state" },
327 { "service name", "Name of service: " },
328 { "host name", "Name of machine: " },
330 { sethostor, NULLMENU, 3, {
331 { "override", "Set service/host override" },
332 { "service name", "Name of service: " },
333 { "host name", "Name of machine: " },
335 { delhost, NULLMENU, 3, {
336 { "delhost", "Delete service/host tuple" },
337 { "service name", "Name of service: " },
338 { "host name", "Name of machine: " },
343 /* User Reservations Menu */
344 Menu reservations_menu = {
347 "User Reservations Menu",
350 { GetUserReservations, NULLMENU, 2, {
351 { "get", "Get User Reservations" },
352 { "login name", "User login name: " },
354 { AddUserReservation, NULLMENU, 3, {
355 { "add", "Add User Reservation" },
356 { "login name", "User login name: " },
357 { "reservation", "Reservation: " },
359 { DelUserReservation, NULLMENU, 3, {
360 { "delete", "Delete User Reservation" },
361 { "login name", "User login name: " },
362 { "reservation", "Reservation: " },
364 { GetUserByReservation, NULLMENU, 2, {
365 { "getres", "Get Users by Reservation" },
366 { "reservation", "Reservation: " },
371 /* ------------------------- First Tier Menus ------------------------- */
377 Menu cluster_menu = {
383 { ShowClusterInfo, NULLMENU, 2, {
384 {"show", "Get cluster information"},
385 {"name", "Cluster's Name: "}
387 { AddCluster, NULLMENU, 2, {
388 {"add", "Add a new cluster"},
389 {"name", "Cluster's Name: "},
391 { UpdateCluster, NULLMENU, 2, {
392 {"update", "Update cluster information"},
393 {"name", "Cluster's Name: "},
395 { DeleteCluster, NULLMENU, 2, {
396 {"delete", "Delete this cluster"},
397 {"name", "Cluster's Name: "}
399 SUBMENU("mappings", "Machine To Cluster Mappings Menu", &mappings_menu),
400 SUBMENU("c_data", "Cluster Data Menu", &cluster_data_menu),
401 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
409 Menu filesys_menu = {
415 { GetFS, NULLMENU, 2, {
416 {"get", "Get Filesystem Name Information"},
417 {"name", "Name of Filesystem: "}
419 { GetFSM, NULLMENU, 2, {
420 {"getmach", "Get Filesystems by Machine"},
421 {"name", "Name of Server: "}
423 { AddFS, NULLMENU, 2, {
424 {"add", "Add New Filesystem to Database"},
427 { ChangeFS, NULLMENU, 2, {
428 {"change", "Update Filesystem Information"},
431 { DeleteFS, NULLMENU, 2, {
432 {"delete", "Delete Filesystem"},
433 {"name", "Filesystem Name: "}
435 SUBMENU("fsgroups", "File System Groups Menu", &fsgroup_menu),
436 { GetFSAlias, NULLMENU, 2, {
437 {"check", "Check An Association"},
438 {"name", "Alias name: "}
440 { CreateFSAlias, NULLMENU, 2, {
441 {"alias", "Associate with a Filesystem"},
442 {"name", "Alias name: "},
444 { DeleteFSAlias, NULLMENU, 2, {
445 {"unalias", "Disassociate from a Filesystem"},
446 {"name", "Alias name: "},
448 SUBMENU("quotas", "Quota Menu", "a_menu),
449 /* SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode), */
450 /* SIMPLEFUNC("help", "Help ..", AttachHelp) */
460 { ShowSubnetInfo, NULLMENU, 2, {
461 {"show", "Get network information"},
462 {"name", "Network's Name: "}
464 { AddSubnet, NULLMENU, 2, {
465 {"add", "Add a new network"},
466 {"name", "Network's Name: "},
468 { UpdateSubnet, NULLMENU, 2, {
469 {"update", "Update network information"},
470 {"name", "Network's Name: "},
472 { DeleteSubnet, NULLMENU, 2, {
473 {"delete", "Delete this network"},
474 {"name", "Network's Name: "}
476 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
486 { ShowCname, NULLMENU, 3, {
487 {"show", "Get host alias information"},
488 {"alias", "Alias Name (Cname): "},
489 {"host", "Canonical Host Name: "}
491 { AddCname, NULLMENU, 3, {
492 {"add", "Add a new host alias"},
493 {"alias", "Alias Name (Cname): "},
494 {"host", "Canonical Host Name: "}
496 { DeleteCname, NULLMENU, 3, {
497 {"delete", "Delete this alias"},
498 {"alias", "Alias Name (Cname): "},
499 {"host", "Canonical Host Name: "}
501 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
509 Menu machine_menu = {
515 { ShowMachineInfo, NULLMENU, 2, {
516 {"show", "Get machine information"},
517 {"name", "Machine's Name: "}
519 { ShowMachineQuery, NULLMENU, 5, {
520 {"query", "Lookup machines"},
521 {"name", "Machine Name (or leave empty to match any): "},
522 {"address", "Address in dotted notation (or leave empty to match any): "},
523 {"location", "Location (or leave empty to match any): "},
524 {"network", "Network (or leave empty to match any): "}
526 SIMPLEFUNC("owner", "Lookup machines by owner", MachineByOwner),
527 SIMPLEFUNC("acctnumber", "Lookup machines by account number",
528 MachineByAcctNumber),
529 { AddMachine, NULLMENU, 2, {
530 {"add", "Add a new machine"},
531 {"network", "Network assignment: "},
533 { UpdateMachine, NULLMENU, 2, {
534 {"update", "Update machine information"},
535 {"name", "Machine's Name: "},
537 { DeleteMachine, NULLMENU, 2, {
538 {"delete", "Delete this machine"},
539 {"name", "Machine's Name: "}
541 SUBMENU("cnames", "Alias names for machines", &cname_menu),
542 SUBMENU("mappings", "Machine To Cluster Mappings Menu", &mappings_menu),
556 { ShowListInfo, NULLMENU, 2, {
557 {"show", "Display information about a list"},
558 {"list name", "Name of list: "}
560 { NULLFUNC, &list_member_menu, 2, {
561 {"add", "Create new List"},
562 {"list name", "Name of list: "}
564 { UpdateList, NULLMENU, 2, {
565 {"update", "Update characteristics of a list"},
566 {"list name", "Name of list: "}
568 { DeleteList, NULLMENU, 2, {
569 {"delete", "Delete a List"},
570 {"list name", "Name of list: "}
572 SIMPLEFUNC("query_remove",
573 "Interactively remove an item from all lists",
574 InterRemoveItemFromLists),
575 { NULLFUNC, &list_member_menu, 2, {
576 {"members", "Member Menu - Change/Show Members of a List."},
577 {"list name", "Name of list: "}
579 SUBMENU("list_info", "List Info Menu",
581 SUBMENU("quotas", "Quota Menu", "a_menu),
582 /* SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode), */
583 SIMPLEFUNC("help", "Print Help", ListHelp)
591 Menu nfsphys_menu = {
597 { ShowNFSService, NULLMENU, 2, {
598 { "show", "Show an NFS server" },
599 { "machine", "Machine Name: "},
601 { AddNFSService, NULLMENU, 2, {
602 { "add", "Add NFS server" },
603 { "machine", "Machine Name: "},
605 { UpdateNFSService, NULLMENU, 2, {
606 { "update", "Update NFS server"},
607 { "machine", "Machine Name: "},
609 { DeleteNFSService, NULLMENU, 2, {
610 { "delete", "Delete NFS server"},
611 {"machine", "Machine Name: "},
613 SUBMENU("quotas", "Quota Menu", "a_menu),
614 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode),
615 /* SIMPLEFUNC("help", "Help", NFSHelp), */
622 "User Kerberos Mapping Menu",
625 { GetKrbmap, NULLMENU, 3, {
626 { "show", "Show Kerberos Mappings" },
627 { "user", "User login name: " },
628 { "principal", "Principal: " },
630 { AddKrbmap, NULLMENU, 3, {
631 { "add", "Add Kerberos Mapping" },
632 { "user", "User login name: " },
633 { "principal", "Principal (this is case sensitive): " },
635 { DeleteKrbmap, NULLMENU, 3, {
636 { "delete", "Delete Kerberos Mapping" },
637 { "user", "User login name: " },
638 { "principal", "Principal: " },
653 {ShowUserByLogin, NULLMENU, 2, {
654 {"login", "Show user information by login name"},
655 {"login name", "Desired login name: "}
657 {ShowUserByName, NULLMENU, 3, {
658 {"name", "Show user information by name"},
659 {"first", "First name: "},
660 {"last", "Last name: "}
662 {ShowUserByClass, NULLMENU, 2, {
663 {"class", "Show names of users in a given class"},
664 {"login name", "Desired class: "}
666 {ShowUserById, NULLMENU, 2, {
667 {"id", "Show user information by ID number"},
668 {"ID number", "ID number: "}
670 {UpdateUser, NULLMENU, 2, {
671 {"modify", "Change all user fields"},
672 {"login", "Login name: "}
674 SIMPLEFUNC("adduser", "Add a new user to the database",
676 SIMPLEFUNC("register", "Register a user", RegisterUser),
677 {DeactivateUser, NULLMENU, 2, {
678 {"deactivate", "Deactivate user"},
679 {"login", "Login name: "},
681 {DeleteUser, NULLMENU, 2, {
682 {"expunge", "Expunge user"},
683 {"login", "Login name: "}
685 SUBMENU("pobox", "Post Office Box Menu", &pobox_menu),
686 SUBMENU("krbmap", "User Kerberos Mappings", &krbmap_menu),
687 SUBMENU("reservations", "User Reservations Menu", &reservations_menu),
697 SIMPLEFUNC("enable", "Enable/disable DCM", EnableDcm),
698 SUBMENU("service", "DCM Service Menu", &service_menu),
699 SUBMENU("host", "DCM Host Menu", &host_menu),
700 SIMPLEFUNC("active", "Display entries currently being updated",
702 SIMPLEFUNC("failed", "Display entries with errors to be reset", DcmFailed),
703 SIMPLEFUNC("dcm", "Invoke a DCM update now", Dcm),
707 Menu printserver_menu = {
713 { GetPrintSrv, NULLMENU, 2, {
714 {"get", "Get Print Server Information"},
715 {"name", "Name of server: "}
717 { AddPrintSrv, NULLMENU, 2, {
718 {"add", "Add a New Print Server"},
719 {"name", "Name of server: "}
721 { ChangePrintSrv, NULLMENU, 2, {
722 {"change", "Modify a Print Server"},
723 {"name", "Name of server: "}
725 { DelPrintSrv, NULLMENU, 2, {
726 {"delete", "Delete a Print Server"},
727 {"name", "Name of server: "}
736 Menu printer_menu = {
742 { GetPrn, NULLMENU, 2, {
743 {"get", "Get Printer Information"},
744 {"name", "Name of Printer: "}
746 { GetPrnByHostname, NULLMENU, 2, {
747 {"hostname", "Look up Printer Information by Printer Hostname"},
748 {"name", "Hostname of Printer: "}
750 { GetPrnByEthernet, NULLMENU, 2, {
751 {"ether", "Look up Printer Information by Ethernet address"},
752 {"hwaddr", "Ethernet address of Printer: "}
754 { GetPrnByRM, NULLMENU, 2, {
755 {"rm", "Look up Printer Information by Print Spooler"},
756 {"name", "Hostname of spooler: "}
758 { GetPrnByLocation, NULLMENU, 2, {
759 {"loc", "Look up Printer Information by Location"},
760 {"location", "Location: "}
762 { GetPrnByContact, NULLMENU, 2, {
763 {"contact", "Look up Printer Information by Contact Info"},
764 {"contact", "Contact: "}
766 { AddPrn, NULLMENU, 2, {
767 {"add", "Add New Printer to Database"},
770 { ChngPrn, NULLMENU, 2, {
771 {"change", "Update Printer Information"},
774 { DeletePrn, NULLMENU, 2, {
775 {"delete", "Delete Printer"},
776 {"name", "Printer Name: "}
778 { UpdateHWAddr, NULLMENU, 2, {
779 {"hwaddr", "Update Printer Hardware Address"},
780 {"name", "Printer hostname: "}
782 SUBMENU("server", "Print Servers Menu", &printserver_menu),
796 { GetZephyr, NULLMENU, 2, {
797 {"get", "Get Zephyr Class Information"},
798 {"name", "Name of class: "}
800 { AddZephyr, NULLMENU, 2, {
801 {"add", "Add New Zephyr class restrictions"},
802 {"name", "Class name: "},
804 { ChngZephyr, NULLMENU, 2, {
805 {"change", "Update Zephyr class restrictions"},
806 {"name", "Class name: "},
808 { DeleteZephyr, NULLMENU, 2, {
809 {"delete", "Delete Zephyr class restriction"},
810 {"name", "Class Name: "}
812 { NULLFUNC, &list_member_menu, 2, {
813 {"members", "Member Menu - Change/Show Members of a List."},
814 {"list name", "Name of list: "}
829 { GetACL, NULLMENU, 3, {
830 {"get", "Get ACL Information"},
831 {"host", "Machine: "},
832 {"target", "Target file: "}
834 { AddACL, NULLMENU, 3, {
835 {"add", "Add New ACL"},
836 {"host", "Machine: "},
837 {"target", "Target file: "}
839 { DeleteACL, NULLMENU, 3, {
840 {"delete", "Delete ACL"},
841 {"host", "Machine: "},
842 {"target", "Target file: "}
851 Menu container_menu = {
857 { ShowContainerInfo, NULLMENU, 2, {
858 {"show", "Get container information"},
859 {"name", "Container's Name: "}
861 { AddContainer, NULLMENU, 2, {
862 {"add", "Add a new container"},
863 {"name", "Container's Name: "}
865 { UpdateContainer, NULLMENU, 2, {
866 {"update", "Update container information"},
867 {"name", "Container's Name: "}
869 { DeleteContainer, NULLMENU, 2, {
870 {"delete", "Delete this container"},
871 {"name", "Container's Name: "}
873 { GetSubContainers, NULLMENU, 2, {
874 {"subcont", "Get subcontainers of container"},
875 {"name", "Container's Name: "}
877 SIMPLEFUNC("toplevel", "Get all top level containers", GetTopLevelCont),
878 SUBMENU("mappings", "Machine to Container Mappings Menu", &cmappings_menu),
879 SIMPLEFUNC("verbose", "Toggle Verbosity of Delete", ToggleVerboseMode)
890 "Miscellaneous Menu",
893 SIMPLEFUNC("statistics", "Show database statistics", TableStats),
894 SIMPLEFUNC("clients", "Show active Moira clients", ShowClients),
895 { ShowValue, NULLMENU, 2, {
896 {"getval", "Show a database variable value"},
897 {"name", "variable name: "},
899 { ShowAlias, NULLMENU, 3, {
900 {"getalias", "Show an alias relation"},
901 {"name", "Alias name: "},
902 {"type", "Alias type: "},
908 /* ------------------------- Root Menu ------------------------- */
914 Menu moira_top_menu = {
917 "Moira Database Manipulation",
920 SUBMENU("cluster", "Cluster Menu", &cluster_menu),
921 SUBMENU("filesys", "Filesystem Menu", &filesys_menu),
922 SUBMENU("list", "Lists and Group Menu", &list_menu),
923 SUBMENU("machine", "Machine Menu", &machine_menu),
924 SUBMENU("network", "Network Menu", &subnet_menu),
925 SUBMENU("nfs", "NFS Physical Menu", &nfsphys_menu),
926 SUBMENU("printer", "Printer Menu", &printer_menu),
927 SUBMENU("user", "User Menu", &user_menu),
928 SUBMENU("zephyr", "Zephyr ACLS Menu", &zephyr_menu),
929 SUBMENU("dcm", "DCM Menu", &dcm_menu),
930 SUBMENU("acl", "Generic ACL Menu", &acl_menu),
931 SUBMENU("container", "Container Menu", &container_menu),
932 SUBMENU("misc", "Miscellaneous Menu", &misc_menu)