]> andersk Git - moira.git/blob - server/queries2.c
0f1726144748ecea943f5501d71355383f0d5f95
[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_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 add_member_to_list();
71 int delete_member_from_list();
72 int get_ace_use();
73 int qualified_get_lists();
74 int get_members_of_list();
75 int qualified_get_server();
76 int qualified_get_serverhost();
77 int trigger_dcm();
78 int count_members_of_list();
79 int get_lists_of_member();
80 int register_user();
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 =
1380 {
1381   amtl_valobj,
1382   4,
1383   0,
1384   0,
1385   0,
1386   0,
1387   access_list,
1388   0,
1389   add_member_to_list,
1390 };
1391
1392 static struct validate dmfl_validate =
1393 {
1394   amtl_valobj,
1395   4,
1396   0,
1397   0,
1398   0,
1399   0,
1400   access_list,
1401   0,
1402   delete_member_from_list,
1403 };
1404
1405 static char *gaus_fields[] = {
1406     ACE_TYPE, ACE_NAME,
1407     "use_type", "use_name",
1408 };
1409
1410 static struct valobj gaus_valobj[] = {
1411   {V_TYPE, 0, "gaus", 0, 0, SMS_TYPE},
1412   {V_TYPEDATA, 1, 0, 0, 0, SMS_NO_MATCH},
1413 };
1414
1415 static struct validate gaus_validate = {
1416     gaus_valobj,
1417     2,
1418     0,
1419     0,
1420     0,
1421     0,
1422     access_member,
1423     0,
1424     get_ace_use,
1425 };
1426
1427 static char *qgli_fields[] = {
1428     "active", "public", "hidden", "maillist", "group",
1429     "list",
1430 };
1431
1432 static struct valobj qgli_valobj[] = {
1433   {V_TYPE, 0, "boolean", 0, 0, SMS_TYPE},
1434   {V_TYPE, 1, "boolean", 0, 0, SMS_TYPE},
1435   {V_TYPE, 2, "boolean", 0, 0, SMS_TYPE},
1436   {V_TYPE, 3, "boolean", 0, 0, SMS_TYPE},
1437   {V_TYPE, 4, "boolean", 0, 0, SMS_TYPE},
1438 };
1439
1440 static struct validate qgli_validate = {
1441     qgli_valobj,
1442     5,
1443     0,
1444     0,
1445     0,
1446     0,
1447     access_qgli,
1448     0,
1449     qualified_get_lists,
1450 };
1451
1452 static char *gmol_fields[] = {
1453   "list_name",
1454   "member_type", "member_name",
1455 };
1456
1457 static struct validate gmol_validate = {
1458   VOlist0,
1459   1,
1460   0,
1461   0,
1462   0,
1463   0,
1464   access_visible_list,
1465   0,
1466   get_members_of_list,
1467 };
1468
1469 static char *glom_fields[] = {
1470   "member_type", "member_name",
1471   "list_name", "active", "public", "hidden", "maillist", "group",
1472 };
1473
1474 static struct valobj glom_valobj[] = {
1475   {V_TYPE, 0, "rmember", 0, 0, SMS_TYPE},
1476   {V_TYPEDATA, 1, 0, 0, 0, SMS_NO_MATCH},
1477   {V_SORT, 0},
1478 };
1479
1480 static struct validate glom_validate = {
1481   glom_valobj,
1482   3,
1483   0,
1484   0,
1485   0,
1486   0,
1487   access_member,
1488   0,
1489   get_lists_of_member,
1490 };
1491
1492 static char *cmol_fields[] = {
1493   "list_name",
1494   "count",
1495 };
1496
1497 static struct validate cmol_validate = {
1498   VOlist0,
1499   1,
1500   0,
1501   0,
1502   0,
1503   0,
1504   access_visible_list,
1505   0,
1506   count_members_of_list,
1507 };
1508
1509 static char *gzcl_fields[] = {
1510     CLASS,
1511     CLASS, "xmt_type", "xmt_name", "sub_type", "sub_name",
1512     "iws_type", "iws_name", "iui_type", "iui_name", MOD1, MOD2, MOD3, 
1513 };
1514
1515 static struct validate gzcl_validate = {
1516   VOsort0,
1517   1,
1518   0,
1519   0,
1520   0,
1521   0,
1522   0,
1523   0,
1524   followup_gzcl,
1525 };
1526
1527 static char *azcl_fields[] = {
1528     CLASS, "xmt_type", "xmt_name", "sub_type", "sub_name",
1529     "iws_type", "iws_name", "iui_type", "iui_name",
1530 };
1531
1532 static struct valobj azcl_valobj[] = {
1533   {V_CHAR, 0},
1534   {V_TYPE, 1, ACE_TYPE, 0, 0, SMS_ACE},
1535   {V_TYPEDATA, 2, 0, 0, LIST_ID, SMS_ACE},
1536   {V_TYPE, 3, ACE_TYPE, 0, 0, SMS_ACE},
1537   {V_TYPEDATA, 4, 0, 0, LIST_ID, SMS_ACE},
1538   {V_TYPE, 5, ACE_TYPE, 0, 0, SMS_ACE},
1539   {V_TYPEDATA, 6, 0, 0, LIST_ID, SMS_ACE},
1540   {V_TYPE, 7, ACE_TYPE, 0, 0, SMS_ACE},
1541   {V_TYPEDATA, 8, 0, 0, LIST_ID, SMS_ACE},
1542 };
1543
1544 static struct validate azcl_validate = {
1545   azcl_valobj,
1546   8,
1547   CLASS,
1548   "z.class = \"%s\"",
1549   1,
1550   0,
1551   0,
1552   0,
1553   set_zephyr_modtime,
1554 };
1555
1556 static char *uzcl_fields[] = {
1557     CLASS, "newclass", "xmt_type", "xmt_name", "sub_type", "sub_name",
1558     "iws_type", "iws_name", "iui_type", "iui_name",
1559 };
1560
1561 static struct valobj uzcl_valobj[] = {
1562   {V_RENAME, 1, "zephyr", CLASS, 0, SMS_NOT_UNIQUE},
1563   {V_TYPE, 2, ACE_TYPE, 0, 0, SMS_ACE},
1564   {V_TYPEDATA, 3, 0, 0, LIST_ID, SMS_ACE},
1565   {V_TYPE, 4, ACE_TYPE, 0, 0, SMS_ACE},
1566   {V_TYPEDATA, 5, 0, 0, LIST_ID, SMS_ACE},
1567   {V_TYPE, 6, ACE_TYPE, 0, 0, SMS_ACE},
1568   {V_TYPEDATA, 7, 0, 0, LIST_ID, SMS_ACE},
1569   {V_TYPE, 8, ACE_TYPE, 0, 0, SMS_ACE},
1570   {V_TYPEDATA, 9, 0, 0, LIST_ID, SMS_ACE},
1571 };
1572
1573 static struct validate uzcl_validate = {
1574   uzcl_valobj,
1575   9,
1576   CLASS,
1577   "z.class = \"%s\"",
1578   1,
1579   0,
1580   0,
1581   0,
1582   set_zephyr_modtime,
1583 };
1584
1585 static struct validate dzcl_validate = {
1586   0,
1587   0,
1588   CLASS,
1589   "z.class = \"%s\"",
1590   1,
1591   0,
1592   0,
1593   0,
1594   0,
1595 };
1596
1597 static char *gasv_fields[] = {
1598   SERVICE, "protocol", "port", DESC,
1599 };
1600
1601 static char *gpcp_fields[] = {
1602     "printer",
1603     "printer", "spooling_host", "spool_directory", "rprinter", "comments",
1604     MOD1, MOD2, MOD3,
1605 };
1606
1607 static char *apcp_fields[] = {
1608     "printer", "spooling_host", "spool_directory", "rprinter", "comments",
1609     MOD1, MOD2, MOD3,
1610 };
1611
1612 static struct valobj apcp_valobj[] = {
1613     {V_CHAR, 0},
1614     {V_ID, 1, MACHINE, NAME, MACH_ID, SMS_MACHINE},
1615 };
1616
1617 static struct validate apcp_validate = {
1618   apcp_valobj,
1619   2,
1620   NAME,
1621   "p.name = \"%s\"",
1622   1,
1623   0,
1624   0,
1625   0,
1626   set_modtime,
1627 };
1628
1629 static struct validate dpcp_validate = {
1630   0,
1631   0,
1632   NAME,
1633   "p.name = \"%s\"",
1634   1,
1635   0,
1636   0,
1637   0,
1638   0,
1639 };
1640
1641 static char *gali_fields[] = {
1642   NAME, TYPE, "trans",
1643   NAME, TYPE, "trans",
1644 };
1645
1646 static char *aali_fields[] = {
1647   NAME, TYPE, "trans",
1648 };
1649
1650 static struct valobj aali_valobj[] = {
1651   {V_CHAR, 0},
1652   {V_TYPE, 1, "alias", 0, 0, SMS_TYPE},
1653   {V_CHAR, 2},
1654 };
1655
1656 static struct validate aali_validate = {
1657   aali_valobj,
1658   3,
1659   "trans",
1660   "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
1661   3,
1662   0,
1663   0,
1664   0,
1665   0,
1666 };
1667
1668 static struct validate dali_validate =  /* DELETE_ALIAS */
1669 {
1670   0,
1671   0,
1672   "trans",
1673   "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
1674   3,
1675   0,
1676   0,
1677   0,
1678   0,
1679 };
1680
1681 static char *gval_fields[] = {
1682   NAME, "value",
1683 };
1684
1685 static struct valobj gval_valobj[] = {
1686   {V_NAME, 0, "values", NAME, 0, SMS_NO_MATCH},
1687 };
1688
1689 static struct validate gval_validate = {
1690   gval_valobj,
1691   1,
1692   0,
1693   0,
1694   0,
1695   0,
1696   0,
1697   0,
1698   0,
1699 };
1700
1701 static char *aval_fields[] = {
1702   NAME, "value",
1703 };
1704
1705 static struct validate aval_validate =  /* for aval, uval, and dval */
1706 {
1707   VOchar0,
1708   1,
1709   NAME,
1710   "v.name = \"%s\"",
1711   1,
1712   0,
1713   0,
1714   0,
1715   0,
1716 };
1717
1718 static char *dval_fields[] = {
1719   NAME,
1720 };
1721
1722 static char *gats_fields[] = {
1723   "table", "retrieves", "appends", "updates", "deletes", MOD1, MOD2, MOD3,
1724 };
1725
1726
1727 \f
1728 /* Generalized Query Definitions */
1729
1730 struct query Queries2[] = {
1731   {
1732     /* Q_GALO - GET_ALL_LOGINS */
1733     "get_all_logins",
1734     "galo",
1735     RETRIEVE,
1736     "u",
1737     USERS,
1738     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle",
1739     galo_fields,
1740     6,
1741     "u.users_id != 0",
1742     0,
1743     0,
1744   },
1745
1746   {
1747     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS */
1748     "get_all_active_logins",
1749     "gaal",
1750     RETRIEVE,
1751     "u",
1752     USERS,
1753     "%c = u.login, %c = text(u.uid), %c = u.shell, %c = u.last, %c = u.first, %c = u.middle",
1754     galo_fields,
1755     6,
1756     "u.status = 1",
1757     0,
1758     0,
1759   },
1760
1761   {
1762     /* Q_GUBL - GET_USER_BY_LOGIN */
1763     "get_user_by_login",
1764     "gubl",
1765     RETRIEVE,
1766     "u",
1767     USERS,
1768     "%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",
1769     gubl_fields,
1770     12,
1771     "u.login = \"%s\" and u.users_id != 0",
1772     1,
1773     &gubx_validate,
1774   },
1775
1776   {
1777     /* Q_GUBU - GET_USER_BY_UID */
1778     "get_user_by_uid",
1779     "gubu",
1780     RETRIEVE,
1781     "u",
1782     USERS,
1783     "%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",
1784     gubu_fields,
1785     12,
1786     "u.uid = %s and u.users_id != 0",
1787     1,
1788     &gubx_validate,
1789   },
1790
1791   {
1792     /* Q_GUBN - GET_USER_BY_NAME */
1793     "get_user_by_name",
1794     "gubn",
1795     RETRIEVE,
1796     "u",
1797     USERS,
1798     "%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",
1799     gubn_fields,
1800     12,
1801     "u.first = \"%s\" and u.last = \"%s\" and u.users_id != 0",
1802     2,
1803     &VDsortf,
1804   },
1805
1806   {
1807     /* Q_GUBC - GET_USER_BY_CLASS */
1808     "get_user_by_class",
1809     "gubc",
1810     RETRIEVE,
1811     "u",
1812     USERS,
1813     "%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",
1814     gubc_fields,
1815     12,
1816     "u.mit_year = uppercase(\"%s\") and u.users_id != 0",
1817     1,
1818     &VDsortf,
1819   },
1820
1821   {
1822     /* Q_GUBM - GET_USER_BY_MITID */
1823     "get_user_by_mitid",
1824     "gubm",
1825     RETRIEVE,
1826     "u",
1827     USERS,
1828     "%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",
1829     gubm_fields,
1830     12,
1831     "u.mit_id = \"%s\" and u.users_id != 0",
1832     1,
1833     &VDsortf,
1834   },
1835
1836   {
1837     /* Q_AUSR - ADD_USER */
1838     "add_user",
1839     "ausr",
1840     APPEND,
1841     "u",
1842     USERS,
1843     "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",
1844     ausr_fields,
1845     9,
1846     "values.name = \"users_id\"",
1847     0,
1848     &ausr_validate,
1849   },
1850
1851   {
1852     /* Q_RUSR - REGISTER_USER */
1853     "register_user",
1854     "rusr",
1855     APPEND,
1856     0,
1857     0,
1858     0,
1859     rusr_fields,
1860     3,
1861     0,
1862     0,
1863     &rusr_validate,
1864   },
1865
1866   {
1867     /* Q_UUSR - UPDATE_USER */
1868     "update_user",
1869     "uusr",
1870     UPDATE,
1871     "u",
1872     USERS,
1873     "login = %c, uid = int4(%c), shell = %c, last = %c, first = %c, middle = %c, status = int4(%c), mit_id = %c, mit_year = %c",
1874     uusr_fields,
1875     9,
1876     "u.users_id = %d",
1877     1,
1878     &uusr_validate,
1879   },
1880
1881   {
1882     /* Q_UUSH - UPDATE_USER_SHELL */
1883     "update_user_shell",
1884     "uush",
1885     UPDATE,
1886     "u",
1887     USERS,
1888     "shell = %c",
1889     uush_fields,
1890     1,
1891     "u.users_id = %d",
1892     1,
1893     &uush_validate,
1894   },
1895
1896   {
1897     /* Q_UUST - UPDATE_USER_STATUS */
1898     "update_user_status",
1899     "uust",
1900     UPDATE,
1901     "u",
1902     USERS,
1903     "status = int4(%c)",
1904     uust_fields,
1905     1,
1906     "u.users_id = %d",
1907     1,
1908     &uust_validate,
1909   },
1910
1911   {
1912     /* Q_DUSR - DELETE_USER */
1913     "delete_user",
1914     "dusr",
1915     DELETE,
1916     "u",
1917     USERS,
1918     (char *)0,
1919     dusr_fields,
1920     0,
1921     "u.users_id = %d",
1922     1,
1923     &dusr_validate,
1924   },
1925
1926   {
1927     /* Q_DUBU - DELETE_USER_BY_UID */
1928     "delete_user_by_uid",
1929     "dubu",
1930     DELETE,
1931     "u",
1932     USERS,
1933     (char *)0,
1934     dubu_fields,
1935     0,
1936     "u.users_id = %d",
1937     1,
1938     &dubu_validate,
1939   },
1940
1941   {
1942     /* Q_GFBL - GET_FINGER_BY_LOGIN */
1943     "get_finger_by_login",
1944     "gfbl",
1945     RETRIEVE,
1946     "u",
1947     USERS,
1948     "%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",
1949     gfbl_fields,
1950     12,
1951     "u.users_id = %d",
1952     1,
1953     &gfbl_validate,
1954   },
1955
1956   {
1957     /* Q_UFBL - UPDATE_FINGER_BY_LOGIN */
1958     "update_finger_by_login",
1959     "ufbl",
1960     UPDATE,
1961     "u",
1962     USERS,
1963     "fullname=%c,nickname=%c,home_addr=%c,home_phone=%c,office_addr=%c,office_phone=%c,mit_dept=%c,mit_affil=%c",
1964     ufbl_fields,
1965     8,
1966     "u.users_id = %d",
1967     1,
1968     &ufbl_validate,
1969   },
1970
1971   {
1972     /* Q_GPOB - GET_POBOX */
1973     "get_pobox",
1974     "gpob",
1975     RETRIEVE,
1976     "u",
1977     USERS,
1978     "%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",
1979     gpob_fields,
1980     6,
1981     "u.users_id = %d",
1982     1,
1983     &gpob_validate,
1984   },
1985
1986   {
1987     /* Q_GAPO - GET_ALL_POBOXES */
1988     "get_all_poboxes",
1989     "gapo",
1990     RETRIEVE,
1991     "u",
1992     USERS,
1993     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id)",
1994     gpox_fields,
1995     3,
1996     "u.potype != \"NONE\"",
1997     0,
1998     &gpox_validate,
1999   },
2000       
2001   {
2002     /* Q_GPOP - GET_POBOXES_POP */
2003     "get_poboxes_pop",
2004     "gpop",
2005     RETRIEVE,
2006     "u",
2007     USERS,
2008     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id)",
2009     gpox_fields,
2010     3,
2011     "u.potype = \"POP\"",
2012     0,
2013     &gpox_validate
2014   },
2015
2016   {
2017     /* Q_GPOF - GET_POBOXES_SMTP */
2018     "get_poboxes_smtp",
2019     "gpos",
2020     RETRIEVE,
2021     "u",
2022     USERS,
2023     "%c = u.login, %c = u.potype, %c = text(u.pop_id) + \":\" + text(u.box_id)",
2024     gpox_fields,
2025     3,
2026     "u.potype = \"SMTP\"",
2027     0,
2028     &gpox_validate
2029   },
2030
2031   {
2032     /* Q_SPOB - SET_POBOX */
2033     "set_pobox",
2034     "spob",
2035     UPDATE,
2036     0,
2037     USERS,
2038     0,
2039     spob_fields,
2040     3,
2041     (char *)0,
2042     0,
2043     &spob_validate,
2044   },
2045
2046   {
2047     /* Q_SPOP - SET_POBOX_POP */
2048     "set_pobox_pop",
2049     "spop",
2050     UPDATE,
2051     "u",
2052     USERS,
2053     "potype = \"POP\"",
2054     spob_fields,
2055     0,
2056     "u.users_id = %d",
2057     1,
2058     &spop_validate,
2059   },
2060
2061   {
2062     /* Q_DPOB - DELETE_POBOX */
2063     "delete_pobox",
2064     "dpob",
2065     UPDATE,
2066     "u",
2067     USERS,
2068     "potype = \"NONE\"",
2069     spob_fields,
2070     0,
2071     "u.users_id = %d",
2072     1,
2073     &dpob_validate,
2074   },
2075
2076   {
2077     /* Q_GMAC - GET_MACHINE */
2078     "get_machine",
2079     "gmac",
2080     RETRIEVE,
2081     "m",
2082     MACHINE,
2083     "%c = m.name, %c = m.type, %c = m.modtime, %c = text(m.modby), %c =m.modwith",
2084     gmac_fields,
2085     5,
2086     "m.name = uppercase(\"%s\") and m.mach_id != 0",
2087     1,
2088     &VDsortf,
2089   },
2090
2091   {
2092     /* Q_AMAC - ADD_MACHINE */
2093     "add_machine",
2094     "amac",
2095     APPEND,
2096     "m",
2097     MACHINE,
2098     "name = uppercase(%c), mach_id = values.value, type = %c",
2099     amac_fields,
2100     2,
2101     "values.name = \"mach_id\"",
2102     0,
2103     &amac_validate,
2104   },
2105
2106   {
2107     /* Q_UMAC - UPDATE_MACHINE */
2108     "update_machine",
2109     "umac",
2110     UPDATE,
2111     "m",
2112     MACHINE,
2113     "name = uppercase(%c), type = %c",
2114     umac_fields,
2115     2,
2116     "m.mach_id = %d",
2117     1,
2118     &umac_validate,
2119   },
2120
2121   {
2122     /* Q_DMAC - DELETE_MACHINE */
2123     "delete_machine",
2124     "dmac",
2125     DELETE,
2126     "m",
2127     MACHINE,
2128     (char *)0,
2129     dmac_fields,
2130     0,
2131     "m.mach_id = %d",
2132     1,
2133     &dmac_validate,
2134   },
2135
2136   {
2137     /* Q_GCLU - GET_CLUSTER */
2138     "get_cluster",
2139     "gclu",
2140     RETRIEVE,
2141     "c",
2142     CLUSTER,
2143     "%c = c.name, %c = c.desc, %c = c.location, %c = c.modtime, %c = text(c.modby), %c = c.modwith",
2144     gclu_fields,
2145     6,
2146     "c.name = \"%s\" and c.clu_id != 0",
2147     1,
2148     &VDsortf,
2149   },
2150
2151   {
2152     /* Q_ACLU - ADD_CLUSTER */
2153     "add_cluster",
2154     "aclu",
2155     APPEND,
2156     "c",
2157     CLUSTER,
2158     "name = %c, clu_id = values.value, desc = %c, location = %c",
2159     aclu_fields,
2160     3,
2161     "values.name = \"clu_id\"",
2162     0,
2163     &aclu_validate,
2164   },
2165
2166   {
2167     /* Q_UCLU - UPDATE_CLUSTER */
2168     "update_cluster",
2169     "uclu",
2170     UPDATE,
2171     "c",
2172     CLUSTER,
2173     "name = %c, desc = %c, location = %c",
2174     uclu_fields,
2175     3,
2176     "c.clu_id = %d",
2177     1,
2178     &uclu_validate,
2179   },
2180
2181   {
2182     /* Q_DCLU - DELETE_CLUSTER */
2183     "delete_cluster",
2184     "dclu",
2185     DELETE,
2186     "c",
2187     CLUSTER,
2188     (char *)0,
2189     dclu_fields,
2190     0,
2191     "c.clu_id = %d",
2192     1,
2193     &dclu_validate,
2194   },
2195
2196   {
2197     /* Q_GMCM - GET_MACHINE_TO_CLUSTER_MAP */
2198     "get_machine_to_cluster_map",
2199     "gmcm",
2200     RETRIEVE,
2201     "m",
2202     "mcmap",
2203     "%c = machine.name, %c = cluster.name",
2204     gmcm_fields,
2205     2,
2206     "machine.name = uppercase(\"%s\") and cluster.name = \"%s\" and m.clu_id = cluster.clu_id and m.mach_id = machine.mach_id",
2207     2,
2208     &VDsort2,
2209   },
2210
2211   {
2212     /* Q_AMTC - ADD_MACHINE_TO_CLUSTER */
2213     "add_machine_to_cluster",
2214     "amtc",
2215     APPEND,
2216     "m",
2217     "mcmap",
2218     "mach_id = %i4, clu_id = %i4",
2219     gmcm_fields,
2220     2,
2221     0,
2222     0,
2223     &amtc_validate,
2224   },
2225
2226   {
2227     /* Q_DMFC - DELETE_MACHINE_FROM_CLUSTER */
2228     "delete_machine_from_cluster",
2229     "dmfc",
2230     DELETE,
2231     "m",
2232     "mcmap",
2233     0,
2234     gmcm_fields,
2235     0,
2236     "m.mach_id = %d and m.clu_id = %d",
2237     2,
2238     &amtc_validate,
2239   },
2240
2241   {
2242     /* Q_GCLD - GET_CLUSTER_DATA */
2243     "get_cluster_data",
2244     "gcld",
2245     RETRIEVE,
2246     "s",
2247     "svc",
2248     "%c = cluster.name, %c = s.serv_label, %c = s.serv_cluster",
2249     gcld_fields,
2250     3,
2251     "cluster.clu_id = s.clu_id and cluster.name = \"%s\" and s.serv_label = \"%s\"",
2252     2,
2253     &VDsort2,
2254   },
2255
2256   {
2257     /* Q_ACLD - ADD_CLUSTER_DATA */
2258     "add_cluster_data",
2259     "acld",
2260     APPEND,
2261     "s",
2262     "svc",
2263     "clu_id = %i4, serv_label = %c, serv_cluster = %c",
2264     acld_fields,
2265     3,
2266     (char *)0,
2267     0,
2268     &acld_validate,
2269   },
2270
2271   {
2272     /* Q_DCLD - DELETE_CLUSTER_DATA */
2273     "delete_cluster_data",
2274     "dcld",
2275     DELETE,
2276     "s",
2277     "svc",
2278     (char *)0,
2279     acld_fields,
2280     0,
2281     "s.clu_id = %d and s.serv_label = \"%s\" and s.serv_cluster = \"%s\"",
2282     3,
2283     &acld_validate,
2284   },
2285
2286   {
2287     /* Q_GSIN - GET_SERVER_INFO */
2288     "get_server_info",
2289     "gsin",
2290     RETRIEVE,
2291     "s",
2292     "servers",
2293     "%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",
2294     gsin_fields,
2295     16,
2296     "s.name = uppercase(\"%s\")",
2297     1,
2298     &gsin_validate,
2299   },
2300
2301   {
2302     /* Q_QGSV - QUALIFIED_GET_SERVER */
2303     "qualified_get_server",
2304     "qgsv",
2305     RETRIEVE,
2306     0,
2307     "servers",
2308     0,
2309     qgsv_fields,
2310     1,
2311     0,
2312     3,
2313     &qgsv_validate,
2314   },
2315
2316   {
2317     /* Q_ASIN - ADD_SERVER_INFO */
2318     "add_server_info",
2319     "asin",
2320     APPEND,
2321     "s",
2322     "servers",
2323     "name = uppercase(%c), update_int = int4(%c), target_file = %c, script = %c, type = %c, enable = int1(%c), acl_type = %c, acl_id = %i4",
2324     asin_fields,
2325     8,
2326     (char *)0,
2327     0,
2328     &asin_validate,
2329   },
2330
2331   {
2332     /* Q_USIN - UPDATE_SERVER_INFO */
2333     "update_server_info",
2334     "usin",
2335     UPDATE,
2336     "s",
2337     "servers",
2338     "update_int = int4(%c), target_file = %c, script = %c, type = %c, enable = int1(%c), acl_type = %c, acl_id = %i4",
2339     asin_fields,
2340     7,
2341     "s.name = uppercase(\"%s\")",
2342     1,
2343     &asin_validate,
2344   },
2345
2346   {
2347     /* Q_RSVE - RESET_SERVER_ERROR */
2348     "reset_server_error",
2349     "rsve",
2350     UPDATE,
2351     "s",
2352     "servers",
2353     "harderror = 0, dfcheck = s.dfgen",
2354     dsin_fields,
2355     0,
2356     "s.name = uppercase(\"%s\")",
2357     1,
2358     &rsve_validate,
2359   },
2360
2361   {
2362     /* Q_SSIF - SET_SERVER_INTERNAL_FLAGS */
2363     "set_server_internal_flags",
2364     "ssif",
2365     UPDATE,
2366     "s",
2367     "servers",
2368     "dfgen = int4(%c), dfcheck = int4(%c), inprogress = int1(%c), harderror = int1(%c), errmsg = %c",
2369     ssif_fields,
2370     5,
2371     "s.name = uppercase(\"%s\")",
2372     1,
2373     &ssif_validate,
2374   },
2375
2376   {
2377     /* Q_DSIN - DELETE_SERVER_INFO */
2378     "delete_server_info",
2379     "dsin",
2380     DELETE,
2381     "s",
2382     "servers",
2383     (char *)0,
2384     dsin_fields,
2385     0,
2386     "s.name = uppercase(\"%s\")",
2387     1,
2388     &dsin_validate,
2389   },
2390
2391   {
2392     /* Q_GSHI - GET_SERVER_HOST_INFO */
2393     "get_server_host_info",
2394     "gshi",
2395     RETRIEVE,
2396     "sh",
2397     "serverhosts",
2398     "%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",
2399     gshi_fields,
2400     16,
2401     "sh.service = uppercase(\"%s\") and machine.name = uppercase(\"%s\") and machine.mach_id = sh.mach_id",
2402     2,
2403     &gshi_validate,
2404   },
2405
2406   {
2407     /* Q_QGSV - QUALIFIED_GET_SERVER_HOST */
2408     "qualified_get_server_host",
2409     "qgsh",
2410     RETRIEVE,
2411     0,
2412     "serverhosts",
2413     0,
2414     qgsh_fields,
2415     2,
2416     0,
2417     6,
2418     &qgsh_validate,
2419   },
2420
2421   {
2422     /* Q_ASHI - ADD_SERVER_HOST_INFO */
2423     "add_server_host_info",
2424     "ashi",
2425     APPEND,
2426     "sh",
2427     "serverhosts",
2428     "service = uppercase(%c), mach_id = %i4, enable = int1(%c), value1 = int4(%c), value2 = int4(%c), value3 = %c",
2429     ashi_fields,
2430     6,
2431     (char *)0,
2432     0,
2433     &ashi_validate,
2434   },
2435
2436   {
2437     /* Q_USHI - UPDATE_SERVER_HOST_INFO */
2438     "update_server_host_info",
2439     "ushi",
2440     UPDATE,
2441     "sh",
2442     "serverhosts",
2443     "enable = int1(%c), value1 = int4(%c), value2 = int4(%c), value3 = %c",
2444     ashi_fields,
2445     4,
2446     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2447     2,
2448     &ashi_validate,
2449   },
2450
2451   {
2452     /* Q_RSHE - RESET_SERVER_HOST_ERROR */
2453     "reset_server_host_error",
2454     "rshe",
2455     UPDATE,
2456     "sh",
2457     "serverhosts",
2458     "hosterror = 0",
2459     dshi_fields,
2460     0,
2461     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2462     2,
2463     &rshe_validate,
2464   },
2465
2466   {
2467     /* Q_SSHO - SET_SERVER_HOST_OVERRIDE */
2468     "set_server_host_override",
2469     "ssho",
2470     UPDATE,
2471     "sh",
2472     "serverhosts",
2473     "override = 1",
2474     dshi_fields,
2475     0,
2476     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2477     2,
2478     &ssho_validate,
2479   },
2480
2481   {
2482     /* Q_SSHI - SET_SERVER_HOST_INTERNAL */
2483     "set_server_host_internal",
2484     "sshi",
2485     UPDATE,
2486     "s",
2487     "serverhosts",
2488     "override = int1(%c), success = int1(%c), inprogress = int1(%c), hosterror = int1(%c), hosterrmsg = %c, ltt = int4(%c), lts = int4(%c)",
2489     sshi_fields,
2490     7,
2491     "s.service = uppercase(\"%s\") and s.mach_id = machine.mach_id and machine.name = \"%s\"",
2492     2,
2493     &sshi_validate,
2494   },
2495
2496   {
2497     /* Q_DSHI - DELETE_SERVER_HOST_INFO */
2498     "delete_server_host_info",
2499     "dshi",
2500     DELETE,
2501     "sh",
2502     "serverhosts",
2503     (char *)0,
2504     dshi_fields,
2505     0,
2506     "sh.service = uppercase(\"%s\") and sh.mach_id = %d",
2507     2,
2508     &dshi_validate,
2509   },
2510
2511   {
2512     /* Q_GSHA - GET_SERVER_HOST_ACCESS */
2513     "get_server_host_access",
2514     "gsha",
2515     RETRIEVE,
2516     "ha",
2517     "hostaccess",
2518     "%c = machine.name, %c = ha.acl_type, %c = text(ha.acl_id), %c = ha.modtime, %c = text(ha.modby), %c = ha.modwith",
2519     gsha_fields,
2520     6,
2521     "machine.name = uppercase(\"%s\") and ha.mach_id = machine.mach_id",
2522     1,
2523     &gsha_validate,
2524   },
2525
2526   {
2527     /* Q_ASHA - ADD_SERVER_HOST_ACCESS */
2528     "add_server_host_access",
2529     "asha",
2530     APPEND,
2531     "ha",
2532     "hostaccess",
2533     "mach_id = %i4, acl_type = %c, acl_id = %i4",
2534     asha_fields,
2535     3,
2536     0,
2537     0,
2538     &asha_validate,
2539   },
2540
2541   {
2542     /* Q_USHA - UPDATE_SERVER_HOST_ACCESS */
2543     "update_server_host_access",
2544     "usha",
2545     UPDATE,
2546     "ha",
2547     "hostaccess",
2548     "acl_type = %c, acl_id = %i4",
2549     asha_fields,
2550     2,
2551     "ha.mach_id = %d",
2552     1,
2553     &asha_validate,
2554   },
2555
2556   {
2557     /* Q_DSHA - DELETE_SERVER_HOST_ACCESS */
2558     "delete_server_host_access",
2559     "dsha",
2560     DELETE,
2561     "ha",
2562     "hostaccess",
2563     0,
2564     asha_fields,
2565     0,
2566     "ha.mach_id = %d",
2567     1,
2568     &VDmach,
2569   },
2570
2571   {
2572     /* Q_GSLO - GET_SERVER_LOCATIONS */
2573     "get_server_locations",
2574     "gslo",
2575     RETRIEVE,
2576     "sh",
2577     "serverhosts",
2578     "%c = sh.service, %c = machine.name",
2579     gslo_fields,
2580     2,
2581     "sh.service = uppercase(\"%s\") and sh.mach_id = machine.mach_id",
2582     1,
2583     0,
2584   },
2585
2586   {
2587     /* Q_GFSL - GET_FILESYS_BY_LABEL */
2588     "get_filesys_by_label",
2589     "gfsl",
2590     RETRIEVE,
2591     "fs",
2592     FILESYS,
2593     "%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",
2594     gfsl_fields,
2595     14,
2596     "fs.label = \"%s\" and fs.mach_id = machine.mach_id and fs.owner = users.users_id and fs.owners = list.list_id",
2597     1,
2598     &VDsortf,
2599   },
2600
2601   {
2602     /* Q_GFSM - GET_FILESYS_BY_MACHINE */
2603     "get_filesys_by_machine",
2604     "gfsm",
2605     RETRIEVE,
2606     "fs",
2607     FILESYS,
2608     "%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",
2609     gfsm_fields,
2610     14,
2611     "fs.mach_id = %d and machine.mach_id = fs.mach_id and fs.owner = users.users_id and fs.owners = list.list_id",
2612     1,
2613     &gfsm_validate,
2614   },
2615
2616   {
2617     /* Q_GFSN - GET_FILESYS_BY_NFSPHYS */
2618     "get_filesys_by_nfsphys",
2619     "gfsn",
2620     RETRIEVE,
2621     "fs",
2622     FILESYS,
2623     "%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",
2624     gfsn_fields,
2625     14,
2626     "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\"",
2627     2,
2628     &gfsm_validate,
2629   },
2630
2631   {
2632     /* Q_GFSG - GET_FILESYS_BY_GROUP */
2633     "get_filesys_by_group",
2634     "gfsg",
2635     RETRIEVE,
2636     "fs",
2637     FILESYS,
2638     "%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",
2639     gfsg_fields,
2640     14,
2641     "fs.owners = %d and machine.mach_id = fs.mach_id and fs.owner = users.users_id and fs.owners = list.list_id",
2642     1,
2643     &gfsg_validate,
2644   },
2645
2646   {
2647     /* Q_AFIL - ADD_FILESYS */
2648     "add_filesys",
2649     "afil",
2650     APPEND,
2651     "fs",
2652     FILESYS,
2653     "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",
2654     afil_fields,
2655     11,
2656     "values.name = \"filsys_id\"",
2657     0,
2658     &afil_validate,
2659   },
2660
2661   {
2662     /* Q_UFIL - UPDATE_FILESYS */
2663     "update_filesys",
2664     "ufil",
2665     UPDATE,
2666     "fs",
2667     FILESYS,
2668     "label = %c, type = %c, mach_id = %i4, name = %c, mount = %c, access = %c, comments = %c, owner = %i4, owners = %i4, createflg = int1(%c), lockertype = %c",
2669     ufil_fields,
2670     11,
2671     "fs.filsys_id = %d",
2672     1,
2673     &ufil_validate,
2674   },
2675
2676   {
2677     /* Q_DFIL - DELETE_FILESYS */
2678     "delete_filesys",
2679     "dfil",
2680     DELETE,
2681     "fs",
2682     FILESYS,
2683     (char *)0,
2684     dfil_fields,
2685     0,
2686     "fs.filsys_id = %d",
2687     1,
2688     &dfil_validate,
2689   },
2690
2691   {
2692     /* Q_GFGM - GET_FSGROUOP_MEMBERS */
2693     "get_fsgroup_members",
2694     "gfgm",
2695     RETRIEVE,
2696     "fg",
2697     "fsgroup",
2698     "%c = filesys.label, %c = fg.key",
2699     gfgm_fields,
2700     2,
2701     "fg.group_id = %d and filesys.filsys_id = fg.filsys_id",
2702     1,
2703     &gfgm_validate,
2704   },
2705
2706   {
2707     /* Q_AFTG - ADD_FILESYS_TO_FSGROUP */
2708     "add_filesys_to_fsgroup",
2709     "aftg",
2710     APPEND,
2711     "fg",
2712     "fsgroup",
2713     "group_id = filesys.filsys_id, filsys_id = %i4, key = %c",
2714     gfgm_fields,
2715     2,
2716     "filesys.filsys_id = %d and filesys.type = \"FSGROUP\"",
2717     1,
2718     &aftg_validate,
2719   },
2720
2721   {
2722     /* Q_RFFG - REMOVE_FILESYS_FROM_FSGROUP */
2723     "remove_filesys_from_fsgroup",
2724     "rffg",
2725     DELETE,
2726     "fg",
2727     "fsgroup",
2728     (char *)0,
2729     gfgm_fields,
2730     0,
2731     "fg.group_id = %d and fg.filsys_id = %d",
2732     2,
2733     &aftg_validate,
2734   },
2735
2736   {
2737     /* Q_GANF - GET_ALL_NFSPHYS */
2738     "get_all_nfsphys",
2739     "ganf",
2740     RETRIEVE,
2741     "np",
2742     "nfsphys",
2743     "%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",
2744     ganf_fields,
2745     9,
2746     "machine.mach_id = np.mach_id",
2747     0,
2748     &VDsortf,
2749   },
2750
2751   {
2752     /* Q_GNFP - GET_NFSPHYS */
2753     "get_nfsphys",
2754     "gnfp",
2755     RETRIEVE,
2756     "np",
2757     "nfsphys",
2758     "%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",
2759     gnfp_fields,
2760     9,
2761     "np.mach_id = %d and np.dir = \"%s\" and machine.mach_id = np.mach_id",
2762     2,
2763     &gnfp_validate,
2764   },
2765
2766   {
2767     /* Q_ANFP - ADD_NFSPHYS */
2768     "add_nfsphys",
2769     "anfp",
2770     APPEND,
2771     "np",
2772     "nfsphys",
2773     "nfsphys_id = values.value, mach_id = %i4, dir = %c, device = %c, status = int4(%c), allocated = int4(%c), size = int4(%c)",
2774     ganf_fields,
2775     6,
2776     "values.name = \"nfsphys_id\"",
2777     0,
2778     &anfp_validate,
2779   },
2780
2781   {
2782     /* Q_UNFP - UPDATE_NFSPHYS */
2783     "update_nfsphys",
2784     "unfp",
2785     UPDATE,
2786     "np",
2787     "nfsphys",
2788     "device = %c, status = int4(%c), allocated = int4(%c), size = int4(%c)",
2789     gnfp_fields,
2790     4,
2791     "np.mach_id = %d and np.dir = \"%s\"",
2792     2,
2793     &anfp_validate,
2794   },
2795
2796   {
2797     /* Q_AJNF - ADJUST_NFSPHYS_ALLOCATION */
2798     "adjust_nfsphys_allocation",
2799     "ajnf",
2800     UPDATE,
2801     "np",
2802     "nfsphys",
2803     "allocated = np.allocated + int4(%c)",
2804     dnfp_fields,
2805     1,
2806     "np.mach_id = %d and np.dir = \"%s\"",
2807     2,
2808     &anfp_validate,
2809   },
2810
2811   {
2812     /* Q_DNFP - DELETE_NFSPHYS */
2813     "delete_nfsphys",
2814     "dnfp",
2815     DELETE,
2816     "np",
2817     "nfsphys",
2818     (char *)0,
2819     dnfp_fields,
2820     0,
2821     "np.mach_id = %d and np.dir = \"%s\"",
2822     2,
2823     &dnfp_validate,
2824   },
2825
2826   {
2827     /* Q_GNFQ - GET_NFS_QUOTAS */
2828     "get_nfs_quota",
2829     "gnfq",
2830     RETRIEVE,
2831     "nq",
2832     "nfsquota",
2833     "%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",
2834     gnfq_fields,
2835     8,
2836     "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",
2837     2,
2838     &gnfq_validate,
2839   },
2840
2841   {
2842     /* Q_GNQP - GET_NFS_QUOTAS_BY_PARTITION */
2843     "get_nfs_quotas_by_partition",
2844     "gnqp",
2845     RETRIEVE,
2846     "nq",
2847     "nfsquota",
2848     "%c = filesys.label, %c = users.login, %c = text(nq.quota), %c = nfsphys.dir, %c = machine.name",
2849     gnqp_fields,
2850     5,
2851     "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",
2852     2,
2853     &VDmach,
2854   },
2855
2856   {
2857     /* Q_ANFQ - ADD_NFS_QUOTA */
2858     "add_nfs_quota",
2859     "anfq",
2860     APPEND,
2861     "nq",
2862     "nfsquota",
2863     "filsys_id = filesys.filsys_id, users_id = %i4, quota = int4(%c), phys_id = filesys.phys_id",
2864     anfq_fields,
2865     2,
2866     "filesys.filsys_id = %d",
2867     1,
2868     &anfq_validate,
2869   },
2870
2871   {
2872     /* Q_UNFQ - UPDATE_NFS_QUOTA */
2873     "update_nfs_quota",
2874     "unfq",
2875     UPDATE,
2876     "nq",
2877     "nfsquota",
2878     "quota = int4(%c)",
2879     anfq_fields,
2880     1,
2881     "nq.filsys_id = %d and nq.users_id = %d",
2882     2,
2883     &unfq_validate,
2884   },
2885
2886   {
2887     /* Q_DNFQ - DELETE_NFS_QUOTA */
2888     "delete_nfs_quota",
2889     "dnfq",
2890     DELETE,
2891     "nq",
2892     "nfsquota",
2893     (char *)0,
2894     anfq_fields,
2895     0,
2896     "nq.filsys_id = %d and nq.users_id = %d",
2897     2,
2898     &dnfq_validate,
2899   },
2900
2901   {
2902     /* Q_GLIN - GET_LIST_INFO */
2903     "get_list_info",
2904     "glin",
2905     RETRIEVE,
2906     0,
2907     LIST,
2908     0,
2909     glin_fields,
2910     13,
2911     0,
2912     1,
2913     &glin_validate,
2914   },
2915     
2916   {
2917     /* Q_EXLN - EXPAND_LIST_NAMES */
2918     "expand_list_names",
2919     "exln",
2920     RETRIEVE,
2921     "l",
2922     LIST,
2923     "%c = l.name",
2924     glin_fields,
2925     1,
2926     "l.name = \"%s\" and l.list_id != 0",
2927     1,
2928     0
2929   },
2930     
2931   {
2932     /* Q_ALIS - ADD_LIST */
2933     "add_list",
2934     "alis",
2935     APPEND,
2936     "l",
2937     LIST,
2938     "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",
2939     alis_fields,
2940     10,
2941     "values.name = \"list_id\"",
2942     0,
2943     &alis_validate,
2944   },
2945
2946   {
2947     /* Q_ULIS - UPDATE_LIST */
2948     "update_list",
2949     "ulis",
2950     UPDATE,
2951     "l",
2952     LIST,
2953     "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",
2954     ulis_fields,
2955     10,
2956     "l.list_id = %d",
2957     1,
2958     &ulis_validate,
2959   },
2960
2961   {
2962     /* Q_DLIS - DELETE_LIST */
2963     "delete_list",
2964     "dlis",
2965     DELETE,
2966     "l",
2967     LIST,
2968     (char *)0,
2969     dlis_fields,
2970     0,
2971     "l.list_id = %d",
2972     1,
2973     &dlis_validate,
2974   },
2975
2976   {
2977     /* Q_AMTL - ADD_MEMBER_TO_LIST */
2978     "add_member_to_list",
2979     "amtl",
2980     APPEND,
2981     0,
2982     "imembers",
2983     0,
2984     amtl_fields,
2985     3,
2986     (char *)0,
2987     0,
2988     &amtl_validate,
2989   },
2990
2991   {
2992     /* Q_DMFL - DELETE_MEMBER_FROM_LIST */
2993     "delete_member_from_list",
2994     "dmfl",
2995     DELETE,
2996     0,
2997     "imembers",
2998     (char *)0,
2999     amtl_fields,
3000     0,
3001     0,
3002     3,
3003     &dmfl_validate,
3004   },
3005
3006   {
3007     /* Q_GAUS - GET_ACE_USE */
3008     "get_ace_use",
3009     "gaus",
3010     RETRIEVE,
3011     0,
3012     0,
3013     0,
3014     gaus_fields,
3015     2,
3016     0,
3017     2,
3018     &gaus_validate,
3019   },
3020
3021   {
3022     /* Q_QGLI - QUALIFIED_GET_LISTS */
3023     "qualified_get_lists",
3024     "qgli",
3025     RETRIEVE,
3026     0,
3027     LIST,
3028     0,
3029     qgli_fields,
3030     1,
3031     0,
3032     5,
3033     &qgli_validate,
3034   },
3035
3036   {
3037     /* Q_GMOL - GET_MEMBERS_OF_LIST */
3038     "get_members_of_list",
3039     "gmol",
3040     RETRIEVE,
3041     (char *)0,
3042     "imembers",
3043     (char *)0,
3044     gmol_fields,
3045     0,
3046     (char *)0,
3047     1,
3048     &gmol_validate,
3049   },
3050
3051   {
3052     /* Q_GLOM - GET_LISTS_OF_MEMBER */
3053     "get_lists_of_member",
3054     "glom",
3055     RETRIEVE,
3056     0,
3057     "imembers",
3058     0,
3059     glom_fields,
3060     6,
3061     0,
3062     2,
3063     &glom_validate,
3064   },
3065
3066   {
3067     /* Q_CMOL - COUNT_MEMBERS_OF_LIST */
3068     "count_members_of_list",
3069     "cmol",
3070     RETRIEVE,
3071     0,
3072     "imembers",
3073     0,
3074     cmol_fields,
3075     1,
3076     0,
3077     1,
3078     &cmol_validate,
3079   },
3080
3081   {
3082     /* Q_GZCL - GET_ZEPHYR_CLASS */
3083     "get_zephyr_class",
3084     "gzcl",
3085     RETRIEVE,
3086     "z",
3087     "zephyr",
3088     "%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",
3089     gzcl_fields,
3090     12,
3091     "z.class = \"%s\"",
3092     1,
3093     &gzcl_validate,
3094   },    
3095
3096   {
3097     /* Q_AZCL - ADD_ZEPHYR_CLASS */
3098     "add_zephyr_class",
3099     "azcl",
3100     APPEND,
3101     "z",
3102     "zephyr",
3103     "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",
3104     azcl_fields,
3105     9,
3106     0,
3107     0,
3108     &azcl_validate,
3109   },    
3110
3111   {
3112     /* Q_UZCL - UPDATE_ZEPHYR_CLASS */
3113     "update_zephyr_class",
3114     "uzcl",
3115     UPDATE,
3116     "z",
3117     "zephyr",
3118     "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",
3119     uzcl_fields,
3120     9,
3121     "z.class = \"%s\"",
3122     1,
3123     &uzcl_validate,
3124   },    
3125
3126   {
3127     /* Q_DZCL - DELETE_ZEPHYR_CLASS */
3128     "delete_zephyr_class",
3129     "dzcl",
3130     DELETE,
3131     "z",
3132     "zephyr",
3133     0,
3134     uzcl_fields,
3135     0,
3136     "z.class = \"%s\"",
3137     1,
3138     &dzcl_validate,
3139   },    
3140 #ifdef notdef
3141   {
3142     /* Q_GSVC - GET_SERVICE */
3143     "get_service",
3144     "gsvc",
3145     RETRIEVE,
3146     "s",
3147     "services",
3148     "%c = s.name, %c = s.protocol, %c = text(s.port), %c = s.desc, %c = s.modtime, %c = text(s.modby), %c = s.modwith",
3149     gasv_fields,
3150     7,
3151     (char *)0,
3152     0,
3153     &gsvc_validate,
3154   },
3155
3156   {
3157     /* Q_ASVC - ADD_SERVICE */
3158     "add_service",
3159     "asvc",
3160     APPEND,
3161     "s",
3162     "services",
3163     "name = %c, protocol = %c, port = int2(%c), desc = %c",
3164     gasv_fields,
3165     4,
3166     (char *)0,
3167     0,
3168     &asvc_validate,
3169   },
3170
3171   {
3172     /* Q_DSVC - DELETE_SERVICE */
3173     "delete_service",
3174     "dsvc",
3175     DELETE,
3176     "s",
3177     "services",
3178     0,
3179     gasv_fields,
3180     0,
3181     "s.name = \"%s\"",
3182     1,
3183     &dsvc_validate,
3184   },
3185 #endif
3186   {
3187     /* Q_GPCP - GET_PRINTCAP */
3188     "get_printcap",
3189     "gpcp",
3190     RETRIEVE,
3191     "p",
3192     "printcap",
3193     "%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",
3194     gpcp_fields,
3195     8,
3196     "p.name = \"%s\" and machine.mach_id = p.mach_id",
3197     1,
3198     &VDsortf,
3199   },
3200
3201   {
3202     /* Q_APCP - ADD_PRINTCAP */
3203     "add_printcap",
3204     "apcp",
3205     APPEND,
3206     "p",
3207     "printcap",
3208     "name = %c, mach_id = %i4, dir = %c, rp = %c, comments = %c",
3209     apcp_fields,
3210     5,
3211     0,
3212     0,
3213     &apcp_validate,
3214   },
3215
3216   {
3217     /* Q_DPCP - DELETE_PRINTCAP */
3218     "delete_printcap",
3219     "dpcp",
3220     DELETE,
3221     "p",
3222     "printcap",
3223     0,
3224     apcp_fields,
3225     0,
3226     "p.name = \"%s\"",
3227     1,
3228     &dpcp_validate,
3229   },
3230
3231   {
3232     /* Q_GALI - GET_ALIAS */
3233     "get_alias",
3234     "gali",
3235     RETRIEVE,
3236     "a",
3237     "alias",
3238     "%c = a.name, %c = a.type, %c = a.trans",
3239     gali_fields,
3240     3,
3241     "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
3242     3,
3243     0,
3244   },
3245
3246   {
3247     /* Q_AALI - ADD_ALIAS */
3248     "add_alias",
3249     "aali",
3250     APPEND,
3251     "a",
3252     "alias",
3253     "name = %c, type = %c, trans = %c",
3254     aali_fields,
3255     3,
3256     (char *)0,
3257     0,
3258     &aali_validate,
3259   },
3260
3261   {
3262     /* Q_DALI - DELETE_ALIAS */
3263     "delete_alias",
3264     "dali",
3265     DELETE,
3266     "a",
3267     "alias",
3268     (char *)0,
3269     aali_fields,
3270     0,
3271     "a.name = \"%s\" and a.type = \"%s\" and a.trans = \"%s\"",
3272     3,
3273     &dali_validate,
3274   },
3275
3276   {
3277     /* Q_GVAL - GET_VALUE */
3278     "get_value",
3279     "gval",
3280     RETRIEVE,
3281     "v",
3282     "values",
3283     "%c = text(v.value)",
3284     gval_fields,
3285     1,
3286     "v.name = \"%s\"",
3287     1,
3288     &gval_validate,
3289   },
3290
3291   {
3292     /* Q_AVAL - ADD_VALUE */
3293     "add_value",
3294     "aval",
3295     APPEND,
3296     "v",
3297     "values",
3298     "name = %c, value = int4(%c)",
3299     aval_fields,
3300     2,
3301     (char *)0,
3302     0,
3303     &aval_validate,
3304   },
3305
3306   {
3307     /* Q_UVAL - UPDATE_VALUE */
3308     "update_value",
3309     "uval",
3310     UPDATE,
3311     "v",
3312     "values",
3313     "value = int4(%c)",
3314     aval_fields,
3315     1,
3316     "v.name = \"%s\"",
3317     1,
3318     &aval_validate,
3319   },
3320
3321   {
3322     /* Q_DVAL - DELETE_VALUE */
3323     "delete_value",
3324     "dval",
3325     DELETE,
3326     "v",
3327     "values",
3328     (char *)0,
3329     dval_fields,
3330     0,
3331     "v.name = \"%s\"",
3332     1,
3333     &aval_validate,
3334   },
3335
3336   {
3337     /* Q_GATS - GET_ALL_TABLE_STATS */
3338     "get_all_table_stats",
3339     "gats",
3340     RETRIEVE,
3341     "tbs",
3342     "tblstats",
3343     "%c = tbs.table, %c = text(tbs.retrieves), %c = text(tbs.appends), %c = text(tbs.updates), %c = text(tbs.deletes), %c = tbs.modtime",
3344     gats_fields,
3345     6,
3346     (char *)0,
3347     0,
3348     0,
3349   },
3350
3351 };
3352
3353 int QueryCount2 = (sizeof Queries2 / sizeof (struct query));
This page took 0.283521 seconds and 3 git commands to generate.