]> andersk Git - moira.git/blob - server/queries2.c
bump version number of alis, ulis, and glin, adding support for the
[moira.git] / server / queries2.c
1 /* $Id$
2  *
3  * This file defines the query dispatch table
4  *
5  * Copyright (C) 1987-1998 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 "mr_server.h"
12 #include "query.h"
13
14 #include "mr_et.h"
15
16 /* VALOBJS
17  * These are commonly used validation objects, defined here so that they
18  * can be shared.
19  */
20
21 static struct valobj VOuser0[] = {
22   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
23 };
24
25 static struct valobj VOmach0[] = {
26   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
27 };
28
29 static struct valobj VOclu0[] = {
30   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
31 };
32
33 static struct valobj VOsnet0[] = {
34   {V_ID, 0, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
35 };
36
37 static struct valobj VOlist0[] = {
38   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
39 };
40
41 static struct valobj VOfilesys0[] = {
42   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
43 };
44
45 static struct valobj VOnum0[] = {
46   {V_NUM, 0},
47 };
48
49 /* Validations
50  * Commonly used validation records defined here so that they may
51  * be shared.
52  */
53
54 static struct validate VDmach = { VOmach0, 1 };
55
56 static struct validate VDfix_modby = {
57   0,
58   0,
59   0,
60   0,
61   0,
62   0,
63   0,
64   0,
65   followup_fix_modby,
66 };
67
68 /* Query data */
69
70 static char *galo_fields[] = {
71   "login", "unix_uid", "shell", "last", "first", "middle",
72 };
73
74 static char *gual_fields[] = {
75   "login",
76   "login", "unix_uid", "shell", "last", "first", "middle", "status",
77   "clearid", "class", "comments", "signature", "secure",
78   "modtime", "modby", "modwith",
79 };
80
81 static char *gubl_fields[] = {
82   "login",
83   "login", "unix_uid", "shell", "last", "first", "middle", "status",
84   "clearid", "class", "modtime", "modby", "modwith",
85 };
86
87 static struct validate gubl_validate =
88 {
89   0,
90   0,
91   0,
92   0,
93   0,
94   0,
95   access_login,
96   0,
97   followup_fix_modby,
98 };
99
100 static char *guau_fields[] = {
101   "unix_uid",
102   "login", "unix_uid", "shell", "last", "first", "middle", "status",
103   "clearid", "class", "comments", "signature", "secure",
104   "modtime", "modby", "modwith",
105 };
106
107 static char *guan_fields[] = {
108   "first", "last",
109   "login", "unix_uid", "shell", "last", "first", "middle", "status",
110   "clearid", "class", "comments", "signature", "secure",
111   "modtime", "modby", "modwith",
112 };
113
114 static struct validate guan_validate =
115 {
116   0,
117   0,
118   0,
119   0,
120   0,
121   0,
122   0,
123   0,
124   followup_fix_modby,
125 };
126
127 static char *guac_fields[] = {
128   "class",
129   "login", "unix_uid", "shell", "last", "first", "middle", "status",
130   "clearid", "class", "comments", "signature", "secure",
131   "modtime", "modby", "modwith",
132 };
133
134 static char *guam_fields[] = {
135   "clearid",
136   "login", "unix_uid", "shell", "last", "first", "middle", "status",
137   "clearid", "class", "comments", "signature", "secure",
138   "modtime", "modby", "modwith",
139 };
140
141 static char *gubu_fields[] = {
142   "unix_uid",
143   "login", "unix_uid", "shell", "last", "first", "middle", "status",
144   "clearid", "class", "modtime", "modby", "modwith",
145 };
146
147 static struct validate gubu_validate =
148 {
149   VOnum0,
150   1,
151   0,
152   0,
153   0,
154   0,
155   access_login,
156   0,
157   followup_fix_modby,
158 };
159
160 static char *gubn_fields[] = {
161   "first", "last",
162   "login", "unix_uid", "shell", "last", "first", "middle", "status",
163   "clearid", "class", "modtime", "modby", "modwith",
164 };
165
166 static struct validate gubn_validate =
167 {
168   0,
169   0,
170   0,
171   0,
172   0,
173   0,
174   0,
175   0,
176   followup_fix_modby,
177 };
178
179 static char *gubc_fields[] = {
180   "class",
181   "login", "unix_uid", "shell", "last", "first", "middle", "status",
182   "clearid", "class", "modtime", "modby", "modwith",
183 };
184
185 static char *gubm_fields[] = {
186   "clearid",
187   "login", "unix_uid", "shell", "last", "first", "middle", "status",
188   "clearid", "class", "modtime", "modby", "modwith",
189 };
190
191 static char *auac_fields[] = {
192   "login", "unix_uid", "shell", "last", "first", "middle", "status",
193   "clearid", "class", "comments", "signature", "secure",
194 };
195
196 static struct valobj auac_valobj[] = {
197   {V_CHAR, 0, USERS_TABLE, "login"},
198   {V_NUM, 1},
199   {V_CHAR, 2, USERS_TABLE, "shell"},
200   {V_CHAR, 3, USERS_TABLE, "last"},
201   {V_CHAR, 4, USERS_TABLE, "first"},
202   {V_CHAR, 5, USERS_TABLE, "middle"},
203   {V_NUM, 6},
204   {V_CHAR, 7, USERS_TABLE, "clearid"},
205   {V_TYPE, 8, 0, "class", 0, MR_BAD_CLASS},
206   {V_ID, 9, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
207   {V_NUM, 11},
208 };
209
210 static struct validate auac_validate = {
211   auac_valobj,
212   11,
213   "login",
214   "login = '%s'",
215   1,
216   "users_id",
217   0,
218   setup_ausr,
219   followup_ausr,
220 };
221
222 static struct validate ausr_validate = {
223   auac_valobj,
224   9,
225   "login",
226   "login = '%s'",
227   1,
228   "users_id",
229   0,
230   setup_ausr,
231   followup_ausr,
232 };
233
234 static char *rusr_fields[] = {
235   "unix_uid", "login", "pobox_type"
236 };
237
238 static struct valobj rusr_valobj[] = {
239   {V_NUM, 0},
240   {V_CHAR, 1, USERS_TABLE, "login"},
241 };
242
243 static struct validate rusr_validate = {
244   rusr_valobj,
245   2,
246   0,
247   0,
248   0,
249   0,
250   0,
251   register_user,
252   0,
253 };
254
255 static char *uuac_fields[] = {
256   "login",
257   "newlogin", "unix_uid", "shell", "last", "first", "middle", "status",
258   "clearid", "class", "comments", "signature", "secure",
259 };
260
261 static struct valobj uuac_valobj[] = {
262   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
263   {V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
264   {V_NUM, 2},
265   {V_CHAR, 3, USERS_TABLE, "shell"},
266   {V_CHAR, 4, USERS_TABLE, "first"},
267   {V_CHAR, 5, USERS_TABLE, "last"},
268   {V_CHAR, 6, USERS_TABLE, "middle"},
269   {V_NUM, 7},
270   {V_CHAR, 8, USERS_TABLE, "clearid"},
271   {V_TYPE, 9, 0, "class", 0, MR_BAD_CLASS},
272   {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
273   {V_NUM, 12},
274 };
275
276 static struct validate uuac_validate = {
277   uuac_valobj,
278   12,
279   0,
280   0,
281   0,
282   "users_id",
283   0,
284   setup_ausr,
285   set_modtime_by_id,
286 };
287
288 static struct validate uusr_validate = {
289   uuac_valobj,
290   11,
291   0,
292   0,
293   0,
294   "users_id",
295   0,
296   setup_ausr,
297   set_modtime_by_id,
298 };
299
300 static char *uush_fields[] = {
301   "login",
302   "shell",
303 };
304
305 static struct valobj uush_valobj[] = {
306   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
307   {V_CHAR, 1, USERS_TABLE, "shell"},
308 };
309
310 static struct validate uush_validate = {
311   uush_valobj,
312   2,
313   0,
314   0,
315   0,
316   "users_id",
317   access_user,
318   0,
319   set_finger_modtime,
320 };
321
322 static char *uust_fields[] = {
323   "login",
324   "status",
325 };
326
327 static char *uuss_fields[] = {
328   "login",
329   "secure",
330 };
331
332 static struct valobj uust_valobj[] = {
333   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
334   {V_NUM, 1},
335   {V_NUM, 2},
336 };
337
338 static struct validate uust_validate = {
339   uust_valobj,
340   2,
341   0,
342   0,
343   0,
344   "users_id",
345   0,
346   0,
347   set_modtime_by_id,
348 };
349
350 static char *dusr_fields[] = {
351   "login",
352 };
353
354 static struct validate dusr_validate = {
355   VOuser0,
356   1,
357   0,
358   0,
359   0,
360   0,
361   0,
362   setup_dusr,
363   0,
364 };
365
366 static char *aurv_fields[] = {
367   "login", "reservation",
368 };
369
370 static struct validate aurv_validate = {
371   VOuser0,
372   1,
373   0,
374   0,
375   0,
376   "users_id",
377   0,
378   0,
379   do_user_reservation,
380 };
381
382 static char *gurv_fields[] = {
383   "login",
384   "reservation",
385 };
386
387 static struct validate gurv_validate = {
388   VOuser0,
389   1,
390   0,
391   0,
392   0,
393   0,
394   0,
395   0,
396   get_user_reservations,
397 };
398
399 static char *gubr_fields[] = {
400   "reservation",
401   "login",
402 };
403
404 static struct validate gubr_validate = {
405   0,
406   0,
407   0,
408   0,
409   0,
410   0,
411   0,
412   0,
413   get_user_by_reservation,
414 };
415
416 static char *gkum_fields[] = { "login", "kerberos",
417                                    "login", "kerberos" };
418
419 static char *akum_fields[] = { "login", "kerberos" };
420
421 static struct valobj akum_valobj[] =
422 {
423   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
424   {V_ID, 1, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
425 };
426
427 static struct validate akum_validate =
428 {
429   akum_valobj,
430   2,
431   "users_id",
432   "users_id = %d or string_id = %d",
433   2,
434   "users_id",
435   access_user,
436   0,
437   0,
438 };
439
440 static struct validate dkum_validate =
441 {
442   akum_valobj,
443   2,
444   "users_id",
445   "users_id = %d and string_id = %d",
446   2,
447   "users_id",
448   access_user,
449   0,
450   0,
451 };
452
453 static char *gfbl_fields[] = {
454   "login",
455   "login", "fullname", "nickname", "home_addr",
456   "home_phone", "office_addr", "office_phone", "department",
457   "affiliation", "modtime", "modby", "modwith",
458 };
459
460 static struct validate gfbl_validate = {
461   VOuser0,
462   1,
463   0,
464   0,
465   0,
466   0,
467   access_user,
468   0,
469   followup_fix_modby,
470 };
471
472 static char *ufbl_fields[] = {
473   "login",
474   "fullname", "nickname", "home_addr",
475   "home_phone", "office_addr", "office_phone", "department",
476   "affiliation",
477 };
478
479 static struct valobj ufbl_valobj[] = {
480   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
481   {V_LEN, 1, USERS_TABLE, "fullname"},
482   {V_LEN, 2, USERS_TABLE, "nickname"},
483   {V_LEN, 3, USERS_TABLE, "home_addr"},
484   {V_LEN, 4, USERS_TABLE, "home_phone"},
485   {V_LEN, 5, USERS_TABLE, "office_addr"},
486   {V_LEN, 6, USERS_TABLE, "office_phone"},
487   {V_LEN, 7, USERS_TABLE, "department"},
488   {V_LEN, 8, USERS_TABLE, "affiliation"},
489 };
490
491 static struct validate ufbl_validate = {
492   ufbl_valobj,
493   9,
494   0,
495   0,
496   0,
497   0,
498   access_user,
499   0,
500   set_finger_modtime,
501 };
502
503 static char *gpob_fields[] = {
504   "login",
505   "login", "type", "box", "address", "modtime", "modby", "modwith",
506 };
507
508 static struct validate gpob_validate = {
509   VOuser0,
510   1,
511   "potype",
512   "potype != 'NONE' and users_id = %d",
513   1,
514   0,
515   access_user,
516   0,
517   followup_gpob,
518 };
519
520 static char *gpox_fields[] = {
521   "login", "type", "box",
522 };
523
524 static struct validate gpox_validate = {
525   0,
526   0,
527   0,
528   0,
529   0,
530   0,
531   0,
532   0,
533   followup_gpob,
534 };
535
536 static char *spob_fields[] = {
537   "login", "type", "box",
538 };
539
540 static struct valobj spob_valobj[] = {
541   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
542   {V_TYPE, 1, 0, "pobox", 0, MR_TYPE},
543 };
544
545 static struct validate spob_validate =  /* SET_POBOX */
546 {
547   spob_valobj,
548   2,
549   0,
550   0,
551   0,
552   0,
553   access_spob,
554   0,
555   set_pobox,
556 };
557
558 static struct validate spop_validate =  /* SET_POBOX_POP */
559 {
560   VOuser0,
561   1,
562   0,
563   0,
564   0,
565   0,
566   access_user,
567   0,
568   set_pobox_pop,
569 };
570
571 static struct validate dpob_validate =  /* DELETE_POBOX */
572 {
573   VOuser0,
574   1,
575   0,
576   0,
577   0,
578   0,
579   access_user,
580   setup_dpob,
581   set_pobox_modtime,
582 };
583
584 static char *gmac_fields[] = {
585   "name",
586   "name", "type", "modtime", "modby", "modwith",
587 };
588
589 static char *ghst_fields[] = {
590   "name", "address", "location", "network",
591   "name", "vendor", "model", "os", "location", "contact", "use",
592   "status", "status_change", "network", "address", "ace_type",
593   "ace_name", "admin_comment", "ops_comment", "created", "creator",
594   "inuse", "modtime", "modby", "modwith",
595 };
596
597 static struct validate ghst_validate = {
598   0,
599   0,
600   0,
601   0,
602   0,
603   0,
604   access_host,
605   0,
606   followup_ghst,
607 };
608
609 static char *ghha_fields[] = {
610   "name",
611   "hwaddr",
612 };
613
614 static char *ahst_fields[] = {
615   "name", "vendor", "model", "os", "location", "contact", "use",
616   "status", "subnet", "address", "ace_type", "ace_name",
617   "admin_comment", "ops_comment",
618 };
619
620 static struct valobj ahst_valobj[] = {
621   {V_CHAR, 0, MACHINE_TABLE, "name"},
622   {V_CHAR, 1, MACHINE_TABLE, "vendor"},
623   {V_CHAR, 2, MACHINE_TABLE, "model"},
624   {V_CHAR, 3, MACHINE_TABLE, "os"},
625   {V_CHAR, 4, MACHINE_TABLE, "location"},
626   {V_CHAR, 5, MACHINE_TABLE, "contact"},
627   {V_NUM, 6},
628   {V_NUM, 7},
629   {V_ID, 8, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
630   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
631   {V_TYPEDATA, 11, 0, 0, 0, MR_ACE},
632   {V_ID, 12, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
633   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
634 };
635
636 static struct validate ahst_validate = {
637   ahst_valobj,
638   13,
639   "name",
640   "name = UPPER('%s')",
641   1,
642   "mach_id",
643   access_host,
644   setup_ahst,
645   set_uppercase_modtime,
646 };
647
648 static char *uhst_fields[] = {
649   "name",
650   "newname", "vendor", "model", "os", "location", "contact", "use",
651   "status", "subnet", "address", "ace_type", "ace_name",
652   "admin_comment", "ops_comment",
653 };
654
655 static struct valobj uhst_valobj[] = {
656   {V_CHAR, 0, MACHINE_TABLE, "name"},
657   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
658   {V_RENAME, 1, MACHINE_TABLE, "name", "mach_id", MR_NOT_UNIQUE},
659   {V_CHAR, 2, MACHINE_TABLE, "vendor"},
660   {V_CHAR, 3, MACHINE_TABLE, "model"},
661   {V_CHAR, 4, MACHINE_TABLE, "os"},
662   {V_CHAR, 5, MACHINE_TABLE, "location"},
663   {V_CHAR, 6, MACHINE_TABLE, "contact"},
664   {V_NUM, 7},
665   {V_NUM, 8},
666   {V_ID, 9, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
667   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
668   {V_TYPEDATA, 12, 0, 0, 0, MR_ACE},
669   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
670   {V_ID, 14, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
671 };
672
673 static struct validate uhst_validate = {
674   uhst_valobj,
675   15,
676   0,
677   0,
678   0,
679   "mach_id",
680   access_host,
681   setup_ahst,
682   set_modtime_by_id,
683 };
684
685 static char *uhha_fields[] = {
686   "name",
687   "hwaddr"
688 };
689
690 static struct valobj uhha_valobj[] = {
691   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
692   {V_CHAR, 1, MACHINE_TABLE, "hwaddr"},
693 };
694
695 static struct validate uhha_validate = {
696   uhha_valobj,
697   2,
698   0,
699   0,
700   0,
701   "mach_id",
702   0,
703   setup_uhha,
704   set_modtime_by_id,
705 };
706
707 static char *dhst_fields[] = {
708   "name",
709 };
710
711 static struct validate dhst_validate = {
712   VOmach0,
713   1,
714   0,
715   0,
716   0,
717   0,
718   0,
719   setup_dmac,
720   0,
721 };
722
723 static char *ghal_fields[] = {
724   "alias", "canonical_hostname",
725   "alias", "canonical_hostname"
726 };
727
728 static struct validate ghal_validate = {
729   0,
730   0,
731   0,
732   0,
733   0,
734   0,
735   access_ahal,
736   0,
737   0,
738 };
739
740 static struct valobj ahal_valobj[] = {
741   {V_CHAR, 0, HOSTALIAS_TABLE, "name"},
742   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
743 };
744
745 static struct validate ahal_validate = {
746   ahal_valobj,
747   2,
748   "name",
749   "name = UPPER('%s')",
750   1,
751   "mach_id",
752   access_ahal,
753   setup_ahal,
754   0,
755 };
756
757 static struct valobj dhal_valobj[] = {
758   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
759 };
760
761 static struct validate dhal_validate = {
762   dhal_valobj,
763   1,
764   "name",
765   "name = UPPER('%s') AND mach_id = %d",
766   2,
767   "mach_id",
768   access_ahal,
769   0,
770   0,
771 };
772
773 static char *gsnt_fields[] = {
774   "name",
775   "name", "description", "address", "mask", "low", "high", "prefix",
776   "ace_type", "ace_name", "modtime", "modby", "modwith"
777 };
778
779 static struct validate gsnt_validate = {
780   0,
781   0,
782   0,
783   0,
784   0,
785   0,
786   access_snt,
787   0,
788   followup_gsnt,
789 };
790
791 static char *asnt_fields[] = {
792   "name", "description", "address", "mask", "low", "high", "prefix",
793   "ace_type", "ace_name",
794 };
795
796 static struct valobj asnt_valobj[] = {
797   {V_CHAR, 0, SUBNET_TABLE, "name"},
798   {V_LEN, 1, SUBNET_TABLE, "description"},
799   {V_NUM, 2},
800   {V_NUM, 3},
801   {V_NUM, 4},
802   {V_NUM, 5},
803   {V_LEN, 6, SUBNET_TABLE, "prefix"},
804   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
805   {V_TYPEDATA, 8, 0, 0, 0, MR_ACE},
806 };
807
808 static struct validate asnt_validate =
809 {
810   asnt_valobj,
811   9,
812   "name",
813   "name = UPPER('%s')",
814   1,
815   "snet_id",
816   0,
817   prefetch_value,
818   set_uppercase_modtime,
819 };
820
821 static char *usnt_fields[] = {
822   "name",
823   "newname", "description", "address", "mask", "low", "high", "prefix",
824   "ace_type", "ace_name",
825 };
826
827 static struct valobj usnt_valobj[] = {
828   {V_ID, 0, SUBNET_TABLE, "name", "snet_id", MR_NO_MATCH},
829   {V_RENAME, 1, SUBNET_TABLE, "name", "snet_id", MR_NOT_UNIQUE},
830   {V_LEN, 2, SUBNET_TABLE, "description"},
831   {V_NUM, 3},
832   {V_NUM, 4},
833   {V_NUM, 5},
834   {V_NUM, 6},
835   {V_LEN, 7, SUBNET_TABLE, "prefix"},
836   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
837   {V_TYPEDATA, 9, 0, 0, 0, MR_ACE},
838 };
839
840 static struct validate usnt_validate =
841 {
842   usnt_valobj,
843   10,
844   "name",
845   "snet_id = %d",
846   1,
847   "snet_id",
848   0,
849   0,
850   set_modtime_by_id,
851 };
852
853 static char *dsnt_fields[] = {
854   "name",
855 };
856
857 static struct validate dsnt_validate = {
858   VOsnet0,
859   1,
860   0,
861   0,
862   0,
863   0,
864   0,
865   setup_dsnt,
866   0,
867 };
868
869 static char *gclu_fields[] = {
870   "name",
871   "name", "description", "location", "modtime", "modby", "modwith",
872 };
873
874 static char *aclu_fields[] = {
875   "name", "description", "location",
876 };
877
878 static struct valobj aclu_valobj[] = {
879   {V_CHAR, 0, CLUSTERS_TABLE, "name"},
880   {V_LEN, 1, CLUSTERS_TABLE, "description"},
881   {V_LEN, 2, CLUSTERS_TABLE, "location"},
882 };
883
884 static struct validate aclu_validate =
885 {
886   aclu_valobj,
887   3,
888   "name",
889   "name = '%s'",
890   1,
891   "clu_id",
892   0,
893   prefetch_value,
894   set_modtime,
895 };
896
897 static char *uclu_fields[] = {
898   "name",
899   "newname", "description", "location",
900 };
901
902 static struct valobj uclu_valobj[] = {
903   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
904   {V_RENAME, 1, CLUSTERS_TABLE, "name", "clu_id", MR_NOT_UNIQUE},
905   {V_LEN, 2, CLUSTERS_TABLE, "description"},
906   {V_LEN, 3, CLUSTERS_TABLE, "location"},
907 };
908
909 static struct validate uclu_validate = {
910   uclu_valobj,
911   4,
912   0,
913   0,
914   0,
915   "clu_id",
916   0,
917   0,
918   set_modtime_by_id,
919 };
920
921 static char *dclu_fields[] = {
922   "name",
923 };
924
925 static struct validate dclu_validate = {
926   VOclu0,
927   1,
928   0,
929   0,
930   0,
931   0,
932   0,
933   setup_dclu,
934   0,
935 };
936
937 static char *gmcm_fields[] = {
938   "machine", "cluster",
939   "machine", "cluster",
940 };
941
942 static struct valobj amtc_valobj[] =    /* ADD_MACHINE_TO_CLUSTER */
943 {                                       /* DELETE_MACHINE_FROM_CLUSTER */
944   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
945   {V_ID, 1, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
946 };
947
948 static struct validate amtc_validate = /* for amtc and dmfc */
949 {
950   amtc_valobj,
951   2,
952   "mach_id",
953   "mach_id = %d and clu_id = %d",
954   2,
955   0,
956   0,
957   0,
958   set_mach_modtime_by_id,
959 };
960
961 static char *gcld_fields[] = {
962   "cluster", "serv_label",
963   "cluster", "serv_label", "serv_cluster",
964 };
965
966 static char *acld_fields[] = {
967   "cluster", "serv_label", "serv_cluster",
968 };
969
970 static struct valobj acld_valobj[] =
971 {
972   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
973   {V_CHAR, 1, SVC_TABLE, "serv_label"},
974   {V_CHAR, 2, SVC_TABLE, "serv_cluster"}
975 };
976
977 static struct validate acld_validate =
978 {
979   acld_valobj,
980   3,
981   "clu_id",
982   "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
983   3,
984   0,
985   0,
986   0,
987   set_cluster_modtime_by_id,
988 };
989
990 static struct validate dcld_validate =
991 {
992   VOclu0,
993   1,
994   "clu_id",
995   "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
996   3,
997   0,
998   0,
999   0,
1000   set_cluster_modtime_by_id,
1001 };
1002
1003 static char *glin2_fields[] = {
1004   "name",
1005   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1006   "ace_type", "ace_name", "description", "modtime", "modby", "modwith",
1007 };
1008
1009 static char *glin_fields[] = {
1010   "name",
1011   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1012   "nfsgroup", "ace_type", "ace_name", "description", "modtime", "modby", 
1013   "modwith",
1014 };
1015
1016 static struct validate glin_validate = {
1017   0,
1018   0,
1019   0,
1020   0,
1021   0,
1022   0,
1023   access_vis_list_by_name,
1024   0,
1025   followup_glin,
1026 };
1027
1028 static char *alis2_fields[] = {
1029   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1030   "ace_type", "ace_name", "description",
1031 };
1032
1033 static struct valobj alis2_valobj[] = {
1034   {V_CHAR, 0, LIST_TABLE, "name"},
1035   {V_NUM, 1},
1036   {V_NUM, 2},
1037   {V_NUM, 3},
1038   {V_NUM, 4},
1039   {V_NUM, 5},
1040   {V_NUM, 6},
1041   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
1042   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
1043   {V_LEN, 9, LIST_TABLE, "description"},
1044 };
1045
1046 static struct validate alis2_validate = {
1047   alis2_valobj,
1048   10,
1049   "name",
1050   "name = '%s'",
1051   1,
1052   "list_id",
1053   0,
1054   setup_alis,
1055   set_modtime,
1056 };
1057
1058 static char *alis_fields[] = {
1059   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1060   "nfsgroup", "ace_type", "ace_name", "description",
1061 };
1062
1063 static struct valobj alis_valobj[] = {
1064   {V_CHAR, 0, LIST_TABLE, "name"},
1065   {V_NUM, 1},
1066   {V_NUM, 2},
1067   {V_NUM, 3},
1068   {V_NUM, 4},
1069   {V_NUM, 5},
1070   {V_NUM, 6},
1071   {V_NUM, 7},
1072   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1073   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1074   {V_LEN, 10, LIST_TABLE, "description"},
1075 };
1076
1077 static struct validate alis_validate = {
1078   alis_valobj,
1079   11,
1080   "name",
1081   "name = '%s'",
1082   1,
1083   "list_id",
1084   0,
1085   setup_alis,
1086   set_modtime,
1087 };
1088
1089 static char *ulis2_fields[] = {
1090   "name",
1091   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1092   "ace_type", "ace_name", "description",
1093 };
1094
1095 static struct valobj ulis2_valobj[] = {
1096   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1097   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1098   {V_NUM, 2},
1099   {V_NUM, 3},
1100   {V_NUM, 4},
1101   {V_NUM, 5},
1102   {V_NUM, 6},
1103   {V_NUM, 7},
1104   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1105   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1106   {V_LEN, 10, LIST_TABLE, "description"},
1107 };
1108
1109 static struct validate ulis2_validate = {
1110   ulis2_valobj,
1111   11,
1112   "name",
1113   "list_id = %d",
1114   1,
1115   "list_id",
1116   access_list,
1117   setup_alis,
1118   set_modtime_by_id,
1119 };
1120
1121 static char *ulis_fields[] = {
1122   "name",
1123   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid", 
1124   "nfsgroup", "ace_type", "ace_name", "description",
1125 };
1126
1127 static struct valobj ulis_valobj[] = {
1128   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1129   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1130   {V_NUM, 2},
1131   {V_NUM, 3},
1132   {V_NUM, 4},
1133   {V_NUM, 5},
1134   {V_NUM, 6},
1135   {V_NUM, 7},
1136   {V_NUM, 8},
1137   {V_TYPE, 9, 0, "ace_type", 0, MR_ACE},
1138   {V_TYPEDATA, 10, 0, 0, "list_id", MR_ACE},
1139   {V_LEN, 11, LIST_TABLE, "description"},
1140 };
1141
1142 static struct validate ulis_validate = {
1143   ulis_valobj,
1144   12,
1145   "name", 
1146   "list_id = %d",
1147   1,
1148   "list_id",
1149   access_list,
1150   setup_alis,
1151   set_modtime_by_id,
1152 };
1153
1154 static char *dlis_fields[] = {
1155   "name",
1156 };
1157
1158 static struct validate dlis_validate = {
1159   VOlist0,
1160   1,
1161   "name",
1162   "list_id = %d",
1163   1,
1164   0,
1165   access_list,
1166   setup_dlis,
1167   0,
1168 };
1169
1170 static char *amtl_fields[] = {
1171   "list_name", "member_type", "member_name",
1172 };
1173
1174 static char *atml_fields[] = {
1175   "list_name", "member_type", "member_name", "tag",
1176 };
1177
1178 static struct valobj amtl_valobj[] = {
1179   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1180   {V_TYPE, 1, 0, "member", 0, MR_TYPE},
1181   {V_TYPEDATA, 2, 0, 0, 0, MR_NO_MATCH},
1182   {V_ID, 3, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1183 };
1184
1185 static struct validate amtl_validate =
1186 {
1187   amtl_valobj,
1188   3,
1189   0,
1190   0,
1191   0,
1192   0,
1193   access_list,
1194   0,
1195   add_member_to_list,
1196 };
1197
1198 static struct validate atml_validate =
1199 {
1200   amtl_valobj,
1201   4,
1202   0,
1203   0,
1204   0,
1205   0,
1206   access_list,
1207   0,
1208   add_member_to_list,
1209 };
1210
1211 static struct validate tmol_validate =
1212 {
1213   amtl_valobj,
1214   4,
1215   "tag",
1216   "list_id = %d AND member_type = '%s' AND member_id = %d",
1217   3,
1218   0,
1219   access_list,
1220   0,
1221   0,
1222 };
1223
1224 static struct validate dmfl_validate =
1225 {
1226   amtl_valobj,
1227   3,
1228   0,
1229   0,
1230   0,
1231   0,
1232   access_list,
1233   0,
1234   delete_member_from_list,
1235 };
1236
1237 static char *gaus_fields[] = {
1238   "ace_type", "ace_name",
1239   "use_type", "use_name",
1240 };
1241
1242 static struct valobj gaus_valobj[] = {
1243   {V_TYPE, 0, 0, "gaus", 0, MR_TYPE},
1244   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
1245 };
1246
1247 static struct validate gaus_validate = {
1248   gaus_valobj,
1249   2,
1250   0,
1251   0,
1252   0,
1253   0,
1254   access_member,
1255   0,
1256   get_ace_use,
1257 };
1258
1259 static char *ghbo_fields[] = {
1260   "ace_type", "ace_name",
1261   "name",
1262 };
1263
1264 static struct valobj ghbo_valobj[] = {
1265   {V_TYPE, 0, 0, "gaus", 0, MR_TYPE},
1266   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
1267 };
1268
1269 static struct validate ghbo_validate = {
1270   ghbo_valobj,
1271   2,
1272   0,
1273   0,
1274   0,
1275   0,
1276   access_member,
1277   0,
1278   get_host_by_owner,
1279 };
1280
1281 static char *qgli_fields[] = {
1282   "active", "publicflg", "hidden", "maillist", "grouplist",
1283   "list",
1284 };
1285
1286 static struct valobj qgli_valobj[] = {
1287   {V_TYPE, 0, 0, "boolean", 0, MR_TYPE},
1288   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
1289   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
1290   {V_TYPE, 3, 0, "boolean", 0, MR_TYPE},
1291   {V_TYPE, 4, 0, "boolean", 0, MR_TYPE},
1292 };
1293
1294 static struct validate qgli_validate = {
1295   qgli_valobj,
1296   5,
1297   0,
1298   0,
1299   0,
1300   0,
1301   access_qgli,
1302   0,
1303   qualified_get_lists,
1304 };
1305
1306 static char *gmol_fields[] = {
1307   "list_name",
1308   "member_type", "member_name",
1309 };
1310
1311 static char *gtml_fields[] = {
1312   "list_name",
1313   "member_type", "member_name", "tag",
1314 };
1315
1316 static struct validate gmol_validate = {
1317   VOlist0,
1318   1,
1319   0,
1320   0,
1321   0,
1322   0,
1323   access_visible_list,
1324   0,
1325   get_members_of_list,
1326 };
1327
1328 static char *glom_fields[] = {
1329   "member_type", "member_name",
1330   "list_name", "active", "publicflg", "hidden", "maillist", "grouplist",
1331 };
1332
1333 static struct valobj glom_valobj[] = {
1334   {V_TYPE, 0, 0, "rmember", 0, MR_TYPE},
1335   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
1336 };
1337
1338 static struct validate glom_validate = {
1339   glom_valobj,
1340   2,
1341   0,
1342   0,
1343   0,
1344   0,
1345   access_member,
1346   0,
1347   get_lists_of_member,
1348 };
1349
1350 static char *cmol_fields[] = {
1351   "list_name",
1352   "count",
1353 };
1354
1355 static struct validate cmol_validate = {
1356   VOlist0,
1357   1,
1358   0,
1359   0,
1360   0,
1361   0,
1362   access_visible_list,
1363   0,
1364   count_members_of_list,
1365 };
1366
1367 static char *gsin_fields[] = {
1368   "service",
1369   "service", "update_int", "target_file", "script", "dfgen", "dfcheck",
1370   "type", "enable", "inprogress", "harderror", "errmsg",
1371   "ace_type", "ace_name", "modtime", "modby", "modwith",
1372 };
1373
1374 static struct validate gsin_validate =
1375 {
1376   0,
1377   0,
1378   0,
1379   0,
1380   0,
1381   0,
1382   access_service,
1383   0,
1384   followup_glin,
1385 };
1386
1387 static char *qgsv_fields[] = {
1388   "enable", "inprogress", "harderror",
1389   "service",
1390 };
1391
1392 static struct valobj qgsv_valobj[] = {
1393   {V_TYPE, 0, 0, "boolean", 0, MR_TYPE},
1394   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
1395   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
1396 };
1397
1398 static struct validate qgsv_validate = {
1399   qgsv_valobj,
1400   3,
1401   0,
1402   0,
1403   0,
1404   0,
1405   0,
1406   0,
1407   qualified_get_server,
1408 };
1409
1410 static char *asin_fields[] = {
1411   "service", "update_int", "target_file", "script", "type", "enable",
1412   "ace_type", "ace_name",
1413 };
1414
1415 static struct valobj asin_valobj[] = {
1416   {V_CHAR, 0, SERVERS_TABLE, "name"},
1417   {V_NUM, 1},
1418   {V_LEN, 2, SERVERS_TABLE, "target_file"},
1419   {V_LEN, 3, SERVERS_TABLE, "script"},
1420   {V_TYPE, 4, 0, "service", 0, MR_TYPE},
1421   {V_NUM, 5},
1422   {V_TYPE, 6, 0, "ace_type", 0, MR_ACE},
1423   {V_TYPEDATA, 7, 0, 0, 0, MR_ACE},
1424 };
1425
1426 static struct validate asin_validate =  /* for asin, usin */
1427 {
1428   asin_valobj,
1429   8,
1430   "name",
1431   "name = UPPER('%s')",
1432   1,
1433   0,
1434   0,
1435   0,
1436   set_uppercase_modtime,
1437 };
1438
1439 static struct validate rsve_validate = {
1440   asin_valobj,
1441   1,
1442   "name",
1443   "name = UPPER('%s')",
1444   1,
1445   0,
1446   access_service,
1447   0,
1448   set_uppercase_modtime,
1449 };
1450
1451 static char *ssif_fields[] = {
1452   "service", "dfgen", "dfcheck", "inprogress", "harderror", "errmsg",
1453 };
1454
1455 static struct valobj ssif_valobj[] = {
1456   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
1457   {V_NUM, 1},
1458   {V_NUM, 2},
1459   {V_NUM, 3},
1460   {V_NUM, 4},
1461   {V_LEN, 5, SERVERS_TABLE, "errmsg"},
1462 };
1463
1464 static struct validate ssif_validate = {
1465   ssif_valobj,
1466   6,
1467   "name",
1468   "name = UPPER('%s')",
1469   1,
1470   0,
1471   0,
1472   0,
1473   0,
1474 };
1475
1476 static char *dsin_fields[] = {
1477   "service",
1478 };
1479
1480 static struct validate dsin_validate = {
1481   asin_valobj,
1482   1,
1483   "name",
1484   "name = UPPER('%s')",
1485   1,
1486   0,
1487   0,
1488   setup_dsin,
1489   0,
1490 };
1491
1492 static char *gshi_fields[] = {
1493   "service", "machine",
1494   "service", "machine", "enable", "override", "success", "inprogress",
1495   "hosterror", "hosterrormsg", "ltt", "lts", "value1", "value2",
1496   "value3", "modtime", "modby", "modwith",
1497 };
1498
1499 static struct validate gshi_validate = {
1500   0,
1501   0,
1502   0,
1503   0,
1504   0,
1505   0,
1506   access_service,
1507   0,
1508   followup_fix_modby,
1509 };
1510
1511 static char *qgsh_fields[] = {
1512   "service", "enable", "override", "success", "inprogress", "hosterror",
1513   "service", "machine",
1514 };
1515
1516 static struct valobj qgsh_valobj[] = {
1517   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
1518   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
1519   {V_TYPE, 3, 0, "boolean", 0, MR_TYPE},
1520   {V_TYPE, 4, 0, "boolean", 0, MR_TYPE},
1521   {V_TYPE, 5, 0, "boolean", 0, MR_TYPE},
1522 };
1523
1524 static struct validate qgsh_validate = {
1525   qgsh_valobj,
1526   5,
1527   0,
1528   0,
1529   0,
1530   0,
1531   0,
1532   0,
1533   qualified_get_serverhost,
1534 };
1535
1536 static char *ashi_fields[] = {
1537   "service", "machine", "enable", "value1", "value2", "value3",
1538 };
1539
1540 static struct valobj ashi_valobj[] = {
1541   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
1542   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1543   {V_NUM, 2},
1544   {V_NUM, 3},
1545   {V_NUM, 4},
1546   {V_LEN, 5, SERVERHOSTS_TABLE, "value3"},
1547 };
1548
1549 static struct validate ashi_validate = /* ashi & ushi */
1550 {
1551   ashi_valobj,
1552   6,
1553   "service",
1554   "service = UPPER('%s') AND mach_id = %d",
1555   2,
1556   0,
1557   access_service,
1558   0,
1559   set_serverhost_modtime,
1560 };
1561
1562 static struct validate rshe_validate =
1563 {
1564   ashi_valobj,
1565   2,
1566   "service",
1567   "service = UPPER('%s') AND mach_id = %d",
1568   2,
1569   0,
1570   access_service,
1571   0,
1572   set_serverhost_modtime,
1573 };
1574
1575 static struct validate ssho_validate =
1576 {
1577   ashi_valobj,
1578   2,
1579   "service",
1580   "service = UPPER('%s') AND mach_id = %d",
1581   2,
1582   0,
1583   access_service,
1584   0,
1585   trigger_dcm,
1586 };
1587
1588 static char *sshi_fields[] = {
1589   "service", "machine", "override", "success", "inprogress",
1590   "hosterror", "errmsg", "ltt", "lts",
1591 };
1592
1593 static struct valobj sshi_valobj[] = {
1594   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
1595   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1596   {V_NUM, 2},
1597   {V_NUM, 3},
1598   {V_NUM, 4},
1599   {V_NUM, 5},
1600   {V_LEN, 6, SERVERHOSTS_TABLE, "hosterrmsg"},
1601   {V_NUM, 7},
1602   {V_NUM, 8},
1603 };
1604
1605 static struct validate sshi_validate =
1606 {
1607   sshi_valobj,
1608   9,
1609   0,
1610   0,
1611   0,
1612   0,
1613   0,
1614   0,
1615   0,
1616 };
1617
1618 static char *dshi_fields[] = {
1619   "service", "machine",
1620 };
1621
1622 static struct validate dshi_validate =
1623 {
1624   ashi_valobj,
1625   2,
1626   "service",
1627   "service = UPPER('%s') AND mach_id = %d",
1628   2,
1629   0,
1630   access_service,
1631   setup_dshi,
1632   0,
1633 };
1634
1635 static char *gslo_fields[] = {
1636   "server",
1637   "server", "machine",
1638 };
1639
1640 static char *gfsl_fields[] = {
1641   "label",
1642   "label", "type", "machine", "name", "mount", "access", "comments",
1643   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
1644 };
1645
1646 static struct validate gfsl_validate = {
1647   0,
1648   0,
1649   0,
1650   0,
1651   0,
1652   0,
1653   access_filesys,
1654   0,
1655   followup_fix_modby,
1656 };
1657
1658 static char *gfsm_fields[] = {
1659   "machine",
1660   "label", "type", "machine", "name", "mount", "access", "comments",
1661   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
1662 };
1663
1664 static struct validate gfsm_validate = {
1665   VOmach0,
1666   1,
1667   0,
1668   0,
1669   0,
1670   0,
1671   0,
1672   0,
1673   followup_fix_modby,
1674 };
1675
1676 static char *gfsn_fields[] = {
1677   "machine", "partition",
1678   "label", "type", "machine", "name", "mount", "access", "comments",
1679   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
1680 };
1681
1682 static struct validate gfsn_validate = {
1683   VOmach0,
1684   1,
1685   0,
1686   0,
1687   0,
1688   0,
1689   0,
1690   0,
1691   followup_fix_modby,
1692 };
1693
1694 static char *gfsp_fields[] = {
1695   "path",
1696   "label", "type", "machine", "name", "mount", "access", "comments",
1697   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
1698 };
1699
1700 static char *gfsg_fields[] = {
1701   "list",
1702   "label", "type", "machine", "name", "mount", "access", "comments",
1703   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
1704 };
1705
1706 static struct validate gfsg_validate = {
1707   VOlist0,
1708   1,
1709   0,
1710   0,
1711   0,
1712   0,
1713   access_list,
1714   0,
1715   followup_fix_modby,
1716 };
1717
1718 static char *afil_fields[] = {
1719   "label", "type", "machine", "name", "mount", "access", "comments",
1720   "owner", "owners", "create", "lockertype",
1721 };
1722
1723 static struct valobj afil_valobj[] = {
1724   {V_CHAR, 0, FILESYS_TABLE, "label"},
1725   {V_TYPE, 1, 0, "filesys", 0, MR_FSTYPE},
1726   {V_ID, 2, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1727   {V_CHAR, 3, FILESYS_TABLE, "name"},
1728   {V_LEN, 4, FILESYS_TABLE, "mount"},
1729   {V_LEN, 5, FILESYS_TABLE, "rwaccess"},
1730   {V_LEN, 6, FILESYS_TABLE, "comments"},
1731   {V_ID, 7, USERS_TABLE, "login", "users_id", MR_USER},
1732   {V_ID, 8, LIST_TABLE, "name", "list_id", MR_LIST},
1733   {V_NUM, 9},
1734   {V_TYPE, 10, 0, "lockertype", 0, MR_TYPE},
1735 };
1736
1737 static struct validate afil_validate = {
1738   afil_valobj,
1739   11,
1740   "label",
1741   "label = '%s'",
1742   1,
1743   "filsys_id",
1744   0,
1745   setup_afil,
1746   set_filesys_modtime,
1747 };
1748
1749 static char *ufil_fields[] = {
1750   "label", "newlabel", "type", "machine", "name", "mount", "access",
1751   "comments", "owner", "owners", "create", "lockertype",
1752 };
1753
1754 static struct valobj ufil_valobj[] = {
1755   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1756   {V_RENAME, 1, FILESYS_TABLE, "label", "filsys_id", MR_NOT_UNIQUE},
1757   {V_TYPE, 2, 0, "filesys", 0, MR_FSTYPE},
1758   {V_ID, 3, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1759   {V_CHAR, 4, FILESYS_TABLE, "name"},
1760   {V_LEN, 5, FILESYS_TABLE, "mount"},
1761   {V_LEN, 6, FILESYS_TABLE, "rwaccess"},
1762   {V_LEN, 7, FILESYS_TABLE, "comments"},
1763   {V_ID, 8, USERS_TABLE, "login", "users_id", MR_USER},
1764   {V_ID, 9, LIST_TABLE, "name", "list_id", MR_LIST},
1765   {V_NUM, 10},
1766   {V_TYPE, 11, 0, "lockertype", 0, MR_TYPE},
1767 };
1768
1769 static struct validate ufil_validate = {
1770   ufil_valobj,
1771   12,
1772   "label",
1773   "filsys_id = %d",
1774   1,
1775   "filsys_id",
1776   0,
1777   setup_ufil,
1778   set_filesys_modtime,
1779 };
1780
1781 static char *dfil_fields[] = {
1782   "label",
1783 };
1784
1785 static struct validate dfil_validate = {
1786   VOfilesys0,
1787   1,
1788   "label",
1789   "filsys_id = %d",
1790   1,
1791   0,
1792   0,
1793   setup_dfil,
1794   0,
1795 };
1796
1797 static char *gfgm_fields[] = {
1798   "fsgroup", "filesys", "sortkey"
1799 };
1800
1801 static struct validate gfgm_validate = {
1802   VOfilesys0,
1803   1,
1804   0,
1805   0,
1806   0,
1807   0,
1808   0,
1809   0,
1810   0,
1811 };
1812
1813 static struct valobj aftg_valobj[] = {
1814   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1815   {V_ID, 1, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1816 };
1817
1818 static struct validate aftg_validate = {
1819   aftg_valobj,
1820   2,
1821   "group_id",
1822   "group_id = %d and filsys_id = %d",
1823   2,
1824   0,
1825   0,
1826   0,
1827   0,
1828 };
1829
1830 static char *ganf_fields[] = {
1831   "machine", "dir", "device", "status", "allocated", "size",
1832   "modtime", "modby", "modwith",
1833 };
1834
1835 static char *gnfp_fields[] = {
1836   "machine", "dir",
1837   "machine", "dir", "device", "status", "allocated", "size",
1838   "modtime", "modby", "modwith",
1839 };
1840
1841 static struct validate gnfp_validate = {
1842   VOmach0,
1843   1,
1844   0,
1845   0,
1846   0,
1847   0,
1848   0,
1849   0,
1850   followup_fix_modby,
1851 };
1852
1853 static struct valobj anfp_valobj[] = {
1854   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1855   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
1856   {V_LEN, 2, NFSPHYS_TABLE, "device"},
1857   {V_NUM, 3},
1858   {V_NUM, 4},
1859   {V_NUM, 5},
1860 };
1861
1862 static struct validate anfp_validate = {
1863   anfp_valobj,
1864   6,
1865   "dir",
1866   "mach_id = %d and dir = '%s'",
1867   2,
1868   "nfsphys_id",
1869   0,
1870   prefetch_value,
1871   set_nfsphys_modtime,
1872 };
1873
1874 static struct validate unfp_validate = {
1875   anfp_valobj,
1876   6,
1877   "dir",
1878   "mach_id = %d and dir = '%s'",
1879   2,
1880   "nfsphys_id",
1881   0,
1882   0,
1883   set_nfsphys_modtime,
1884 };
1885
1886 static char *ajnf_fields[] = {
1887   "machine", "dir", "adjustment",
1888 };
1889
1890 static struct valobj ajnf_valobj[] = {
1891   {V_ID, 0, MACHINE_TABLE, NAME, "mach_id", MR_MACHINE},
1892   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
1893   {V_NUM, 2},
1894 };
1895
1896 static struct validate ajnf_validate = {
1897   ajnf_valobj,
1898   3,
1899   "dir",
1900   "mach_id = %d and dir = '%s'",
1901   2,
1902   "nfsphys_id",
1903   0,
1904   0,
1905   set_nfsphys_modtime,
1906 };
1907
1908 static char *dnfp_fields[] = {
1909   "machine", "dir",
1910 };
1911
1912 static struct validate dnfp_validate = {
1913   anfp_valobj,
1914   2,
1915   "dir",
1916   "mach_id = %d and dir = '%s'",
1917   2,
1918   "nfsphys_id",
1919   0,
1920   setup_dnfp,
1921   set_nfsphys_modtime,
1922 };
1923
1924 static char *gqot_fields[] = {
1925   "filesys", "type", "name",
1926   "filesys", "type", "name", "quota", "dir", "machine",
1927   "modtime", "modby", "modwith",
1928 };
1929
1930 static struct valobj gqot_valobj[] = {
1931   {V_TYPE, 1, 0, "quota_type", 0, MR_TYPE},
1932   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
1933 };
1934
1935 static struct validate gqot_validate = {
1936   gqot_valobj,
1937   2,
1938   0,
1939   0,
1940   0,
1941   0,
1942   0,
1943   0,
1944   followup_gqot,
1945 };
1946
1947 static char *gqbf_fields[] = {
1948   "filesys",
1949   "filesys", "type", "name", "quota", "dir", "machine",
1950   "modtime", "modby", "modwith",
1951 };
1952
1953 static struct validate gqbf_validate = {
1954   0,
1955   0,
1956   0,
1957   0,
1958   0,
1959   0,
1960   access_filesys,
1961   0,
1962   followup_gqot,
1963 };
1964
1965 static char *aqot_fields[] = {
1966   "filesys", "type", "name", "quota",
1967 };
1968
1969 static struct valobj aqot_valobj[] = {
1970   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1971   {V_TYPE, 1, 0, "quota_type", 0, MR_TYPE},
1972   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
1973   {V_NUM, 3},
1974 };
1975
1976 static struct validate aqot_validate = {
1977   aqot_valobj,
1978   4,
1979   "filsys_id",
1980   "filsys_id = %d and type = '%s' and entity_id = %d",
1981   3,
1982   0,
1983   0,
1984   prefetch_filesys,
1985   followup_aqot,
1986 };
1987
1988 static struct validate uqot_validate = {
1989   aqot_valobj,
1990   4,
1991   "filsys_id",
1992   "filsys_id = %d AND type = '%s' AND entity_id = %d",
1993   3,
1994   0,
1995   0,
1996   setup_dqot,
1997   followup_aqot,
1998 };
1999
2000 static struct validate dqot_validate = {
2001   aqot_valobj,
2002   3,
2003   "filsys_id",
2004   "filsys_id = %d AND type = '%s' AND entity_id = %d",
2005   3,
2006   0,
2007   0,
2008   setup_dqot,
2009   followup_dqot,
2010 };
2011
2012 static char *gnfq_fields[] = {
2013   "filesys", "login",
2014   "filesys", "login", "quota", "dir", "machine",
2015   "modtime", "modby", "modwith",
2016 };
2017
2018 static struct validate gnfq_validate = {
2019   0,
2020   0,
2021   0,
2022   0,
2023   0,
2024   0,
2025   access_filesys,
2026   0,
2027   followup_gqot,
2028 };
2029
2030 static char *gnqp_fields[] = {
2031   "machine", "dir",
2032   "filesys", "login", "quota", "dir", "machine",
2033   "modtime", "modby", "modwith",
2034 };
2035
2036 static char *anfq_fields[] = {
2037   "filesys", "login", "quota",
2038 };
2039
2040 static struct valobj anfq_valobj[] = {
2041   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
2042   {V_ID, 1, USERS_TABLE, "login", "users_id", MR_USER},
2043   {V_NUM, 2},
2044 };
2045
2046 static struct validate anfq_validate = {
2047   anfq_valobj,
2048   3,
2049   "filsys_id",
2050   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
2051   2,
2052   0, /* object ? */
2053   0,
2054   prefetch_filesys,
2055   followup_aqot,
2056 };
2057
2058 static struct validate unfq_validate = {
2059   anfq_valobj,
2060   3,
2061   "filsys_id",
2062   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
2063   2,
2064   0,
2065   0,
2066   setup_dqot,
2067   followup_aqot,
2068 };
2069
2070 static struct validate dnfq_validate = {
2071   anfq_valobj,
2072   3,
2073   "filsys_id",
2074   "filsys_id = %d AND entity_id = %d",
2075   2,
2076   0,
2077   0,
2078   setup_dqot,
2079   followup_dqot,
2080 };
2081
2082 static char *gzcl_fields[] = {
2083   "class",
2084   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
2085   "iws_type", "iws_name", "iui_type", "iui_name",
2086   "modtime", "modby", "modwith",
2087 };
2088
2089 static struct validate gzcl_validate = {
2090   0,
2091   0,
2092   0,
2093   0,
2094   0,
2095   0,
2096   0,
2097   0,
2098   followup_gzcl,
2099 };
2100
2101 static char *azcl_fields[] = {
2102   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
2103   "iws_type", "iws_name", "iui_type", "iui_name",
2104 };
2105
2106 static struct valobj azcl_valobj[] = {
2107   {V_CHAR, 0, ZEPHYR_TABLE, "class"},
2108   {V_TYPE, 1, 0, "zace_type", 0, MR_ACE},
2109   {V_TYPEDATA, 2, 0, 0, "list_id", MR_ACE},
2110   {V_TYPE, 3, 0, "zace_type", 0, MR_ACE},
2111   {V_TYPEDATA, 4, 0, 0, "list_id", MR_ACE},
2112   {V_TYPE, 5, 0, "zace_type", 0, MR_ACE},
2113   {V_TYPEDATA, 6, 0, 0, "list_id", MR_ACE},
2114   {V_TYPE, 7, 0, "zace_type", 0, MR_ACE},
2115   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
2116 };
2117
2118 static struct validate azcl_validate = {
2119   azcl_valobj,
2120   9,
2121   "class",
2122   "class = '%s'",
2123   1,
2124   0,
2125   0,
2126   0,
2127   set_zephyr_modtime,
2128 };
2129
2130 static char *uzcl_fields[] = {
2131   "class", "newclass", "xmt_type", "xmt_name", "sub_type", "sub_name",
2132   "iws_type", "iws_name", "iui_type", "iui_name",
2133 };
2134
2135 static struct valobj uzcl_valobj[] = {
2136   {V_NAME, 0, ZEPHYR_TABLE, "class", 0, MR_BAD_CLASS},
2137   {V_RENAME, 1, ZEPHYR_TABLE, "class", 0, MR_NOT_UNIQUE},
2138   {V_TYPE, 2, 0, "zace_type", 0, MR_ACE},
2139   {V_TYPEDATA, 3, 0, 0, "list_id", MR_ACE},
2140   {V_TYPE, 4, 0, "zace_type", 0, MR_ACE},
2141   {V_TYPEDATA, 5, 0, 0, "list_id", MR_ACE},
2142   {V_TYPE, 6, 0, "zace_type", 0, MR_ACE},
2143   {V_TYPEDATA, 7, 0, 0, "list_id", MR_ACE},
2144   {V_TYPE, 8, 0, "zace_type", 0, MR_ACE},
2145   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
2146 };
2147
2148 static struct validate uzcl_validate = {
2149   uzcl_valobj,
2150   10,
2151   "class",
2152   "class = '%s'",
2153   1,
2154   0,
2155   0,
2156   0,
2157   set_zephyr_modtime,
2158 };
2159
2160 static struct validate dzcl_validate = {
2161   0,
2162   0,
2163   "class",
2164   "class = '%s'",
2165   1,
2166   0,
2167   0,
2168   0,
2169   0,
2170 };
2171
2172 static char *gsha_fields[] = {
2173   "machine",
2174   "machine", "ace_type", "ace_name", "modtime", "modby", "modwith",
2175 };
2176
2177 static struct validate gsha_validate =
2178 {
2179   0,
2180   0,
2181   0,
2182   0,
2183   0,
2184   0,
2185   0,
2186   0,
2187   followup_gsha,
2188 };
2189
2190 static char *asha_fields[] = {
2191   "machine", "ace_type", "ace_name",
2192 };
2193
2194 static struct valobj asha_valobj[] = {
2195   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2196   {V_TYPE, 1, 0, "ace_type", 0, MR_ACE},
2197   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
2198 };
2199
2200 static struct validate asha_validate =
2201 {
2202   asha_valobj,
2203   3,
2204   "mach_id",
2205   "mach_id = %d",
2206   1,
2207   "mach_id",
2208   0,
2209   0,
2210   set_modtime_by_id,
2211 };
2212
2213 static char *gacl_fields[] = {
2214   "machine", "target",
2215   "machine", "target", "kind", "list",
2216 };
2217
2218 static char *aacl_fields[] = {
2219   "machine", "target", "kind", "list",
2220 };
2221
2222 static char *dacl_fields[] = {
2223   "machine", "target",
2224 };
2225
2226 static struct valobj aacl_valobj[] = {
2227   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2228   {V_CHAR, 1, ACL_TABLE, "target"},
2229   {V_TYPE, 2, 0, "acl_kind", 0, MR_TYPE},
2230   {V_ID, 3, LIST_TABLE, "name", "list_id", MR_LIST},
2231 };
2232
2233 static struct validate gacl_validate =
2234 {
2235   aacl_valobj,
2236   1,
2237   NULL,
2238   NULL,
2239   0,
2240   "mach_id",
2241   /* access_acl */ 0,
2242   0,
2243   0,
2244 };
2245
2246 static struct validate aacl_validate =
2247 {
2248   aacl_valobj,
2249   4,
2250   "mach_id",
2251   "mach_id = %d AND target = '%s'",
2252   2,
2253   "mach_id",
2254   /* access_acl */ 0,
2255   0,
2256   0,
2257 };
2258
2259 static char *gsvc_fields[] = {
2260   "service",
2261   "service", "protocol", "port", "description", "modtime", "modby", "modwith",
2262 };
2263
2264 static char *asvc_fields[] = {
2265   "service", "protocol", "port", "description",
2266 };
2267
2268 static struct valobj asvc_valobj[] = {
2269   {V_CHAR, 0, SERVICES_TABLE, "name"},
2270   {V_CHAR, 1, SERVICES_TABLE, "protocol"},
2271   {V_NUM, 2},
2272   {V_CHAR, 3, SERVICES_TABLE, "description"},
2273 };
2274
2275 static struct validate asvc_validate = {
2276   asvc_valobj,
2277   4,
2278   "name",
2279   "name = '%s'",
2280   1,
2281   0,
2282   0,
2283   0,
2284   set_modtime,
2285 };
2286
2287 static char *gprn_fields[] = {
2288   "name",
2289   "name", "type", "hwtype", "duplexname", "hostname",
2290   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2291   "banner", "location", "contact", "modtime", "modby", "modwith"
2292 };
2293
2294 static char *gpbd_fields[] = {
2295   "duplexname",
2296   "name", "type", "hwtype", "duplexname", "hostname",
2297   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2298   "banner", "location", "contact", "modtime", "modby", "modwith"
2299 };
2300
2301 static char *gpbe_fields[] = {
2302   "hwaddr",
2303   "name", "type", "hwtype", "duplexname", "hostname",
2304   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2305   "banner", "location", "contact", "modtime", "modby", "modwith"
2306 };
2307
2308 static char *gpbh_fields[] = {
2309   "hostname",
2310   "name", "type", "hwtype", "duplexname", "hostname",
2311   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2312   "banner", "location", "contact", "modtime", "modby", "modwith"
2313 };
2314
2315 static char *gpbr_fields[] = {
2316   "rm",
2317   "name", "type", "hwtype", "duplexname", "hostname",
2318   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2319   "banner", "location", "contact", "modtime", "modby", "modwith"
2320 };
2321
2322 static char *gpbl_fields[] = {
2323   "location",
2324   "name", "type", "hwtype", "duplexname", "hostname",
2325   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2326   "banner", "location", "contact", "modtime", "modby", "modwith"
2327 };
2328
2329 static char *gpbc_fields[] = {
2330   "contact",
2331   "name", "type", "hwtype", "duplexname", "hostname",
2332   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2333   "banner", "location", "contact", "modtime", "modby", "modwith"
2334 };
2335
2336 static char *aprn_fields[] = {
2337   "printer", "type", "hwtype", "duplexname", "hostname",
2338   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2339   "banner", "location", "contact",
2340 };
2341
2342 static struct valobj aprn_valobj[] = {
2343   {V_CHAR, 0, PRINTERS_TABLE, "name"},
2344   {V_TYPE, 1, 0, "printertype", 0, MR_TYPE},
2345   {V_TYPE, 2, 0, "printerhwtype", 0, MR_TYPE},
2346   {V_CHAR, 3, PRINTERS_TABLE, "duplexname"},
2347   {V_ID, 4, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2348   {V_ID, 5, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2349   {V_ID, 6, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2350   {V_CHAR, 7, PRINTERS_TABLE, "rp"},
2351   {V_ID, 8, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2352   {V_NUM, 9},
2353   {V_NUM, 10},
2354   {V_ID, 11, LIST_TABLE, "name", "list_id", MR_LIST},
2355   {V_ID, 12, LIST_TABLE, "name", "list_id", MR_LIST},
2356   {V_NUM, 13},
2357   {V_CHAR, 14, PRINTERS_TABLE, "location"},
2358   {V_CHAR, 15, PRINTERS_TABLE, "contact"},
2359 };
2360
2361 static struct validate aprn_validate = {
2362   aprn_valobj,
2363   16,
2364   "name",
2365   "name = '%s'",
2366   1,
2367   0,
2368   access_printer,
2369   setup_aprn,
2370   set_modtime,
2371 };
2372
2373 static char *uprn_fields[] = {
2374   "printer",
2375   "printer", "type", "hwtype", "duplexname", "hostname",
2376   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
2377   "banner", "location", "contact",
2378 };
2379
2380 static struct valobj uprn_valobj[] = {
2381   {V_CHAR, 0, PRINTERS_TABLE, "name"},
2382   {V_CHAR, 1, PRINTERS_TABLE, "name"},
2383   {V_TYPE, 2, 0, "printertype", 0, MR_TYPE},
2384   {V_TYPE, 3, 0, "printerhwtype", 0, MR_TYPE},
2385   {V_CHAR, 4, PRINTERS_TABLE, "duplexname"},
2386   {V_ID, 5, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2387   {V_ID, 6, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2388   {V_ID, 7, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2389   {V_CHAR, 8, PRINTERS_TABLE, "rp"},
2390   {V_ID, 9, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2391   {V_NUM, 10},
2392   {V_NUM, 11},
2393   {V_ID, 12, LIST_TABLE, "name", "list_id", MR_LIST},
2394   {V_ID, 13, LIST_TABLE, "name", "list_id", MR_LIST},
2395   {V_NUM, 14},
2396   {V_CHAR, 15, PRINTERS_TABLE, "location"},
2397   {V_CHAR, 16, PRINTERS_TABLE, "contact"},
2398 };
2399
2400 static struct validate uprn_validate = {
2401   uprn_valobj,
2402   16,
2403   "name",
2404   "name = '%s'",
2405   1,
2406   0,
2407   access_printer,
2408   setup_aprn,
2409   set_modtime,
2410 };
2411
2412 static struct validate dprn_validate = {
2413   0,
2414   0,
2415   "name",
2416   "name = '%s'",
2417   1,
2418   0,
2419   access_printer,
2420   0,
2421   0,
2422 };
2423
2424 static char *gpsv_fields[] = {
2425   "host",
2426   "host", "kind", "printer_types", "owner_type", "owner_name",
2427   "lpc_acl", "modtime", "modby", "modwith"
2428 };
2429
2430 static struct valobj gpsv_valobj[] = {
2431   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2432 };
2433
2434 static struct validate gpsv_validate = {
2435   gpsv_valobj,
2436   1,
2437   0,
2438   0,
2439   0,
2440   0,
2441   0,
2442   0,
2443   followup_gpsv,
2444 };
2445
2446 static char *apsv_fields[] = {
2447   "host", "kind", "printer_types", "owner_type", "owner_name", "lpc_acl"
2448 };
2449
2450 static struct valobj apsv_valobj[] = {
2451   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2452   {V_TYPE, 1, 0, "lpd_kind", 0, MR_TYPE},
2453   {V_ID, 2, STRINGS_TABLE, "string", "string_id", MR_STRING},
2454   {V_TYPE, 3, 0, "ace_type", 0, MR_ACE},
2455   {V_TYPEDATA, 4, 0, 0, 0, MR_ACE},
2456   {V_ID, 5, LIST_TABLE, "name", "list_id", MR_LIST},
2457 };
2458
2459 static struct validate apsv_validate = {
2460   apsv_valobj,
2461   6,
2462   "mach_id",
2463   "mach_id = %d",
2464   1,
2465   "mach_id",
2466   0,
2467   0,
2468   set_modtime_by_id,
2469 };
2470
2471 static char *dpsv_fields[] = {
2472   "host",
2473 };
2474
2475 static struct validate dpsv_validate = {
2476   gpsv_valobj,
2477   1,
2478   "mach_id",
2479   "mach_id = %d",
2480   1,
2481   0,
2482   0,
2483   setup_dpsv,
2484   0,
2485 };  
2486
2487 static char *gali_fields[] = {
2488   "name", "type", "trans",
2489   "name", "type", "trans",
2490 };
2491
2492 static char *aali_fields[] = {
2493   "name", "type", "trans",
2494 };
2495
2496 static struct valobj aali_valobj[] = {
2497   {V_CHAR, 0, ALIAS_TABLE, "name"},
2498   {V_TYPE, 1, 0, "alias", 0, MR_TYPE},
2499   {V_CHAR, 2, ALIAS_TABLE, "trans"},
2500 };
2501
2502 static struct validate aali_validate = {
2503   aali_valobj,
2504   3,
2505   "trans",
2506   "name = '%s' and type = '%s' and trans = '%s'",
2507   3,
2508   0,
2509   0,
2510   0,
2511   0,
2512 };
2513
2514 static struct validate dali_validate =  /* DELETE_ALIAS */
2515 {
2516   0,
2517   0,
2518   "trans",
2519   "name = '%s' and type = '%s' and trans = '%s'",
2520   3,
2521   0,
2522   0,
2523   0,
2524   0,
2525 };
2526
2527 static char *gval_fields[] = {
2528   "name", "value",
2529 };
2530
2531 static struct valobj gval_valobj[] = {
2532   {V_NAME, 0, NUMVALUES_TABLE, "name", 0, MR_NO_MATCH},
2533 };
2534
2535 static struct validate gval_validate = {
2536   gval_valobj,
2537   1,
2538   0,
2539   0,
2540   0,
2541   0,
2542   0,
2543   0,
2544   0,
2545 };
2546
2547 static char *aval_fields[] = {
2548   "name", "value",
2549 };
2550
2551 static struct valobj aval_valobj[] = {
2552   {V_CHAR, 0, NUMVALUES_TABLE, "name"},
2553   {V_NUM, 1},
2554 };
2555
2556 static struct validate aval_validate =  /* for aval, uval, and dval */
2557 {
2558   aval_valobj,
2559   2,
2560   "name",
2561   "name = '%s'",
2562   1,
2563   0,
2564   0,
2565   0,
2566   0,
2567 };
2568
2569 static char *dval_fields[] = {
2570   "name",
2571 };
2572
2573 static char *gats_fields[] = {
2574   "table_name", "appends", "updates", "deletes",
2575   "modtime", "modby", "modwith",
2576 };
2577
2578 static char *_sdl_fields[] = {
2579   "level",
2580 };
2581
2582 static struct validate _sdl_validate =
2583 {
2584   VOnum0,
2585   1,
2586   NULL,
2587   NULL,
2588   0,
2589   0,
2590   0,
2591   0,
2592   _sdl_followup,
2593 };
2594
2595
2596 \f
2597 /* Generalized Query Definitions */
2598
2599 /* Multiple versions of the same query MUST be listed in ascending
2600  * order.
2601  */
2602
2603 /* Note: For any query which uses prefetch_value, the vcnt should be
2604  * one less than the number of %-format specifiers in the tlist.
2605  */
2606
2607 struct query Queries[] = {
2608   {
2609     /* Q_GALO - GET_ALL_LOGINS */
2610     "get_all_logins",
2611     "galo",
2612     2,
2613     RETRIEVE,
2614     "u",
2615     USERS_TABLE,
2616     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
2617     galo_fields,
2618     6,
2619     "u.users_id != 0",
2620     0,
2621     "u.login",
2622     0,
2623   },
2624
2625   {
2626     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS */
2627     "get_all_active_logins",
2628     "gaal",
2629     2,
2630     RETRIEVE,
2631     "u",
2632     USERS_TABLE,
2633     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
2634     galo_fields,
2635     6,
2636     "u.status = 1",
2637     0,
2638     "u.login",
2639     0,
2640   },
2641
2642   {
2643     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN */
2644     "get_user_account_by_login",
2645     "gual",
2646     2,
2647     RETRIEVE,
2648     "u",
2649     USERS_TABLE,
2650     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2651     gual_fields,
2652     15,
2653     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
2654     1,
2655     "u.login",
2656     &gubl_validate,
2657   },
2658
2659   {
2660     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID */
2661     "get_user_account_by_uid",
2662     "guau",
2663     2,
2664     RETRIEVE,
2665     "u",
2666     USERS_TABLE,
2667     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2668     guau_fields,
2669     15,
2670     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
2671     1,
2672     "u.login",
2673     &gubu_validate,
2674   },
2675
2676   {
2677     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME */
2678     "get_user_account_by_name",
2679     "guan",
2680     2,
2681     RETRIEVE,
2682     "u",
2683     USERS_TABLE,
2684     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2685     guan_fields,
2686     15,
2687     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
2688     2,
2689     "u.login",
2690     &guan_validate,
2691   },
2692
2693   {
2694     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS */
2695     "get_user_account_by_class",
2696     "guac",
2697     2,
2698     RETRIEVE,
2699     "u",
2700     USERS_TABLE,
2701     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2702     guac_fields,
2703     15,
2704     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
2705     1,
2706     "u.login",
2707     &VDfix_modby,
2708   },
2709
2710   {
2711     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID */
2712     "get_user_account_by_id",
2713     "guai",
2714     2,
2715     RETRIEVE,
2716     "u",
2717     USERS_TABLE,
2718     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2719     guam_fields,
2720     15,
2721     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
2722     1,
2723     "u.login",
2724     &VDfix_modby,
2725   },
2726
2727   {
2728     /* Q_GUBL - GET_USER_BY_LOGIN */
2729     "get_user_by_login",
2730     "gubl",
2731     2,
2732     RETRIEVE,
2733     "u",
2734     USERS_TABLE,
2735     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u",
2736     gubl_fields,
2737     12,
2738     "u.login LIKE '%s' AND u.users_id != 0",
2739     1,
2740     "u.login",
2741     &gubl_validate,
2742   },
2743
2744   {
2745     /* Q_GUBU - GET_USER_BY_UID */
2746     "get_user_by_uid",
2747     "gubu",
2748     2,
2749     RETRIEVE,
2750     "u",
2751     USERS_TABLE,
2752     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u",
2753     gubu_fields,
2754     12,
2755     "u.unix_uid = %s AND u.users_id != 0",
2756     1,
2757     "u.login",
2758     &gubu_validate,
2759   },
2760
2761   {
2762     /* Q_GUBN - GET_USER_BY_NAME */
2763     "get_user_by_name",
2764     "gubn",
2765     2,
2766     RETRIEVE,
2767     "u",
2768     USERS_TABLE,
2769     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u",
2770     gubn_fields,
2771     12,
2772     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0",
2773     2,
2774     "u.login",
2775     &gubn_validate,
2776   },
2777
2778   {
2779     /* Q_GUBC - GET_USER_BY_CLASS */
2780     "get_user_by_class",
2781     "gubc",
2782     2,
2783     RETRIEVE,
2784     "u",
2785     USERS_TABLE,
2786     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u",
2787     gubc_fields,
2788     12,
2789     "u.type = UPPER('%s') AND u.users_id != 0",
2790     1,
2791     "u.login",
2792     &VDfix_modby,
2793   },
2794
2795   {
2796     /* Q_GUBM - GET_USER_BY_MITID */
2797     "get_user_by_mitid",
2798     "gubm",
2799     2,
2800     RETRIEVE,
2801     "u",
2802     USERS_TABLE,
2803     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u",
2804     gubm_fields,
2805     12,
2806     "u.clearid LIKE '%s' AND u.users_id != 0",
2807     1,
2808     "u.login",
2809     &VDfix_modby,
2810   },
2811
2812   {
2813     /* Q_AUAC - ADD_USER_ACCOUNT */  /* uses prefetch_value() for users_id */
2814     "add_user_account",
2815     "auac",
2816     2,
2817     APPEND,
2818     "u",
2819     USERS_TABLE,
2820     /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
2821      * but using up one argv element.
2822      */
2823     "INTO users (login, unix_uid, shell, last, first, middle, status, clearid, type, comments, signature, secure, users_id) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', %d, NVL(CHR(0), '%s'), %s, %s)",
2824     auac_fields,
2825     12,
2826     NULL,
2827     0,
2828     NULL,
2829     &auac_validate,
2830   },
2831
2832   {
2833     /* Q_AUSR - ADD_USER */  /* uses prefetch_value() for users_id */
2834     "add_user",
2835     "ausr",
2836     2,
2837     APPEND,
2838     "u",
2839     USERS_TABLE,
2840     "INTO users (login, unix_uid, shell, last, first, middle, status, clearid, type, comments, signature, secure, users_id) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', 0, CHR(0), 0, %s)",
2841     auac_fields,
2842     9,
2843     0,
2844     0,
2845     NULL,
2846     &ausr_validate,
2847   },
2848
2849   {
2850     /* Q_RUSR - REGISTER_USER */
2851     "register_user",
2852     "rusr",
2853     2,
2854     APPEND,
2855     0,
2856     0,
2857     0,
2858     rusr_fields,
2859     3,
2860     0,
2861     0,
2862     NULL,
2863     &rusr_validate,
2864   },
2865
2866   {
2867     /* Q_UUAC - UPDATE_USER_ACCOUNT */
2868     "update_user_account",
2869     "uuac",
2870     2,
2871     UPDATE,
2872     "u",
2873     USERS_TABLE,
2874     /* See comment in auac about signature. */
2875     "users SET login = '%s', unix_uid = %s, shell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', comments = %d, signature = NVL(CHR(0), '%s'), secure = %s",
2876     uuac_fields,
2877     12,
2878     "users_id = %d",
2879     1,
2880     NULL,
2881     &uuac_validate,
2882   },
2883
2884   {
2885     /* Q_UUSR - UPDATE_USER */
2886     "update_user",
2887     "uusr",
2888     2,
2889     UPDATE,
2890     "u",
2891     USERS_TABLE,
2892     "users SET login = '%s', unix_uid = %s, shell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)),  type = '%s'",
2893     uuac_fields,
2894     9,
2895     "users_id = %d",
2896     1,
2897     NULL,
2898     &uusr_validate,
2899   },
2900
2901   {
2902     /* Q_UUSH - UPDATE_USER_SHELL */
2903     "update_user_shell",
2904     "uush",
2905     2,
2906     UPDATE,
2907     "u",
2908     USERS_TABLE,
2909     "users SET shell = '%s'",
2910     uush_fields,
2911     1,
2912     "users_id = %d",
2913     1,
2914     NULL,
2915     &uush_validate,
2916   },
2917
2918   {
2919     /* Q_UUST - UPDATE_USER_STATUS */
2920     "update_user_status",
2921     "uust",
2922     2,
2923     UPDATE,
2924     "u",
2925     USERS_TABLE,
2926     "users SET status = %s",
2927     uust_fields,
2928     1,
2929     "users_id = %d",
2930     1,
2931     NULL,
2932     &uust_validate,
2933   },
2934
2935   {
2936     /* Q_UUSS - UPDATE_USER_SECURITY_STATUS */
2937     "update_user_security_status",
2938     "uuss",
2939     2,
2940     UPDATE,
2941     "u",
2942     USERS_TABLE,
2943     "users SET secure = %s",
2944     uuss_fields,
2945     1,
2946     "users_id = %d",
2947     1,
2948     NULL,
2949     &uust_validate,
2950   },
2951
2952   {
2953     /* Q_DUSR - DELETE_USER */
2954     "delete_user",
2955     "dusr",
2956     2,
2957     DELETE,
2958     "u",
2959     USERS_TABLE,
2960     NULL,
2961     dusr_fields,
2962     0,
2963     "users_id = %d",
2964     1,
2965     NULL,
2966     &dusr_validate,
2967   },
2968
2969   {
2970     /* Q_AURV - ADD_USER_RESERVATION */
2971     "add_user_reservation",
2972     "aurv",
2973     2,
2974     UPDATE,
2975     0,
2976     USERS_TABLE,
2977     0,
2978     aurv_fields,
2979     2,
2980     0,
2981     0,
2982     NULL,
2983     &aurv_validate,
2984   },
2985
2986   {
2987     /* Q_GURV - GET_USER_RESERVATIONS */
2988     "get_user_reservations",
2989     "gurv",
2990     2,
2991     RETRIEVE,
2992     0,
2993     USERS_TABLE,
2994     0,
2995     gurv_fields,
2996     2,
2997     0,
2998     1,
2999     NULL,
3000     &gurv_validate,
3001   },
3002
3003   {
3004     /* Q_GUBR - GET_USER_BY_RESERVATION */
3005     "get_user_by_reservation",
3006     "gubr",
3007     2,
3008     RETRIEVE,
3009     0,
3010     USERS_TABLE,
3011     0,
3012     gubr_fields,
3013     1,
3014     0,
3015     1,
3016     NULL,
3017     &gubr_validate,
3018   },
3019
3020   {
3021     /* Q_DURV - DELETE_USER_RESERVATION */
3022     "delete_user_reservation",
3023     "durv",
3024     2,
3025     UPDATE,
3026     0,
3027     USERS_TABLE,
3028     0,
3029     aurv_fields,
3030     2,
3031     0,
3032     0,
3033     NULL,
3034     &aurv_validate,
3035   },
3036
3037   {
3038     /* Q_GKUM - GET_KERBEROS_USER_MAP */
3039     "get_kerberos_user_map",
3040     "gkum",
3041     2,
3042     RETRIEVE,
3043     "k",
3044     KRBMAP_TABLE,
3045     "u.login, str.string FROM krbmap km, users u, strings str",
3046     gkum_fields,
3047     2,
3048     "u.login LIKE '%s' AND str.string LIKE '%s' AND km.users_id = u.users_id AND km.string_id = str.string_id",
3049     2,
3050     "u.login, str.string",
3051     NULL,
3052   },
3053
3054   {
3055     /* Q_AKUM - ADD_KERBEROS_USER_MAP */
3056     "add_kerberos_user_map",
3057     "akum",
3058     2,
3059     APPEND,
3060     "k",
3061     KRBMAP_TABLE,
3062     "INTO krbmap (users_id, string_id) VALUES (%d, %d)",
3063     akum_fields,
3064     2,
3065     0,
3066     0,
3067     NULL,
3068     &akum_validate,
3069   },
3070
3071   {
3072     /* Q_DKUM - DELETE_KERBEROS_USER_MAP */
3073     "delete_kerberos_user_map",
3074     "dkum",
3075     2,
3076     DELETE,
3077     "k",
3078     KRBMAP_TABLE,
3079     0,
3080     akum_fields,
3081     0,
3082     "users_id = %d AND string_id = %d",
3083     2,
3084     NULL,
3085     &dkum_validate,
3086   },
3087
3088   {
3089     /* Q_GFBL - GET_FINGER_BY_LOGIN */
3090     "get_finger_by_login",
3091     "gfbl",
3092     2,
3093     RETRIEVE,
3094     "u",
3095     USERS_TABLE,
3096     "login, fullname, nickname, home_addr, home_phone, office_addr, office_phone, department, affiliation, TO_CHAR(fmodtime, 'DD-mon-YYYY HH24:MI:SS'), fmodby, fmodwith FROM users",
3097     gfbl_fields,
3098     12,
3099     "users_id = %d",
3100     1,
3101     "login",
3102     &gfbl_validate,
3103   },
3104
3105   {
3106     /* Q_UFBL - UPDATE_FINGER_BY_LOGIN */
3107     "update_finger_by_login",
3108     "ufbl",
3109     2,
3110     UPDATE,
3111     "u",
3112     USERS_TABLE,
3113     "users SET fullname= NVL('%s', CHR(0)), nickname= NVL('%s', CHR(0)), home_addr= NVL('%s', CHR(0)), home_phone= NVL('%s', CHR(0)), office_addr= NVL('%s', CHR(0)), office_phone= NVL('%s', CHR(0)), department= NVL('%s', CHR(0)), affiliation= NVL('%s', CHR(0))",
3114     ufbl_fields,
3115     8,
3116     "users_id = %d",
3117     1,
3118     NULL,
3119     &ufbl_validate,
3120   },
3121
3122   {
3123     /* Q_GPOB - GET_POBOX */
3124     "get_pobox",
3125     "gpob",
3126     2,
3127     RETRIEVE,
3128     "u",
3129     USERS_TABLE,
3130     "login, potype, users_id, CHR(0), TO_CHAR(pmodtime, 'DD-mon-YYYY HH24:MI:SS'), pmodby, pmodwith FROM users",
3131     gpob_fields,
3132     7,
3133     "users_id = %d",
3134     1,
3135     "login",
3136     &gpob_validate,
3137   },
3138
3139   {
3140     /* Q_GAPO - GET_ALL_POBOXES */
3141     "get_all_poboxes",
3142     "gapo",
3143     2,
3144     RETRIEVE,
3145     "u",
3146     USERS_TABLE,
3147     "login, potype, pop_id || ':' || box_id FROM users",
3148     gpox_fields,
3149     3,
3150     "potype != 'NONE'",
3151     0,
3152     "login",
3153     &gpox_validate,
3154   },
3155
3156   {
3157     /* Q_GPOP - GET_POBOXES_POP */
3158     "get_poboxes_pop",
3159     "gpop",
3160     2,
3161     RETRIEVE,
3162     "u",
3163     USERS_TABLE,
3164     "login, potype, users_id FROM users",
3165     gpox_fields,
3166     3,
3167     "potype = 'POP'",
3168     0,
3169     "login",
3170     &gpox_validate
3171   },
3172
3173   {
3174     /* Q_GPOF - GET_POBOXES_SMTP */
3175     "get_poboxes_smtp",
3176     "gpos",
3177     2,
3178     RETRIEVE,
3179     "u",
3180     USERS_TABLE,
3181     "login, potype, users_id FROM users",
3182     gpox_fields,
3183     3,
3184     "potype = 'SMTP'",
3185     0,
3186     "login",
3187     &gpox_validate
3188   },
3189
3190   {
3191     /* Q_SPOB - SET_POBOX */
3192     "set_pobox",
3193     "spob",
3194     2,
3195     UPDATE,
3196     0,
3197     USERS_TABLE,
3198     0,
3199     spob_fields,
3200     3,
3201     NULL,
3202     0,
3203     NULL,
3204     &spob_validate,
3205   },
3206
3207   {
3208     /* Q_SPOP - SET_POBOX_POP */
3209     "set_pobox_pop",
3210     "spop",
3211     2,
3212     UPDATE,
3213     0,
3214     USERS_TABLE,
3215     0,
3216     spob_fields,
3217     1,
3218     NULL,
3219     0,
3220     NULL,
3221     &spop_validate,
3222   },
3223
3224   {
3225     /* Q_DPOB - DELETE_POBOX */
3226     "delete_pobox",
3227     "dpob",
3228     2,
3229     UPDATE,
3230     "u",
3231     USERS_TABLE,
3232     "users SET potype = 'NONE'",
3233     spob_fields,
3234     0,
3235     "users_id = %d",
3236     1,
3237     NULL,
3238     &dpob_validate,
3239   },
3240
3241   {
3242     /* Q_GHST - GET_HOST */
3243     "get_host",
3244     "ghst",
3245     2,
3246     RETRIEVE,
3247     "m",
3248     MACHINE_TABLE,
3249     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.use, m.status, TO_CHAR(m.statuschange, 'DD-mon-YYYY HH24:MI:SS'), s.name, m.address, m.owner_type, m.owner_id, m.acomment, m.ocomment, TO_CHAR(m.created, 'DD-mon-YYYY HH24:MI:SS'), m.creator, TO_CHAR(m.inuse, 'DD-mon-YYYY HH24:MI:SS'), TO_CHAR(m.modtime, 'DD-mon-YYYY HH24:MI:SS'), m.modby, m.modwith FROM machine m, subnet s",
3250     ghst_fields,
3251     21,
3252     "m.name LIKE UPPER('%s') AND m.address LIKE '%s' AND m.location LIKE UPPER('%s') AND s.name LIKE UPPER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
3253     4,
3254     "m.name",
3255     &ghst_validate,
3256   },
3257
3258   {
3259     /* Q_GHBH - GET_HOST_BY_HWADDR */
3260     "get_host_by_hwaddr",
3261     "ghbh",
3262     2,
3263     RETRIEVE,
3264     "m",
3265     MACHINE_TABLE,
3266     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.use, m.status, TO_CHAR(m.statuschange, 'DD-mon-YYYY HH24:MI:SS'), s.name, m.address, m.owner_type, m.owner_id, m.acomment, m.ocomment, TO_CHAR(m.created, 'DD-mon-YYYY HH24:MI:SS'), m.creator, TO_CHAR(m.inuse, 'DD-mon-YYYY HH24:MI:SS'), TO_CHAR(m.modtime, 'DD-mon-YYYY HH24:MI:SS'), m.modby, m.modwith FROM machine m, subnet s",
3267     ghst_fields,
3268     21,
3269     "m.hwaddr LIKE LOWER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
3270     1,
3271     "m.name",
3272     NULL,
3273   },
3274
3275   {
3276     /* Q_GHHA - GET_HOST_HWADDR */
3277     "get_host_hwaddr",
3278     "ghha",
3279     2,
3280     RETRIEVE,
3281     "m",
3282     MACHINE_TABLE,
3283     "m.hwaddr FROM machine m",
3284     ghha_fields,
3285     1,
3286     "m.name LIKE UPPER('%s')",
3287     1,
3288     NULL,
3289     NULL,
3290   },
3291
3292   {
3293     /* Q_AHST - ADD_HOST */ /* uses prefetch_value() for mach_id */
3294     "add_host",
3295     "ahst",
3296     2,
3297     APPEND,
3298     "m",
3299     MACHINE_TABLE,
3300     "INTO machine (name, vendor, model, os, location, contact, use, status, statuschange, snet_id, address, owner_type, owner_id, acomment, ocomment, created, inuse, mach_id, creator) VALUES (UPPER('%s'), NVL(UPPER('%s'), CHR(0)), NVL(UPPER('%s'), CHR(0)), NVL(UPPER('%s'), CHR(0)), NVL(UPPER('%s'), CHR(0)), NVL('%s', CHR(0)), %s, %s, SYSDATE, %d, '%s', '%s', %d, %d, %d, SYSDATE, SYSDATE, %s, %s)",
3301     ahst_fields,
3302     14,
3303     0,
3304     0,
3305     NULL,
3306     &ahst_validate,
3307   },
3308
3309   {
3310     /* Q_UHST - UPDATE_HOST */
3311     "update_host",
3312     "uhst",
3313     2,
3314     UPDATE,
3315     "m",
3316     MACHINE_TABLE,
3317     "machine SET name = NVL(UPPER('%s'), CHR(0)), vendor = NVL(UPPER('%s'), CHR(0)), model = NVL(UPPER('%s'), CHR(0)), os = NVL(UPPER('%s'), CHR(0)), location = NVL(UPPER('%s'), CHR(0)), contact = NVL('%s', CHR(0)), use = %s, status = %s, snet_id = %d, address = '%s', owner_type = '%s', owner_id = %d, acomment = %d, ocomment = %d",
3318     uhst_fields,
3319     14,
3320     "mach_id = %d",
3321     1,
3322     NULL,
3323     &uhst_validate,
3324   },
3325
3326   {
3327     /* Q_UHHA - UPDATE_HOST_HWADDR */
3328     "update_host_hwaddr",
3329     "uhha",
3330     2,
3331     UPDATE,
3332     "m",
3333     MACHINE_TABLE,
3334     "machine SET hwaddr = NVL('%s', CHR(0))",
3335     uhha_fields,
3336     1,
3337     "mach_id = %d",
3338     1,
3339     NULL,
3340     &uhha_validate,
3341   },
3342
3343   {
3344     /* Q_DHST - DELETE_HOST */
3345     "delete_host",
3346     "dhst",
3347     2,
3348     DELETE,
3349     "m",
3350     MACHINE_TABLE,
3351     NULL,
3352     dhst_fields,
3353     0,
3354     "mach_id = %d",
3355     1,
3356     NULL,
3357     &dhst_validate,
3358   },
3359
3360   {
3361     /* Q_GMAC - GET_MACHINE */
3362     "get_machine",
3363     "gmac",
3364     2,
3365     RETRIEVE,
3366     "m",
3367     MACHINE_TABLE,
3368     "name, vendor, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM machine",
3369     gmac_fields,
3370     5,
3371     "name LIKE UPPER('%s') AND mach_id != 0",
3372     1,
3373     "name",
3374     &VDfix_modby,
3375   },
3376
3377   {
3378     /* Q_GHAL - GET_HOSTALIAS */
3379     "get_hostalias",
3380     "ghal",
3381     2,
3382     RETRIEVE,
3383     "a",
3384     HOSTALIAS_TABLE,
3385     "a.name, m.name FROM hostalias a, machine m",
3386     ghal_fields,
3387     2,
3388     "m.mach_id = a.mach_id and a.name LIKE UPPER('%s') AND m.name LIKE UPPER('%s')",
3389     2,
3390     "a.name",
3391     &ghal_validate,
3392   },
3393
3394   {
3395     /* Q_AHAL - ADD_HOSTALIAS */
3396     "add_hostalias",
3397     "ahal",
3398     2,
3399     APPEND,
3400     "a",
3401     HOSTALIAS_TABLE,
3402     "INTO hostalias (name, mach_id) VALUES (UPPER('%s'), %d)",
3403     ghal_fields,
3404     2,
3405     0,
3406     0,
3407     NULL,
3408     &ahal_validate,
3409   },
3410
3411   {
3412     /* Q_DHAL - DELETE_HOSTALIAS */
3413     "delete_hostalias",
3414     "dhal",
3415     2,
3416     DELETE,
3417     "a",
3418     HOSTALIAS_TABLE,
3419     NULL,
3420     ghal_fields,
3421     0,
3422     "name = UPPER('%s') AND mach_id = %d",
3423     2,
3424     NULL,
3425     &dhal_validate,
3426   },
3427
3428   {
3429     /* Q_GSNT - GET_SUBNET */
3430     "get_subnet",
3431     "gsnt",
3432     2,
3433     RETRIEVE,
3434     "s",
3435     SUBNET_TABLE,
3436     "name, description, saddr, mask, low, high, prefix, owner_type, owner_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM subnet",
3437     gsnt_fields,
3438     12,
3439     "name LIKE UPPER('%s')",
3440     1,
3441     "name",
3442     &gsnt_validate,
3443   },
3444
3445   {
3446     /* Q_ASNT - ADD_SUBNET */
3447     "add_subnet",
3448     "asnt",
3449     2,
3450     APPEND,
3451     "s",
3452     SUBNET_TABLE,
3453     "INTO subnet (name, description, saddr, mask, low, high, prefix, owner_type, owner_id, snet_id) VALUES (UPPER('%s'), NVL('%s', CHR(0)), %s, %s, %s, %s, NVL('%s', CHR(0)), '%s', %d, %s)",
3454     asnt_fields,
3455     9,
3456     0,
3457     0,
3458     NULL,
3459     &asnt_validate,
3460   },
3461
3462   {
3463     /* Q_USNT - UPDATE_SUBNET */
3464     "update_subnet",
3465     "usnt",
3466     2,
3467     UPDATE,
3468     "s",
3469     SUBNET_TABLE,
3470     "subnet SET name = UPPER('%s'), description = NVL('%s', CHR(0)), saddr = %s, mask = %s, low = %s, high = %s, prefix = NVL('%s', CHR(0)), owner_type = '%s', owner_id = %d",
3471     usnt_fields,
3472     9,
3473     "snet_id = %d",
3474     1,
3475     NULL,
3476     &usnt_validate,
3477   },
3478
3479   {
3480     /* Q_DSNT - DELETE_SUBNET */
3481     "delete_subnet",
3482     "dsnt",
3483     2,
3484     DELETE,
3485     "s",
3486     SUBNET_TABLE,
3487     NULL,
3488     dsnt_fields,
3489     0,
3490     "snet_id = %d",
3491     1,
3492     NULL,
3493     &dsnt_validate,
3494   },
3495
3496   {
3497     /* Q_GCLU - GET_CLUSTER */
3498     "get_cluster",
3499     "gclu",
3500     2,
3501     RETRIEVE,
3502     "c",
3503     CLUSTERS_TABLE,
3504     "name, description, location, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM clusters",
3505     gclu_fields,
3506     6,
3507     "name LIKE '%s' AND clu_id != 0",
3508     1,
3509     "name",
3510     &VDfix_modby,
3511   },
3512
3513   {
3514     /* Q_ACLU - ADD_CLUSTER */ /* uses prefetch_value() for clu_id */
3515     "add_cluster",
3516     "aclu",
3517     2,
3518     APPEND,
3519     "c",
3520     CLUSTERS_TABLE,
3521     "INTO clusters (name, description, location, clu_id) VALUES ('%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s)",
3522     aclu_fields,
3523     3,
3524     0,
3525     0,
3526     NULL,
3527     &aclu_validate,
3528   },
3529
3530   {
3531     /* Q_UCLU - UPDATE_CLUSTER */
3532     "update_cluster",
3533     "uclu",
3534     2,
3535     UPDATE,
3536     "c",
3537     CLUSTERS_TABLE,
3538     "clusters SET name = '%s', description = NVL('%s', CHR(0)), location = NVL('%s', CHR(0))",
3539     uclu_fields,
3540     3,
3541     "clu_id = %d",
3542     1,
3543     NULL,
3544     &uclu_validate,
3545   },
3546
3547   {
3548     /* Q_DCLU - DELETE_CLUSTER */
3549     "delete_cluster",
3550     "dclu",
3551     2,
3552     DELETE,
3553     "c",
3554     CLUSTERS_TABLE,
3555     NULL,
3556     dclu_fields,
3557     0,
3558     "clu_id = %d",
3559     1,
3560     NULL,
3561     &dclu_validate,
3562   },
3563
3564   {
3565     /* Q_GMCM - GET_MACHINE_TO_CLUSTER_MAP */
3566     "get_machine_to_cluster_map",
3567     "gmcm",
3568     2,
3569     RETRIEVE,
3570     "mcm",
3571     MCMAP_TABLE,
3572     "m.name, c.name FROM machine m, clusters c, mcmap mcm",
3573     gmcm_fields,
3574     2,
3575     "m.name LIKE UPPER('%s') AND c.name LIKE '%s' AND mcm.clu_id = c.clu_id AND mcm.mach_id = m.mach_id",
3576     2,
3577     "m.name",
3578     NULL,
3579   },
3580
3581   {
3582     /* Q_AMTC - ADD_MACHINE_TO_CLUSTER */
3583     "add_machine_to_cluster",
3584     "amtc",
3585     2,
3586     APPEND,
3587     "mcm",
3588     MCMAP_TABLE,
3589     "INTO mcmap (mach_id, clu_id) VALUES (%d, %d)",
3590     gmcm_fields,
3591     2,
3592     0,
3593     0,
3594     NULL,
3595     &amtc_validate,
3596   },
3597
3598   {
3599     /* Q_DMFC - DELETE_MACHINE_FROM_CLUSTER */
3600     "delete_machine_from_cluster",
3601     "dmfc",
3602     2,
3603     DELETE,
3604     "mcm",
3605     MCMAP_TABLE,
3606     0,
3607     gmcm_fields,
3608     0,
3609     "mach_id = %d AND clu_id = %d",
3610     2,
3611     NULL,
3612     &amtc_validate,
3613   },
3614
3615   {
3616     /* Q_GCLD - GET_CLUSTER_DATA */
3617     "get_cluster_data",
3618     "gcld",
3619     2,
3620     RETRIEVE,
3621     "svc",
3622     SVC_TABLE,
3623     "c.name, svc.serv_label, svc.serv_cluster FROM svc svc, clusters c",
3624     gcld_fields,
3625     3,
3626     "c.clu_id = svc.clu_id AND c.name LIKE '%s' AND svc.serv_label LIKE '%s'",
3627     2,
3628     "c.name, svc.serv_label",
3629     NULL,
3630   },
3631
3632   {
3633     /* Q_ACLD - ADD_CLUSTER_DATA */
3634     "add_cluster_data",
3635     "acld",
3636     2,
3637     APPEND,
3638     "svc",
3639     SVC_TABLE,
3640     "INTO svc (clu_id, serv_label, serv_cluster) VALUES (%d, '%s', '%s')",
3641     acld_fields,
3642     3,
3643     NULL,
3644     0,
3645     NULL,
3646     &acld_validate,
3647   },
3648
3649   {
3650     /* Q_DCLD - DELETE_CLUSTER_DATA */
3651     "delete_cluster_data",
3652     "dcld",
3653     2,
3654     DELETE,
3655     "svc",
3656     SVC_TABLE,
3657     NULL,
3658     acld_fields,
3659     0,
3660     "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
3661     3,
3662     NULL,
3663     &dcld_validate,
3664   },
3665
3666   {
3667     /* Q_GLIN - GET_LIST_INFO, v2 */
3668     "get_list_info",
3669     "glin",
3670     2,
3671     RETRIEVE,
3672     "l",
3673     LIST_TABLE,
3674     "name, active, publicflg, hidden, maillist, grouplist, gid, acl_type, acl_id, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM list",
3675     glin2_fields,
3676     13,
3677     "name LIKE '%s'",
3678     1,
3679     "name",
3680     &glin_validate,
3681   },
3682
3683   {
3684     /* Q_GLIN - GET_LIST_INFO, v3 */
3685     "get_list_info",
3686     "glin",
3687     3,
3688     RETRIEVE,
3689     "l",
3690     LIST_TABLE,
3691     "name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, acl_type, acl_id, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM list",
3692     glin_fields,
3693     14,
3694     "name LIKE '%s'",
3695     1,
3696     "name",
3697     &glin_validate,
3698   },
3699
3700   {
3701     /* Q_EXLN - EXPAND_LIST_NAMES */
3702     "expand_list_names",
3703     "exln",
3704     2,
3705     RETRIEVE,
3706     "l",
3707     LIST_TABLE,
3708     "name FROM list",
3709     glin_fields,
3710     1,
3711     "name LIKE '%s' AND list_id != 0",
3712     1,
3713     "name",
3714     NULL,
3715   },
3716
3717   {
3718     /* Q_ALIS - ADD_LIST, v2 */ /* uses prefetch_value() for list_id */
3719     "add_list",
3720     "alis",
3721     2,
3722     APPEND,
3723     "l",
3724     LIST_TABLE,
3725     "INTO list (name, active, publicflg, hidden, maillist, grouplist, gid, acl_type, acl_id, description, list_id) VALUES ('%s', %s, %s, %s, %s, %s, %s, '%s', %d, NVL('%s', CHR(0)), %s)",
3726     alis2_fields,
3727     10,
3728     0,
3729     0,
3730     NULL,
3731     &alis2_validate,
3732   },
3733
3734   {
3735     /* Q_ALIS - ADD_LIST, v3 */ /* uses prefetch_value() for list_id */
3736     "add_list",
3737     "alis",
3738     3,
3739     APPEND,
3740     "l",
3741     LIST_TABLE,
3742     "INTO list (name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, acl_type, acl_id, description, list_id) VALUES ('%s', %s, %s, %s, %s, %s, %s, %s, '%s', %d, NVL('%s', CHR(0)), %s)", 
3743     alis_fields,
3744     11,
3745     0,
3746     0,
3747     NULL,
3748     &alis_validate,
3749   },
3750
3751   {
3752     /* Q_ULIS - UPDATE_LIST, v2 */
3753     "update_list",
3754     "ulis",
3755     2,
3756     UPDATE,
3757     "l",
3758     LIST_TABLE,
3759     "list SET name = '%s', active = %s, publicflg = %s, hidden = %s, maillist = %s, grouplist = %s, gid = %s, acl_type = '%s', acl_id = %d, description = NVL('%s', CHR(0))",
3760     ulis2_fields,
3761     10,
3762     "list_id = %d",
3763     1,
3764     NULL,
3765     &ulis2_validate,
3766   },
3767
3768   {
3769     /* Q_ULIS - UPDATE_LIST, v3 */
3770     "update_list",
3771     "ulis",
3772     3,
3773     UPDATE,
3774     "l",
3775     LIST_TABLE,
3776     "list SET name = '%s', active = %s, publicflg = %s, hidden = %s, maillist = %s, grouplist = %s, gid = %s, nfsgroup = %s, acl_type = '%s', acl_id = %d, description = NVL('%s', CHR(0))",
3777     ulis_fields,
3778     11,
3779     "list_id = %d",
3780     1,
3781     NULL,
3782     &ulis_validate,
3783   },
3784
3785   {
3786     /* Q_DLIS - DELETE_LIST */
3787     "delete_list",
3788     "dlis",
3789     2,
3790     DELETE,
3791     "l",
3792     LIST_TABLE,
3793     NULL,
3794     dlis_fields,
3795     0,
3796     "list_id = %d",
3797     1,
3798     NULL,
3799     &dlis_validate,
3800   },
3801
3802   {
3803     /* Q_AMTL - ADD_MEMBER_TO_LIST */
3804     "add_member_to_list",
3805     "amtl",
3806     2,
3807     APPEND,
3808     0,
3809     IMEMBERS_TABLE,
3810     0,
3811     amtl_fields,
3812     3,
3813     NULL,
3814     0,
3815     NULL,
3816     &amtl_validate,
3817   },
3818
3819   {
3820     /* Q_ATML - ADD_TAGGED_MEMBER_TO_LIST */
3821     "add_tagged_member_to_list",
3822     "atml",
3823     2,
3824     APPEND,
3825     0,
3826     IMEMBERS_TABLE,
3827     0,
3828     atml_fields,
3829     4,
3830     NULL,
3831     0,
3832     NULL,
3833     &atml_validate,
3834   },
3835
3836   {
3837     /* Q_TMOL - TAG_MEMBER_OF_LIST */
3838     "tag_member_of_list",
3839     "tmol",
3840     2,
3841     UPDATE,
3842     "im",
3843     IMEMBERS_TABLE,
3844     "imembers SET tag = %d",
3845     atml_fields,
3846     1,
3847     "list_id = %d AND member_type = '%s' and member_id = %d",
3848     3,
3849     NULL,
3850     &tmol_validate,
3851   },
3852
3853   {
3854     /* Q_DMFL - DELETE_MEMBER_FROM_LIST */
3855     "delete_member_from_list",
3856     "dmfl",
3857     2,
3858     DELETE,
3859     0,
3860     IMEMBERS_TABLE,
3861     NULL,
3862     amtl_fields,
3863     0,
3864     0,
3865     3,
3866     NULL,
3867     &dmfl_validate,
3868   },
3869
3870   {
3871     /* Q_GAUS - GET_ACE_USE */
3872     "get_ace_use",
3873     "gaus",
3874     2,
3875     RETRIEVE,
3876     0,
3877     0,
3878     0,
3879     gaus_fields,
3880     2,
3881     0,
3882     2,
3883     NULL,
3884     &gaus_validate,
3885   },
3886
3887   {
3888     /* Q_GHBO - GET_HOST_BY_OWNER */
3889     "get_host_by_owner",
3890     "ghbo",
3891     2,
3892     RETRIEVE,
3893     0,
3894     0,
3895     0,
3896     ghbo_fields,
3897     1,
3898     0,
3899     2,
3900     NULL,
3901     &ghbo_validate,
3902   },
3903
3904   {
3905     /* Q_QGLI - QUALIFIED_GET_LISTS */
3906     "qualified_get_lists",
3907     "qgli",
3908     2,
3909     RETRIEVE,
3910     0,
3911     LIST_TABLE,
3912     0,
3913     qgli_fields,
3914     1,
3915     0,
3916     5,
3917     NULL,
3918     &qgli_validate,
3919   },
3920
3921   {
3922     /* Q_GMOL - GET_MEMBERS_OF_LIST */
3923     "get_members_of_list",
3924     "gmol",
3925     2,
3926     RETRIEVE,
3927     NULL,
3928     IMEMBERS_TABLE,
3929     NULL,
3930     gmol_fields,
3931     2,
3932     NULL,
3933     1,
3934     NULL,
3935     &gmol_validate,
3936   },
3937
3938   {
3939     /* Q_GEML - GET_END_MEMBERS_OF_LIST */
3940     "get_end_members_of_list",
3941     "geml",
3942     2,
3943     RETRIEVE,
3944     NULL,
3945     IMEMBERS_TABLE,
3946     NULL,
3947     gmol_fields,
3948     2,
3949     NULL,
3950     1,
3951     NULL,
3952     &gmol_validate,
3953   },
3954
3955   {
3956     /* Q_GTML - GET_TAGGED_MEMBERS_OF_LIST */
3957     "get_tagged_members_of_list",
3958     "gtml",
3959     2,
3960     RETRIEVE,
3961     NULL,
3962     IMEMBERS_TABLE,
3963     NULL,
3964     gtml_fields,
3965     3,
3966     NULL,
3967     1,
3968     NULL,
3969     &gmol_validate,
3970   },
3971
3972   {
3973     /* Q_GLOM - GET_LISTS_OF_MEMBER */
3974     "get_lists_of_member",
3975     "glom",
3976     2,
3977     RETRIEVE,
3978     0,
3979     IMEMBERS_TABLE,
3980     0,
3981     glom_fields,
3982     6,
3983     0,
3984     2,
3985     NULL,
3986     &glom_validate,
3987   },
3988
3989   {
3990     /* Q_CMOL - COUNT_MEMBERS_OF_LIST */
3991     "count_members_of_list",
3992     "cmol",
3993     2,
3994     RETRIEVE,
3995     0,
3996     IMEMBERS_TABLE,
3997     0,
3998     cmol_fields,
3999     1,
4000     0,
4001     1,
4002     NULL,
4003     &cmol_validate,
4004   },
4005
4006   {
4007     /* Q_GSIN - GET_SERVER_INFO */
4008     "get_server_info",
4009     "gsin",
4010     2,
4011     RETRIEVE,
4012     "s",
4013     SERVERS_TABLE,
4014     "name, update_int, target_file, script, dfgen, dfcheck, type, enable, inprogress, harderror, errmsg, acl_type, acl_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM servers",
4015     gsin_fields,
4016     16,
4017     "name LIKE UPPER('%s')",
4018     1,
4019     "name",
4020     &gsin_validate,
4021   },
4022
4023   {
4024     /* Q_QGSV - QUALIFIED_GET_SERVER */
4025     "qualified_get_server",
4026     "qgsv",
4027     2,
4028     RETRIEVE,
4029     0,
4030     SERVERS_TABLE,
4031     0,
4032     qgsv_fields,
4033     1,
4034     0,
4035     3,
4036     NULL,
4037     &qgsv_validate,
4038   },
4039
4040   {
4041     /* Q_ASIN - ADD_SERVER_INFO */
4042     "add_server_info",
4043     "asin",
4044     2,
4045     APPEND,
4046     "s",
4047     SERVERS_TABLE,
4048     "INTO servers (name, update_int, target_file, script, type, enable, acl_type, acl_id) VALUES (UPPER('%s'), %s, '%s', '%s', '%s', %s, '%s', %d)",
4049     asin_fields,
4050     8,
4051     NULL,
4052     0,
4053     NULL,
4054     &asin_validate,
4055   },
4056
4057   {
4058     /* Q_USIN - UPDATE_SERVER_INFO */
4059     "update_server_info",
4060     "usin",
4061     2,
4062     UPDATE,
4063     "s",
4064     SERVERS_TABLE,
4065     "servers SET update_int = %s, target_file = '%s', script = '%s', type = '%s', enable = %s, acl_type = '%s', acl_id = %d",
4066     asin_fields,
4067     7,
4068     "name = UPPER('%s')",
4069     1,
4070     NULL,
4071     &asin_validate,
4072   },
4073
4074   {
4075     /* Q_RSVE - RESET_SERVER_ERROR */
4076     "reset_server_error",
4077     "rsve",
4078     2,
4079     UPDATE,
4080     "s",
4081     SERVERS_TABLE,
4082     "servers SET harderror = 0, dfcheck = dfgen",
4083     dsin_fields,
4084     0,
4085     "name = UPPER('%s')",
4086     1,
4087     NULL,
4088     &rsve_validate,
4089   },
4090
4091   {
4092     /* Q_SSIF - SET_SERVER_INTERNAL_FLAGS */
4093     "set_server_internal_flags",
4094     "ssif",
4095     2,
4096     UPDATE,
4097     "s",
4098     SERVERS_TABLE,
4099     "servers SET dfgen = %s, dfcheck = %s, inprogress = %s, harderror = %s, errmsg = NVL('%s', CHR(0))",
4100     ssif_fields,
4101     5,
4102     "name = UPPER('%s')",
4103     1,
4104     NULL,
4105     &ssif_validate,
4106   },
4107
4108   {
4109     /* Q_DSIN - DELETE_SERVER_INFO */
4110     "delete_server_info",
4111     "dsin",
4112     2,
4113     DELETE,
4114     "s",
4115     SERVERS_TABLE,
4116     NULL,
4117     dsin_fields,
4118     0,
4119     "name = UPPER('%s')",
4120     1,
4121     NULL,
4122     &dsin_validate,
4123   },
4124
4125   {
4126     /* Q_GSHI - GET_SERVER_HOST_INFO */
4127     "get_server_host_info",
4128     "gshi",
4129     2,
4130     RETRIEVE,
4131     "sh",
4132     SERVERHOSTS_TABLE,
4133     "sh.service, m.name, sh.enable, sh.override, sh.success, sh.inprogress, sh.hosterror, sh.hosterrmsg, sh.ltt, sh.lts, sh.value1, sh.value2, sh.value3, TO_CHAR(sh.modtime, 'DD-mon-YYYY HH24:MI:SS'), sh.modby, sh.modwith FROM serverhosts sh, machine m",
4134     gshi_fields,
4135     16,
4136     "sh.service LIKE UPPER('%s') AND m.name LIKE UPPER('%s') AND m.mach_id = sh.mach_id",
4137     2,
4138     "sh.service, m.name",
4139     &gshi_validate,
4140   },
4141
4142   {
4143     /* Q_QGSH - QUALIFIED_GET_SERVER_HOST */
4144     "qualified_get_server_host",
4145     "qgsh",
4146     2,
4147     RETRIEVE,
4148     0,
4149     SERVERHOSTS_TABLE,
4150     0,
4151     qgsh_fields,
4152     2,
4153     0,
4154     6,
4155     NULL,
4156     &qgsh_validate,
4157   },
4158
4159   {
4160     /* Q_ASHI - ADD_SERVER_HOST_INFO */
4161     "add_server_host_info",
4162     "ashi",
4163     2,
4164     APPEND,
4165     "sh",
4166     SERVERHOSTS_TABLE,
4167     "INTO serverhosts (service, mach_id, enable, value1, value2, value3) VALUES (UPPER('%s'), %d, %s, %s, %s, NVL('%s', CHR(0)))",
4168     ashi_fields,
4169     6,
4170     NULL,
4171     0,
4172     NULL,
4173     &ashi_validate,
4174   },
4175
4176   {
4177     /* Q_USHI - UPDATE_SERVER_HOST_INFO */
4178     "update_server_host_info",
4179     "ushi",
4180     2,
4181     UPDATE,
4182     "sh",
4183     SERVERHOSTS_TABLE,
4184     "serverhosts SET enable = %s, value1 = %s, value2 = %s, value3 = NVL('%s', CHR(0))",
4185     ashi_fields,
4186     4,
4187     "service = UPPER('%s') AND mach_id = %d",
4188     2,
4189     NULL,
4190     &ashi_validate,
4191   },
4192
4193   {
4194     /* Q_RSHE - RESET_SERVER_HOST_ERROR */
4195     "reset_server_host_error",
4196     "rshe",
4197     2,
4198     UPDATE,
4199     "sh",
4200     SERVERHOSTS_TABLE,
4201     "serverhosts SET hosterror = 0",
4202     dshi_fields,
4203     0,
4204     "service = UPPER('%s') AND mach_id = %d",
4205     2,
4206     NULL,
4207     &rshe_validate,
4208   },
4209
4210   {
4211     /* Q_SSHO - SET_SERVER_HOST_OVERRIDE */
4212     "set_server_host_override",
4213     "ssho",
4214     2,
4215     UPDATE,
4216     "sh",
4217     SERVERHOSTS_TABLE,
4218     "serverhosts SET override = 1",
4219     dshi_fields,
4220     0,
4221     "service = UPPER('%s') AND mach_id = %d",
4222     2,
4223     NULL,
4224     &ssho_validate,
4225   },
4226
4227   {
4228     /* Q_SSHI - SET_SERVER_HOST_INTERNAL */
4229     "set_server_host_internal",
4230     "sshi",
4231     2,
4232     UPDATE,
4233     "s",
4234     SERVERHOSTS_TABLE,
4235     "serverhosts SET override = %s, success = %s, inprogress = %s, hosterror = %s, hosterrmsg = NVL('%s', CHR(0)), ltt = %s, lts = %s",
4236     sshi_fields,
4237     7,
4238     "service = UPPER('%s') AND mach_id = %d",
4239     2,
4240     NULL,
4241     &sshi_validate,
4242   },
4243
4244   {
4245     /* Q_DSHI - DELETE_SERVER_HOST_INFO */
4246     "delete_server_host_info",
4247     "dshi",
4248     2,
4249     DELETE,
4250     "sh",
4251     SERVERHOSTS_TABLE,
4252     NULL,
4253     dshi_fields,
4254     0,
4255     "service = UPPER('%s') AND mach_id = %d",
4256     2,
4257     NULL,
4258     &dshi_validate,
4259   },
4260
4261   {
4262     /* Q_GSLO - GET_SERVER_LOCATIONS */
4263     "get_server_locations",
4264     "gslo",
4265     2,
4266     RETRIEVE,
4267     "sh",
4268     SERVERHOSTS_TABLE,
4269     "sh.service, m.name FROM serverhosts sh, machine m",
4270     gslo_fields,
4271     2,
4272     "sh.service LIKE UPPER('%s') AND sh.mach_id = m.mach_id",
4273     1,
4274     "sh.service, m.name",
4275     NULL,
4276   },
4277
4278   {
4279     /* Q_GFSL - GET_FILESYS_BY_LABEL */
4280     "get_filesys_by_label",
4281     "gfsl",
4282     2,
4283     RETRIEVE,
4284     "fs",
4285     FILESYS_TABLE,
4286     "fs.label, fs.type, m.name, fs.name, fs.mount, fs.rwaccess, fs.comments, u.login, l.name, fs.createflg, fs.lockertype, TO_CHAR(fs.modtime, 'DD-mon-YYYY HH24:MI:SS'), fs.modby, fs.modwith FROM filesys fs, machine m, users u, list l",
4287     gfsl_fields,
4288     14,
4289     "fs.label LIKE '%s' AND fs.mach_id = m.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
4290     1,
4291     "fs.label",
4292     &gfsl_validate,
4293   },
4294
4295   {
4296     /* Q_GFSM - GET_FILESYS_BY_MACHINE */
4297     "get_filesys_by_machine",
4298     "gfsm",
4299     2,
4300     RETRIEVE,
4301     "fs",
4302     FILESYS_TABLE,
4303     "fs.label, fs.type, m.name, fs.name, fs.mount, fs.rwaccess, fs.comments, u.login, l.name, fs.createflg, fs.lockertype, TO_CHAR(fs.modtime, 'DD-mon-YYYY HH24:MI:SS'), fs.modby, fs.modwith FROM filesys fs, machine m, users u, list l",
4304     gfsm_fields,
4305     14,
4306     "fs.mach_id = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
4307     1,
4308     "fs.label",
4309     &gfsm_validate,
4310   },
4311
4312   {
4313     /* Q_GFSN - GET_FILESYS_BY_NFSPHYS */
4314     "get_filesys_by_nfsphys",
4315     "gfsn",
4316     2,
4317     RETRIEVE,
4318     "fs",
4319     FILESYS_TABLE,
4320     "fs.label, fs.type, m.name, fs.name, fs.mount, fs.rwaccess, fs.comments, u.login, l.name, fs.createflg, fs.lockertype, TO_CHAR(fs.modtime, 'DD-mon-YYYY HH24:MI:SS'), fs.modby, fs.modwith FROM filesys fs, machine m, users u, list l, nfsphys np",
4321     gfsn_fields,
4322     14,
4323     "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 LIKE '%s'",
4324     2,
4325     "fs.label",
4326     &gfsn_validate,
4327   },
4328
4329   {
4330     /* Q_GFSG - GET_FILESYS_BY_GROUP */
4331     "get_filesys_by_group",
4332     "gfsg",
4333     2,
4334     RETRIEVE,
4335     "fs",
4336     FILESYS_TABLE,
4337     "fs.label, fs.type, m.name, fs.name, fs.mount, fs.rwaccess, fs.comments, u.login, l.name, fs.createflg, fs.lockertype, TO_CHAR(fs.modtime, 'DD-mon-YYYY HH24:MI:SS'), fs.modby, fs.modwith FROM filesys fs, machine m, users u, list l",
4338     gfsg_fields,
4339     14,
4340     "fs.owners = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
4341     1,
4342     "fs.label",
4343     &gfsg_validate,
4344   },
4345
4346   {
4347     /* Q_GFSP - GET_FILESYS_BY_PATH */
4348     "get_filesys_by_path",
4349     "gfsp",
4350     2,
4351     RETRIEVE,
4352     "fs",
4353     FILESYS_TABLE,
4354     "fs.label, fs.type, m.name, fs.name, fs.mount, fs.rwaccess, fs.comments, u.login, l.name, fs.createflg, fs.lockertype, TO_CHAR(fs.modtime, 'DD-mon-YYYY HH24:MI:SS'), fs.modby, fs.modwith FROM filesys fs, machine m, users u, list l",
4355     gfsp_fields,
4356     14,
4357     "fs.name LIKE '%s' AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = list_id",
4358     1,
4359     "fs.label",
4360     &VDfix_modby,
4361   },
4362
4363   {
4364     /* Q_AFIL - ADD_FILESYS */ /* uses prefetch_value() for filsys_id */
4365     "add_filesys",
4366     "afil",
4367     2,
4368     APPEND,
4369     "fs",
4370     FILESYS_TABLE,
4371     "INTO filesys (label, type, mach_id, name, mount, rwaccess, comments, owner, owners, createflg, lockertype, filsys_id) VALUES ('%s', '%s', %d, NVL('%s', CHR(0)), NVL('%s', CHR(0)), '%s', NVL('%s', CHR(0)), %d, %d, %s, '%s', %s)",
4372     afil_fields,
4373     11,
4374     0,
4375     0,
4376     NULL,
4377     &afil_validate,
4378   },
4379
4380   {
4381     /* Q_UFIL - UPDATE_FILESYS */
4382     "update_filesys",
4383     "ufil",
4384     2,
4385     UPDATE,
4386     "fs",
4387     FILESYS_TABLE,
4388     "filesys SET label = '%s', type = '%s', mach_id = %d, name = NVL('%s', CHR(0)), mount = NVL('%s', CHR(0)), rwaccess = '%s', comments = NVL('%s', CHR(0)), owner = %d, owners = %d, createflg = %s, lockertype = '%s'",
4389     ufil_fields,
4390     11,
4391     "filsys_id = %d",
4392     1,
4393     NULL,
4394     &ufil_validate,
4395   },
4396
4397   {
4398     /* Q_DFIL - DELETE_FILESYS */
4399     "delete_filesys",
4400     "dfil",
4401     2,
4402     DELETE,
4403     "fs",
4404     FILESYS_TABLE,
4405     NULL,
4406     dfil_fields,
4407     0,
4408     "filsys_id = %d",
4409     1,
4410     NULL,
4411     &dfil_validate,
4412   },
4413
4414   {
4415     /* Q_GFGM - GET_FSGROUP_MEMBERS */
4416     "get_fsgroup_members",
4417     "gfgm",
4418     2,
4419     RETRIEVE,
4420     "fg",
4421     FSGROUP_TABLE,
4422     "fs.label, fg.key FROM fsgroup fg, filesys fs",
4423     gfgm_fields,
4424     2,
4425     "fg.group_id = %d AND fs.filsys_id = fg.filsys_id",
4426     1,
4427     "fs.label, fg.key",
4428     &gfgm_validate,
4429   },
4430
4431   {
4432     /* Q_AFTG - ADD_FILESYS_TO_FSGROUP */
4433     "add_filesys_to_fsgroup",
4434     "aftg",
4435     2,
4436     APPEND,
4437     "fg",
4438     FSGROUP_TABLE,
4439     "INTO fsgroup (group_id, filsys_id, key) VALUES (%d, %d, '%s')",
4440     gfgm_fields,
4441     3,
4442     NULL,
4443     0,
4444     NULL,
4445     &aftg_validate,
4446   },
4447
4448   {
4449     /* Q_RFFG - REMOVE_FILESYS_FROM_FSGROUP */
4450     "remove_filesys_from_fsgroup",
4451     "rffg",
4452     2,
4453     DELETE,
4454     "fg",
4455     FSGROUP_TABLE,
4456     NULL,
4457     gfgm_fields,
4458     0,
4459     "group_id = %d AND filsys_id = %d",
4460     2,
4461     NULL,
4462     &aftg_validate,
4463   },
4464
4465   {
4466     /* Q_GANF - GET_ALL_NFSPHYS */
4467     "get_all_nfsphys",
4468     "ganf",
4469     2,
4470     RETRIEVE,
4471     "np",
4472     NFSPHYS_TABLE,
4473     "m.name, np.dir, np.device, np.status, np.allocated, np.partsize, TO_CHAR(np.modtime, 'DD-mon-YYYY HH24:MI:SS'), np.modby, np.modwith FROM nfsphys np, machine m",
4474     ganf_fields,
4475     9,
4476     "m.mach_id = np.mach_id",
4477     0,
4478     "m.name, np.dir",
4479     &VDfix_modby,
4480   },
4481
4482   {
4483     /* Q_GNFP - GET_NFSPHYS */
4484     "get_nfsphys",
4485     "gnfp",
4486     2,
4487     RETRIEVE,
4488     "np",
4489     NFSPHYS_TABLE,
4490     "m.name, np.dir, np.device, np.status, np.allocated, np.partsize, TO_CHAR(np.modtime, 'DD-mon-YYYY HH24:MI:SS'), np.modby, np.modwith FROM nfsphys np, machine m",
4491     gnfp_fields,
4492     9,
4493     "np.mach_id = %d AND np.dir LIKE '%s' AND m.mach_id = np.mach_id",
4494     2,
4495     "m.name, np.dir",
4496     &gnfp_validate,
4497   },
4498
4499   {
4500     /* Q_ANFP - ADD_NFSPHYS */ /* uses prefetch_value() for nfsphys_id */
4501     "add_nfsphys",
4502     "anfp",
4503     2,
4504     APPEND,
4505     "np",
4506     NFSPHYS_TABLE,
4507     "INTO nfsphys (mach_id, dir, device, status, allocated, partsize, nfsphys_id) VALUES (%d, '%s', NVL('%s', CHR(0)), %s, %s, %s, %s)",
4508     ganf_fields,
4509     6,
4510     0,
4511     0,
4512     NULL,
4513     &anfp_validate,
4514   },
4515
4516   {
4517     /* Q_UNFP - UPDATE_NFSPHYS */
4518     "update_nfsphys",
4519     "unfp",
4520     2,
4521     UPDATE,
4522     "np",
4523     NFSPHYS_TABLE,
4524     "nfsphys SET device = NVL('%s', CHR(0)), status = %s, allocated = %s, partsize = %s",
4525     ganf_fields,
4526     4,
4527     "mach_id = %d AND dir = '%s'",
4528     2,
4529     NULL,
4530     &unfp_validate,
4531   },
4532
4533   {
4534     /* Q_AJNF - ADJUST_NFSPHYS_ALLOCATION */
4535     "adjust_nfsphys_allocation",
4536     "ajnf",
4537     2,
4538     UPDATE,
4539     "np",
4540     NFSPHYS_TABLE,
4541     "nfsphys SET allocated = allocated + %s",
4542     ajnf_fields,
4543     1,
4544     "mach_id = %d AND dir = '%s'",
4545     2,
4546     NULL,
4547     &ajnf_validate,
4548   },
4549
4550   {
4551     /* Q_DNFP - DELETE_NFSPHYS */
4552     "delete_nfsphys",
4553     "dnfp",
4554     2,
4555     DELETE,
4556     "np",
4557     NFSPHYS_TABLE,
4558     NULL,
4559     dnfp_fields,
4560     0,
4561     "mach_id = %d AND dir = '%s'",
4562     2,
4563     NULL,
4564     &dnfp_validate,
4565   },
4566
4567   {
4568     /* Q_GQOT - GET_QUOTA */
4569     "get_quota",
4570     "gqot",
4571     2,
4572     RETRIEVE,
4573     "q",
4574     QUOTA_TABLE,
4575     "fs.label, q.type, q.entity_id, q.quota, q.phys_id, m.name, TO_CHAR(q.modtime, 'DD-mon-YYYY HH24:MI:SS'), q.modby, q.modwith FROM quota q, filesys fs, machine m",
4576     gqot_fields,
4577     9,
4578     "fs.label LIKE '%s' AND q.type = '%s' AND q.entity_id = %d AND fs.filsys_id = q.filsys_id AND m.mach_id = fs.mach_id",
4579     3,
4580     NULL,
4581     &gqot_validate,
4582   },
4583
4584   {
4585     /* Q_GQBF - GET_QUOTA_BY_FILESYS */
4586     "get_quota_by_filesys",
4587     "gqbf",
4588     2,
4589     RETRIEVE,
4590     "q",
4591     QUOTA_TABLE,
4592     "fs.label, q.type, q.entity_id, q.quota, q.phys_id, m.name, TO_CHAR(q.modtime, 'DD-mon-YYYY HH24:MI:SS'), q.modby, q.modwith FROM quota q, filesys fs, machine m",
4593     gqbf_fields,
4594     9,
4595     "fs.label LIKE '%s' AND fs.filsys_id = q.filsys_id AND m.mach_id = fs.mach_id",
4596     1,
4597     "fs.label, q.type",
4598     &gqbf_validate,
4599   },
4600
4601   {
4602     /* Q_AQOT - ADD_QUOTA */ /* prefetch_filsys() gets last 1 value */
4603     "add_quota",
4604     "aqot",
4605     2,
4606     APPEND,
4607     0,
4608     QUOTA_TABLE,
4609     "INTO quota (filsys_id, type, entity_id, quota, phys_id) VALUES ('%s', %d, %d, %s, %s)",
4610     aqot_fields,
4611     4,
4612     NULL,
4613     0,
4614     NULL,
4615     &aqot_validate,
4616   },
4617
4618   {
4619     /* Q_UQOT - UPDATE_QUOTA */
4620     "update_quota",
4621     "uqot",
4622     2,
4623     UPDATE,
4624     0,
4625     QUOTA_TABLE,
4626     "quota SET quota = %s",
4627     aqot_fields,
4628     1,
4629     0,
4630     3,
4631     NULL,
4632     &uqot_validate,
4633   },
4634
4635   {
4636     /* Q_DQOT - DELETE_QUOTA */
4637     "delete_quota",
4638     "dqot",
4639     2,
4640     DELETE,
4641     0,
4642     QUOTA_TABLE,
4643     NULL,
4644     aqot_fields,
4645     0,
4646     0,
4647     3,
4648     NULL,
4649     &dqot_validate,
4650   },
4651
4652   {
4653     /* Q_GNFQ - GET_NFS_QUOTAS */
4654     "get_nfs_quota",
4655     "gnfq",
4656     2,
4657     RETRIEVE,
4658     "q",
4659     QUOTA_TABLE,
4660     "fs.label, u.login, q.quota, q.phys_id, m.name, TO_CHAR(q.modtime, 'DD-mon-YYYY HH24:MI:SS'), q.modby, q.modwith FROM quota q, filesys fs, users u, machine m",
4661     gnfq_fields,
4662     8,
4663     "fs.label LIKE '%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'",
4664     2,
4665     "fs.label, u.login",
4666     &gnfq_validate,
4667   },
4668
4669   {
4670     /* Q_GNQP - GET_NFS_QUOTAS_BY_PARTITION */
4671     "get_nfs_quotas_by_partition",
4672     "gnqp",
4673     2,
4674     RETRIEVE,
4675     "q",
4676     QUOTA_TABLE,
4677     "fs.label, u.login, q.quota, np.dir, m.name FROM quota q, filesys fs, users u, nfsphys np, machine m",
4678     gnqp_fields,
4679     5,
4680     "np.mach_id = %d AND np.dir LIKE '%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",
4681     2,
4682     "fs.label",
4683     NULL,
4684   },
4685
4686   {
4687     /* Q_ANFQ - ADD_NFS_QUOTA */ /* prefetch_filsys() gets last 1 value */
4688     "add_nfs_quota",
4689     "anfq",
4690     2,
4691     APPEND,
4692     0,
4693     QUOTA_TABLE,
4694     "INTO quota (type, filsys_id, entity_id, quota, phys_id ) VALUES ('USER', %d, %d, %s, %s)",
4695     anfq_fields,
4696     3,
4697     NULL,
4698     0,
4699     NULL,
4700     &anfq_validate,
4701   },
4702
4703   {
4704     /* Q_UNFQ - UPDATE_NFS_QUOTA */
4705     "update_nfs_quota",
4706     "unfq",
4707     2,
4708     UPDATE,
4709     0,
4710     QUOTA_TABLE,
4711     "quota SET quota = %s",
4712     anfq_fields,
4713     1,
4714     0,
4715     2,
4716     NULL,
4717     &unfq_validate,
4718   },
4719
4720   {
4721     /* Q_DNFQ - DELETE_NFS_QUOTA */
4722     "delete_nfs_quota",
4723     "dnfq",
4724     2,
4725     DELETE,
4726     0,
4727     QUOTA_TABLE,
4728     NULL,
4729     anfq_fields,
4730     0,
4731     0,
4732     2,
4733     NULL,
4734     &dnfq_validate,
4735   },
4736
4737   {
4738     /* Q_GZCL - GET_ZEPHYR_CLASS */
4739     "get_zephyr_class",
4740     "gzcl",
4741     2,
4742     RETRIEVE,
4743     "z",
4744     ZEPHYR_TABLE,
4745     "class, xmt_type, xmt_id, sub_type, sub_id, iws_type, iws_id, iui_type, iui_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM zephyr",
4746     gzcl_fields,
4747     12,
4748     "class LIKE '%s'",
4749     1,
4750     "class",
4751     &gzcl_validate,
4752   },
4753
4754   {
4755     /* Q_AZCL - ADD_ZEPHYR_CLASS */
4756     "add_zephyr_class",
4757     "azcl",
4758     2,
4759     APPEND,
4760     "z",
4761     ZEPHYR_TABLE,
4762     "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)",
4763     azcl_fields,
4764     9,
4765     0,
4766     0,
4767     NULL,
4768     &azcl_validate,
4769   },
4770
4771   {
4772     /* Q_UZCL - UPDATE_ZEPHYR_CLASS */
4773     "update_zephyr_class",
4774     "uzcl",
4775     2,
4776     UPDATE,
4777     "z",
4778     ZEPHYR_TABLE,
4779     "zephyr SET class = '%s', xmt_type = '%s', xmt_id = %d, sub_type = '%s', sub_id = %d, iws_type = '%s', iws_id = %d, iui_type = '%s', iui_id = %d",
4780     uzcl_fields,
4781     9,
4782     "class = '%s'",
4783     1,
4784     NULL,
4785     &uzcl_validate,
4786   },
4787
4788   {
4789     /* Q_DZCL - DELETE_ZEPHYR_CLASS */
4790     "delete_zephyr_class",
4791     "dzcl",
4792     2,
4793     DELETE,
4794     "z",
4795     ZEPHYR_TABLE,
4796     0,
4797     uzcl_fields,
4798     0,
4799     "class = '%s'",
4800     1,
4801     NULL,
4802     &dzcl_validate,
4803   },
4804
4805   {
4806     /* Q_GSHA - GET_SERVER_HOST_ACCESS */
4807     "get_server_host_access",
4808     "gsha",
4809     2,
4810     RETRIEVE,
4811     "ha",
4812     HOSTACCESS_TABLE,
4813     "m.name, ha.acl_type, ha.acl_id, TO_CHAR(ha.modtime, 'DD-mon-YYYY HH24:MI:SS'), ha.modby, ha.modwith FROM hostaccess ha, machine m",
4814     gsha_fields,
4815     6,
4816     "m.name LIKE UPPER('%s') AND ha.mach_id = m.mach_id",
4817     1,
4818     "m.name",
4819     &gsha_validate,
4820   },
4821
4822   {
4823     /* Q_ASHA - ADD_SERVER_HOST_ACCESS */
4824     "add_server_host_access",
4825     "asha",
4826     2,
4827     APPEND,
4828     "ha",
4829     HOSTACCESS_TABLE,
4830     "INTO hostaccess (mach_id, acl_type, acl_id) VALUES (%d, '%s', %d)",
4831     asha_fields,
4832     3,
4833     0,
4834     0,
4835     NULL,
4836     &asha_validate,
4837   },
4838
4839   {
4840     /* Q_USHA - UPDATE_SERVER_HOST_ACCESS */
4841     "update_server_host_access",
4842     "usha",
4843     2,
4844     UPDATE,
4845     "ha",
4846     HOSTACCESS_TABLE,
4847     "hostaccess SET acl_type = '%s', acl_id = %d",
4848     asha_fields,
4849     2,
4850     "mach_id = %d",
4851     1,
4852     NULL,
4853     &asha_validate,
4854   },
4855
4856   {
4857     /* Q_DSHA - DELETE_SERVER_HOST_ACCESS */
4858     "delete_server_host_access",
4859     "dsha",
4860     2,
4861     DELETE,
4862     "ha",
4863     HOSTACCESS_TABLE,
4864     0,
4865     asha_fields,
4866     0,
4867     "mach_id = %d",
4868     1,
4869     NULL,
4870     &VDmach,
4871   },
4872
4873   {
4874     /* Q_GACL - GET_ACL */
4875     "get_acl",
4876     "gacl",
4877     2,
4878     RETRIEVE,
4879     "ac",
4880     ACL_TABLE,
4881     "m.name, ac.target, ac.kind, l.name FROM acl ac, machine m, list l",
4882     gacl_fields,
4883     4,
4884     "m.mach_id = %d AND m.mach_id = ac.mach_id AND ac.target LIKE '%s' AND l.list_id = ac.list_id",
4885     2,
4886     "m.name, ac.target, ac.kind",
4887     &gacl_validate,
4888   },
4889
4890   {
4891     /* Q_AACL - ADD_ACL */
4892     "add_acl",
4893     "aacl",
4894     2,
4895     APPEND,
4896     "ac",
4897     ACL_TABLE,
4898     "INTO acl (mach_id, target, kind, list_id) VALUES (%d, '%s', '%s', %d)",
4899     aacl_fields,
4900     4,
4901     0,
4902     0,
4903     NULL,
4904     &aacl_validate,
4905   },
4906
4907   {
4908     /* Q_DACL - DELETE_ACL */
4909     "delete_acl",
4910     "dacl",
4911     2,
4912     DELETE,
4913     "ac",
4914     ACL_TABLE,
4915     0,
4916     dacl_fields,
4917     0,
4918     "mach_id = %d AND target = '%s'",
4919     2,
4920     NULL,
4921     &gacl_validate,
4922   },
4923
4924   {
4925     /* Q_GSVC - GET_SERVICE */
4926     "get_service",
4927     "gsvc",
4928     2,
4929     RETRIEVE,
4930     "ss",
4931     SERVICES_TABLE,
4932     "name, protocol, port, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM services",
4933     gsvc_fields,
4934     7,
4935     "name LIKE '%s'",
4936     1,
4937     "name",
4938     &VDfix_modby,
4939   },
4940
4941   {
4942     /* Q_ASVC - ADD_SERVICE */
4943     "add_service",
4944     "asvc",
4945     2,
4946     APPEND,
4947     "ss",
4948     SERVICES_TABLE,
4949     "INTO services (name, protocol, port, description) VALUES ('%s', '%s', %s, NVL('%s', CHR(0)))",
4950     asvc_fields,
4951     4,
4952     NULL,
4953     0,
4954     NULL,
4955     &asvc_validate,
4956   },
4957
4958   {
4959     /* Q_DSVC - DELETE_SERVICE */
4960     "delete_service",
4961     "dsvc",
4962     2,
4963     DELETE,
4964     "ss",
4965     SERVICES_TABLE,
4966     0,
4967     asvc_fields,
4968     0,
4969     "name = '%s'",
4970     1,
4971     NULL,
4972     &asvc_validate,
4973   },
4974
4975   {
4976     /* Q_GPRN - GET_PRINTER */
4977     "get_printer",
4978     "gprn",
4979     2,
4980     RETRIEVE,
4981     "pr",
4982     PRINTERS_TABLE,
4983     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
4984     gprn_fields,
4985     19,
4986     "pr.name LIKE '%s' AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
4987     1,
4988     "pr.name",
4989     &VDfix_modby,
4990   },
4991
4992   {
4993     /* Q_GPBD - GET_PRINTER_BY_DUPLEXNAME */
4994     "get_printer_by_duplexname",
4995     "gpbd",
4996     2,
4997     RETRIEVE,
4998     "pr",
4999     PRINTERS_TABLE,
5000     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
5001     gpbd_fields,
5002     19,
5003     "pr.duplexname LIKE '%s' AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
5004     1,
5005     "pr.name",
5006     &VDfix_modby,
5007   },
5008
5009   {
5010     /* Q_GPBE - GET_PRINTER_BY_ETHERNET */
5011     "get_printer_by_ethernet",
5012     "gpbe",
5013     2,
5014     RETRIEVE,
5015     "pr",
5016     PRINTERS_TABLE,
5017     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
5018     gpbd_fields,
5019     19,
5020     "m1.hwaddr LIKE LOWER('%s') AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
5021     1,
5022     "pr.name",
5023     &VDfix_modby,
5024   },
5025
5026   {
5027     /* Q_GPBH - GET_PRINTER_BY_HOSTNAME */
5028     "get_printer_by_hostname",
5029     "gpbh",
5030     2,
5031     RETRIEVE,
5032     "pr",
5033     PRINTERS_TABLE,
5034     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
5035     gpbh_fields,
5036     19,
5037     "m1.name LIKE UPPER('%s') AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
5038     1,
5039     "pr.name",
5040     &VDfix_modby,
5041   },
5042
5043   {
5044     /* Q_GPBR - GET_PRINTER_BY_RM */
5045     "get_printer_by_rm",
5046     "gpbr",
5047     2,
5048     RETRIEVE,
5049     "pr",
5050     PRINTERS_TABLE,
5051     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
5052     gpbr_fields,
5053     19,
5054     "m3.name LIKE UPPER('%s') AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
5055     1,
5056     "pr.name",
5057     &VDfix_modby,
5058   },
5059
5060   {
5061     /* Q_GPBL - GET_PRINTER_BY_LOCATION */
5062     "get_printer_by_location",
5063     "gpbl",
5064     2,
5065     RETRIEVE,
5066     "pr",
5067     PRINTERS_TABLE,
5068     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
5069     gpbl_fields,
5070     19,
5071     "UPPER(pr.location) LIKE UPPER('%s') AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
5072     1,
5073     "pr.name",
5074     &VDfix_modby,
5075   },
5076
5077   {
5078     /* Q_GPBC - GET_PRINTER_BY_CONTACT */
5079     "get_printer_by_contact",
5080     "gpbc",
5081     2,
5082     RETRIEVE,
5083     "pr",
5084     PRINTERS_TABLE,
5085     "pr.name, pr.type, pr.hwtype, pr.duplexname, m1.name, m2.name, m3.name, pr.rp, m4.name, pr.ka, pr.pc, l1.name, l2.name, pr.banner, pr.location, pr.contact, TO_CHAR(pr.modtime, 'DD-mon-YYYY HH24:MI:SS'), pr.modby, pr.modwith FROM printers pr, machine m1, machine m2, machine m3, machine m4, list l1, list l2",
5086     gpbc_fields,
5087     19,
5088     "UPPER(pr.contact) LIKE UPPER('%s') AND m1.mach_id = pr.mach_id AND m2.mach_id = pr.loghost AND m3.mach_id = pr.rm AND m4.mach_id = pr.rq AND l1.list_id = pr.ac AND l2.list_id = pr.lpc_acl",
5089     1,
5090     "pr.name",
5091     &VDfix_modby,
5092   },
5093
5094   {
5095     /* Q_APRN - ADD_PRINTER */
5096     "add_printer",
5097     "aprn",
5098     2,
5099     APPEND,
5100     "pr",
5101     PRINTERS_TABLE,
5102     "INTO printers (name, type, hwtype, duplexname, mach_id, loghost, rm, rp, rq, ka, pc, ac, lpc_acl, banner, location, contact) VALUES ('%s', '%s', '%s', NVL('%s', CHR(0)), %d, %d, %d, NVL('%s', CHR(0)), %d, %s, %s, %d, %d, %s, NVL('%s', CHR(0)), NVL('%s', CHR(0)))",
5103     aprn_fields,
5104     16,
5105     0,
5106     0,
5107     NULL,
5108     &aprn_validate,
5109   },
5110
5111   {
5112     /* Q_UPRN - UPDATE_PRINTER */
5113     "update_printer",
5114     "uprn",
5115     2,
5116     UPDATE,
5117     "pr",
5118     PRINTERS_TABLE,
5119     "printers SET name = '%s', type = '%s', hwtype = '%s', duplexname = NVL('%s', CHR(0)), mach_id = %d, loghost = %d, rm = %d, rp = NVL('%s', CHR(0)), rq = %d, ka = %d, pc = %d, ac = %d, lpc_acl = %d, banner = %d, location = NVL('%s', CHR(0)), contact = NVL('%s', CHR(0))",
5120     uprn_fields,
5121     16,
5122     0,
5123     0,
5124     NULL,
5125     &uprn_validate,
5126   },
5127
5128   {
5129     /* Q_DPRN - DELETE_PRINTER */
5130     "delete_printer",
5131     "dprn",
5132     2,
5133     DELETE,
5134     "pr",
5135     PRINTERS_TABLE,
5136     0,
5137     aprn_fields,
5138     0,
5139     "name = '%s'",
5140     1,
5141     NULL,
5142     &dprn_validate,
5143   },
5144
5145   {
5146     /* Q_GPSV - GET_PRINT_SERVER */
5147     "get_print_server",
5148     "gpsv",
5149     2,
5150     RETRIEVE,
5151     "ps",
5152     PRINTSERVERS_TABLE,
5153     "m.name, ps.kind, s.string, ps.owner_type, ps.owner_id, l.name, TO_CHAR(ps.modtime, 'DD-mon-YYYY HH24:MI:SS'), ps.modby, ps.modwith FROM printservers ps, machine m, strings s, list l",
5154     gpsv_fields,
5155     9,
5156     "ps.mach_id = %d AND m.mach_id = ps.mach_id AND s.string_id = ps.printer_types AND l.list_id = ps.lpc_acl",
5157     1,
5158     NULL,
5159     &gpsv_validate,
5160   },
5161
5162   {
5163     /* Q_APSV - ADD_PRINT_SERVER */
5164     "add_print_server",
5165     "apsv",
5166     2,
5167     APPEND,
5168     "ps",
5169     PRINTSERVERS_TABLE,
5170     "INTO printservers (mach_id, kind, printer_types, owner_type, owner_id, lpc_acl) VALUES (%d, '%s', %d, '%s', %d, %d)",
5171     apsv_fields,
5172     6,
5173     0,
5174     0,
5175     NULL,
5176     &apsv_validate,
5177   },
5178
5179   {
5180     /* Q_UPSV - UPDATE_PRINT_SERVER */
5181     "update_print_server",
5182     "upsv",
5183     2,
5184     UPDATE,
5185     "ps",
5186     PRINTSERVERS_TABLE,
5187     "printservers SET kind = '%s', printer_types = %d, owner_type = '%s', owner_id = %d, lpc_acl = %d",
5188     apsv_fields,
5189     5,
5190     "mach_id = %d",
5191     1,
5192     NULL,
5193     &apsv_validate,
5194   },
5195
5196   {
5197     /* Q_DPSV - DELETE_PRINT_SERVER */
5198     "delete_print_server",
5199     "dpsv",
5200     2,
5201     DELETE,
5202     "ps",
5203     PRINTSERVERS_TABLE,
5204     0,
5205     dpsv_fields,
5206     0,
5207     "mach_id = %d",
5208     1,
5209     NULL,
5210     &dpsv_validate,
5211   },
5212
5213   {
5214     /* Q_GALI - GET_ALIAS */
5215     "get_alias",
5216     "gali",
5217     2,
5218     RETRIEVE,
5219     "a",
5220     ALIAS_TABLE,
5221     "name, type, trans FROM alias",
5222     gali_fields,
5223     3,
5224     "name LIKE '%s' AND type LIKE '%s' AND trans LIKE '%s'",
5225     3,
5226     "type, name, trans",
5227     NULL,
5228   },
5229
5230   {
5231     /* Q_AALI - ADD_ALIAS */
5232     "add_alias",
5233     "aali",
5234     2,
5235     APPEND,
5236     "a",
5237     ALIAS_TABLE,
5238     "INTO alias (name, type, trans) VALUES ('%s', '%s', '%s')",
5239     aali_fields,
5240     3,
5241     NULL,
5242     0,
5243     NULL,
5244     &aali_validate,
5245   },
5246
5247   {
5248     /* Q_DALI - DELETE_ALIAS */
5249     "delete_alias",
5250     "dali",
5251     2,
5252     DELETE,
5253     "a",
5254     ALIAS_TABLE,
5255     NULL,
5256     aali_fields,
5257     0,
5258     "name = '%s' AND type = '%s' AND  trans = '%s'",
5259     3,
5260     NULL,
5261     &dali_validate,
5262   },
5263
5264   {
5265     /* Q_GVAL - GET_VALUE */
5266     "get_value",
5267     "gval",
5268     2,
5269     RETRIEVE,
5270     "val",
5271     NUMVALUES_TABLE,
5272     "value FROM numvalues",
5273     gval_fields,
5274     1,
5275     "name = '%s'",
5276     1,
5277     NULL,
5278     &gval_validate,
5279   },
5280
5281   {
5282     /* Q_AVAL - ADD_VALUE */
5283     "add_value",
5284     "aval",
5285     2,
5286     APPEND,
5287     "val",
5288     NUMVALUES_TABLE,
5289     "INTO numvalues (name, value) VALUES ('%s', %s)",
5290     aval_fields,
5291     2,
5292     NULL,
5293     0,
5294     NULL,
5295     &aval_validate,
5296   },
5297
5298   {
5299     /* Q_UVAL - UPDATE_VALUE */
5300     "update_value",
5301     "uval",
5302     2,
5303     UPDATE,
5304     "val",
5305     NUMVALUES_TABLE,
5306     "numvalues SET value = %s",
5307     aval_fields,
5308     1,
5309     "name = '%s'",
5310     1,
5311     NULL,
5312     &aval_validate,
5313   },
5314
5315   {
5316     /* Q_DVAL - DELETE_VALUE */
5317     "delete_value",
5318     "dval",
5319     2,
5320     DELETE,
5321     "val",
5322     NUMVALUES_TABLE,
5323     NULL,
5324     dval_fields,
5325     0,
5326     "name = '%s'",
5327     1,
5328     NULL,
5329     &aval_validate,
5330   },
5331
5332   {
5333     /* Q_GATS - GET_ALL_TABLE_STATS */
5334     "get_all_table_stats",
5335     "gats",
5336     2,
5337     RETRIEVE,
5338     "tbs",
5339     TBLSTATS_TABLE,
5340     "table_name, appends, updates, deletes, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS') FROM tblstats",
5341     gats_fields,
5342     5,
5343     NULL,
5344     0,
5345     "table_name",
5346     0,
5347   },
5348
5349   {
5350     /* Q__SDL - _SET_DEBUG_LEVEL */
5351     "_set_debug_level",
5352     "_sdl",
5353     2,
5354     UPDATE,
5355     NULL,
5356     0,
5357     NULL,
5358     _sdl_fields,
5359     1,
5360     NULL,
5361     0,
5362     NULL,
5363     &_sdl_validate,
5364   },
5365
5366 };
5367
5368 int QueryCount = (sizeof(Queries) / sizeof(struct query));
This page took 0.495168 seconds and 5 git commands to generate.