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