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