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