*/
#include <stdio.h>
+#include <strings.h>
+#include <ctype.h>
#include <moira.h>
#include <moira_site.h>
#include <sys/types.h>
+#include <sys/time.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
-#include <X11/IntrinsicP.h>
-#include <X11/CoreP.h>
-#include <X11/CompositeP.h>
#include <Xm/Xm.h>
#include "mmoira.h"
#ifdef GDSS
count = L_MODTIME;
break;
case MM_MOD_FILSYS:
- fn = "mod_filsys";
- count = FS_MODTIME;
+ f = GetAndClearForm("mod_filsys");
+ if (f == NULL) {
+ display_error("Unknown form in ModifyCallback!\n");
+ return;
+ }
+ f->extrastuff = form->extrastuff;
+ f->menu = form->menu;
+ StoreField(f, FS_NAME, argv[FS_NAME + offset]);
+ StoreField(f, FS_TYPE, argv[FS_TYPE + offset]);
+ for (i = FS_TYPE+1; i < FS_MODTIME-1; i++)
+ if (f->inputlines[i+1]->type == FT_BOOLEAN)
+ f->inputlines[i+1]->returnvalue.booleanvalue =
+ strcmp(argv[i + offset], "0") ? 1 : 0;
+ else
+ StoreField(f, i+1, argv[i + offset]);
+ StoreField(f, FS_TYPE+1, argv[FS_L_TYPE + offset]);
+ return;
break;
case MM_MOD_NFS:
f = GetAndClearForm("mod_nfs");
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]))
+ if (atoi(nfs_states[i]) & atoi(argv[3]))
StoreField(f, 3, nfs_states[i]);
- StoreField(f, 3, argv[3]);
- if (atoi(argv[3]) && MR_FS_GROUPQUOTA)
+ if (atoi(argv[3]) & MR_FS_GROUPQUOTA)
f->inputlines[4]->returnvalue.booleanvalue = 1;
+ else
+ f->inputlines[4]->returnvalue.booleanvalue = 0;
StoreField(f, 5, argv[4]);
StoreField(f, 6, argv[5]);
return;
fn = "mod_cluster";
count = C_MODTIME;
break;
+ case MM_MOD_PCAP:
+ fn = "mod_printer";
+ count = PCAP_MODTIME;
+ break;
+ case MM_MOD_SERVICE:
+ f = GetAndClearForm("mod_service");
+ if (f == NULL) {
+ display_error("Unknown form in ModifyCallback of mod_service\n");
+ return;
+ }
+ f->extrastuff = form->extrastuff;
+ f->menu = form->menu;
+ for (i = 0; i < 4; i++) StoreField(f, i, argv[i]);
+ StoreField(f, 4, argv[6]);
+ f->inputlines[5]->returnvalue.booleanvalue = atoi(argv[7]);
+ StoreField(f, 6, argv[11]);
+ StoreField(f, 7, argv[12]);
+ return;
+ break;
+ case MM_MOD_HOST:
+ f = GetAndClearForm("mod_host");
+ if (f == NULL) {
+ display_error("Unknown form in ModifyCallback of mod_host\n");
+ return;
+ }
+ f->extrastuff = form->extrastuff;
+ f->menu = form->menu;
+ StoreField(f, 0, argv[0]);
+ StoreField(f, 1, argv[1]);
+ f->inputlines[2]->returnvalue.booleanvalue = atoi(argv[2]);
+ StoreField(f, 3, argv[10]);
+ StoreField(f, 4, argv[11]);
+ StoreField(f, 5, argv[12]);
+ return;
+ break;
}
if (count > 0) {
*/
count = 0;
for (p = form->inputlines; *p; p++)
- count++;
+ if (!((*p)->insensitive))
+ count++;
while (count-- > 1)
_XmMgrTraversal(form->formpointer, XmTRAVERSE_PREV_TAB_GROUP);
+ MoiraFocusOut(form->inputlines[0]->mywidget,
+ (XEvent *)NULL, (String *)NULL, 0);
process_form(form, FALSE);
}
argv[0] = "*";
if (!*stringval(form, 1))
argv[1] = "*";
+ AppendToLog("Kerberos mappings:\n");
break;
case MM_SET_POBOX:
if (!strcmp(argv[1], "POP"))
case MM_SHOW_ACE_USE:
if (boolval(form, 2)) {
sprintf(buf, "R%s", stringval(form, 0));
- argv[0] = buf;
+ argv[0] = strsave(buf);
}
+ sprintf(buf, "Objects %s %s can administer\n",
+ stringval(form, 0), stringval(form, 1));
+ AppendToLog(buf);
break;
case MM_MOD_LIST:
if (!strcmp(form->formname, "mod_list")) {
argv[1] = stringval(form, 2);
argc = 2;
} else {
- sprintf(buf, "Members of list: %s\n", argv[0]);
+ if (boolval(form, 3)) {
+ qy = "get_end_members_of_list";
+ sprintf(buf, "Recursive members of list: %s\n", argv[0]);
+ } else
+ sprintf(buf, "Members of list: %s\n", argv[0]);
AppendToLog(buf);
}
break;
qy = "get_filesys_by_group";
argv[0] = stringval(form, 3);
argc = 1;
+ } else if (*stringval(form, 4)) {
+ qy = "get_filesys_by_path";
+ argv[0] = stringval(form, 4);
+ argc = 1;
}
/* fall through to */
case MM_SHOW_FSGROUP:
form->extrastuff = (caddr_t) sq_create();
break;
case MM_ADD_FILSYS:
- StoreHost(form, FS_MACHINE, &argv[FS_MACHINE]);
- if (!strcmp(stringval(form, FS_TYPE), "AFS") ||
- !strcmp(stringval(form, FS_TYPE), "FSGROUP") ||
+ for (i = FS_TYPE+1; i < FS_MODTIME-1; i++)
+ argv[i] = StringValue(form, i+1);
+ argv[FS_L_TYPE] = StringValue(form, FS_TYPE+1);
+ StoreHost(form, FS_MACHINE+1, &argv[FS_MACHINE]);
+ if (!strcmp(stringval(form, FS_TYPE), "FSGROUP") ||
!strcmp(stringval(form, FS_TYPE), "MUL"))
- argv[FS_MACHINE] = "\\[NONE\\]";
+ argv[FS_MACHINE+1] = "\\[NONE\\]";
break;
case MM_MOD_FILSYS:
if (!strcmp(form->formname, "mod_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;
+ argv[1] = StringValue(form, 0);
+ argv[2] = StringValue(form, 1);
+ argv[FS_L_TYPE+1] = StringValue(form, 2);
+ StoreHost(form, FS_MACHINE+1, &argv[FS_MACHINE + 1]);
+ for (i = FS_MACHINE+1; i < FS_L_TYPE; i++)
+ argv[i] = StringValue(form, i);
argc = FS_MODTIME + 1;
break;
}
* in the radiobox to find the one selected and the one after
* it. The name of the widget is also the member name.
*/
- {
+ if (!tty) {
Widget w, kid;
- CompositeRec *cr;
argv[3] = "";
- cr = (CompositeRec *)form->inputlines[2]->mywidget;
- for (i = 0; i < cr->composite.num_children; i++) {
- kid = cr->composite.children[i];
+ w = form->inputlines[2]->mywidget;
+ for (i = 0; i < NumChildren(w); i++) {
+ kid = NthChild(w, i);
if (!strcmp(XtName(kid), stringval(form, 2))) {
i++;
- if (i < cr->composite.num_children) {
- argv[3] = strsave(XtName(cr->composite.children[i]));
+ if (i < NumChildren(w)) {
+ argv[3] = strsave(XtName(NthChild(w, i)));
s = index(argv[3], ' ');
if (s) {
argv[3] = s+2;
break;
}
}
+ } else {
+ printf("Don't know how to do this\007\007!\n");
}
if (*argv[3] == 0) argv[3] = "Z";
#ifdef DEBUG
if (s) *s = 0;
break;
case MM_SHOW_FS_ALIAS:
+ if (!*stringval(form, 0))
+ argv[2] = "*";
+ else
+ argv[2] = stringval(form, 0);
+ if (!*stringval(form, 1))
+ argv[0] = "*";
+ else
+ argv[0] = stringval(form, 1);
+ argv[1] = "FILESYS";
+ break;
case MM_ADD_FS_ALIAS:
case MM_DEL_FS_ALIAS:
+ argv[0] = stringval(form, 1);
argv[1] = "FILESYS";
- argv[2] = stringval(form, 1);
+ argv[2] = stringval(form, 0);
break;
case MM_SHOW_NFS:
StoreHost(form, NFS_NAME, &argv[NFS_NAME]);
if (!strcmp(form->formname, "mod_nfs")) {
qy = "update_nfsphys";
argc = NFS_MODTIME;
+ 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;
}
form->extrastuff = (caddr_t) "mod_nfs";
case MM_SHOW_CLDATA:
if (!*stringval(form, 1))
argv[1] = "*";
+ AppendToLog("Cluster data:\n");
break;
case MM_ADD_PCAP:
StoreHost(form, PCAP_SPOOL_HOST, &argv[PCAP_SPOOL_HOST]);
StoreHost(form, PCAP_QSERVER, &argv[PCAP_QSERVER]);
break;
+ case MM_MOD_PCAP:
+ if (!strcmp(form->formname, "mod_printer")) {
+ qy = "update_printcap_entry";
+ argc = PCAP_MODTIME;
+ break;
+ }
+ form->extrastuff = (caddr_t) "mod_printer";
+ retfunc = ModifyCallback;
+ break;
+ case MM_MOD_SERVICE:
+ if (!strcmp(form->formname, "mod_service")) {
+ qy = "update_server_info";
+ argc = SC_END;
+ break;
+ }
+ form->extrastuff = (caddr_t) "mod_service";
+ retfunc = ModifyCallback;
+ break;
+ case MM_RESET_SERVICE:
+ argv[1] = argv[2] = argv[3] = argv[4] = "0";
+ argv[5] = "";
+ break;
+ case MM_RESET_HOST:
+ StoreHost(form, 1, &argv[1]);
+ argv[2] = argv[3] = argv[4] = argv[5] = argv[7] = argv[8] = "0";
+ argv[6] = "";
+ break;
+ case MM_CLEAR_HOST:
+ StoreHost(form, 1, &argv[1]);
+ break;
+ case MM_SHOW_HOST:
+ if (!*stringval(form, 0))
+ argv[0] = "*";
+ if (!*stringval(form, 1))
+ argv[1] = "*";
+ else
+ StoreHost(form, 1, &argv[1]);
+ break;
+ case MM_MOD_HOST:
+ if (!strcmp(form->formname, "mod_host")) {
+ qy = "update_server_host_info";
+ argc = SHI_END;
+ break;
+ }
+ StoreHost(form, 1, &argv[1]);
+ form->extrastuff = (caddr_t) "mod_host";
+ retfunc = ModifyCallback;
+ break;
case MM_SAVE_LOG:
- if (!write_log_to_file(stringval(form, 0)) && remove)
+ if (!write_log_to_file(stringval(form, 0)) && !tty && remove)
XtUnmanageChild(form->formpointer);
return;
case MM_NEW_VALUE:
for (s = argv[2]; *s; s++)
if (islower(*s)) *s = toupper(*s);
break;
+ case MM_TRIGGER_DCM:
+ if (form->inputlines[0]->returnvalue.booleanvalue) {
+ i = mr_do_update();
+ if (i)
+ com_err(program_name, i, " starting DCM");
+ else
+ AppendToLog("DCM started.\n");
+ }
+ if (!tty && remove)
+ XtUnmanageChild(form->formpointer);
+ return;
}
if (argc == -1) {
} else
AppendToLog("Done.\n");
break;
+ case MM_MOD_SERVICE:
+ if (f) {
+ GetKeywords(f, SC_TYPE, "service");
+ GetKeywords(f, SC_ACE_TYPE, "ace_type");
+ }
+ break;
case MM_MOD_FILSYS:
if (f) {
GetKeywords(f, FS_TYPE, "filesys");
sprintf(buf, "fs_access_%s", stringval(f, FS_TYPE));
- GetKeywords(f, FS_ACCESS, buf);
- GetKeywords(f, FS_L_TYPE, "lockertype");
- if (!strcmp(stringval(f, FS_MACHINE), "[NONE]"))
- StoreField(f, FS_MACHINE, "\\[NONE\\]");
+ GetKeywords(f, FS_ACCESS+1, buf);
+ GetKeywords(f, FS_TYPE+1, "lockertype");
+ if (!strcmp(stringval(f, FS_MACHINE+1), "[NONE]"))
+ StoreField(f, FS_MACHINE+1, "\\[NONE\\]");
f->inputlines[FS_TYPE]->valuechanged = MoiraValueChanged;
} else
AppendToLog("Done.\n");
sprintf(buf, "Delete %s %s from list %s?", StringValue(form, 0),
StringValue(form, 1), argv[0]);
if (!boolval(form, 2) ||
- AskQuestion(buf, "If you answer yes, this member will be deleted from the named list.\n\
-Answer no to avoid the deletion. In either case, you will continue to\n\
-be prompted with the other lists the member belongs to.")) {
+ AskQuestion(buf, "confirm_del_all")) {
i = MoiraQuery("delete_member_from_list", 3, argv,
DisplayCallback, NULL);
if (i)
case MM_CLEAR_SERVICE:
case MM_RESET_SERVICE:
case MM_ENABLE_DCM:
- case MM_TRIGGER_DCM:
case MM_ADD_ZEPHYR:
case MM_DEL_ZEPHYR:
case MM_ADD_PCAP:
case MM_RESET_POBOX:
AppendToLog("Done.\n");
break;
+ case MM_SHOW_KRBMAP:
+ case MM_SHOW_CLDATA:
+ case MM_SHOW_MCMAP:
+ case MM_SHOW_MEMBERS:
+ case MM_STATS:
+ case MM_CLIENTS:
+ case MM_SHOW_ACE_USE:
+ AppendToLog("\n");
+ break;
case MM_NEW_VALUE:
CacheNewValue(GetForm(form->menu->form), (int) form->menu->accel,
form->extrastuff, StringValue(form, 0));
if (remove && form->formpointer)
XtUnmanageChild(form->formpointer);
- if (f)
- DisplayForm(f);
- else
- AppendToLog("\n");
+ if (f) {
+ if (tty)
+ TtyForm(f);
+ else
+ DisplayForm(f);
+ }
}
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);
+ i = MoiraQuery("qualified_get_server", 3, argv, retfunc,
+ (char *)&dummy);
if (i && i != MR_NO_MATCH)
com_err(program_name, i, " executing database query");
argv[0] = "*";
argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
argv[4] = "TRUE";
- i = MoiraQuery("qualified_get_server_host", 6, argv, retfunc, NULL);
+ i = MoiraQuery("qualified_get_server_host", 6, argv, retfunc,
+ (char *)&dummy);
if (i && i != MR_NO_MATCH)
com_err(program_name, i, " executing database query");
AppendToLog("\n");
case MM_HELP_WILDCARDS:
case MM_HELP_AUTHORS:
case MM_HELP_BUGS:
+ case MM_HELP_MOUSE:
+ case MM_HELP_KEYBOARD:
help(m->query);
return;
case MM_QUIT: