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