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