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