]> andersk Git - moira.git/blob - server/queries2.c
fdd53ddd28940bc61b6a352c49caa74fc2fcde69
[moira.git] / server / queries2.c
1 /* This file defines the query dispatch table for version 2 of the protocol
2  *
3  * $Header$
4  *
5  * Copyright 1987, 1988 by the Massachusetts Institute of Technology.
6  * For copying and distribution information, please see the file
7  * <mit-copyright.h>.
8  */
9
10 #include <mit-copyright.h>
11 #include "query.h"
12 #include "sms_et.h"
13
14 /* Specialized Support Query Routines */
15
16 /* Special Access Check Routines */
17 int access_user();
18 int access_login();
19 int access_list();
20 int access_visible_list();
21 int access_vis_list_by_name();
22 int access_member();
23 int access_qgli();
24 int access_service();
25 int access_filesys();
26
27 /* Query Setup Routines */
28 int setup_ausr();
29 int setup_dusr();
30 int setup_spop();
31 int setup_dpob();
32 int setup_dmac();
33 int setup_dclu();
34 int setup_alis();
35 int setup_dlis();
36 int setup_dsin();
37 int setup_dshi();
38 int setup_afil();
39 int setup_ufil();
40 int setup_dfil();
41 int setup_dnfp();
42 int setup_dnfq();
43 int setup_sshi();
44 int setup_akum();
45
46 /* Query Followup Routines */
47 int followup_fix_modby();
48 int followup_ausr();
49 int followup_gpob();
50 int followup_glin();
51 int followup_anfq();
52 int followup_gzcl();
53 int followup_gsha();
54 int followup_gnfq();
55
56 int set_modtime();
57 int set_modtime_by_id();
58 int set_finger_modtime();
59 int set_pobox_modtime();
60 int set_uppercase_modtime();
61 int set_mach_modtime_by_id();
62 int set_cluster_modtime_by_id();
63 int set_serverhost_modtime();
64 int set_nfsphys_modtime();
65 int set_filesys_modtime();
66 int set_zephyr_modtime();
67
68 /* Special Queries */
69 int set_pobox();
70 int get_list_info();
71 int add_member_to_list();
72 int delete_member_from_list();
73 int get_ace_use();
74 int qualified_get_lists();
75 int get_members_of_list();
76 int qualified_get_server();
77 int qualified_get_serverhost();
78 int trigger_dcm();
79 int count_members_of_list();
80 int get_lists_of_member();
81 int register_user();
82
83
84 \f
85 /* String compression
86  * These are commonly used strings in the table, defined here so that
87  * they can be shared.
88  */
89
90 static char ACE_NAME[] = "ace_name";
91 static char ACE_TYPE[] = "ace_type";
92 static char CLASS[] = "class";
93 static char CLU_ID[] = "clu_id";
94 static char CLUSTER[] = "cluster";
95 static char DESC[] = "description";
96 static char DEVICE[] = "device";
97 static char DIR[] = "dir";
98 static char FILESYS[] = "filesys";
99 static char FILSYS_ID[] = "filsys_id";
100 static char FIRST[] = "firstname";
101 static char LABEL[] = "label";
102 static char LAST[] = "lastname";
103 static char LIST[] = "list";
104 static char LIST_ID[] = "list_id";
105 static char LOCATION[] = "location";
106 static char LOGIN[] = "login";
107 static char MACH_ID[] = "mach_id";
108 static char MACHINE[] = "machine";
109 static char MIDDLE[] = "middle";
110 static char MIT_ID[] = "mit_id";
111 static char MOD1[] = "modtime";
112 static char MOD2[] = "modby";
113 static char MOD3[] = "modwith";
114 static char NAME[] = "name";
115 static char SERVICE[] = "service";
116 static char SHELL[] = "shell";
117 static char STATUS[] = "status";
118 static char TYPE[] = "type";
119 static char USERS[] = "users";
120 static char USERS_ID[] = "users_id";
121 static char UID[] = "uid";
122
123
124
125 /* VALOBJS
126  * These are commonly used validation objects, defined here so that they
127  * can be shared.
128  */
129
130 static struct valobj VOsort0[] = {
131   {V_SORT, 0, 0, 0, 0, 0},
132 };
133
134 static struct valobj VOdate1[] = {
135   {V_DATE, 1, 0, 0, 0, SMS_DATE},
136 };
137
138 static struct valobj VOuser0[] = {
139   {V_ID, 0, USERS, LOGIN, USERS_ID, SMS_USER},
140 };
141
142 static struct valobj VOuser0lock[] = {
143   {V_LOCK, 0, USERS, 0, USERS_ID, SMS_DEADLOCK},
144   {V_ID, 0, USERS, LOGIN, USERS_ID, SMS_USER},
145 };
146
147 static struct valobj VOmach0[] = {
148   {V_ID, 0, MACHINE, NAME, MACH_ID, SMS_MACHINE},
149 };
150
151 static struct valobj VOclu0[] = {
152   {V_ID, 0, CLUSTER, NAME, CLU_ID, SMS_CLUSTER},
153 };
154
155 static struct valobj VOlist0[] = {
156   {V_ID, 0, LIST, NAME, LIST_ID, SMS_LIST},
157 };
158
159 static struct valobj VOfilsys0[] = {
160   {V_ID, 0, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
161 };
162
163 static struct valobj VOchar0[] = {
164   {V_CHAR, 0},
165 };
166
167 static struct valobj VOsort01[] = {
168   {V_SORT, 1},
169   {V_SORT, 0},
170 };
171
172 static struct valobj VOuser0sort[] = {
173   {V_ID, 0, USERS, LOGIN, USERS_ID, SMS_USER},
174   {V_SORT, 0},
175 };
176
177 static struct valobj VOfilsys0user1[] = {
178   {V_LOCK, 0, FILESYS, 0, FILSYS_ID, SMS_DEADLOCK},
179   {V_ID, 0, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
180   {V_ID, 1, USERS, LOGIN, USERS_ID, SMS_USER},
181 };
182
183
184 /* Validations
185  * Commonly used validation records defined here so that they may
186  * be shared.
187  */
188
189 static struct validate VDmach = { VOmach0, 1 };
190 static struct validate VDsort2= { VOsort01,2 };
191 static struct validate VDsortf = { 
192     VOsort0,
193     1,
194     0,
195     0,
196     0,
197     0,
198     0,
199     0,
200     followup_fix_modby,
201 };
202
203
204 \f
205 /* Query data */
206
207 static char *galo_fields[] = {
208   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE,
209 };
210
211 static char *gubl_fields[] = {
212   LOGIN,
213   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
214   MIT_ID, CLASS, MOD1, MOD2, MOD3
215 };
216
217 static struct validate gubx_validate =  /* gubl, gubu */
218 {
219   VOsort0,
220   1,
221   0,
222   0,
223   0,
224   0,
225   access_login,
226   0,
227   followup_fix_modby,
228 };
229
230 static char *gubu_fields[] = {
231   UID,
232   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
233   MIT_ID, CLASS, MOD1, MOD2, MOD3,
234 };
235
236 static char *gubn_fields[] = {
237   FIRST, LAST,
238   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
239   MIT_ID, CLASS, MOD1, MOD2, MOD3,
240 };
241
242 static char *gubc_fields[] = {
243   CLASS,
244   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
245   MIT_ID, CLASS, MOD1, MOD2, MOD3,
246 };
247
248 static char *gubm_fields[] = {
249   MIT_ID,
250   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
251   MIT_ID, CLASS, MOD1, MOD2, MOD3,
252 };
253
254 static char *ausr_fields[] = {
255   LOGIN, UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
256   MIT_ID, CLASS,
257 };
258
259 static struct valobj ausr_valobj[] = {
260   {V_LOCK, 0, USERS, 0, USERS_ID, SMS_DEADLOCK},
261   {V_CHAR, 0},
262   {V_CHAR, 3},
263   {V_CHAR, 4},
264   {V_CHAR, 5},
265   {V_CHAR, 7},
266   {V_TYPE, 8, CLASS, 0, 0, SMS_BAD_CLASS},
267 };
268
269 static struct validate ausr_validate = {
270   ausr_valobj,
271   7,
272   LOGIN,
273   "u.login = \"%s\"",
274   1,
275   USERS_ID,
276   0,
277   setup_ausr,
278   followup_ausr,
279 };
280
281 static char *rusr_fields[] = {
282   UID, LOGIN, "fs_type"
283 };
284
285 static struct valobj rusr_valobj[] = {
286   {V_LOCK, 0, USERS, 0, USERS_ID, SMS_DEADLOCK},
287   {V_LOCK, 0, LIST, 0, LIST_ID, SMS_DEADLOCK},
288   {V_LOCK, 0, FILESYS, 0, FILSYS_ID, SMS_DEADLOCK},
289   {V_LOCK, 0, "nfsphys", 0, "nfsphys_id", SMS_DEADLOCK},
290 };
291
292 static struct validate rusr_validate = {
293   rusr_valobj,
294   4,
295   0,
296   0,
297   0,
298   0,
299   0,
300   register_user,
301   0,
302 };
303
304 static char *uusr_fields[] = {
305   LOGIN,
306   "newlogin", UID, SHELL, LAST, FIRST, MIDDLE, STATUS, 
307   MIT_ID, CLASS,
308 };
309
310 static struct valobj uusr_valobj[] = {
311     {V_LOCK, 0, USERS, 0, USERS_ID, SMS_DEADLOCK},
312     {V_ID, 0, USERS, LOGIN, USERS_ID, SMS_USER},
313     {V_RENAME, 1, USERS, LOGIN, USERS_ID, SMS_NOT_UNIQUE},
314     {V_CHAR, 4},
315     {V_CHAR, 5},
316     {V_CHAR, 6},
317     {V_CHAR, 8},
318     {V_TYPE, 9, CLASS, 0, 0, SMS_BAD_CLASS},
319 };
320
321 static struct validate uusr_validate = {
322   uusr_valobj,
323   8,
324   0,
325   0,
326   0,
327   USERS_ID,
328   0,
329   0,
330   set_modtime_by_id,
331 };
332
333 static char *uush_fields[] = {
334   LOGIN,
335   SHELL,
336 };
337
338 static struct validate uush_validate = {
339   VOuser0lock,
340   2,
341   0,
342   0,
343   0,
344   USERS_ID,
345   access_user,
346   0,
347   set_modtime_by_id,
348 };
349
350 static char *uust_fields[] = {
351   LOGIN,
352   STATUS,
353 };
354
355 static struct validate uust_validate = {
356   VOuser0lock,
357   2,
358   0,
359   0,
360   0,
361   USERS_ID,
362   0,
363   0,
364   set_modtime_by_id,
365 };
366
367 static char *dusr_fields[] = {
368   LOGIN,
369 };
370
371 static struct validate dusr_validate = {
372   VOuser0lock,
373   2,
374   0,
375   0,
376   0,
377   0,
378   0,
379   setup_dusr,
380   0,
381 };
382
383 static char *dubu_fields[] = {
384   UID,
385 };
386
387 static struct valobj dubu_valobj[] = {
388     {V_LOCK, 0, USERS, 0, USERS_ID, SMS_DEADLOCK},
389     {V_ID, 0, USERS, UID, USERS_ID, SMS_USER}
390 };
391
392 static struct validate dubu_validate = {
393   dubu_valobj,
394   2,
395   0,
396   0,
397   0,
398   0,
399   0,
400   setup_dusr,
401   0,
402 };
403
404 static char *gkum_fields[] = { LOGIN, "kerberos",
405                                LOGIN, "kerberos" };
406
407 static char *akum_fields[] = { LOGIN, "kerberos" };
408
409 static struct valobj akum_valobj[] =
410 {
411     {V_ID, 0, USERS, LOGIN, USERS_ID, SMS_USER},
412     {V_ID, 1, "strings", "string", "string_id", SMS_NO_MATCH},
413 };
414
415 static struct validate akum_validate =
416 {
417     akum_valobj,
418     1,
419     USERS_ID,
420     "k.users_id = %d or k.string_id = %d",
421     2,
422     USERS_ID,
423     access_user,
424     setup_akum,
425     0
426 };
427
428 static struct validate dkum_validate =
429 {
430     akum_valobj,
431     2,
432     USERS_ID,
433     "k.users_id = %d and k.string_id = %d",
434     2,
435     USERS_ID,
436     access_user,
437     0,
438     0
439 };
440
441 static char *gfbl_fields[] = {
442   LOGIN,
443   LOGIN, "fullname", "nickname", "home_addr",
444   "home_phone", "office_address", "office_phone", "mit_dept", 
445   "mit_affil", MOD1, MOD2, MOD3,
446 };
447
448 static struct validate gfbl_validate = {
449   VOuser0,
450   1,
451   0,
452   0,
453   0,
454   0,
455   access_user,
456   0,
457   followup_fix_modby,
458 };
459
460 static char *ufbl_fields[] = {
461   LOGIN,
462   "fullname", "nickname", "home_addr",
463   "home_phone", "office_address", "office_phone", "mit_dept", 
464   "mit_affil",
465 };
466
467 static struct validate ufbl_validate = {
468   VOuser0lock,
469   2,
470   0,
471   0,
472   0,
473   0,
474   access_user,
475   0,
476   set_finger_modtime,
477 };
478
479 static char *gpob_fields[] = {
480   LOGIN,
481   LOGIN, TYPE, "box", MOD1, MOD2, MOD3,
482 };
483
484 static struct validate gpob_validate = {
485   VOuser0,
486   1,
487   "potype",
488   "u.potype != \"NONE\" and u.users_id=%d",
489   1,
490   0,
491   access_user,
492   0,
493   followup_gpob,
494 };
495
496 static char *gpox_fields[] = {
497   LOGIN, TYPE, "box",
498 };
499
500 static struct validate gpox_validate = {
501   0,
502   0,
503   0,
504   0,
505   0,
506   0,
507   0,
508   0,
509   followup_gpob,
510 };
511
512 static char *spob_fields[] = {
513   LOGIN, TYPE, "box",
514 };
515
516 static struct valobj spob_valobj[] = {
517   {V_LOCK, 0, USERS, 0, USERS_ID, SMS_DEADLOCK},
518   {V_ID, 0, USERS, LOGIN, USERS_ID, SMS_USER},
519   {V_TYPE, 1, "pobox", 0, 0, SMS_TYPE},
520 };
521
522 static struct validate spob_validate =  /* SET_POBOX */
523 {
524   spob_valobj,
525   3,
526   0,
527   0,
528   0,
529   0,
530   access_user,
531   0,
532   set_pobox,
533 };
534
535 static struct validate spop_validate =  /* SET_POBOX_POP */
536 {
537   VOuser0lock,
538   2,
539   0,
540   0,
541   0,
542   0,
543   access_user,
544   setup_spop,
545   set_pobox_modtime,
546 };
547
548 static struct validate dpob_validate =  /* DELETE_POBOX */
549 {
550   VOuser0lock,
551   2,
552   0,
553   0,
554   0,
555   0,
556   access_user,
557   setup_dpob,
558   set_pobox_modtime,
559 };
560
561 static char *gmac_fields[] = {
562   NAME,
563   NAME, TYPE, MOD1, MOD2, MOD3,
564 };
565
566 static char *amac_fields[] = {
567   NAME, TYPE
568 };
569
570 static struct valobj amac_valobj[] = {
571   {V_CHAR, 0},
572   {V_LOCK, 0, MACHINE, 0, MACH_ID, SMS_DEADLOCK},
573   {V_TYPE, 1, "mac_type", 0, 0, SMS_TYPE},
574 };
575
576 static struct validate amac_validate = {
577   amac_valobj,
578   3,
579   NAME,
580   "m.name = uppercase(\"%s\")",
581   1,
582   MACH_ID,
583   0,
584   0,
585   set_uppercase_modtime,
586 };
587
588 static char *umac_fields[] = {
589   NAME,
590   "newname", TYPE,
591 };
592
593 static struct valobj umac_valobj[] = {
594   {V_LOCK, 0, MACHINE, 0, MACH_ID, SMS_DEADLOCK},
595   {V_ID, 0, MACHINE, NAME, MACH_ID, SMS_MACHINE},
596   {V_RENAME, 1, MACHINE, NAME, MACH_ID, SMS_NOT_UNIQUE},
597   {V_TYPE, 2, "mac_type", 0, 0, SMS_TYPE},
598 };
599
600 static struct validate umac_validate = {
601   umac_valobj,
602   4,
603   0,
604   0,
605   0,
606   MACH_ID,
607   0,
608   0,
609   set_modtime_by_id,
610 };
611
612 static char *dmac_fields[] = {
613   NAME,
614 };
615
616 static struct valobj dmac_valobj[] = {
617   {V_LOCK, 0, MACHINE, 0, MACH_ID, SMS_DEADLOCK},
618   {V_ID, 0, MACHINE, NAME, MACH_ID, SMS_MACHINE},
619 };
620
621 static struct validate dmac_validate = {
622   dmac_valobj,
623   2,
624   0,
625   0,
626   0,
627   0,
628   0,
629   setup_dmac,
630   0,
631 };
632
633 static char *gclu_fields[] = {
634   NAME,
635   NAME, DESC, LOCATION, MOD1, MOD2, MOD3, 
636 };
637
638 static char *aclu_fields[] = {
639   NAME, DESC, LOCATION,
640 };
641   
642 static struct valobj aclu_valobj[] = {
643   {V_LOCK, 0, CLUSTER, 0, CLU_ID, SMS_DEADLOCK},
644   {V_CHAR, 0}
645 };
646
647 static struct validate aclu_validate =  /* for aclu  */
648 {
649   aclu_valobj,
650   2,
651   NAME,
652   "c.name = \"%s\"",
653   1,
654   "clu_id",
655   0,
656   0,
657   set_modtime,
658 };
659
660 static char *uclu_fields[] = {
661   NAME,
662   "newname", DESC, LOCATION,
663 };
664
665 static struct valobj uclu_valobj[] = {
666   {V_LOCK, 0, CLUSTER, 0, CLU_ID, SMS_DEADLOCK},
667   {V_ID, 0, CLUSTER, NAME, CLU_ID, SMS_CLUSTER},
668   {V_RENAME, 1, CLUSTER, NAME, CLU_ID, SMS_NOT_UNIQUE},
669 };
670
671 static struct validate uclu_validate = {
672   uclu_valobj,
673   2,
674   0,
675   0,
676   0,
677   CLU_ID,
678   0,
679   0,
680   set_modtime_by_id,
681 };
682
683 static char *dclu_fields[] = {
684   NAME,
685 };
686
687 static struct validate dclu_validate = {
688     VOclu0,
689     1,
690     0,
691     0,
692     0,
693     0,
694     0,
695     setup_dclu,
696     0,
697 };
698
699 static char *gmcm_fields[] = {
700   MACHINE, CLUSTER,
701   MACHINE, CLUSTER,
702 };
703
704 static struct valobj amtc_valobj[] =    /* ADD_MACHINE_TO_CLUSTER */
705 {                                       /* DELETE_MACHINE_FROM_CLUSTER */
706   {V_ID, 0, MACHINE, NAME, MACH_ID, SMS_MACHINE},
707   {V_ID, 1, CLUSTER, NAME, CLU_ID, SMS_CLUSTER},
708 };
709
710 static struct validate amtc_validate = /* for amtc and dmfc */
711 {
712   amtc_valobj,
713   2,
714   MACH_ID,
715   "m.mach_id = %d and m.clu_id = %d",
716   2,
717   0,
718   0,
719   0,
720   set_mach_modtime_by_id,
721 };
722
723 static char *gcld_fields[] = {
724   CLUSTER, "serv_label",
725   CLUSTER, "serv_label", "serv_cluster",
726 };
727
728 static char *acld_fields[] = {
729   CLUSTER, "serv_label", "serv_cluster",
730 };
731
732 static struct valobj acld_valobj[] =
733 {
734   {V_ID, 0, CLUSTER, NAME, CLU_ID, SMS_CLUSTER},
735   {V_CHAR, 2},
736 };
737
738 static struct validate acld_validate =  /* ADD_CLUSTER_DATA */
739 {                                       /* DELETE_CLUSTER_DATA */
740   acld_valobj,
741   2,
742   CLU_ID,
743   "s.clu_id = %d and s.serv_label = \"%s\" and s.serv_cluster = \"%s\"",
744   3,
745   0,
746   0,
747   0,
748   set_cluster_modtime_by_id,
749 };
750
751 static char *gsin_fields[] = {
752   SERVICE,
753   SERVICE, "update_int", "target_file", "script", "dfgen", "dfcheck",
754   TYPE, "enable", "inprogress", "harderror", "errmsg",
755   ACE_TYPE, ACE_NAME, MOD1, MOD2, MOD3,
756 };
757
758 static struct validate gsin_validate = 
759 {
760     0,
761     0,
762     0,
763     0,
764     0,
765     0,
766     access_service,
767     0,
768     followup_glin,
769 };
770
771 static char *qgsv_fields[] = {
772     "enable", "inprogress", "harderror",
773     "service",
774 };
775
776 static struct valobj qgsv_valobj[] = {
777   {V_TYPE, 0, "boolean", 0, 0, SMS_TYPE},
778   {V_TYPE, 1, "boolean", 0, 0, SMS_TYPE},
779   {V_TYPE, 2, "boolean", 0, 0, SMS_TYPE},
780 };
781
782 static struct validate qgsv_validate = {
783     qgsv_valobj,
784     3,
785     0,
786     0,
787     0,
788     0,
789     0,
790     0,
791     qualified_get_server,
792 };
793
794 static char *asin_fields[] = {
795   SERVICE, "update_int", "target_file", "script", TYPE, "enable",
796   ACE_TYPE, ACE_NAME,
797 };
798
799 static struct valobj asin_valobj[] = {
800   {V_LOCK, 0, MACHINE, 0, MACH_ID, SMS_DEADLOCK},
801   {V_CHAR, 0},
802   {V_TYPE, 4, "service", 0, 0, SMS_TYPE},
803   {V_TYPE, 6, ACE_TYPE, 0, 0, SMS_ACE},
804   {V_TYPEDATA, 7, 0, 0, 0, SMS_ACE},
805 };
806
807 static struct validate asin_validate =  /* for asin, usin */
808 {
809   asin_valobj,
810   5,
811   NAME,
812   "s.name = uppercase(\"%s\")",
813   1,
814   0,
815   0,
816   0,
817   set_uppercase_modtime,
818 };
819
820 static struct validate rsve_validate = {
821   asin_valobj,
822   1,
823   NAME,
824   "s.name = uppercase(\"%s\")",
825   1,
826   0,
827   access_service,
828   0,
829   set_uppercase_modtime,
830 };
831
832 static char *ssif_fields[] = {
833   SERVICE, "dfgen", "dfcheck", "inprogress", "harderror", "errmsg",
834 };
835
836 static struct validate ssif_validate = {
837   asin_valobj,
838   1,
839   NAME,
840   "s.name = uppercase(\"%s\")",
841   1,
842   0,
843   0,
844   0,
845   0,
846 };
847
848 static char *dsin_fields[] = {
849   SERVICE,
850 };
851
852 static struct validate dsin_validate = {
853   asin_valobj,
854   1,
855   NAME,
856   "s.name = uppercase(\"%s\")",
857   1,
858   0,
859   0,
860   setup_dsin,
861   0,
862 };
863
864 static char *gshi_fields[] = {
865   SERVICE, MACHINE,
866   SERVICE, MACHINE, "enable", "override", "success", "inprogress",
867   "hosterror", "hosterrormsg", "ltt", "lts", "value1", "value2",
868   "value3", MOD1, MOD2, MOD3, 
869 };
870
871 static struct validate gshi_validate = {
872   0,
873   0,
874   0,
875   0,
876   0,
877   0,
878   access_service,
879   0,
880   followup_fix_modby,
881 };
882
883 static char *qgsh_fields[] = {
884     "service", "enable", "override", "success", "inprogress", "hosterror",
885     "service", MACHINE,
886 };
887
888 static struct valobj qgsh_valobj[] = {
889   {V_TYPE, 1, "boolean", 0, 0, SMS_TYPE},
890   {V_TYPE, 2, "boolean", 0, 0, SMS_TYPE},
891   {V_TYPE, 3, "boolean", 0, 0, SMS_TYPE},
892   {V_TYPE, 4, "boolean", 0, 0, SMS_TYPE},
893   {V_TYPE, 5, "boolean", 0, 0, SMS_TYPE},
894 };
895
896 static struct validate qgsh_validate = {
897     qgsh_valobj,
898     5,
899     0,
900     0,
901     0,
902     0,
903     0,
904     0,
905     qualified_get_serverhost,
906 };
907
908 static char *ashi_fields[] = {
909   SERVICE, MACHINE, "enable", "value1", "value2", "value3",
910 };
911
912 static struct valobj ashi_valobj[] = {
913   {V_LOCK, 0, MACHINE, 0, MACH_ID, SMS_DEADLOCK},
914   {V_NAME, 0, "servers", NAME, 0, SMS_SERVICE},
915   {V_ID, 1, MACHINE, NAME, MACH_ID, SMS_MACHINE},
916 };
917
918 static struct validate ashi_validate = /* ashi & ushi */
919 {
920   ashi_valobj,
921   3,
922   SERVICE,
923   "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
924   2,
925   0,
926   access_service,
927   0,
928   set_serverhost_modtime,
929 };
930
931 static struct validate rshe_validate =  
932 {
933   ashi_valobj,
934   3,
935   SERVICE,
936   "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
937   2,
938   0,
939   access_service,
940   0,
941   set_serverhost_modtime,
942 };
943
944 static struct validate ssho_validate =  
945 {
946   ashi_valobj,
947   3,
948   SERVICE,
949   "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
950   2,
951   0,
952   access_service,
953   0,
954   trigger_dcm,
955 };
956
957 static char *sshi_fields[] = {
958     "service", MACHINE, "override", "success", "inprogress",
959     "hosterror", "errmsg", "ltt", "lts"
960 };
961
962 static struct valobj sshi_valobj[] = {
963   {V_NAME, 0, "servers", NAME, 0, SMS_SERVICE},
964 };
965
966 static struct validate sshi_validate =  
967 {
968   sshi_valobj,
969   1,
970   0,
971   0,
972   0,
973   0,
974   0,
975   setup_sshi,
976   0,
977 };
978
979 static char *dshi_fields[] = {
980   SERVICE, MACHINE,
981 };
982
983 static struct validate dshi_validate =  
984 {
985   ashi_valobj,
986   3,
987   SERVICE,
988   "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
989   2,
990   0,
991   access_service,
992   setup_dshi,
993   0,
994 };
995
996 static char *gsha_fields[] = {
997   MACHINE,
998   MACHINE, ACE_TYPE, ACE_NAME, MOD1, MOD2, MOD3,
999 };
1000
1001 static struct validate gsha_validate =  
1002 {
1003   0,
1004   0,
1005   0,
1006   0,
1007   0,
1008   0,
1009   0,
1010   0,
1011   followup_gsha,
1012 };
1013
1014 static char *asha_fields[] = {
1015   MACHINE, ACE_TYPE, ACE_NAME,
1016 };
1017
1018 static struct valobj asha_valobj[] = {
1019   {V_ID, 0, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1020   {V_TYPE, 1, ACE_TYPE, 0, 0, SMS_ACE},
1021   {V_TYPEDATA, 2, 0, 0, 0, SMS_ACE},
1022 };
1023
1024 static struct validate asha_validate =  
1025 {
1026   asha_valobj,
1027   3,
1028   MACH_ID,
1029   "ha.mach_id = %d",
1030   1,
1031   MACH_ID,
1032   0,
1033   0,
1034   set_modtime_by_id,
1035 };
1036
1037 static char *gslo_fields[] = {
1038   "server",
1039   "server", MACHINE,
1040 };
1041
1042 static char *gfsl_fields[] = {
1043   LABEL,
1044   LABEL, TYPE, MACHINE, NAME, "mount", "access", "comments", "owner", "owners",
1045   "create", "lockertype", MOD1, MOD2, MOD3,
1046 };
1047
1048 static char *gfsm_fields[] = {
1049   MACHINE,
1050   LABEL, TYPE, MACHINE, NAME, "mount", "access", "comments", "owner", "owners",
1051   "create", "lockertype", MOD1, MOD2, MOD3,
1052 };
1053
1054 static struct validate gfsm_validate = {
1055   VOmach0,
1056   1,
1057   0,
1058   0,
1059   0,
1060   0,
1061   0,
1062   0,
1063   followup_fix_modby,
1064 };
1065
1066 static char *gfsn_fields[] = {
1067   MACHINE, "parition",
1068   LABEL, TYPE, MACHINE, NAME, "mount", "access", "comments", "owner", "owners",
1069   "create", "lockertype", MOD1, MOD2, MOD3,
1070 };
1071
1072 static char *gfsg_fields[] = {
1073   LIST,
1074   LABEL, TYPE, MACHINE, NAME, "mount", "access", "comments", "owner", "owners",
1075   "create", "lockertype", MOD1, MOD2, MOD3,
1076 };
1077
1078 static struct validate gfsg_validate = {
1079   VOlist0,
1080   1,
1081   0,
1082   0,
1083   0,
1084   0,
1085   access_list,
1086   0,
1087   followup_fix_modby,
1088 };
1089
1090 static char *afil_fields[] = {
1091   LABEL, TYPE, MACHINE, NAME, "mount", "access", "comments", "owner", "owners",
1092   "create", "lockertype",
1093 };
1094
1095 static struct valobj afil_valobj[] = {
1096   {V_CHAR, 0},
1097   {V_LOCK, 0, FILESYS, 0, FILSYS_ID, SMS_DEADLOCK},
1098   {V_TYPE, 1, FILESYS, 0, 0, SMS_FSTYPE},
1099   {V_ID, 2, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1100   {V_CHAR, 3},
1101   {V_ID, 7, USERS, LOGIN, USERS_ID, SMS_USER},
1102   {V_ID, 8, LIST, NAME, LIST_ID, SMS_LIST},
1103   {V_TYPE, 10, "lockertype", 0, 0, SMS_TYPE}
1104 };
1105
1106 static struct validate afil_validate = {
1107   afil_valobj,
1108   8,
1109   LABEL,
1110   "fs.label = \"%s\"",
1111   1,
1112   FILSYS_ID,
1113   0,
1114   setup_afil,
1115   set_filesys_modtime,
1116 };
1117
1118 static char *ufil_fields[] = {
1119   LABEL, "newlabel", TYPE, MACHINE, NAME, "mount", "access", "comments",
1120   "owner", "owners", "create", "lockertype",
1121 };
1122
1123 static struct valobj ufil_valobj[] = {
1124   {V_LOCK, 0, FILESYS, 0, FILSYS_ID, SMS_DEADLOCK},
1125   {V_ID, 0, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
1126   {V_RENAME, 1, FILESYS, LABEL, FILSYS_ID, SMS_NOT_UNIQUE},
1127   {V_TYPE, 2, FILESYS, 0, 0, SMS_FSTYPE},
1128   {V_ID, 3, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1129   {V_CHAR, 4},
1130   {V_ID, 8, USERS, LOGIN, USERS_ID, SMS_USER},
1131   {V_ID, 9, LIST, NAME, LIST_ID, SMS_LIST},
1132   {V_TYPE, 11, "lockertype", 0, 0, SMS_TYPE}
1133 };
1134
1135 static struct validate ufil_validate = {
1136   ufil_valobj,
1137   9,
1138   LABEL,
1139   "fs.filsys_id = %d",
1140   1,
1141   FILSYS_ID,
1142   0,
1143   setup_ufil,
1144   set_filesys_modtime,
1145 };
1146
1147 static char *dfil_fields[] = {
1148   LABEL,
1149 };
1150
1151 static struct valobj dfil_valobj[] = {
1152   {V_LOCK, 0, FILESYS, 0, FILSYS_ID, SMS_DEADLOCK},
1153   {V_ID, 0, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
1154 };
1155
1156 static struct validate dfil_validate = {
1157   dfil_valobj,
1158   2,
1159   "label",
1160   "fs.filsys_id = %d",
1161   1,
1162   0,
1163   0,
1164   setup_dfil,
1165   0,
1166 };
1167
1168 static char *gfgm_fields[] = {
1169     "fsgroup", FILESYS, "sortkey"
1170 };
1171
1172 static struct valobj gfgm_valobj[] = {
1173     {V_ID, 0, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
1174     {V_SORT, 1},
1175     {V_SORT, 0},
1176 };
1177
1178 static struct validate gfgm_validate = {
1179     gfgm_valobj,
1180     3,
1181     0,
1182     0,
1183     0,
1184     0,
1185     0,
1186     0,
1187     0,
1188 };
1189
1190 static struct valobj aftg_valobj[] = {
1191     {V_LOCK, 0, FILESYS, 0, FILSYS_ID, SMS_DEADLOCK},
1192     {V_ID, 0, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
1193     {V_ID, 1, FILESYS, LABEL, FILSYS_ID, SMS_FILESYS},
1194 };
1195
1196 static struct validate aftg_validate = {
1197     aftg_valobj,
1198     3,
1199     "group_id",
1200     "fg.group_id = %d and fg.filsys_id = %d",
1201     2,
1202     0,
1203     0,
1204     0,
1205     0,
1206 };
1207
1208 static char *ganf_fields[] = {
1209   MACHINE, DIR, DEVICE, STATUS, "allocated", "size", MOD1, MOD2, MOD3,
1210 };
1211
1212 static char *gnfp_fields[] = {
1213   MACHINE, DIR,
1214   MACHINE, DIR, DEVICE, STATUS, "allocated", "size", MOD1, MOD2, MOD3,
1215 };
1216
1217 static struct validate gnfp_validate = {
1218   VOmach0,
1219   1,
1220   0,
1221   0,
1222   0,
1223   0,
1224   0,
1225   0,
1226   followup_fix_modby,
1227 };
1228
1229 static struct valobj anfp_valobj[] = {
1230   {V_ID, 0, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1231   {V_CHAR, 1},
1232 };
1233
1234 static struct validate anfp_validate = {
1235   anfp_valobj,
1236   2,
1237   DIR,
1238   "np.mach_id = %d and np.dir = \"%s\"",
1239   2,
1240   "nfsphys_id",
1241   0,
1242   0,
1243   set_nfsphys_modtime,
1244 };
1245
1246 static char *dnfp_fields[] = {
1247   MACHINE, DIR,
1248 };
1249
1250 static struct validate dnfp_validate = {
1251   VOmach0,
1252   1,
1253   DIR,
1254   "np.mach_id = %d and np.dir = \"%s\"",
1255   2,
1256   "nfsphys_id",
1257   0,
1258   setup_dnfp,
1259   set_nfsphys_modtime,
1260 };
1261
1262 static char *gnfq_fields[] = {
1263   FILESYS, LOGIN,
1264   FILESYS, LOGIN, "quota", DIR, MACHINE, MOD1, MOD2, MOD3,
1265 };
1266
1267 static struct valobj gnfq_valobj[] = {
1268   {V_ID, 1, USERS, LOGIN, USERS_ID, SMS_USER},
1269   {V_SORT, 0},
1270 };
1271
1272 static struct validate gnfq_validate = {
1273   gnfq_valobj,
1274   2,
1275   0,
1276   0,
1277   0,
1278   0,
1279   access_filesys,
1280   0,
1281   followup_gnfq,
1282 };
1283
1284 static char *gnqp_fields[] = {
1285   MACHINE, DIR,
1286   FILESYS, LOGIN, "quota", DIR, MACHINE, MOD1, MOD2, MOD3,
1287 };
1288
1289 static char *anfq_fields[] = {
1290   FILESYS, LOGIN, "quota",
1291 };
1292
1293 static struct validate anfq_validate = {
1294   VOfilsys0user1,
1295   3,
1296   USERS_ID,
1297   "nq.filsys_id = %d and nq.users_id = %d",
1298   2,
1299   0,
1300   0,
1301   0,
1302   followup_anfq,
1303 };
1304
1305 static struct validate unfq_validate = {
1306   VOfilsys0user1,
1307   3,
1308   USERS_ID,
1309   "nq.filsys_id = %d and nq.users_id = %d",
1310   2,
1311   0,
1312   0,
1313   setup_dnfq,
1314   followup_anfq,
1315 };
1316
1317 static struct validate dnfq_validate = {
1318   VOfilsys0user1,
1319   3,
1320   USERS_ID,
1321   "nq.filsys_id = %d and nq.users_id = %d",
1322   2,
1323   0,
1324   0,
1325   setup_dnfq,
1326   0,
1327 };
1328
1329 static char *glin_fields[] = {
1330   NAME,
1331   NAME, "active", "public", "hidden", "maillist", "group", "gid",
1332   ACE_TYPE, ACE_NAME, DESC, MOD1, MOD2, MOD3,
1333 };
1334
1335 static struct validate glin_validate = {
1336   0,
1337   0,
1338   0,
1339   0,
1340   0,
1341   0,
1342   access_vis_list_by_name,
1343   0,
1344   get_list_info,
1345 };
1346
1347 static char *alis_fields[] = {
1348   NAME, "active", "public", "hidden", "maillist", "group", "gid",
1349   ACE_TYPE, ACE_NAME, DESC,
1350 };
1351
1352 static struct valobj alis_valobj[] = {
1353   {V_LOCK, 0, LIST, 0, LIST_ID, SMS_DEADLOCK},
1354   {V_CHAR, 0},
1355   {V_TYPE, 7, ACE_TYPE, 0, 0, SMS_ACE},
1356   {V_TYPEDATA, 8, 0, 0, LIST_ID, SMS_ACE},
1357 };
1358
1359 static struct validate alis_validate = {
1360   alis_valobj,
1361   4,
1362   NAME,
1363   "l.name = \"%s\"",
1364   1,
1365   LIST_ID,
1366   0,
1367   setup_alis,
1368   set_modtime,
1369 };
1370
1371 static char *ulis_fields[] = {
1372   NAME,
1373   "newname", "active", "public", "hidden", "maillist", "group", "gid",
1374   ACE_TYPE, ACE_NAME, DESC,
1375 };
1376
1377 static struct valobj ulis_valobj[] = {
1378   {V_LOCK, 0, LIST, 0, LIST_ID, SMS_DEADLOCK},
1379   {V_ID, 0, LIST, NAME, LIST_ID, SMS_LIST},
1380   {V_RENAME, 1, LIST, NAME, LIST_ID, SMS_NOT_UNIQUE},
1381   {V_TYPE, 8, ACE_TYPE, 0, 0, SMS_ACE},
1382   {V_TYPEDATA, 9, 0, 0, LIST_ID, SMS_ACE},
1383 };
1384
1385 static struct validate ulis_validate = {
1386   ulis_valobj,
1387   5,
1388   NAME,
1389   "l.list_id = %d",
1390   1,
1391   LIST_ID,
1392   access_list,
1393   setup_alis,
1394   set_modtime_by_id,
1395 };
1396
1397 static char *dlis_fields[] = {
1398   NAME,
1399 };
1400
1401 static struct validate dlis_validate = {
1402   VOlist0,
1403   1,
1404   NAME,
1405   "l.list_id = %d",
1406   1,
1407   0,
1408   access_list,
1409   setup_dlis,
1410   0,
1411 };
1412
1413 static char *amtl_fields[] = {
1414   "list_name", "member_type", "member_name",
1415 };
1416
1417 static struct valobj amtl_valobj[] = {
1418   {V_LOCK, 0, LIST, 0, LIST_ID, SMS_DEADLOCK},
1419   {V_ID, 0, LIST, NAME, LIST_ID, SMS_LIST},
1420   {V_TYPE, 1, "member", 0, 0, SMS_TYPE},
1421   {V_TYPEDATA, 2, 0, 0, 0, SMS_NO_MATCH},
1422 };
1423
1424 static struct validate amtl_validate =
1425 {
1426   amtl_valobj,
1427   4,
1428   0,
1429   0,
1430   0,
1431   0,
1432   access_list,
1433   0,
1434   add_member_to_list,
1435 };
1436
1437 static struct validate dmfl_validate =
1438 {
1439   amtl_valobj,
1440   4,
1441   0,
1442   0,
1443   0,
1444   0,
1445   access_list,
1446   0,
1447   delete_member_from_list,
1448 };
1449
1450 static char *gaus_fields[] = {
1451     ACE_TYPE, ACE_NAME,
1452     "use_type", "use_name",
1453 };
1454
1455 static struct valobj gaus_valobj[] = {
1456   {V_TYPE, 0, "gaus", 0, 0, SMS_TYPE},
1457   {V_TYPEDATA, 1, 0, 0, 0, SMS_NO_MATCH},
1458 };
1459
1460 static struct validate gaus_validate = {
1461     gaus_valobj,
1462     2,
1463     0,
1464     0,
1465     0,
1466     0,
1467     access_member,
1468     0,
1469     get_ace_use,
1470 };
1471
1472 static char *qgli_fields[] = {
1473     "active", "public", "hidden", "maillist", "group",
1474     "list",
1475 };
1476
1477 static struct valobj qgli_valobj[] = {
1478   {V_TYPE, 0, "boolean", 0, 0, SMS_TYPE},
1479   {V_TYPE, 1, "boolean", 0, 0, SMS_TYPE},
1480   {V_TYPE, 2, "boolean", 0, 0, SMS_TYPE},
1481   {V_TYPE, 3, "boolean", 0, 0, SMS_TYPE},
1482   {V_TYPE, 4, "boolean", 0, 0, SMS_TYPE},
1483 };
1484
1485 static struct validate qgli_validate = {
1486     qgli_valobj,
1487     5,
1488     0,
1489     0,
1490     0,
1491     0,
1492     access_qgli,
1493     0,
1494     qualified_get_lists,
1495 };
1496
1497 static char *gmol_fields[] = {
1498   "list_name",
1499   "member_type", "member_name",
1500 };
1501
1502 static struct validate gmol_validate = {
1503   VOlist0,
1504   1,
1505   0,
1506   0,
1507   0,
1508   0,
1509   access_visible_list,
1510   0,
1511   get_members_of_list,
1512 };
1513
1514 static char *glom_fields[] = {
1515   "member_type", "member_name",
1516   "list_name", "active", "public", "hidden", "maillist", "group",
1517 };
1518
1519 static struct valobj glom_valobj[] = {
1520   {V_TYPE, 0, "rmember", 0, 0, SMS_TYPE},
1521   {V_TYPEDATA, 1, 0, 0, 0, SMS_NO_MATCH},
1522   {V_SORT, 0},
1523 };
1524
1525 static struct validate glom_validate = {
1526   glom_valobj,
1527   3,
1528   0,
1529   0,
1530   0,
1531   0,
1532   access_member,
1533   0,
1534   get_lists_of_member,
1535 };
1536
1537 static char *cmol_fields[] = {
1538   "list_name",
1539   "count",
1540 };
1541
1542 static struct validate cmol_validate = {
1543   VOlist0,
1544   1,
1545   0,
1546   0,
1547   0,
1548   0,
1549   access_visible_list,
1550   0,
1551   count_members_of_list,
1552 };
1553
1554 static char *gzcl_fields[] = {
1555     CLASS,
1556     CLASS, "xmt_type", "xmt_name", "sub_type", "sub_name",
1557     "iws_type", "iws_name", "iui_type", "iui_name", MOD1, MOD2, MOD3, 
1558 };
1559
1560 static struct validate gzcl_validate = {
1561   VOsort0,
1562   1,
1563   0,
1564   0,
1565   0,
1566   0,
1567   0,
1568   0,
1569   followup_gzcl,
1570 };
1571
1572 static char *azcl_fields[] = {
1573     CLASS, "xmt_type", "xmt_name", "sub_type", "sub_name",
1574     "iws_type", "iws_name", "iui_type", "iui_name",
1575 };
1576
1577 static struct valobj azcl_valobj[] = {
1578   {V_CHAR, 0},
1579   {V_TYPE, 1, ACE_TYPE, 0, 0, SMS_ACE},
1580   {V_TYPEDATA, 2, 0, 0, LIST_ID, SMS_ACE},
1581   {V_TYPE, 3, ACE_TYPE, 0, 0, SMS_ACE},
1582   {V_TYPEDATA, 4, 0, 0, LIST_ID, SMS_ACE},
1583   {V_TYPE, 5, ACE_TYPE, 0, 0, SMS_ACE},
1584   {V_TYPEDATA, 6, 0, 0, LIST_ID, SMS_ACE},
1585   {V_TYPE, 7, ACE_TYPE, 0, 0, SMS_ACE},
1586   {V_TYPEDATA, 8, 0, 0, LIST_ID, SMS_ACE},
1587 };
1588
1589 static struct validate azcl_validate = {
1590   azcl_valobj,
1591   8,
1592   CLASS,
1593   "z.class = \"%s\"",
1594   1,
1595   0,
1596   0,
1597   0,
1598   set_zephyr_modtime,
1599 };
1600
1601 static char *uzcl_fields[] = {
1602     CLASS, "newclass", "xmt_type", "xmt_name", "sub_type", "sub_name",
1603     "iws_type", "iws_name", "iui_type", "iui_name",
1604 };
1605
1606 static struct valobj uzcl_valobj[] = {
1607   {V_RENAME, 1, "zephyr", CLASS, 0, SMS_NOT_UNIQUE},
1608   {V_TYPE, 2, ACE_TYPE, 0, 0, SMS_ACE},
1609   {V_TYPEDATA, 3, 0, 0, LIST_ID, SMS_ACE},
1610   {V_TYPE, 4, ACE_TYPE, 0, 0, SMS_ACE},
1611   {V_TYPEDATA, 5, 0, 0, LIST_ID, SMS_ACE},
1612   {V_TYPE, 6, ACE_TYPE, 0, 0, SMS_ACE},
1613   {V_TYPEDATA, 7, 0, 0, LIST_ID, SMS_ACE},
1614   {V_TYPE, 8, ACE_TYPE, 0, 0, SMS_ACE},
1615   {V_TYPEDATA, 9, 0, 0, LIST_ID, SMS_ACE},
1616 };
1617
1618 static struct validate uzcl_validate = {
1619   uzcl_valobj,
1620   9,
1621   CLASS,
1622   "z.class = \"%s\"",
1623   1,
1624   0,
1625   0,
1626   0,
1627   set_zephyr_modtime,
1628 };
1629
1630 static struct validate dzcl_validate = {
1631   0,
1632   0,
1633   CLASS,
1634   "z.class = \"%s\"",
1635   1,
1636   0,
1637   0,
1638   0,
1639   0,
1640 };
1641
1642 static char *gasv_fields[] = {
1643   SERVICE, "protocol", "port", DESC,
1644 };
1645
1646 static char *gpcp_fields[] = {
1647     "printer",
1648     "printer", "spooling_host", "spool_directory", "rprinter", "comments",
1649     MOD1, MOD2, MOD3,
1650 };
1651
1652 static char *apcp_fields[] = {
1653     "printer", "spooling_host", "spool_directory", "rprinter", "comments",
1654     MOD1, MOD2, MOD3,
1655 };
1656
1657 static struct valobj apcp_valobj[] = {
1658     {V_CHAR, 0},
1659     {V_ID, 1, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1660 };
1661
1662 static struct validate apcp_validate = {
1663   apcp_valobj,
1664   2,
1665   NAME,
1666   "p.name = \"%s\"",
1667   1,
1668   0,
1669   0,
1670   0,
1671   set_modtime,
1672 };
1673
1674 static struct validate dpcp_validate = {
1675   0,
1676   0,
1677   NAME,
1678   "p.name = \"%s\"",
1679   1,
1680   0,
1681   0,
1682   0,
1683   0,
1684 };
1685
1686 static char *gpdm_fields[] = {
1687     NAME,
1688     NAME, "rpcnum", "host", MOD1, MOD2, MOD3,
1689 };
1690
1691 static char *apdm_fields[] = {
1692     NAME, "rpcnum", "host"
1693 };
1694
1695 static struct valobj apdm_valobj[] = {
1696     {V_CHAR, 0},
1697     {V_ID, 2, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1698 };
1699
1700 static struct validate apdm_validate = {
1701   apdm_valobj,
1702   2,
1703   NAME,
1704   "p.name = \"%s\"",
1705   1,
1706   0,
1707   0,
1708   0,
1709   set_modtime,
1710 };
1711
1712 static struct validate dpdm_validate = {
1713   0,
1714   0,
1715   NAME,
1716   "p.name = \"%s\"",
1717   1,
1718   0,
1719   0,
1720   0,
1721   0,
1722 };
1723
1724 static char *gali_fields[] = {
1725   NAME, TYPE, "trans",
1726   NAME, TYPE, "trans",
1727 };
1728
1729 static char *aali_fields[] = {
1730   NAME, TYPE, "trans",
1731 };
1732
1733 static struct valobj aali_valobj[] = {
1734   {V_CHAR, 0},
1735   {V_TYPE, 1, "alias", 0, 0, SMS_TYPE},
1736   {V_CHAR, 2},
1737 };
1738
1739 static struct validate aali_validate = {
1740   aali_valobj,
1741   3,
1742   "trans",
1743   "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
1744   3,
1745   0,
1746   0,
1747   0,
1748   0,
1749 };
1750
1751 static struct validate dali_validate =  /* DELETE_ALIAS */
1752 {
1753   0,
1754   0,
1755   "trans",
1756   "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
1757   3,
1758   0,
1759   0,
1760   0,
1761   0,
1762 };
1763
1764 static char *gval_fields[] = {
1765   NAME, "value",
1766 };
1767
1768 static struct valobj gval_valobj[] = {
1769   {V_NAME, 0, "values", NAME, 0, SMS_NO_MATCH},
1770 };
1771
1772 static struct validate gval_validate = {
1773   gval_valobj,
1774   1,
1775   0,
1776   0,
1777   0,
1778   0,
1779   0,
1780   0,
1781   0,
1782 };
1783
1784 static char *aval_fields[] = {
1785   NAME, "value",
1786 };
1787
1788 static struct validate aval_validate =  /* for aval, uval, and dval */
1789 {
1790   VOchar0,
1791   1,
1792   NAME,
1793   "v.name = \"%s\"",
1794   1,
1795   0,
1796   0,
1797   0,
1798   0,
1799 };
1800
1801 static char *dval_fields[] = {
1802   NAME,
1803 };
1804
1805 static char *gats_fields[] = {
1806   "table", "retrieves", "appends", "updates", "deletes", MOD1, MOD2, MOD3,
1807 };
1808
1809
1810 \f
1811 /* Generalized Query Definitions */
1812
1813 struct query Queries2[] = {
1814   {
1815     /* Q_GALO - GET_ALL_LOGINS */
1816     "get_all_logins",
1817     "galo",
1818     RETRIEVE,
1819     "u",
1820     USERS,
1821     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle",
1822     galo_fields,
1823     6,
1824     "u.users_id != 0",
1825     0,
1826     0,
1827   },
1828
1829   {
1830     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS */
1831     "get_all_active_logins",
1832     "gaal",
1833     RETRIEVE,
1834     "u",
1835     USERS,
1836     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle",
1837     galo_fields,
1838     6,
1839     "u.status = 1",
1840     0,
1841     0,
1842   },
1843
1844   {
1845     /* Q_GUBL - GET_USER_BY_LOGIN */
1846     "get_user_by_login",
1847     "gubl",
1848     RETRIEVE,
1849     "u",
1850     USERS,
1851     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle, %c = text(u.status), %c = u.mit_id, %c = u.mit_year, %c = u.modtime, %c = text(u.modby), %c = u.modwith",
1852     gubl_fields,
1853     12,
1854     "u.login = \"%s\" and u.users_id != 0",
1855     1,
1856     &gubx_validate,
1857   },
1858
1859   {
1860     /* Q_GUBU - GET_USER_BY_UID */
1861     "get_user_by_uid",
1862     "gubu",
1863     RETRIEVE,
1864     "u",
1865     USERS,
1866     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle, %c = text(u.status), %c = u.mit_id, %c = u.mit_year, %c = u.modtime, %c = text(u.modby), %c = u.modwith",
1867     gubu_fields,
1868     12,
1869     "u.uid = %s and u.users_id != 0",
1870     1,
1871     &gubx_validate,
1872   },
1873
1874   {
1875     /* Q_GUBN - GET_USER_BY_NAME */
1876     "get_user_by_name",
1877     "gubn",
1878     RETRIEVE,
1879     "u",
1880     USERS,
1881     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle, %c = text(u.status), %c = u.mit_id, %c = u.mit_year, %c = u.modtime, %c = text(u.modby), %c = u.modwith",
1882     gubn_fields,
1883     12,
1884     "u.first = \"%s\" and u.last = \"%s\" and u.users_id != 0",
1885     2,
1886     &VDsortf,
1887   },
1888
1889   {
1890     /* Q_GUBC - GET_USER_BY_CLASS */
1891     "get_user_by_class",
1892     "gubc",
1893     RETRIEVE,
1894     "u",
1895     USERS,
1896     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle, %c = text(u.status), %c = u.mit_id, %c = u.mit_year, %c = u.modtime, %c = text(u.modby), %c = u.modwith",
1897     gubc_fields,
1898     12,
1899     "u.mit_year = uppercase(\"%s\") and u.users_id != 0",
1900     1,
1901     &VDsortf,
1902   },
1903
1904   {
1905     /* Q_GUBM - GET_USER_BY_MITID */
1906     "get_user_by_mitid",
1907     "gubm",
1908     RETRIEVE,
1909     "u",
1910     USERS,
1911     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle, %c = text(u.status), %c = u.mit_id, %c = u.mit_year, %c = u.modtime, %c = text(u.modby), %c = u.modwith",
1912     gubm_fields,
1913     12,
1914     "u.mit_id = \"%s\" and u.users_id != 0",
1915     1,
1916     &VDsortf,
1917   },
1918
1919   {
1920     /* Q_AUSR - ADD_USER */
1921     "add_user",
1922     "ausr",
1923     APPEND,
1924     "u",
1925     USERS,
1926     "login = %c, users_id = values.value, uid = int4(%c), shell = %c, last = %c, first = %c, middle = %c, status = int4(%c), mit_id = %c, mit_year = %c",
1927     ausr_fields,
1928     9,
1929     "values.name = \"users_id\"",
1930     0,
1931     &ausr_validate,
1932   },
1933
1934   {
1935     /* Q_RUSR - REGISTER_USER */
1936     "register_user",
1937     "rusr",
1938     APPEND,
1939     0,
1940     0,
1941     0,
1942     rusr_fields,
1943     3,
1944     0,
1945     0,
1946     &rusr_validate,
1947   },
1948
1949   {
1950     /* Q_UUSR - UPDATE_USER */
1951     "update_user",
1952     "uusr",
1953     UPDATE,
1954     "u",
1955     USERS,
1956     "login = %c, uid = int4(%c), shell = %c, last = %c, first = %c, middle = %c, status = int4(%c), mit_id = %c, mit_year = %c",
1957     uusr_fields,
1958     9,
1959     "u.users_id = %d",
1960     1,
1961     &uusr_validate,
1962   },
1963
1964   {
1965     /* Q_UUSH - UPDATE_USER_SHELL */
1966     "update_user_shell",
1967     "uush",
1968     UPDATE,
1969     "u",
1970     USERS,
1971     "shell = %c",
1972     uush_fields,
1973     1,
1974     "u.users_id = %d",
1975     1,
1976     &uush_validate,
1977   },
1978
1979   {
1980     /* Q_UUST - UPDATE_USER_STATUS */
1981     "update_user_status",
1982     "uust",
1983     UPDATE,
1984     "u",
1985     USERS,
1986     "status = int4(%c)",
1987     uust_fields,
1988     1,
1989     "u.users_id = %d",
1990     1,
1991     &uust_validate,
1992   },
1993
1994   {
1995     /* Q_DUSR - DELETE_USER */
1996     "delete_user",
1997     "dusr",
1998     DELETE,
1999     "u",
2000     USERS,
2001     (char *)0,
2002     dusr_fields,
2003     0,
2004     "u.users_id = %d",
2005     1,
2006     &dusr_validate,
2007   },
2008
2009   {
2010     /* Q_DUBU - DELETE_USER_BY_UID */
2011     "delete_user_by_uid",
2012     "dubu",
2013     DELETE,
2014     "u",
2015     USERS,
2016     (char *)0,
2017     dubu_fields,
2018     0,
2019     "u.users_id = %d",
2020     1,
2021     &dubu_validate,
2022   },
2023
2024   {
2025     /* Q_GKUM - GET_KERBEROS_USER_MAP */
2026     "get_kerberos_user_map",
2027     "gkum",
2028     RETRIEVE,
2029     "k",
2030     "krbmap",
2031     "%c = users.login, %c = strings.string",
2032     gkum_fields,
2033     2,
2034     "users.login = \"%s\" and strings.string = \"%s\" and k.users_id = users.users_id and k.string_id = strings.string_id",
2035     2,
2036     &VDsort2,
2037   },
2038
2039   {
2040     /* Q_AKUM - ADD_KERBEROS_USER_MAP */
2041     "add_kerberos_user_map",
2042     "akum",
2043     APPEND,
2044     "k",
2045     "krbmap",
2046     "users_id = %i4, string_id = %i4",
2047     akum_fields,
2048     2,
2049     0,
2050     0,
2051     &akum_validate,
2052   },
2053
2054   {
2055     /* Q_DKUM - DELETE_KERBEROS_USER_MAP */
2056     "delete_kerberos_user_map",
2057     "dkum",
2058     DELETE,
2059     "k",
2060     "krbmap",
2061     0,
2062     akum_fields,
2063     0,
2064     "k.users_id = %d and k.string_id = %d",
2065     2,
2066     &dkum_validate,
2067   },
2068
2069   {
2070     /* Q_GFBL - GET_FINGER_BY_LOGIN */
2071     "get_finger_by_login",
2072     "gfbl",
2073     RETRIEVE,
2074     "u",
2075     USERS,
2076     "%c = u.login,%c=u.fullname,%c=u.nickname,%c=u.home_addr,%c=u.home_phone,%c=u.office_addr,%c=u.office_phone,%c=u.mit_dept,%c=u.mit_affil,%c=u.fmodtime,%c=text(u.fmodby),%c=u.fmodwith",
2077     gfbl_fields,
2078     12,
2079     "u.users_id = %d",
2080     1,
2081     &gfbl_validate,
2082   },
2083
2084   {
2085     /* Q_UFBL - UPDATE_FINGER_BY_LOGIN */
2086     "update_finger_by_login",
2087     "ufbl",
2088     UPDATE,
2089     "u",
2090     USERS,
2091     "fullname=%c,nickname=%c,home_addr=%c,home_phone=%c,office_addr=%c,office_phone=%c,mit_dept=%c,mit_affil=%c",
2092     ufbl_fields,
2093     8,
2094     "u.users_id = %d",
2095     1,
2096     &ufbl_validate,
2097   },
2098
2099   {
2100     /* Q_GPOB - GET_POBOX */
2101     "get_pobox",
2102     "gpob",
2103     RETRIEVE,
2104     "u",
2105     USERS,
2106     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id), %c = u.pmodtime, %c = text(u.pmodby), %c = u.pmodwith",
2107     gpob_fields,
2108     6,
2109     "u.users_id = %d",
2110     1,
2111     &gpob_validate,
2112   },
2113
2114   {
2115     /* Q_GAPO - GET_ALL_POBOXES */
2116     "get_all_poboxes",
2117     "gapo",
2118     RETRIEVE,
2119     "u",
2120     USERS,
2121     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id)",
2122     gpox_fields,
2123     3,
2124     "u.potype != \"NONE\"",
2125     0,
2126     &gpox_validate,
2127   },
2128       
2129   {
2130     /* Q_GPOP - GET_POBOXES_POP */
2131     "get_poboxes_pop",
2132     "gpop",
2133     RETRIEVE,
2134     "u",
2135     USERS,
2136     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id)",
2137     gpox_fields,
2138     3,
2139     "u.potype = \"POP\"",
2140     0,
2141     &gpox_validate
2142   },
2143
2144   {
2145     /* Q_GPOF - GET_POBOXES_SMTP */
2146     "get_poboxes_smtp",
2147     "gpos",
2148     RETRIEVE,
2149     "u",
2150     USERS,
2151     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id)",
2152     gpox_fields,
2153     3,
2154     "u.potype = \"SMTP\"",
2155     0,
2156     &gpox_validate
2157   },
2158
2159   {
2160     /* Q_SPOB - SET_POBOX */
2161     "set_pobox",
2162     "spob",
2163     UPDATE,
2164     0,
2165     USERS,
2166     0,
2167     spob_fields,
2168     3,
2169     (char *)0,
2170     0,
2171     &spob_validate,
2172   },
2173
2174   {
2175     /* Q_SPOP - SET_POBOX_POP */
2176     "set_pobox_pop",
2177     "spop",
2178     UPDATE,
2179     "u",
2180     USERS,
2181     "potype = \"POP\"",
2182     spob_fields,
2183     0,
2184     "u.users_id = %d",
2185     1,
2186     &spop_validate,
2187   },
2188
2189   {
2190     /* Q_DPOB - DELETE_POBOX */
2191     "delete_pobox",
2192     "dpob",
2193     UPDATE,
2194     "u",
2195     USERS,
2196     "potype = \"NONE\"",
2197     spob_fields,
2198     0,
2199     "u.users_id = %d",
2200     1,
2201     &dpob_validate,
2202   },
2203
2204   {
2205     /* Q_GMAC - GET_MACHINE */
2206     "get_machine",
2207     "gmac",
2208     RETRIEVE,
2209     "m",
2210     MACHINE,
2211     "%c = m.name, %c = m.type, %c = m.modtime, %c = text(m.modby), %c =m.modwith",
2212     gmac_fields,
2213     5,
2214     "m.name = uppercase(\"%s\") and m.mach_id != 0",
2215     1,
2216     &VDsortf,
2217   },
2218
2219   {
2220     /* Q_AMAC - ADD_MACHINE */
2221     "add_machine",
2222     "amac",
2223     APPEND,
2224     "m",
2225     MACHINE,
2226     "name = uppercase(%c), mach_id = values.value, type = %c",
2227     amac_fields,
2228     2,
2229     "values.name = \"mach_id\"",
2230     0,
2231     &amac_validate,
2232   },
2233
2234   {
2235     /* Q_UMAC - UPDATE_MACHINE */
2236     "update_machine",
2237     "umac",
2238     UPDATE,
2239     "m",
2240     MACHINE,
2241     "name = uppercase(%c), type = %c",
2242     umac_fields,
2243     2,
2244     "m.mach_id = %d",
2245     1,
2246     &umac_validate,
2247   },
2248
2249   {
2250     /* Q_DMAC - DELETE_MACHINE */
2251     "delete_machine",
2252     "dmac",
2253     DELETE,
2254     "m",
2255     MACHINE,
2256     (char *)0,
2257     dmac_fields,
2258     0,
2259     "m.mach_id = %d",
2260     1,
2261     &dmac_validate,
2262   },
2263
2264   {
2265     /* Q_GCLU - GET_CLUSTER */
2266     "get_cluster",
2267     "gclu",
2268     RETRIEVE,
2269     "c",
2270     CLUSTER,
2271     "%c = c.name, %c = c.desc, %c = c.location, %c = c.modtime, %c = text(c.modby), %c = c.modwith",
2272     gclu_fields,
2273     6,
2274     "c.name = \"%s\" and c.clu_id != 0",
2275     1,
2276     &VDsortf,
2277   },
2278
2279   {
2280     /* Q_ACLU - ADD_CLUSTER */
2281     "add_cluster",
2282     "aclu",
2283     APPEND,
2284     "c",
2285     CLUSTER,
2286     "name = %c, clu_id = values.value, desc = %c, location = %c",
2287     aclu_fields,
2288     3,
2289     "values.name = \"clu_id\"",
2290     0,
2291     &aclu_validate,
2292   },
2293
2294   {
2295     /* Q_UCLU - UPDATE_CLUSTER */
2296     "update_cluster",
2297     "uclu",
2298     UPDATE,
2299     "c",
2300     CLUSTER,
2301     "name = %c, desc = %c, location = %c",
2302     uclu_fields,
2303     3,
2304     "c.clu_id = %d",
2305     1,
2306     &uclu_validate,
2307   },
2308
2309   {
2310     /* Q_DCLU - DELETE_CLUSTER */
2311     "delete_cluster",
2312     "dclu",
2313     DELETE,
2314     "c",
2315     CLUSTER,
2316     (char *)0,
2317     dclu_fields,
2318     0,
2319     "c.clu_id = %d",
2320     1,
2321     &dclu_validate,
2322   },
2323
2324   {
2325     /* Q_GMCM - GET_MACHINE_TO_CLUSTER_MAP */
2326     "get_machine_to_cluster_map",
2327     "gmcm",
2328     RETRIEVE,
2329     "m",
2330     "mcmap",
2331     "%c = machine.name, %c = cluster.name",
2332     gmcm_fields,
2333     2,
2334     "machine.name = uppercase(\"%s\") and cluster.name = \"%s\" and m.clu_id = cluster.clu_id and m.mach_id = machine.mach_id",
2335     2,
2336     &VDsort2,
2337   },
2338
2339   {
2340     /* Q_AMTC - ADD_MACHINE_TO_CLUSTER */
2341     "add_machine_to_cluster",
2342     "amtc",
2343     APPEND,
2344     "m",
2345     "mcmap",
2346     "mach_id = %i4, clu_id = %i4",
2347     gmcm_fields,
2348     2,
2349     0,
2350     0,
2351     &amtc_validate,
2352   },
2353
2354   {
2355     /* Q_DMFC - DELETE_MACHINE_FROM_CLUSTER */
2356     "delete_machine_from_cluster",
2357     "dmfc",
2358     DELETE,
2359     "m",
2360     "mcmap",
2361     0,
2362     gmcm_fields,
2363     0,
2364     "m.mach_id = %d and m.clu_id = %d",
2365     2,
2366     &amtc_validate,
2367   },
2368
2369   {
2370     /* Q_GCLD - GET_CLUSTER_DATA */
2371     "get_cluster_data",
2372     "gcld",
2373     RETRIEVE,
2374     "s",
2375     "svc",
2376     "%c = cluster.name, %c = s.serv_label, %c = s.serv_cluster",
2377     gcld_fields,
2378     3,
2379     "cluster.clu_id = s.clu_id and cluster.name = \"%s\" and s.serv_label = \"%s\"",
2380     2,
2381     &VDsort2,
2382   },
2383
2384   {
2385     /* Q_ACLD - ADD_CLUSTER_DATA */
2386     "add_cluster_data",
2387     "acld",
2388     APPEND,
2389     "s",
2390     "svc",
2391     "clu_id = %i4, serv_label = %c, serv_cluster = %c",
2392     acld_fields,
2393     3,
2394     (char *)0,
2395     0,
2396     &acld_validate,
2397   },
2398
2399   {
2400     /* Q_DCLD - DELETE_CLUSTER_DATA */
2401     "delete_cluster_data",
2402     "dcld",
2403     DELETE,
2404     "s",
2405     "svc",
2406     (char *)0,
2407     acld_fields,
2408     0,
2409     "s.clu_id = %d and s.serv_label = \"%s\" and s.serv_cluster = \"%s\"",
2410     3,
2411     &acld_validate,
2412   },
2413
2414   {
2415     /* Q_GSIN - GET_SERVER_INFO */
2416     "get_server_info",
2417     "gsin",
2418     RETRIEVE,
2419     "s",
2420     "servers",
2421     "%c = s.name, %c = text(s.update_int), %c = s.target_file, %c = s.script, %c = text(s.dfgen), %c = text(s.dfcheck), %c = s.type, %c = text(s.enable), %c = text(s.inprogress), %c = text(s.harderror), %c = s.errmsg, %c = s.acl_type, %c = text(s.acl_id), %c = s.modtime, %c = text(s.modby), %c = s.modwith",
2422     gsin_fields,
2423     16,
2424     "s.name = uppercase(\"%s\")",
2425     1,
2426     &gsin_validate,
2427   },
2428
2429   {
2430     /* Q_QGSV - QUALIFIED_GET_SERVER */
2431     "qualified_get_server",
2432     "qgsv",
2433     RETRIEVE,
2434     0,
2435     "servers",
2436     0,
2437     qgsv_fields,
2438     1,
2439     0,
2440     3,
2441     &qgsv_validate,
2442   },
2443
2444   {
2445     /* Q_ASIN - ADD_SERVER_INFO */
2446     "add_server_info",
2447     "asin",
2448     APPEND,
2449     "s",
2450     "servers",
2451     "name = uppercase(%c), update_int = int4(%c), target_file = %c, script = %c, type = %c, enable = int1(%c), acl_type = %c, acl_id = %i4",
2452     asin_fields,
2453     8,
2454     (char *)0,
2455     0,
2456     &asin_validate,
2457   },
2458
2459   {
2460     /* Q_USIN - UPDATE_SERVER_INFO */
2461     "update_server_info",
2462     "usin",
2463     UPDATE,
2464     "s",
2465     "servers",
2466     "update_int = int4(%c), target_file = %c, script = %c, type = %c, enable = int1(%c), acl_type = %c, acl_id = %i4",
2467     asin_fields,
2468     7,
2469     "s.name = uppercase(\"%s\")",
2470     1,
2471     &asin_validate,
2472   },
2473
2474   {
2475     /* Q_RSVE - RESET_SERVER_ERROR */
2476     "reset_server_error",
2477     "rsve",
2478     UPDATE,
2479     "s",
2480     "servers",
2481     "harderror = 0, dfcheck = s.dfgen",
2482     dsin_fields,
2483     0,
2484     "s.name = uppercase(\"%s\")",
2485     1,
2486     &rsve_validate,
2487   },
2488
2489   {
2490     /* Q_SSIF - SET_SERVER_INTERNAL_FLAGS */
2491     "set_server_internal_flags",
2492     "ssif",
2493     UPDATE,
2494     "s",
2495     "servers",
2496     "dfgen = int4(%c), dfcheck = int4(%c), inprogress = int1(%c), harderror = int1(%c), errmsg = %c",
2497     ssif_fields,
2498     5,
2499     "s.name = uppercase(\"%s\")",
2500     1,
2501     &ssif_validate,
2502   },
2503
2504   {
2505     /* Q_DSIN - DELETE_SERVER_INFO */
2506     "delete_server_info",
2507     "dsin",
2508     DELETE,
2509     "s",
2510     "servers",
2511     (char *)0,
2512     dsin_fields,
2513     0,
2514     "s.name = uppercase(\"%s\")",
2515     1,
2516     &dsin_validate,
2517   },
2518
2519   {
2520     /* Q_GSHI - GET_SERVER_HOST_INFO */
2521     "get_server_host_info",
2522     "gshi",
2523     RETRIEVE,
2524     "sh",
2525     "serverhosts",
2526     "%c = sh.service, %c = machine.name, %c = text(sh.enable), %c = text(sh.override), %c = text(sh.success), %c = text(sh.inprogress), %c = text(sh.hosterror), %c = sh.hosterrmsg, %c = text(sh.ltt), %c = text(sh.lts), %c = text(sh.value1), %c = text(sh.value2), %c = sh.value3, %c = sh.modtime, %c = text(sh.modby), %c = sh.modwith",
2527     gshi_fields,
2528     16,
2529     "sh.service = uppercase(\"%s\") and machine.name = uppercase(\"%s\") and machine.mach_id = sh.mach_id",
2530     2,
2531     &gshi_validate,
2532   },
2533
2534   {
2535     /* Q_QGSV - QUALIFIED_GET_SERVER_HOST */
2536     "qualified_get_server_host",
2537     "qgsh",
2538     RETRIEVE,
2539     0,
2540     "serverhosts",
2541     0,
2542     qgsh_fields,
2543     2,
2544     0,
2545     6,
2546     &qgsh_validate,
2547   },
2548
2549   {
2550     /* Q_ASHI - ADD_SERVER_HOST_INFO */
2551     "add_server_host_info",
2552     "ashi",
2553     APPEND,
2554     "sh",
2555     "serverhosts",
2556     "service = uppercase(%c), mach_id = %i4, enable = int1(%c), value1 = int4(%c), value2 = int4(%c), value3 = %c",
2557     ashi_fields,
2558     6,
2559     (char *)0,
2560     0,
2561     &ashi_validate,
2562   },
2563
2564   {
2565     /* Q_USHI - UPDATE_SERVER_HOST_INFO */
2566     "update_server_host_info",
2567     "ushi",
2568     UPDATE,
2569     "sh",
2570     "serverhosts",
2571     "enable = int1(%c), value1 = int4(%c), value2 = int4(%c), value3 = %c",
2572     ashi_fields,
2573     4,
2574     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2575     2,
2576     &ashi_validate,
2577   },
2578
2579   {
2580     /* Q_RSHE - RESET_SERVER_HOST_ERROR */
2581     "reset_server_host_error",
2582     "rshe",
2583     UPDATE,
2584     "sh",
2585     "serverhosts",
2586     "hosterror = 0",
2587     dshi_fields,
2588     0,
2589     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2590     2,
2591     &rshe_validate,
2592   },
2593
2594   {
2595     /* Q_SSHO - SET_SERVER_HOST_OVERRIDE */
2596     "set_server_host_override",
2597     "ssho",
2598     UPDATE,
2599     "sh",
2600     "serverhosts",
2601     "override = 1",
2602     dshi_fields,
2603     0,
2604     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2605     2,
2606     &ssho_validate,
2607   },
2608
2609   {
2610     /* Q_SSHI - SET_SERVER_HOST_INTERNAL */
2611     "set_server_host_internal",
2612     "sshi",
2613     UPDATE,
2614     "s",
2615     "serverhosts",
2616     "override = int1(%c), success = int1(%c), inprogress = int1(%c), hosterror = int1(%c), hosterrmsg = %c, ltt = int4(%c), lts = int4(%c)",
2617     sshi_fields,
2618     7,
2619     "s.service = uppercase(\"%s\") and s.mach_id = machine.mach_id and machine.name = \"%s\"",
2620     2,
2621     &sshi_validate,
2622   },
2623
2624   {
2625     /* Q_DSHI - DELETE_SERVER_HOST_INFO */
2626     "delete_server_host_info",
2627     "dshi",
2628     DELETE,
2629     "sh",
2630     "serverhosts",
2631     (char *)0,
2632     dshi_fields,
2633     0,
2634     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2635     2,
2636     &dshi_validate,
2637   },
2638
2639   {
2640     /* Q_GSHA - GET_SERVER_HOST_ACCESS */
2641     "get_server_host_access",
2642     "gsha",
2643     RETRIEVE,
2644     "ha",
2645     "hostaccess",
2646     "%c = machine.name, %c = ha.acl_type, %c = text(ha.acl_id), %c = ha.modtime, %c = text(ha.modby), %c = ha.modwith",
2647     gsha_fields,
2648     6,
2649     "machine.name = uppercase(\"%s\") and ha.mach_id = machine.mach_id",
2650     1,
2651     &gsha_validate,
2652   },
2653
2654   {
2655     /* Q_ASHA - ADD_SERVER_HOST_ACCESS */
2656     "add_server_host_access",
2657     "asha",
2658     APPEND,
2659     "ha",
2660     "hostaccess",
2661     "mach_id = %i4, acl_type = %c, acl_id = %i4",
2662     asha_fields,
2663     3,
2664     0,
2665     0,
2666     &asha_validate,
2667   },
2668
2669   {
2670     /* Q_USHA - UPDATE_SERVER_HOST_ACCESS */
2671     "update_server_host_access",
2672     "usha",
2673     UPDATE,
2674     "ha",
2675     "hostaccess",
2676     "acl_type = %c, acl_id = %i4",
2677     asha_fields,
2678     2,
2679     "ha.mach_id = %d",
2680     1,
2681     &asha_validate,
2682   },
2683
2684   {
2685     /* Q_DSHA - DELETE_SERVER_HOST_ACCESS */
2686     "delete_server_host_access",
2687     "dsha",
2688     DELETE,
2689     "ha",
2690     "hostaccess",
2691     0,
2692     asha_fields,
2693     0,
2694     "ha.mach_id = %d",
2695     1,
2696     &VDmach,
2697   },
2698
2699   {
2700     /* Q_GSLO - GET_SERVER_LOCATIONS */
2701     "get_server_locations",
2702     "gslo",
2703     RETRIEVE,
2704     "sh",
2705     "serverhosts",
2706     "%c = sh.service, %c = machine.name",
2707     gslo_fields,
2708     2,
2709     "sh.service = uppercase(\"%s\") and sh.mach_id = machine.mach_id",
2710     1,
2711     0,
2712   },
2713
2714   {
2715     /* Q_GFSL - GET_FILESYS_BY_LABEL */
2716     "get_filesys_by_label",
2717     "gfsl",
2718     RETRIEVE,
2719     "fs",
2720     FILESYS,
2721     "%c = fs.label, %c = fs.type, %c = machine.name, %c = fs.name, %c = fs.mount, %c = fs.access, %c = fs.comments, %c = users.login, %c = list.name, %c = text(fs.createflg), %c = fs.lockertype, %c = fs.modtime, %c = text(fs.modby), %c = fs.modwith",
2722     gfsl_fields,
2723     14,
2724     "fs.label = \"%s\" and fs.mach_id = machine.mach_id and fs.owner = users.users_id and fs.owners = list.list_id",
2725     1,
2726     &VDsortf,
2727   },
2728
2729   {
2730     /* Q_GFSM - GET_FILESYS_BY_MACHINE */
2731     "get_filesys_by_machine",
2732     "gfsm",
2733     RETRIEVE,
2734     "fs",
2735     FILESYS,
2736     "%c = fs.label, %c = fs.type, %c = machine.name, %c = fs.name, %c = fs.mount, %c = fs.access, %c = fs.comments, %c = users.login, %c = list.name, %c = text(fs.createflg), %c = fs.lockertype, %c = fs.modtime, %c = text(fs.modby), %c = fs.modwith",
2737     gfsm_fields,
2738     14,
2739     "fs.mach_id = %d and machine.mach_id = fs.mach_id and fs.owner = users.users_id and fs.owners = list.list_id",
2740     1,
2741     &gfsm_validate,
2742   },
2743
2744   {
2745     /* Q_GFSN - GET_FILESYS_BY_NFSPHYS */
2746     "get_filesys_by_nfsphys",
2747     "gfsn",
2748     RETRIEVE,
2749     "fs",
2750     FILESYS,
2751     "%c = fs.label, %c = fs.type, %c = machine.name, %c = fs.name, %c = fs.mount, %c = fs.access, %c = fs.comments, %c = users.login, %c = list.name, %c = text(fs.createflg), %c = fs.lockertype, %c = fs.modtime, %c = text(fs.modby), %c = fs.modwith",
2752     gfsn_fields,
2753     14,
2754     "fs.mach_id = %d and machine.mach_id = fs.mach_id and fs.owner = users.users_id and fs.owners = list.list_id and nfsphys.nfsphys_id = fs.phys_id and nfsphys.dir = \"%s\" and fs.type = \"NFS\"",
2755     2,
2756     &gfsm_validate,
2757   },
2758
2759   {
2760     /* Q_GFSG - GET_FILESYS_BY_GROUP */
2761     "get_filesys_by_group",
2762     "gfsg",
2763     RETRIEVE,
2764     "fs",
2765     FILESYS,
2766     "%c = fs.label, %c = fs.type, %c = machine.name, %c = fs.name, %c = fs.mount, %c = fs.access, %c = fs.comments, %c = users.login, %c = list.name, %c = text(fs.createflg), %c = fs.lockertype, %c = fs.modtime, %c = text(fs.modby), %c = fs.modwith",
2767     gfsg_fields,
2768     14,
2769     "fs.owners = %d and machine.mach_id = fs.mach_id and fs.owner = users.users_id and fs.owners = list.list_id",
2770     1,
2771     &gfsg_validate,
2772   },
2773
2774   {
2775     /* Q_AFIL - ADD_FILESYS */
2776     "add_filesys",
2777     "afil",
2778     APPEND,
2779     "fs",
2780     FILESYS,
2781     "filsys_id = values.value, label = %c, type = %c, mach_id = %i4, name = %c, mount = %c, access = %c, comments = %c, owner = %i4, owners = %i4, createflg = int1(%c), lockertype = %c",
2782     afil_fields,
2783     11,
2784     "values.name = \"filsys_id\"",
2785     0,
2786     &afil_validate,
2787   },
2788
2789   {
2790     /* Q_UFIL - UPDATE_FILESYS */
2791     "update_filesys",
2792     "ufil",
2793     UPDATE,
2794     "fs",
2795     FILESYS,
2796     "label = %c, type = %c, mach_id = %i4, name = %c, mount = %c, access = %c, comments = %c, owner = %i4, owners = %i4, createflg = int1(%c), lockertype = %c",
2797     ufil_fields,
2798     11,
2799     "fs.filsys_id = %d",
2800     1,
2801     &ufil_validate,
2802   },
2803
2804   {
2805     /* Q_DFIL - DELETE_FILESYS */
2806     "delete_filesys",
2807     "dfil",
2808     DELETE,
2809     "fs",
2810     FILESYS,
2811     (char *)0,
2812     dfil_fields,
2813     0,
2814     "fs.filsys_id = %d",
2815     1,
2816     &dfil_validate,
2817   },
2818
2819   {
2820     /* Q_GFGM - GET_FSGROUOP_MEMBERS */
2821     "get_fsgroup_members",
2822     "gfgm",
2823     RETRIEVE,
2824     "fg",
2825     "fsgroup",
2826     "%c = filesys.label, %c = fg.key",
2827     gfgm_fields,
2828     2,
2829     "fg.group_id = %d and filesys.filsys_id = fg.filsys_id",
2830     1,
2831     &gfgm_validate,
2832   },
2833
2834   {
2835     /* Q_AFTG - ADD_FILESYS_TO_FSGROUP */
2836     "add_filesys_to_fsgroup",
2837     "aftg",
2838     APPEND,
2839     "fg",
2840     "fsgroup",
2841     "group_id = filesys.filsys_id, filsys_id = %i4, key = %c",
2842     gfgm_fields,
2843     2,
2844     "filesys.filsys_id = %d and filesys.type = \"FSGROUP\"",
2845     1,
2846     &aftg_validate,
2847   },
2848
2849   {
2850     /* Q_RFFG - REMOVE_FILESYS_FROM_FSGROUP */
2851     "remove_filesys_from_fsgroup",
2852     "rffg",
2853     DELETE,
2854     "fg",
2855     "fsgroup",
2856     (char *)0,
2857     gfgm_fields,
2858     0,
2859     "fg.group_id = %d and fg.filsys_id = %d",
2860     2,
2861     &aftg_validate,
2862   },
2863
2864   {
2865     /* Q_GANF - GET_ALL_NFSPHYS */
2866     "get_all_nfsphys",
2867     "ganf",
2868     RETRIEVE,
2869     "np",
2870     "nfsphys",
2871     "%c = machine.name, %c = np.dir, %c = np.device, %c = text(np.status), %c = text(np.allocated), %c = text(np.size), %c = np.modtime, %c = text(np.modby), %c = np.modwith",
2872     ganf_fields,
2873     9,
2874     "machine.mach_id = np.mach_id",
2875     0,
2876     &VDsortf,
2877   },
2878
2879   {
2880     /* Q_GNFP - GET_NFSPHYS */
2881     "get_nfsphys",
2882     "gnfp",
2883     RETRIEVE,
2884     "np",
2885     "nfsphys",
2886     "%c = machine.name, %c = np.dir, %c = np.device, %c = text(np.status), %c = text(np.allocated), %c = text(np.size), %c = np.modtime, %c = text(np.modby), %c = np.modwith",
2887     gnfp_fields,
2888     9,
2889     "np.mach_id = %d and np.dir = \"%s\" and machine.mach_id = np.mach_id",
2890     2,
2891     &gnfp_validate,
2892   },
2893
2894   {
2895     /* Q_ANFP - ADD_NFSPHYS */
2896     "add_nfsphys",
2897     "anfp",
2898     APPEND,
2899     "np",
2900     "nfsphys",
2901     "nfsphys_id = values.value, mach_id = %i4, dir = %c, device = %c, status = int4(%c), allocated = int4(%c), size = int4(%c)",
2902     ganf_fields,
2903     6,
2904     "values.name = \"nfsphys_id\"",
2905     0,
2906     &anfp_validate,
2907   },
2908
2909   {
2910     /* Q_UNFP - UPDATE_NFSPHYS */
2911     "update_nfsphys",
2912     "unfp",
2913     UPDATE,
2914     "np",
2915     "nfsphys",
2916     "device = %c, status = int4(%c), allocated = int4(%c), size = int4(%c)",
2917     gnfp_fields,
2918     4,
2919     "np.mach_id = %d and np.dir = \"%s\"",
2920     2,
2921     &anfp_validate,
2922   },
2923
2924   {
2925     /* Q_AJNF - ADJUST_NFSPHYS_ALLOCATION */
2926     "adjust_nfsphys_allocation",
2927     "ajnf",
2928     UPDATE,
2929     "np",
2930     "nfsphys",
2931     "allocated = np.allocated + int4(%c)",
2932     dnfp_fields,
2933     1,
2934     "np.mach_id = %d and np.dir = \"%s\"",
2935     2,
2936     &anfp_validate,
2937   },
2938
2939   {
2940     /* Q_DNFP - DELETE_NFSPHYS */
2941     "delete_nfsphys",
2942     "dnfp",
2943     DELETE,
2944     "np",
2945     "nfsphys",
2946     (char *)0,
2947     dnfp_fields,
2948     0,
2949     "np.mach_id = %d and np.dir = \"%s\"",
2950     2,
2951     &dnfp_validate,
2952   },
2953
2954   {
2955     /* Q_GNFQ - GET_NFS_QUOTAS */
2956     "get_nfs_quota",
2957     "gnfq",
2958     RETRIEVE,
2959     "nq",
2960     "nfsquota",
2961     "%c = filesys.label, %c = users.login, %c = text(nq.quota), %c = text(nq.phys_id), %c = machine.name, %c = nq.modtime, %c = text(nq.modby), %c = nq.modwith",
2962     gnfq_fields,
2963     8,
2964     "filesys.label = \"%s\" and nq.users_id = %d and filesys.filsys_id = nq.filsys_id and machine.mach_id = filesys.mach_id and users.users_id = nq.users_id",
2965     2,
2966     &gnfq_validate,
2967   },
2968
2969   {
2970     /* Q_GNQP - GET_NFS_QUOTAS_BY_PARTITION */
2971     "get_nfs_quotas_by_partition",
2972     "gnqp",
2973     RETRIEVE,
2974     "nq",
2975     "nfsquota",
2976     "%c = filesys.label, %c = users.login, %c = text(nq.quota), %c = nfsphys.dir, %c = machine.name",
2977     gnqp_fields,
2978     5,
2979     "nfsphys.mach_id = %d and nfsphys.dir = \"%s\" and nq.phys_id = nfsphys.nfsphys_id and filesys.filsys_id = nq.filsys_id and users.users_id = nq.users_id and machine.mach_id = nfsphys.mach_id",
2980     2,
2981     &VDmach,
2982   },
2983
2984   {
2985     /* Q_ANFQ - ADD_NFS_QUOTA */
2986     "add_nfs_quota",
2987     "anfq",
2988     APPEND,
2989     "nq",
2990     "nfsquota",
2991     "filsys_id = filesys.filsys_id, users_id = %i4, quota = int4(%c), phys_id = filesys.phys_id",
2992     anfq_fields,
2993     2,
2994     "filesys.filsys_id = %d",
2995     1,
2996     &anfq_validate,
2997   },
2998
2999   {
3000     /* Q_UNFQ - UPDATE_NFS_QUOTA */
3001     "update_nfs_quota",
3002     "unfq",
3003     UPDATE,
3004     "nq",
3005     "nfsquota",
3006     "quota = int4(%c)",
3007     anfq_fields,
3008     1,
3009     "nq.filsys_id = %d and nq.users_id = %d",
3010     2,
3011     &unfq_validate,
3012   },
3013
3014   {
3015     /* Q_DNFQ - DELETE_NFS_QUOTA */
3016     "delete_nfs_quota",
3017     "dnfq",
3018     DELETE,
3019     "nq",
3020     "nfsquota",
3021     (char *)0,
3022     anfq_fields,
3023     0,
3024     "nq.filsys_id = %d and nq.users_id = %d",
3025     2,
3026     &dnfq_validate,
3027   },
3028
3029   {
3030     /* Q_GLIN - GET_LIST_INFO */
3031     "get_list_info",
3032     "glin",
3033     RETRIEVE,
3034     0,
3035     LIST,
3036     0,
3037     glin_fields,
3038     13,
3039     0,
3040     1,
3041     &glin_validate,
3042   },
3043     
3044   {
3045     /* Q_EXLN - EXPAND_LIST_NAMES */
3046     "expand_list_names",
3047     "exln",
3048     RETRIEVE,
3049     "l",
3050     LIST,
3051     "%c = l.name",
3052     glin_fields,
3053     1,
3054     "l.name = \"%s\" and l.list_id != 0",
3055     1,
3056     0
3057   },
3058     
3059   {
3060     /* Q_ALIS - ADD_LIST */
3061     "add_list",
3062     "alis",
3063     APPEND,
3064     "l",
3065     LIST,
3066     "list_id=values.value, name=%c, active=int1(%c), public=int1(%c), hidden=int1(%c), maillist=int1(%c), group=int1(%c), gid=int2(%c), acl_type=%c, acl_id=%i4, desc=%c",
3067     alis_fields,
3068     10,
3069     "values.name = \"list_id\"",
3070     0,
3071     &alis_validate,
3072   },
3073
3074   {
3075     /* Q_ULIS - UPDATE_LIST */
3076     "update_list",
3077     "ulis",
3078     UPDATE,
3079     "l",
3080     LIST,
3081     "name=%c, active=int1(%c), public=int1(%c), hidden=int1(%c), maillist=int1(%c), group=int1(%c), gid=int2(%c), acl_type=%c, acl_id=%i4, desc=%c",
3082     ulis_fields,
3083     10,
3084     "l.list_id = %d",
3085     1,
3086     &ulis_validate,
3087   },
3088
3089   {
3090     /* Q_DLIS - DELETE_LIST */
3091     "delete_list",
3092     "dlis",
3093     DELETE,
3094     "l",
3095     LIST,
3096     (char *)0,
3097     dlis_fields,
3098     0,
3099     "l.list_id = %d",
3100     1,
3101     &dlis_validate,
3102   },
3103
3104   {
3105     /* Q_AMTL - ADD_MEMBER_TO_LIST */
3106     "add_member_to_list",
3107     "amtl",
3108     APPEND,
3109     0,
3110     "imembers",
3111     0,
3112     amtl_fields,
3113     3,
3114     (char *)0,
3115     0,
3116     &amtl_validate,
3117   },
3118
3119   {
3120     /* Q_DMFL - DELETE_MEMBER_FROM_LIST */
3121     "delete_member_from_list",
3122     "dmfl",
3123     DELETE,
3124     0,
3125     "imembers",
3126     (char *)0,
3127     amtl_fields,
3128     0,
3129     0,
3130     3,
3131     &dmfl_validate,
3132   },
3133
3134   {
3135     /* Q_GAUS - GET_ACE_USE */
3136     "get_ace_use",
3137     "gaus",
3138     RETRIEVE,
3139     0,
3140     0,
3141     0,
3142     gaus_fields,
3143     2,
3144     0,
3145     2,
3146     &gaus_validate,
3147   },
3148
3149   {
3150     /* Q_QGLI - QUALIFIED_GET_LISTS */
3151     "qualified_get_lists",
3152     "qgli",
3153     RETRIEVE,
3154     0,
3155     LIST,
3156     0,
3157     qgli_fields,
3158     1,
3159     0,
3160     5,
3161     &qgli_validate,
3162   },
3163
3164   {
3165     /* Q_GMOL - GET_MEMBERS_OF_LIST */
3166     "get_members_of_list",
3167     "gmol",
3168     RETRIEVE,
3169     (char *)0,
3170     "imembers",
3171     (char *)0,
3172     gmol_fields,
3173     0,
3174     (char *)0,
3175     1,
3176     &gmol_validate,
3177   },
3178
3179   {
3180     /* Q_GLOM - GET_LISTS_OF_MEMBER */
3181     "get_lists_of_member",
3182     "glom",
3183     RETRIEVE,
3184     0,
3185     "imembers",
3186     0,
3187     glom_fields,
3188     6,
3189     0,
3190     2,
3191     &glom_validate,
3192   },
3193
3194   {
3195     /* Q_CMOL - COUNT_MEMBERS_OF_LIST */
3196     "count_members_of_list",
3197     "cmol",
3198     RETRIEVE,
3199     0,
3200     "imembers",
3201     0,
3202     cmol_fields,
3203     1,
3204     0,
3205     1,
3206     &cmol_validate,
3207   },
3208
3209   {
3210     /* Q_GZCL - GET_ZEPHYR_CLASS */
3211     "get_zephyr_class",
3212     "gzcl",
3213     RETRIEVE,
3214     "z",
3215     "zephyr",
3216     "%c = z.class, %c = z.xmt_type, %c = text(z.xmt_id),%c = z.sub_type, %c = text(z.sub_id),%c = z.iws_type, %c = text(z.iws_id),%c = z.iui_type, %c = text(z.iui_id), %c=z.modtime, %c = text(z.modby), %c = z.modwith",
3217     gzcl_fields,
3218     12,
3219     "z.class = \"%s\"",
3220     1,
3221     &gzcl_validate,
3222   },    
3223
3224   {
3225     /* Q_AZCL - ADD_ZEPHYR_CLASS */
3226     "add_zephyr_class",
3227     "azcl",
3228     APPEND,
3229     "z",
3230     "zephyr",
3231     "class = %c, xmt_type = %c, xmt_id = %i4, sub_type = %c, sub_id = %i4, iws_type = %c, iws_id = %i4, iui_type = %c, iui_id = %i4",
3232     azcl_fields,
3233     9,
3234     0,
3235     0,
3236     &azcl_validate,
3237   },    
3238
3239   {
3240     /* Q_UZCL - UPDATE_ZEPHYR_CLASS */
3241     "update_zephyr_class",
3242     "uzcl",
3243     UPDATE,
3244     "z",
3245     "zephyr",
3246     "class = %c, xmt_type = %c, xmt_id = %i4, sub_type = %c, sub_id = %i4, iws_type = %c, iws_id = %i4, iui_type = %c, iui_id = %i4",
3247     uzcl_fields,
3248     9,
3249     "z.class = \"%s\"",
3250     1,
3251     &uzcl_validate,
3252   },    
3253
3254   {
3255     /* Q_DZCL - DELETE_ZEPHYR_CLASS */
3256     "delete_zephyr_class",
3257     "dzcl",
3258     DELETE,
3259     "z",
3260     "zephyr",
3261     0,
3262     uzcl_fields,
3263     0,
3264     "z.class = \"%s\"",
3265     1,
3266     &dzcl_validate,
3267   },    
3268 #ifdef notdef
3269   {
3270     /* Q_GSVC - GET_SERVICE */
3271     "get_service",
3272     "gsvc",
3273     RETRIEVE,
3274     "s",
3275     "services",
3276     "%c = s.name, %c = s.protocol, %c = text(s.port), %c = s.desc, %c = s.modtime, %c = text(s.modby), %c = s.modwith",
3277     gasv_fields,
3278     7,
3279     (char *)0,
3280     0,
3281     &gsvc_validate,
3282   },
3283
3284   {
3285     /* Q_ASVC - ADD_SERVICE */
3286     "add_service",
3287     "asvc",
3288     APPEND,
3289     "s",
3290     "services",
3291     "name = %c, protocol = %c, port = int2(%c), desc = %c",
3292     gasv_fields,
3293     4,
3294     (char *)0,
3295     0,
3296     &asvc_validate,
3297   },
3298
3299   {
3300     /* Q_DSVC - DELETE_SERVICE */
3301     "delete_service",
3302     "dsvc",
3303     DELETE,
3304     "s",
3305     "services",
3306     0,
3307     gasv_fields,
3308     0,
3309     "s.name = \"%s\"",
3310     1,
3311     &dsvc_validate,
3312   },
3313 #endif
3314   {
3315     /* Q_GPCP - GET_PRINTCAP */
3316     "get_printcap",
3317     "gpcp",
3318     RETRIEVE,
3319     "p",
3320     "printcap",
3321     "%c = p.name, %c = machine.name, %c = p.dir, %c = p.rp, %c = p.comments, %c = p.modtime, %c = text(p.modby), %c = p.modwith",
3322     gpcp_fields,
3323     8,
3324     "p.name = \"%s\" and machine.mach_id = p.mach_id",
3325     1,
3326     &VDsortf,
3327   },
3328
3329   {
3330     /* Q_APCP - ADD_PRINTCAP */
3331     "add_printcap",
3332     "apcp",
3333     APPEND,
3334     "p",
3335     "printcap",
3336     "name = %c, mach_id = %i4, dir = %c, rp = %c, comments = %c",
3337     apcp_fields,
3338     5,
3339     0,
3340     0,
3341     &apcp_validate,
3342   },
3343
3344   {
3345     /* Q_DPCP - DELETE_PRINTCAP */
3346     "delete_printcap",
3347     "dpcp",
3348     DELETE,
3349     "p",
3350     "printcap",
3351     0,
3352     apcp_fields,
3353     0,
3354     "p.name = \"%s\"",
3355     1,
3356     &dpcp_validate,
3357   },
3358
3359   {
3360     /* Q_GPDM - GET_PALLADIUM */
3361     "get_palladium",
3362     "gpdm",
3363     RETRIEVE,
3364     "p",
3365     "palladium",
3366     "%c = p.name, %c = text(p.ident), %c = machine.name, %c = p.modtime, %c = text(p.modby), %c = p.modwith",
3367     gpdm_fields,
3368     6,
3369     "p.name = \"%s\" and machine.mach_id = p.mach_id",
3370     1,
3371     &VDsortf,
3372   },
3373
3374   {
3375     /* Q_APDM - ADD_PALLADIUM */
3376     "add_palladium",
3377     "apdm",
3378     APPEND,
3379     "p",
3380     "palladium",
3381     "name = %c, ident = int4(%c), mach_id = %i4",
3382     apdm_fields,
3383     3,
3384     0,
3385     0,
3386     &apdm_validate,
3387   },
3388
3389   {
3390     /* Q_DPDM - DELETE_PALLADIUM */
3391     "delete_palladium",
3392     "dpdm",
3393     DELETE,
3394     "p",
3395     "palladium",
3396     0,
3397     apdm_fields,
3398     0,
3399     "p.name = \"%s\"",
3400     1,
3401     &dpdm_validate,
3402   },
3403
3404   {
3405     /* Q_GALI - GET_ALIAS */
3406     "get_alias",
3407     "gali",
3408     RETRIEVE,
3409     "a",
3410     "alias",
3411     "%c = a.name, %c = a.type, %c = a.trans",
3412     gali_fields,
3413     3,
3414     "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
3415     3,
3416     0,
3417   },
3418
3419   {
3420     /* Q_AALI - ADD_ALIAS */
3421     "add_alias",
3422     "aali",
3423     APPEND,
3424     "a",
3425     "alias",
3426     "name = %c, type = %c, trans = %c",
3427     aali_fields,
3428     3,
3429     (char *)0,
3430     0,
3431     &aali_validate,
3432   },
3433
3434   {
3435     /* Q_DALI - DELETE_ALIAS */
3436     "delete_alias",
3437     "dali",
3438     DELETE,
3439     "a",
3440     "alias",
3441     (char *)0,
3442     aali_fields,
3443     0,
3444     "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
3445     3,
3446     &dali_validate,
3447   },
3448
3449   {
3450     /* Q_GVAL - GET_VALUE */
3451     "get_value",
3452     "gval",
3453     RETRIEVE,
3454     "v",
3455     "values",
3456     "%c = text(v.value)",
3457     gval_fields,
3458     1,
3459     "v.name = \"%s\"",
3460     1,
3461     &gval_validate,
3462   },
3463
3464   {
3465     /* Q_AVAL - ADD_VALUE */
3466     "add_value",
3467     "aval",
3468     APPEND,
3469     "v",
3470     "values",
3471     "name = %c, value = int4(%c)",
3472     aval_fields,
3473     2,
3474     (char *)0,
3475     0,
3476     &aval_validate,
3477   },
3478
3479   {
3480     /* Q_UVAL - UPDATE_VALUE */
3481     "update_value",
3482     "uval",
3483     UPDATE,
3484     "v",
3485     "values",
3486     "value = int4(%c)",
3487     aval_fields,
3488     1,
3489     "v.name = \"%s\"",
3490     1,
3491     &aval_validate,
3492   },
3493
3494   {
3495     /* Q_DVAL - DELETE_VALUE */
3496     "delete_value",
3497     "dval",
3498     DELETE,
3499     "v",
3500     "values",
3501     (char *)0,
3502     dval_fields,
3503     0,
3504     "v.name = \"%s\"",
3505     1,
3506     &aval_validate,
3507   },
3508
3509   {
3510     /* Q_GATS - GET_ALL_TABLE_STATS */
3511     "get_all_table_stats",
3512     "gats",
3513     RETRIEVE,
3514     "tbs",
3515     "tblstats",
3516     "%c = tbs.table, %c = text(tbs.retrieves), %c = text(tbs.appends), %c = text(tbs.updates), %c = text(tbs.deletes), %c = tbs.modtime",
3517     gats_fields,
3518     6,
3519     (char *)0,
3520     0,
3521     0,
3522   },
3523
3524 };
3525
3526 int QueryCount2 = (sizeof Queries2 / sizeof (struct query));
This page took 0.336822 seconds and 3 git commands to generate.