]> andersk Git - moira.git/blob - server/queries2.c
f3331872669080b2a714bf45f11997efb3f594e8
[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 VOcon0[] = {
46   {V_ID, 0, CONTAINERS_TABLE, "name", "cnt_id", MR_CONTAINER},
47 };
48
49 static struct valobj VOnum0[] = {
50   {V_NUM, 0},
51 };
52
53 /* Validations
54  * Commonly used validation records defined here so that they may
55  * be shared.
56  */
57
58 static struct validate VDmach = { VOmach0, 1 };
59
60 static struct validate VDfix_modby = {
61   0,
62   0,
63   0,
64   0,
65   0,
66   0,
67   0,
68   0,
69   followup_fix_modby,
70 };
71
72 /* Query data */
73
74 static char *galo2_fields[] = {
75   "login", "unix_uid", "shell", "last", "first", "middle",
76 };
77
78 static char *galo_fields[] = {
79   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
80 };
81
82 static char *gual2_fields[] = {
83   "login",
84   "login", "unix_uid", "shell", "last", "first", "middle", "status",
85   "clearid", "class", "comments", "signature", "secure",
86   "modtime", "modby", "modwith",
87 };
88
89 static char *gual3_fields[] = {
90   "login",
91   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
92   "status", "clearid", "class", "comments", "signature", "secure", "modtime",
93   "modby", "modwith", "created", "creator",
94 };
95
96 static char *gual_fields[] = {
97   "login",
98   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
99   "status", "clearid", "class", "comments", "signature", "secure",
100   "winhomedir", "winprofiledir", "modtime", "modby", "modwith", "created",
101   "creator",
102 };
103
104 static char *gubl2_fields[] = {
105   "login",
106   "login", "unix_uid", "shell", "last", "first", "middle", "status",
107   "clearid", "class", "modtime", "modby", "modwith",
108 };
109
110 static char *gubl_fields[] = {
111   "login",
112   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
113   "status", "clearid", "class", "modtime", "modby", "modwith", "created",
114   "creator", 
115 };
116
117 static struct validate gubl2_validate =
118 {
119   0,
120   0,
121   0,
122   0,
123   0,
124   0,
125   access_login,
126   0,
127   followup_fix_modby,
128 };
129
130 static struct validate gubl_validate =
131 {
132   0,
133   0,
134   0,
135   0,
136   0,
137   0,
138   access_login,
139   0,
140   followup_get_user,
141 };
142
143 static char *guau2_fields[] = {
144   "unix_uid",
145   "login", "unix_uid", "shell", "last", "first", "middle", "status",
146   "clearid", "class", "comments", "signature", "secure",
147   "modtime", "modby", "modwith",
148 };
149
150 static char *guau3_fields[] = {
151   "unix_uid",
152   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
153   "status", "clearid", "class", "comments", "signature", "secure",
154   "modtime", "modby", "modwith", "created", "creator",
155 };
156
157 static char *guau_fields[] = {
158   "unix_uid",
159   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
160   "status", "clearid", "class", "comments", "signature", "secure", 
161   "winhomedir", "winprofiledir", "modtime", "modby", "modwith", "created",
162   "creator",
163 };
164
165 static char *guan2_fields[] = {
166   "first", "last",
167   "login", "unix_uid", "shell", "last", "first", "middle", "status",
168   "clearid", "class", "comments", "signature", "secure",
169   "modtime", "modby", "modwith",
170 };
171
172 static char *guan3_fields[] = {
173   "first", "last",
174   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
175   "status", "clearid", "class", "comments", "signature", "secure",
176   "modtime", "modby", "modwith", "created", "creator",
177 };
178
179 static char *guan_fields[] = {
180   "first", "last",
181   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
182   "status", "clearid", "class", "comments", "signature", "secure",
183   "winhomedir", "winprofiledir", "modtime", "modby", "modwith", "created",
184   "creator",
185 };
186
187 static struct validate guan2_validate =
188 {
189   0,
190   0,
191   0,
192   0,
193   0,
194   0,
195   0,
196   0,
197   followup_fix_modby,
198 };
199
200 static struct validate guan_validate =
201 {
202   0,
203   0,
204   0,
205   0,
206   0,
207   0,
208   0,
209   0,
210   followup_get_user,
211 };
212
213 static char *guac2_fields[] = {
214   "class",
215   "login", "unix_uid", "shell", "last", "first", "middle", "status",
216   "clearid", "class", "comments", "signature", "secure",
217   "modtime", "modby", "modwith",
218 };
219
220 static char *guac3_fields[] = {
221   "class",
222   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
223   "status", "clearid", "class", "comments", "signature", "secure",
224   "modtime", "modby", "modwith", "created", "creator",
225 };
226
227 static char *guac_fields[] = {
228   "class",
229   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
230   "status", "clearid", "class", "comments", "signature", "secure",
231   "winhomedir", "winprofiledir", "modtime", "modby", "modwith", "created",
232   "creator",
233 };
234
235 static char *guam2_fields[] = {
236   "clearid",
237   "login", "unix_uid", "shell", "last", "first", "middle", "status",
238   "clearid", "class", "comments", "signature", "secure",
239   "modtime", "modby", "modwith",
240 };
241
242 static char *guam3_fields[] = {
243   "clearid",
244   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
245   "status", "clearid", "class", "comments", "signature", "secure",
246   "modtime", "modby", "modwith", "created", "creator", 
247 };
248
249 static char *guam_fields[] = {
250   "clearid",
251   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
252   "status", "clearid", "class", "comments", "signature", "secure",
253   "winhomedir", "winprofiledir", "modtime", "modby", "modwith", "created",
254   "creator", 
255 };
256
257 static char *gubu2_fields[] = {
258   "unix_uid",
259   "login", "unix_uid", "shell", "last", "first", "middle", "status",
260   "clearid", "class", "modtime", "modby", "modwith",
261 };
262
263 static char *gubu_fields[] = {
264   "unix_uid",
265   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
266   "status", "clearid", "class", "modtime", "modby", "modwith", "created",
267   "creator",
268 };
269
270 static struct validate gubu2_validate =
271 {
272   VOnum0,
273   1,
274   0,
275   0,
276   0,
277   0,
278   access_login,
279   0,
280   followup_fix_modby,
281 };
282
283 static struct validate gubu_validate =
284 {
285   VOnum0,
286   1,
287   0,
288   0,
289   0,
290   0,
291   access_login,
292   0,
293   followup_get_user,
294 };
295
296 static char *gubn2_fields[] = {
297   "first", "last",
298   "login", "unix_uid", "shell", "last", "first", "middle", "status",
299   "clearid", "class", "modtime", "modby", "modwith",
300 };
301
302 static char *gubn_fields[] = {
303   "first", "last",
304   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
305   "status", "clearid", "class", "modtime", "modby", "modwith", "created",
306   "creator",
307 };
308
309 static struct validate gubn2_validate =
310 {
311   0,
312   0,
313   0,
314   0,
315   0,
316   0,
317   0,
318   0,
319   followup_fix_modby,
320 };
321
322 static struct validate gubn_validate =
323 {
324   0,
325   0,
326   0,
327   0,
328   0,
329   0,
330   0,
331   0,
332   followup_get_user,
333 };
334
335 static char *gubc2_fields[] = {
336   "class",
337   "login", "unix_uid", "shell", "last", "first", "middle", "status",
338   "clearid", "class", "modtime", "modby", "modwith",
339 };
340
341 static char *gubc_fields[] = {
342   "class",
343   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle", 
344   "status", "clearid", "class", "modtime", "modby", "modwith",
345   "created", "creator",
346 };
347
348 static char *gubm2_fields[] = {
349   "clearid",
350   "login", "unix_uid", "shell", "last", "first", "middle", "status",
351   "clearid", "class", "modtime", "modby", "modwith",
352 };
353
354 static char *gubm_fields[] = {
355   "clearid",
356   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", 
357   "middle", "status", "clearid", "class", "modtime", "modby", "modwith",
358   "created", "creator",
359 };
360
361 static char *auac2_fields[] = {
362   "login", "unix_uid", "shell", "last", "first", "middle", "status",
363   "clearid", "class", "comments", "signature", "secure",
364 };
365
366 static char *auac3_fields[] = {
367   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", 
368   "middle", "status", "clearid", "class", "comments", "signature", "secure",
369 };
370
371 static char *auac_fields[] = {
372   "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
373   "status", "clearid", "class", "comments", "signature", "secure",
374   "winhomedir", "winprofiledir",
375 };
376
377 static struct valobj auac2_valobj[] = {
378   {V_CHAR, 0, USERS_TABLE, "login"},
379   {V_NUM, 1},
380   {V_CHAR, 2, USERS_TABLE, "shell"},
381   {V_CHAR, 3, USERS_TABLE, "last"},
382   {V_CHAR, 4, USERS_TABLE, "first"},
383   {V_CHAR, 5, USERS_TABLE, "middle"},
384   {V_NUM, 6},
385   {V_CHAR, 7, USERS_TABLE, "clearid"},
386   {V_TYPE, 8, 0, "class", 0, MR_BAD_CLASS},
387   {V_ID, 9, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
388   {V_NUM, 11},
389 };
390
391 static struct valobj auac3_valobj[] = {
392   {V_CHAR, 0, USERS_TABLE, "login"},
393   {V_NUM, 1},
394   {V_CHAR, 2, USERS_TABLE, "shell"},
395   {V_CHAR, 3, USERS_TABLE, "winconsoleshell"},
396   {V_CHAR, 4, USERS_TABLE, "last"},
397   {V_CHAR, 5, USERS_TABLE, "first"},
398   {V_CHAR, 6, USERS_TABLE, "middle"},
399   {V_NUM, 7},
400   {V_CHAR, 8, USERS_TABLE, "clearid"},
401   {V_TYPE, 9, 0, "class", 0, MR_BAD_CLASS},
402   {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
403   {V_NUM, 12},
404 };
405
406 static struct valobj auac_valobj[] = {
407   {V_CHAR, 0, USERS_TABLE, "login"},
408   {V_NUM, 1},
409   {V_CHAR, 2, USERS_TABLE, "shell"},
410   {V_CHAR, 3, USERS_TABLE, "winconsoleshell"},
411   {V_CHAR, 4, USERS_TABLE, "last"},
412   {V_CHAR, 5, USERS_TABLE, "first"},
413   {V_CHAR, 6, USERS_TABLE, "middle"},
414   {V_NUM, 7},
415   {V_CHAR, 8, USERS_TABLE, "clearid"},
416   {V_TYPE, 9, 0, "class", 0, MR_BAD_CLASS},
417   {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
418   {V_NUM, 12},
419   {V_LEN, 13, USERS_TABLE, "winhomedir"},
420   {V_LEN, 14, USERS_TABLE, "winprofiledir"},
421 };
422
423 static struct validate auac2_validate = {
424   auac2_valobj,
425   11,
426   "login",
427   "login = '%s'",
428   1,
429   "users_id",
430   0,
431   setup_ausr,
432   followup_ausr,
433 };
434
435 static struct validate auac3_validate = {
436   auac3_valobj,
437   12,
438   "login",
439   "login = '%s'",
440   1,
441   "users_id",
442   0,
443   setup_ausr,
444   followup_ausr,
445 };
446
447 static struct validate auac_validate = {
448   auac_valobj,
449   14,
450   "login",
451   "login = '%s'",
452   1,
453   "users_id",
454   0,
455   setup_ausr,
456   followup_ausr,
457 };
458
459 static struct validate ausr2_validate = {
460   auac2_valobj,
461   9,
462   "login",
463   "login = '%s'",
464   1,
465   "users_id",
466   0,
467   setup_ausr,
468   followup_ausr,
469 };
470
471 static struct validate ausr3_validate = {
472   auac3_valobj,
473   10,
474   "login",
475   "login = '%s'",
476   1,
477   "users_id",
478   0,
479   setup_ausr,
480   followup_ausr,
481 };
482
483 static struct validate ausr_validate = {
484   auac_valobj,
485   12,
486   "login",
487   "login = '%s'",
488   1,
489   "users_id",
490   0,
491   setup_ausr,
492   followup_ausr,
493 };
494
495 static char *rusr_fields[] = {
496   "unix_uid", "login", "pobox_type"
497 };
498
499 static struct valobj rusr_valobj[] = {
500   {V_NUM, 0},
501   {V_CHAR, 1, USERS_TABLE, "login"},
502 };
503
504 static struct validate rusr_validate = {
505   rusr_valobj,
506   2,
507   0,
508   0,
509   0,
510   0,
511   0,
512   register_user,
513   0,
514 };
515
516 static char *uuac2_fields[] = {
517   "login",
518   "newlogin", "unix_uid", "shell", "last", "first", "middle", "status",
519   "clearid", "class", "comments", "signature", "secure",
520 };
521
522 static char *uuac3_fields[] = {
523   "login",
524   "newlogin", "unix_uid", "shell", "winconsoleshell", "last", "first", 
525   "middle", "status", "clearid", "class", "comments", "signature", "secure",
526 };
527
528 static char *uuac_fields[] = {
529   "login",
530   "newlogin", "unix_uid", "shell", "winconsoleshell", "last", "first",
531   "middle", "status", "clearid", "class", "comments", "signature", "secure",
532   "winhomedir", "winprofiledir",
533 };
534
535 static struct valobj uuac2_valobj[] = {
536   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
537   {V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
538   {V_NUM, 2},
539   {V_CHAR, 3, USERS_TABLE, "shell"},
540   {V_CHAR, 4, USERS_TABLE, "first"},
541   {V_CHAR, 5, USERS_TABLE, "last"},
542   {V_CHAR, 6, USERS_TABLE, "middle"},
543   {V_NUM, 7},
544   {V_CHAR, 8, USERS_TABLE, "clearid"},
545   {V_TYPE, 9, 0, "class", 0, MR_BAD_CLASS},
546   {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
547   {V_NUM, 12},
548 };
549   
550 static struct valobj uuac3_valobj[] = {
551   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
552   {V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
553   {V_NUM, 2},
554   {V_CHAR, 3, USERS_TABLE, "shell"},
555   {V_CHAR, 4, USERS_TABLE, "winconsoleshell"},
556   {V_CHAR, 5, USERS_TABLE, "first"},
557   {V_CHAR, 6, USERS_TABLE, "last"},
558   {V_CHAR, 7, USERS_TABLE, "middle"},
559   {V_NUM, 8},
560   {V_CHAR, 9, USERS_TABLE, "clearid"},
561   {V_TYPE, 10, 0, "class", 0, MR_BAD_CLASS},
562   {V_ID, 11, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
563   {V_NUM, 13},
564 };
565
566 static struct valobj uuac_valobj[] = {
567   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
568   {V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
569   {V_NUM, 2},
570   {V_CHAR, 3, USERS_TABLE, "shell"},
571   {V_CHAR, 4, USERS_TABLE, "winconsoleshell"},
572   {V_CHAR, 5, USERS_TABLE, "first"},
573   {V_CHAR, 6, USERS_TABLE, "last"},
574   {V_CHAR, 7, USERS_TABLE, "middle"},
575   {V_NUM, 8},
576   {V_CHAR, 9, USERS_TABLE, "clearid"},
577   {V_TYPE, 10, 0, "class", 0, MR_BAD_CLASS},
578   {V_ID, 11, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
579   {V_NUM, 13},
580   {V_LEN, 14, USERS_TABLE, "winhomedir"},
581   {V_LEN, 15, USERS_TABLE, "winprofiledir"},
582 };
583
584 static struct validate uuac2_validate = {
585   uuac2_valobj,
586   12,
587   0,
588   0,
589   0,
590   "users_id",
591   0,
592   setup_ausr,
593   set_modtime_by_id,
594 };
595
596 static struct validate uuac3_validate = {
597   uuac3_valobj,
598   13,
599   0,
600   0,
601   0,
602   "users_id",
603   0,
604   setup_ausr,
605   set_modtime_by_id,
606 };
607
608 static struct validate uuac_validate = {
609   uuac_valobj,
610   15,
611   0,
612   0,
613   0,
614   "users_id",
615   access_update_user,
616   setup_ausr,
617   set_modtime_by_id,
618 };
619
620 static struct validate uusr2_validate = {
621   uuac2_valobj,
622   10,
623   0,
624   0,
625   0,
626   "users_id",
627   0,
628   setup_ausr,
629   set_modtime_by_id,
630 };
631
632 static struct validate uusr3_validate = {
633   uuac3_valobj,
634   11,
635   0,
636   0,
637   0,
638   "users_id",
639   0,
640   setup_ausr,
641   set_modtime_by_id,
642 };
643
644 static struct validate uusr_validate = {
645   uuac_valobj,
646   13,
647   0,
648   0,
649   0,
650   "users_id",
651   0,
652   setup_ausr,
653   set_modtime_by_id,
654 };
655
656 static char *uush_fields[] = {
657   "login",
658   "shell",
659 };
660
661 static struct valobj uush_valobj[] = {
662   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
663   {V_CHAR, 1, USERS_TABLE, "shell"},
664 };
665
666 static struct validate uush_validate = {
667   uush_valobj,
668   2,
669   0,
670   0,
671   0,
672   "users_id",
673   access_user,
674   0,
675   set_finger_modtime,
676 };
677
678 static char *uuws_fields[] = {
679   "login",
680   "winconsoleshell",
681 };
682
683 static struct valobj uuws_valobj[] = {
684   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
685   {V_CHAR, 1, USERS_TABLE, "winconsoleshell"},
686 };
687
688 static struct validate uuws_validate = {
689   uuws_valobj,
690   2,
691   0,
692   0,
693   0,
694   "users_id",
695   access_user,
696   0,
697   set_finger_modtime,
698 };
699
700 static char *uust_fields[] = {
701   "login",
702   "status",
703 };
704
705 static char *uuss_fields[] = {
706   "login",
707   "secure",
708 };
709
710 static struct valobj uust_valobj[] = {
711   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
712   {V_NUM, 1},
713   {V_NUM, 2},
714 };
715
716 static struct validate uust_validate = {
717   uust_valobj,
718   2,
719   0,
720   0,
721   0,
722   "users_id",
723   0,
724   0,
725   set_modtime_by_id,
726 };
727
728 static char *dusr_fields[] = {
729   "login",
730 };
731
732 static struct validate dusr_validate = {
733   VOuser0,
734   1,
735   0,
736   0,
737   0,
738   0,
739   0,
740   setup_dusr,
741   0,
742 };
743
744 static char *aurv_fields[] = {
745   "login", "reservation",
746 };
747
748 static struct validate aurv_validate = {
749   VOuser0,
750   1,
751   0,
752   0,
753   0,
754   "users_id",
755   0,
756   0,
757   do_user_reservation,
758 };
759
760 static char *gurv_fields[] = {
761   "login",
762   "reservation",
763 };
764
765 static struct validate gurv_validate = {
766   VOuser0,
767   1,
768   0,
769   0,
770   0,
771   0,
772   0,
773   0,
774   get_user_reservations,
775 };
776
777 static char *gubr_fields[] = {
778   "reservation",
779   "login",
780 };
781
782 static struct validate gubr_validate = {
783   0,
784   0,
785   0,
786   0,
787   0,
788   0,
789   0,
790   0,
791   get_user_by_reservation,
792 };
793
794 static char *gkum_fields[] = { "login", "kerberos",
795                                    "login", "kerberos" };
796
797 static char *akum_fields[] = { "login", "kerberos" };
798
799 static struct valobj akum_valobj[] =
800 {
801   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
802   {V_ID, 1, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
803 };
804
805 static struct validate akum_validate =
806 {
807   akum_valobj,
808   2,
809   "users_id",
810   "users_id = %d or string_id = %d",
811   2,
812   "users_id",
813   access_user,
814   0,
815   0,
816 };
817
818 static struct validate dkum_validate =
819 {
820   akum_valobj,
821   2,
822   "users_id",
823   "users_id = %d and string_id = %d",
824   2,
825   "users_id",
826   access_user,
827   0,
828   0,
829 };
830
831 static char *gfbl_fields[] = {
832   "login",
833   "login", "fullname", "nickname", "home_addr",
834   "home_phone", "office_addr", "office_phone", "department",
835   "affiliation", "modtime", "modby", "modwith",
836 };
837
838 static struct validate gfbl_validate = {
839   VOuser0,
840   1,
841   0,
842   0,
843   0,
844   0,
845   access_user,
846   0,
847   followup_fix_modby,
848 };
849
850 static char *ufbl_fields[] = {
851   "login",
852   "fullname", "nickname", "home_addr",
853   "home_phone", "office_addr", "office_phone", "department",
854   "affiliation",
855 };
856
857 static struct valobj ufbl_valobj[] = {
858   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
859   {V_LEN, 1, USERS_TABLE, "fullname"},
860   {V_LEN, 2, USERS_TABLE, "nickname"},
861   {V_LEN, 3, USERS_TABLE, "home_addr"},
862   {V_LEN, 4, USERS_TABLE, "home_phone"},
863   {V_LEN, 5, USERS_TABLE, "office_addr"},
864   {V_LEN, 6, USERS_TABLE, "office_phone"},
865   {V_LEN, 7, USERS_TABLE, "department"},
866   {V_LEN, 8, USERS_TABLE, "affiliation"},
867 };
868
869 static struct validate ufbl_validate = {
870   ufbl_valobj,
871   9,
872   0,
873   0,
874   0,
875   0,
876   access_user,
877   0,
878   set_finger_modtime,
879 };
880
881 static char *gpob_fields[] = {
882   "login",
883   "login", "type", "box", "address", "modtime", "modby", "modwith",
884 };
885
886 static struct validate gpob_validate = {
887   VOuser0,
888   1,
889   "potype",
890   "potype != 'NONE' and users_id = %d",
891   1,
892   0,
893   access_user,
894   0,
895   followup_gpob,
896 };
897
898 static char *gpox_fields[] = {
899   "login", "type", "box",
900 };
901
902 static struct validate gpox_validate = {
903   0,
904   0,
905   0,
906   0,
907   0,
908   0,
909   0,
910   0,
911   followup_gpob,
912 };
913
914 static char *spob_fields[] = {
915   "login", "type", "box",
916 };
917
918 static struct valobj spob_valobj[] = {
919   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
920   {V_TYPE, 1, 0, "pobox", 0, MR_TYPE},
921 };
922
923 static struct validate spob_validate =  /* SET_POBOX */
924 {
925   spob_valobj,
926   2,
927   0,
928   0,
929   0,
930   0,
931   access_spob,
932   0,
933   set_pobox,
934 };
935
936 static struct validate spop_validate =  /* SET_POBOX_POP */
937 {
938   VOuser0,
939   1,
940   0,
941   0,
942   0,
943   0,
944   access_user,
945   0,
946   set_pobox_pop,
947 };
948
949 static struct validate dpob_validate =  /* DELETE_POBOX */
950 {
951   VOuser0,
952   1,
953   0,
954   0,
955   0,
956   0,
957   access_user,
958   setup_dpob,
959   set_pobox_modtime,
960 };
961
962 static char *gmac_fields[] = {
963   "name",
964   "name", "type", "modtime", "modby", "modwith",
965 };
966
967 static char *ghst2_fields[] = {
968   "name", "address", "location", "network",
969   "name", "vendor", "model", "os", "location", "contact", "use",
970   "status", "status_change", "network", "address", "ace_type",
971   "ace_name", "admin_comment", "ops_comment", "created", "creator",
972   "inuse", "modtime", "modby", "modwith",
973 };
974
975 static char *ghbh2_fields[] = {
976   "hwaddr",
977   "name", "vendor", "model", "os", "location", "contact", "use",
978   "status", "status_change", "network", "address", "ace_type",
979   "ace_name", "admin_comment", "ops_comment", "created", "creator",
980   "inuse", "modtime", "modby", "modwith",
981 };
982
983 static char *ghst6_fields[] = {
984   "name", "address", "location", "network",
985   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
986   "use", "status", "status_change", "network", "address", "ace_type",
987   "ace_name", "admin_comment", "ops_comment", "created", "creator",
988   "inuse", "modtime", "modby", "modwith",
989 };
990
991 static char *ghbh6_fields[] = {
992   "hwaddr",
993   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
994   "use", "status", "status_change", "network", "address", "ace_type",
995   "ace_name", "admin_comment", "ops_comment", "created", "creator",
996   "inuse", "modtime", "modby", "modwith",
997 };
998
999 static char *ghst_fields[] = {
1000   "name", "address", "location", "network",
1001   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
1002   "account_number", "use", "status", "status_change", "network", "address", 
1003   "ace_type", "ace_name", "admin_comment", "ops_comment", "created", "creator",
1004   "inuse", "modtime", "modby", "modwith",
1005 };
1006
1007 static char *ghbh_fields[] = {
1008   "hwaddr",
1009   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
1010   "account_number", "use", "status", "status_change", "network", "address", 
1011   "ace_type", "ace_name", "admin_comment", "ops_comment", "created", "creator",
1012   "inuse", "modtime", "modby", "modwith",
1013 };
1014
1015 static char *ghba_fields[] = {
1016   "account_number",
1017   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
1018   "account_number", "use", "status", "status_change", "network", "address", 
1019   "ace_type", "ace_name", "admin_comment", "ops_comment", "created", "creator",
1020   "inuse", "modtime", "modby", "modwith",
1021 };
1022
1023 static struct validate ghst_validate = {
1024   0,
1025   0,
1026   0,
1027   0,
1028   0,
1029   0,
1030   access_host,
1031   0,
1032   followup_ghst,
1033 };
1034
1035 static char *ghha_fields[] = {
1036   "name",
1037   "hwaddr",
1038 };
1039
1040 static char *ahst2_fields[] = {
1041   "name", "vendor", "model", "os", "location", "contact", "use",
1042   "status", "subnet", "address", "ace_type", "ace_name",
1043   "admin_comment", "ops_comment",
1044 };
1045
1046 static struct valobj ahst2_valobj[] = {
1047   {V_CHAR, 0, MACHINE_TABLE, "name"},
1048   {V_CHAR, 1, MACHINE_TABLE, "vendor"},
1049   {V_CHAR, 2, MACHINE_TABLE, "model"},
1050   {V_CHAR, 3, MACHINE_TABLE, "os"},
1051   {V_CHAR, 4, MACHINE_TABLE, "location"},
1052   {V_CHAR, 5, MACHINE_TABLE, "contact"},
1053   {V_NUM, 6},
1054   {V_NUM, 7},
1055   {V_ID, 8, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
1056   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
1057   {V_TYPEDATA, 11, 0, 0, 0, MR_ACE},
1058   {V_ID, 12, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1059   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1060 };
1061
1062 static struct validate ahst2_validate = {
1063   ahst2_valobj,
1064   13,
1065   "name",
1066   "name = UPPER('%s')",
1067   1,
1068   "mach_id",
1069   access_host,
1070   setup_ahst,
1071   set_uppercase_modtime,
1072 };
1073
1074 static char *ahst6_fields[] = {
1075   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
1076   "use", "status", "subnet", "address", "ace_type", "ace_name",
1077   "admin_comment", "ops_comment",
1078 };
1079
1080 static struct valobj ahst6_valobj[] = {
1081   {V_CHAR, 0, MACHINE_TABLE, "name"},
1082   {V_CHAR, 1, MACHINE_TABLE, "vendor"},
1083   {V_CHAR, 2, MACHINE_TABLE, "model"},
1084   {V_CHAR, 3, MACHINE_TABLE, "os"},
1085   {V_CHAR, 4, MACHINE_TABLE, "location"},
1086   {V_CHAR, 5, MACHINE_TABLE, "contact"},
1087   {V_CHAR, 6, MACHINE_TABLE, "billing_contact"},
1088   {V_NUM, 7},
1089   {V_NUM, 8},
1090   {V_ID, 9, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
1091   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
1092   {V_TYPEDATA, 12, 0, 0, 0, MR_ACE},
1093   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1094   {V_ID, 14, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1095 };
1096
1097 static struct validate ahst6_validate = {
1098   ahst6_valobj,
1099   14,
1100   "name",
1101   "name = UPPER('%s')",
1102   1,
1103   "mach_id",
1104   access_host,
1105   setup_ahst,
1106   set_uppercase_modtime,
1107 };
1108
1109 static char *ahst_fields[] = {
1110   "name", "vendor", "model", "os", "location", "contact", "billing_contact",
1111   "account_number", "use", "status", "subnet", "address", "ace_type", 
1112   "ace_name", "admin_comment", "ops_comment",
1113 };
1114
1115 static struct valobj ahst_valobj[] = {
1116   {V_CHAR, 0, MACHINE_TABLE, "name"},
1117   {V_CHAR, 1, MACHINE_TABLE, "vendor"},
1118   {V_CHAR, 2, MACHINE_TABLE, "model"},
1119   {V_CHAR, 3, MACHINE_TABLE, "os"},
1120   {V_CHAR, 4, MACHINE_TABLE, "location"},
1121   {V_CHAR, 5, MACHINE_TABLE, "contact"},
1122   {V_CHAR, 6, MACHINE_TABLE, "billing_contact"},
1123   {V_CHAR, 7, MACHINE_TABLE, "account_number"},
1124   {V_NUM, 8},
1125   {V_NUM, 9},
1126   {V_ID, 10, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
1127   {V_TYPE, 12, 0, "ace_type", 0, MR_ACE},
1128   {V_TYPEDATA, 13, 0, 0, 0, MR_ACE},
1129   {V_ID, 14, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1130   {V_ID, 15, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1131 };
1132
1133 static struct validate ahst_validate = {
1134   ahst_valobj,
1135   15,
1136   "name",
1137   "name = UPPER('%s')",
1138   1,
1139   "mach_id",
1140   access_host,
1141   setup_ahst,
1142   set_uppercase_modtime,
1143 };
1144
1145 static char *uhst2_fields[] = {
1146   "name",
1147   "newname", "vendor", "model", "os", "location", "contact", "use",
1148   "status", "subnet", "address", "ace_type", "ace_name",
1149   "admin_comment", "ops_comment",
1150 };
1151
1152 static struct valobj uhst2_valobj[] = {
1153   {V_CHAR, 0, MACHINE_TABLE, "name"},
1154   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1155   {V_RENAME, 1, MACHINE_TABLE, "name", "mach_id", MR_NOT_UNIQUE},
1156   {V_CHAR, 2, MACHINE_TABLE, "vendor"},
1157   {V_CHAR, 3, MACHINE_TABLE, "model"},
1158   {V_CHAR, 4, MACHINE_TABLE, "os"},
1159   {V_CHAR, 5, MACHINE_TABLE, "location"},
1160   {V_CHAR, 6, MACHINE_TABLE, "contact"},
1161   {V_NUM, 7},
1162   {V_NUM, 8},
1163   {V_ID, 9, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
1164   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
1165   {V_TYPEDATA, 12, 0, 0, 0, MR_ACE},
1166   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1167   {V_ID, 14, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1168 };
1169
1170 static struct validate uhst2_validate = {
1171   uhst2_valobj,
1172   15,
1173   0,
1174   0,
1175   0,
1176   "mach_id",
1177   access_host,
1178   setup_ahst,
1179   set_modtime_by_id,
1180 };
1181
1182 static char *uhst6_fields[] = {
1183   "name",
1184   "newname", "vendor", "model", "os", "location", "contact", "billing_contact",
1185   "use", "status", "subnet", "address", "ace_type", "ace_name",
1186   "admin_comment", "ops_comment",
1187 };
1188
1189 static struct valobj uhst6_valobj[] = {
1190   {V_CHAR, 0, MACHINE_TABLE, "name"},
1191   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1192   {V_RENAME, 1, MACHINE_TABLE, "name", "mach_id", MR_NOT_UNIQUE},
1193   {V_CHAR, 2, MACHINE_TABLE, "vendor"},
1194   {V_CHAR, 3, MACHINE_TABLE, "model"},
1195   {V_CHAR, 4, MACHINE_TABLE, "os"},
1196   {V_CHAR, 5, MACHINE_TABLE, "location"},
1197   {V_CHAR, 6, MACHINE_TABLE, "contact"},
1198   {V_CHAR, 7, MACHINE_TABLE, "billing_contact"},
1199   {V_NUM, 8},
1200   {V_NUM, 9},
1201   {V_ID, 10, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
1202   {V_TYPE, 12, 0, "ace_type", 0, MR_ACE},
1203   {V_TYPEDATA, 13, 0, 0, 0, MR_ACE},
1204   {V_ID, 14, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1205   {V_ID, 15, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1206 };
1207
1208 static struct validate uhst6_validate = {
1209   uhst6_valobj,
1210   16,
1211   0,
1212   0,
1213   0,
1214   "mach_id",
1215   access_host,
1216   setup_ahst,
1217   set_modtime_by_id,
1218 };
1219
1220 static char *uhst_fields[] = {
1221   "name",
1222   "newname", "vendor", "model", "os", "location", "contact", "billing_contact",
1223   "account_number", "use", "status", "subnet", "address", "ace_type", 
1224   "ace_name", "admin_comment", "ops_comment",
1225 };
1226
1227 static struct valobj uhst_valobj[] = {
1228   {V_CHAR, 0, MACHINE_TABLE, "name"},
1229   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1230   {V_RENAME, 1, MACHINE_TABLE, "name", "mach_id", MR_NOT_UNIQUE},
1231   {V_CHAR, 2, MACHINE_TABLE, "vendor"},
1232   {V_CHAR, 3, MACHINE_TABLE, "model"},
1233   {V_CHAR, 4, MACHINE_TABLE, "os"},
1234   {V_CHAR, 5, MACHINE_TABLE, "location"},
1235   {V_CHAR, 6, MACHINE_TABLE, "contact"},
1236   {V_CHAR, 7, MACHINE_TABLE, "billing_contact"},
1237   {V_CHAR, 8, MACHINE_TABLE, "account_number"},
1238   {V_NUM, 9},
1239   {V_NUM, 10},
1240   {V_ID, 11, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
1241   {V_TYPE, 13, 0, "ace_type", 0, MR_ACE},
1242   {V_TYPEDATA, 14, 0, 0, 0, MR_ACE},
1243   {V_ID, 15, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1244   {V_ID, 16, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1245 };
1246
1247 static struct validate uhst_validate = {
1248   uhst_valobj,
1249   17,
1250   0,
1251   0,
1252   0,
1253   "mach_id",
1254   access_host,
1255   setup_ahst,
1256   set_modtime_by_id,
1257 };
1258
1259 static char *uhha_fields[] = {
1260   "name",
1261   "hwaddr"
1262 };
1263
1264 static struct valobj uhha_valobj[] = {
1265   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1266   {V_CHAR, 1, MACHINE_TABLE, "hwaddr"},
1267 };
1268
1269 static struct validate uhha_validate = {
1270   uhha_valobj,
1271   2,
1272   0,
1273   0,
1274   0,
1275   "mach_id",
1276   0,
1277   setup_uhha,
1278   set_modtime_by_id,
1279 };
1280
1281 static char *dhst_fields[] = {
1282   "name",
1283 };
1284
1285 static struct validate dhst_validate = {
1286   VOmach0,
1287   1,
1288   0,
1289   0,
1290   0,
1291   0,
1292   0,
1293   setup_dmac,
1294   0,
1295 };
1296
1297 static char *ghal_fields[] = {
1298   "alias", "canonical_hostname",
1299   "alias", "canonical_hostname"
1300 };
1301
1302 static struct validate ghal_validate = {
1303   0,
1304   0,
1305   0,
1306   0,
1307   0,
1308   0,
1309   access_ahal,
1310   0,
1311   0,
1312 };
1313
1314 static struct valobj ahal_valobj[] = {
1315   {V_CHAR, 0, HOSTALIAS_TABLE, "name"},
1316   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1317 };
1318
1319 static struct validate ahal_validate = {
1320   ahal_valobj,
1321   2,
1322   "name",
1323   "name = UPPER('%s')",
1324   1,
1325   "mach_id",
1326   access_ahal,
1327   setup_ahal,
1328   0,
1329 };
1330
1331 static struct valobj dhal_valobj[] = {
1332   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1333 };
1334
1335 static struct validate dhal_validate = {
1336   dhal_valobj,
1337   1,
1338   "name",
1339   "name = UPPER('%s') AND mach_id = %d",
1340   2,
1341   "mach_id",
1342   access_ahal,
1343   0,
1344   0,
1345 };
1346
1347 static char *gsnt2_fields[] = {
1348   "name",
1349   "name", "description", "address", "mask", "low", "high", "prefix",
1350   "ace_type", "ace_name", "modtime", "modby", "modwith"
1351 };
1352
1353 static char *gsnt_fields[] = {
1354   "name",
1355   "name", "description", "status", "contact", "account_number", "address", 
1356   "mask", "low", "high", "prefix", "ace_type", "ace_name", "modtime", 
1357   "modby", "modwith"
1358 };
1359
1360 static struct validate gsnt_validate = {
1361   0,
1362   0,
1363   0,
1364   0,
1365   0,
1366   0,
1367   access_snt,
1368   0,
1369   followup_gsnt,
1370 };
1371
1372 static char *asnt2_fields[] = {
1373   "name", "description", "address", "mask", "low", "high", "prefix",
1374   "ace_type", "ace_name",
1375 };
1376
1377 static struct valobj asnt2_valobj[] = {
1378   {V_CHAR, 0, SUBNET_TABLE, "name"},
1379   {V_LEN, 1, SUBNET_TABLE, "description"},
1380   {V_NUM, 2},
1381   {V_NUM, 3},
1382   {V_NUM, 4},
1383   {V_NUM, 5},
1384   {V_LEN, 6, SUBNET_TABLE, "prefix"},
1385   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
1386   {V_TYPEDATA, 8, 0, 0, 0, MR_ACE},
1387 };
1388
1389 static struct validate asnt2_validate =
1390 {
1391   asnt2_valobj,
1392   9,
1393   "name",
1394   "name = UPPER('%s')",
1395   1,
1396   "snet_id",
1397   0,
1398   prefetch_value,
1399   set_uppercase_modtime,
1400 };
1401
1402 static char *asnt_fields[] = {
1403   "name", "description", "status", "contact", "account_number", "address", 
1404   "mask", "low", "high", "prefix", "ace_type", "ace_name",
1405 };
1406
1407 static struct valobj asnt_valobj[] = {
1408   {V_CHAR, 0, SUBNET_TABLE, "name"},
1409   {V_LEN, 1, SUBNET_TABLE, "description"},
1410   {V_NUM, 2},
1411   {V_CHAR, 3, SUBNET_TABLE, "contact"},
1412   {V_CHAR, 4, SUBNET_TABLE, "account_number"},
1413   {V_NUM, 5},
1414   {V_NUM, 6},
1415   {V_NUM, 7},
1416   {V_NUM, 8},
1417   {V_LEN, 9, SUBNET_TABLE, "prefix"},
1418   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
1419   {V_TYPEDATA, 11, 0, 0, 0, MR_ACE},
1420 };
1421
1422 static struct validate asnt_validate =
1423 {
1424   asnt_valobj,
1425   12,
1426   "name",
1427   "name = UPPER('%s')",
1428   1,
1429   "snet_id",
1430   0,
1431   setup_asnt,
1432   set_uppercase_modtime,
1433 };
1434
1435 static char *usnt2_fields[] = {
1436   "name",
1437   "newname", "description", "address", "mask", "low", "high", "prefix",
1438   "ace_type", "ace_name",
1439 };
1440
1441 static struct valobj usnt2_valobj[] = {
1442   {V_ID, 0, SUBNET_TABLE, "name", "snet_id", MR_NO_MATCH},
1443   {V_RENAME, 1, SUBNET_TABLE, "name", "snet_id", MR_NOT_UNIQUE},
1444   {V_LEN, 2, SUBNET_TABLE, "description"},
1445   {V_NUM, 3},
1446   {V_NUM, 4},
1447   {V_NUM, 5},
1448   {V_NUM, 6},
1449   {V_LEN, 7, SUBNET_TABLE, "prefix"},
1450   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1451   {V_TYPEDATA, 9, 0, 0, 0, MR_ACE},
1452 };
1453
1454 static struct validate usnt2_validate =
1455 {
1456   usnt2_valobj,
1457   10,
1458   "name",
1459   "snet_id = %d",
1460   1,
1461   "snet_id",
1462   0,
1463   0,
1464   set_modtime_by_id,
1465 };
1466
1467 static char *usnt_fields[] = {
1468   "name",
1469   "newname", "description", "status", "contact", "account_number", "address", 
1470   "mask", "low", "high", "prefix", "ace_type", "ace_name",
1471 };
1472
1473 static struct valobj usnt_valobj[] = {
1474   {V_ID, 0, SUBNET_TABLE, "name", "snet_id", MR_NO_MATCH},
1475   {V_RENAME, 1, SUBNET_TABLE, "name", "snet_id", MR_NOT_UNIQUE},
1476   {V_LEN, 2, SUBNET_TABLE, "description"},
1477   {V_NUM, 3},
1478   {V_CHAR, 4, SUBNET_TABLE, "contact"},
1479   {V_CHAR, 5, SUBNET_TABLE, "account_number"},
1480   {V_NUM, 6},
1481   {V_NUM, 7},
1482   {V_NUM, 8},
1483   {V_NUM, 9},
1484   {V_LEN, 10, SUBNET_TABLE, "prefix"},
1485   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
1486   {V_TYPEDATA, 12, 0, 0, 0, MR_ACE},
1487 };
1488
1489 static struct validate usnt_validate =
1490 {
1491   usnt_valobj,
1492   13,
1493   "name",
1494   "snet_id = %d",
1495   1,
1496   "snet_id",
1497   0,
1498   setup_asnt,
1499   set_modtime_by_id,
1500 };
1501
1502 static char *dsnt_fields[] = {
1503   "name",
1504 };
1505
1506 static struct validate dsnt_validate = {
1507   VOsnet0,
1508   1,
1509   0,
1510   0,
1511   0,
1512   0,
1513   0,
1514   setup_dsnt,
1515   0,
1516 };
1517
1518 static char *gclu_fields[] = {
1519   "name",
1520   "name", "description", "location", "modtime", "modby", "modwith",
1521 };
1522
1523 static char *aclu_fields[] = {
1524   "name", "description", "location",
1525 };
1526
1527 static struct valobj aclu_valobj[] = {
1528   {V_CHAR, 0, CLUSTERS_TABLE, "name"},
1529   {V_LEN, 1, CLUSTERS_TABLE, "description"},
1530   {V_LEN, 2, CLUSTERS_TABLE, "location"},
1531 };
1532
1533 static struct validate aclu_validate =
1534 {
1535   aclu_valobj,
1536   3,
1537   "name",
1538   "name = '%s'",
1539   1,
1540   "clu_id",
1541   0,
1542   prefetch_value,
1543   set_modtime,
1544 };
1545
1546 static char *uclu_fields[] = {
1547   "name",
1548   "newname", "description", "location",
1549 };
1550
1551 static struct valobj uclu_valobj[] = {
1552   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
1553   {V_RENAME, 1, CLUSTERS_TABLE, "name", "clu_id", MR_NOT_UNIQUE},
1554   {V_LEN, 2, CLUSTERS_TABLE, "description"},
1555   {V_LEN, 3, CLUSTERS_TABLE, "location"},
1556 };
1557
1558 static struct validate uclu_validate = {
1559   uclu_valobj,
1560   4,
1561   0,
1562   0,
1563   0,
1564   "clu_id",
1565   0,
1566   0,
1567   set_modtime_by_id,
1568 };
1569
1570 static char *dclu_fields[] = {
1571   "name",
1572 };
1573
1574 static struct validate dclu_validate = {
1575   VOclu0,
1576   1,
1577   0,
1578   0,
1579   0,
1580   0,
1581   0,
1582   setup_dclu,
1583   0,
1584 };
1585
1586 static char *gmcm_fields[] = {
1587   "machine", "cluster",
1588   "machine", "cluster",
1589 };
1590
1591 static struct valobj amtc_valobj[] =    /* ADD_MACHINE_TO_CLUSTER */
1592 {                                       /* DELETE_MACHINE_FROM_CLUSTER */
1593   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1594   {V_ID, 1, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
1595 };
1596
1597 static struct validate amtc_validate = /* for amtc and dmfc */
1598 {
1599   amtc_valobj,
1600   2,
1601   "mach_id",
1602   "mach_id = %d and clu_id = %d",
1603   2,
1604   0,
1605   0,
1606   0,
1607   set_mach_modtime_by_id,
1608 };
1609
1610 static char *gcld_fields[] = {
1611   "cluster", "serv_label",
1612   "cluster", "serv_label", "serv_cluster",
1613 };
1614
1615 static char *acld_fields[] = {
1616   "cluster", "serv_label", "serv_cluster",
1617 };
1618
1619 static struct valobj acld_valobj[] =
1620 {
1621   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
1622   {V_CHAR, 1, SVC_TABLE, "serv_label"},
1623   {V_CHAR, 2, SVC_TABLE, "serv_cluster"}
1624 };
1625
1626 static struct validate acld_validate =
1627 {
1628   acld_valobj,
1629   3,
1630   "clu_id",
1631   "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
1632   3,
1633   0,
1634   0,
1635   0,
1636   set_cluster_modtime_by_id,
1637 };
1638
1639 static struct validate dcld_validate =
1640 {
1641   VOclu0,
1642   1,
1643   "clu_id",
1644   "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
1645   3,
1646   0,
1647   0,
1648   0,
1649   set_cluster_modtime_by_id,
1650 };
1651
1652 static char *glin2_fields[] = {
1653   "name",
1654   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1655   "ace_type", "ace_name", "description", "modtime", "modby", "modwith",
1656 };
1657
1658 static char *glin3_fields[] = {
1659   "name",
1660   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1661   "nfsgroup", "ace_type", "ace_name", "description", "modtime", "modby", 
1662   "modwith",
1663 };
1664
1665 static char *glin4_fields[] = {
1666   "name",
1667   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1668   "nfsgroup", "ace_type", "ace_name", "memace_type", "memace_name", 
1669   "description", "modtime", "modby", "modwith",
1670 };
1671
1672 static char *glin_fields[] = {
1673   "name",
1674   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1675   "nfsgroup", "mailman", "mailman_server", "ace_type", "ace_name", 
1676   "memace_type", "memace_name", "description", "modtime", "modby", "modwith",
1677 };
1678
1679 static struct validate glin_validate = {
1680   0,
1681   0,
1682   0,
1683   0,
1684   0,
1685   0,
1686   access_vis_list_by_name,
1687   0,
1688   followup_glin,
1689 };
1690
1691 static char *alis2_fields[] = {
1692   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1693   "ace_type", "ace_name", "description",
1694 };
1695
1696 static struct valobj alis2_valobj[] = {
1697   {V_CHAR, 0, LIST_TABLE, "name"},
1698   {V_NUM, 1},
1699   {V_NUM, 2},
1700   {V_NUM, 3},
1701   {V_NUM, 4},
1702   {V_NUM, 5},
1703   {V_NUM, 6},
1704   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
1705   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
1706   {V_LEN, 9, LIST_TABLE, "description"},
1707 };
1708
1709 static struct validate alis2_validate = {
1710   alis2_valobj,
1711   10,
1712   "name",
1713   "name = '%s'",
1714   1,
1715   "list_id",
1716   0,
1717   setup_alis,
1718   set_modtime,
1719 };
1720
1721 static char *alis3_fields[] = {
1722   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1723   "nfsgroup", "ace_type", "ace_name", "description",
1724 };
1725
1726 static struct valobj alis3_valobj[] = {
1727   {V_CHAR, 0, LIST_TABLE, "name"},
1728   {V_NUM, 1},
1729   {V_NUM, 2},
1730   {V_NUM, 3},
1731   {V_NUM, 4},
1732   {V_NUM, 5},
1733   {V_NUM, 6},
1734   {V_NUM, 7},
1735   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1736   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1737   {V_LEN, 10, LIST_TABLE, "description"},
1738 };
1739
1740 static struct validate alis3_validate = {
1741   alis3_valobj,
1742   11,
1743   "name",
1744   "name = '%s'",
1745   1,
1746   "list_id",
1747   0,
1748   setup_alis,
1749   set_modtime,
1750 };
1751
1752 static char *alis4_fields[] = {
1753   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1754   "nfsgroup", "ace_type", "ace_name", "memace_type", "memace_name", 
1755   "description",
1756 };
1757
1758 static struct valobj alis4_valobj[] = {
1759   {V_CHAR, 0, LIST_TABLE, "name"},
1760   {V_NUM, 1},
1761   {V_NUM, 2},
1762   {V_NUM, 3},
1763   {V_NUM, 4},
1764   {V_NUM, 5},
1765   {V_NUM, 6},
1766   {V_NUM, 7},
1767   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1768   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1769   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
1770   {V_TYPEDATA, 11, 0, 0, "list_id", MR_ACE},
1771   {V_LEN, 12, LIST_TABLE, "description"},
1772 };
1773
1774 static struct validate alis4_validate = {
1775   alis4_valobj,
1776   13,
1777   "name",
1778   "name = '%s'",
1779   1,
1780   "list_id",
1781   0,
1782   setup_alis,
1783   set_modtime,
1784 };
1785
1786 static char *alis_fields[] = {
1787   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1788   "nfsgroup", "mailman", "mailman_server", "ace_type", "ace_name", 
1789   "memace_type", "memace_name", "description",
1790 };
1791
1792 static struct valobj alis_valobj[] = {
1793   {V_CHAR, 0, LIST_TABLE, "name"},
1794   {V_NUM, 1},
1795   {V_NUM, 2},
1796   {V_NUM, 3},
1797   {V_NUM, 4},
1798   {V_NUM, 5},
1799   {V_NUM, 6},
1800   {V_NUM, 7},
1801   {V_NUM, 8},
1802   {V_ID, 9, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1803   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
1804   {V_TYPEDATA, 11, 0, 0, "list_id", MR_ACE},
1805   {V_TYPE, 12, 0, "ace_type", 0, MR_ACE},
1806   {V_TYPEDATA, 13, 0, 0, "list_id", MR_ACE},
1807   {V_LEN, 14, LIST_TABLE, "description"},
1808 };
1809
1810 static struct validate alis_validate = {
1811   alis_valobj,
1812   15,
1813   "name",
1814   "name = '%s'",
1815   1,
1816   "list_id",
1817   0,
1818   setup_alis,
1819   set_modtime,
1820 };
1821
1822 static char *ulis2_fields[] = {
1823   "name",
1824   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1825   "ace_type", "ace_name", "description",
1826 };
1827
1828 static struct valobj ulis2_valobj[] = {
1829   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1830   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1831   {V_NUM, 2},
1832   {V_NUM, 3},
1833   {V_NUM, 4},
1834   {V_NUM, 5},
1835   {V_NUM, 6},
1836   {V_NUM, 7},
1837   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1838   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1839   {V_LEN, 10, LIST_TABLE, "description"},
1840 };
1841
1842 static struct validate ulis2_validate = {
1843   ulis2_valobj,
1844   11,
1845   "name",
1846   "list_id = %d",
1847   1,
1848   "list_id",
1849   access_list,
1850   setup_alis,
1851   set_modtime_by_id,
1852 };
1853
1854 static char *ulis3_fields[] = {
1855   "name",
1856   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid", 
1857   "nfsgroup", "ace_type", "ace_name", "description",
1858 };
1859
1860 static struct valobj ulis3_valobj[] = {
1861   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1862   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1863   {V_NUM, 2},
1864   {V_NUM, 3},
1865   {V_NUM, 4},
1866   {V_NUM, 5},
1867   {V_NUM, 6},
1868   {V_NUM, 7},
1869   {V_NUM, 8},
1870   {V_TYPE, 9, 0, "ace_type", 0, MR_ACE},
1871   {V_TYPEDATA, 10, 0, 0, "list_id", MR_ACE},
1872   {V_LEN, 11, LIST_TABLE, "description"},
1873 };
1874
1875 static struct validate ulis3_validate = {
1876   ulis3_valobj,
1877   12,
1878   "name", 
1879   "list_id = %d",
1880   1,
1881   "list_id",
1882   access_list,
1883   setup_alis,
1884   set_modtime_by_id,
1885 };
1886
1887 static char *ulis4_fields[] = {
1888   "name",
1889   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1890   "nfsgroup", "ace_type", "ace_name", "memace_type", "memace_name",
1891   "description",
1892 };
1893
1894 static struct valobj ulis4_valobj[] = {
1895   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1896   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1897   {V_NUM, 2},
1898   {V_NUM, 3},
1899   {V_NUM, 4},
1900   {V_NUM, 5},
1901   {V_NUM, 6},
1902   {V_NUM, 7},
1903   {V_NUM, 8},
1904   {V_TYPE, 9, 0, "ace_type", 0, MR_ACE},
1905   {V_TYPEDATA, 10, 0, 0, "list_id", MR_ACE},
1906   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
1907   {V_TYPEDATA, 12, 0, 0, "list_id", MR_ACE},
1908   {V_LEN, 13, LIST_TABLE, "description"},
1909 };
1910
1911 static struct validate ulis4_validate = {
1912   ulis4_valobj,
1913   14,
1914   "name",
1915   "list_id = %d",
1916   1,
1917   "list_id",
1918   access_list,
1919   setup_alis,
1920   set_modtime_by_id,
1921 };
1922
1923 static char *ulis_fields[] = {
1924   "name",
1925   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1926   "nfsgroup", "mailman", "mailman_server", "ace_type", "ace_name", 
1927   "memace_type", "memace_name", "description",
1928 };
1929
1930 static struct valobj ulis_valobj[] = {
1931   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1932   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1933   {V_NUM, 2},
1934   {V_NUM, 3},
1935   {V_NUM, 4},
1936   {V_NUM, 5},
1937   {V_NUM, 6},
1938   {V_NUM, 7},
1939   {V_NUM, 8},
1940   {V_NUM, 9},
1941   {V_ID, 10, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1942   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
1943   {V_TYPEDATA, 12, 0, 0, "list_id", MR_ACE},
1944   {V_TYPE, 13, 0, "ace_type", 0, MR_ACE},
1945   {V_TYPEDATA, 14, 0, 0, "list_id", MR_ACE},
1946   {V_LEN, 15, LIST_TABLE, "description"},
1947 };
1948
1949 static struct validate ulis_validate = {
1950   ulis_valobj,
1951   16,
1952   "name",
1953   "list_id = %d",
1954   1,
1955   "list_id",
1956   access_list,
1957   setup_alis,
1958   set_modtime_by_id,
1959 };
1960
1961 static char *dlis_fields[] = {
1962   "name",
1963 };
1964
1965 static struct validate dlis_validate = {
1966   VOlist0,
1967   1,
1968   "name",
1969   "list_id = %d",
1970   1,
1971   0,
1972   access_list,
1973   setup_dlis,
1974   0,
1975 };
1976
1977 static char *amtl_fields[] = {
1978   "list_name", "member_type", "member_name",
1979 };
1980
1981 static char *atml_fields[] = {
1982   "list_name", "member_type", "member_name", "tag",
1983 };
1984
1985 static struct valobj amtl_valobj[] = {
1986   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1987   {V_TYPE, 1, 0, "member", 0, MR_TYPE},
1988   {V_TYPEDATA, 2, 0, 0, 0, MR_NO_MATCH},
1989   {V_ID, 3, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
1990 };
1991
1992 static struct validate amtl_validate =
1993 {
1994   amtl_valobj,
1995   3,
1996   0,
1997   0,
1998   0,
1999   0,
2000   access_list,
2001   0,
2002   add_member_to_list,
2003 };
2004
2005 static struct validate atml_validate =
2006 {
2007   amtl_valobj,
2008   4,
2009   0,
2010   0,
2011   0,
2012   0,
2013   access_list,
2014   0,
2015   add_member_to_list,
2016 };
2017
2018 static struct validate tmol_validate =
2019 {
2020   amtl_valobj,
2021   4,
2022   0,
2023   0,
2024   0,
2025   0,
2026   access_list,
2027   0,
2028   tag_member_of_list,
2029 };
2030
2031 static struct validate dmfl_validate =
2032 {
2033   amtl_valobj,
2034   3,
2035   0,
2036   0,
2037   0,
2038   0,
2039   access_list,
2040   0,
2041   delete_member_from_list,
2042 };
2043
2044 static char *gaus_fields[] = {
2045   "ace_type", "ace_name",
2046   "use_type", "use_name",
2047 };
2048
2049 static struct valobj gaus_valobj[] = {
2050   {V_TYPE, 0, 0, "gaus", 0, MR_TYPE},
2051   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
2052 };
2053
2054 static struct validate gaus_validate = {
2055   gaus_valobj,
2056   2,
2057   0,
2058   0,
2059   0,
2060   0,
2061   access_member,
2062   0,
2063   get_ace_use,
2064 };
2065
2066 static char *ghbo_fields[] = {
2067   "ace_type", "ace_name",
2068   "name",
2069 };
2070
2071 static struct valobj ghbo_valobj[] = {
2072   {V_TYPE, 0, 0, "gaus", 0, MR_TYPE},
2073   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
2074 };
2075
2076 static struct validate ghbo_validate = {
2077   ghbo_valobj,
2078   2,
2079   0,
2080   0,
2081   0,
2082   0,
2083   access_member,
2084   0,
2085   get_host_by_owner,
2086 };
2087
2088 static char *qgli_fields[] = {
2089   "active", "publicflg", "hidden", "maillist", "grouplist",
2090   "list",
2091 };
2092
2093 static struct valobj qgli_valobj[] = {
2094   {V_TYPE, 0, 0, "boolean", 0, MR_TYPE},
2095   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
2096   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
2097   {V_TYPE, 3, 0, "boolean", 0, MR_TYPE},
2098   {V_TYPE, 4, 0, "boolean", 0, MR_TYPE},
2099 };
2100
2101 static struct validate qgli_validate = {
2102   qgli_valobj,
2103   5,
2104   0,
2105   0,
2106   0,
2107   0,
2108   access_qgli,
2109   0,
2110   qualified_get_lists,
2111 };
2112
2113 static char *gmol_fields[] = {
2114   "list_name",
2115   "member_type", "member_name",
2116 };
2117
2118 static char *gtml_fields[] = {
2119   "list_name",
2120   "member_type", "member_name", "tag",
2121 };
2122
2123 static struct validate gmol_validate = {
2124   VOlist0,
2125   1,
2126   0,
2127   0,
2128   0,
2129   0,
2130   access_visible_list,
2131   0,
2132   get_members_of_list,
2133 };
2134
2135 static char *glom_fields[] = {
2136   "member_type", "member_name",
2137   "list_name", "active", "publicflg", "hidden", "maillist", "grouplist",
2138 };
2139
2140 static struct valobj glom_valobj[] = {
2141   {V_TYPE, 0, 0, "rmember", 0, MR_TYPE},
2142   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
2143 };
2144
2145 static struct validate glom_validate = {
2146   glom_valobj,
2147   2,
2148   0,
2149   0,
2150   0,
2151   0,
2152   access_member,
2153   0,
2154   get_lists_of_member,
2155 };
2156
2157 static char *cmol_fields[] = {
2158   "list_name",
2159   "count",
2160 };
2161
2162 static struct validate cmol_validate = {
2163   VOlist0,
2164   1,
2165   0,
2166   0,
2167   0,
2168   0,
2169   access_visible_list,
2170   0,
2171   count_members_of_list,
2172 };
2173
2174 static char *gsin_fields[] = {
2175   "service",
2176   "service", "update_int", "target_file", "script", "dfgen", "dfcheck",
2177   "type", "enable", "inprogress", "harderror", "errmsg",
2178   "ace_type", "ace_name", "modtime", "modby", "modwith",
2179 };
2180
2181 static struct validate gsin_validate =
2182 {
2183   0,
2184   0,
2185   0,
2186   0,
2187   0,
2188   0,
2189   access_service,
2190   0,
2191   followup_gsin,
2192 };
2193
2194 static char *qgsv_fields[] = {
2195   "enable", "inprogress", "harderror",
2196   "service",
2197 };
2198
2199 static struct valobj qgsv_valobj[] = {
2200   {V_TYPE, 0, 0, "boolean", 0, MR_TYPE},
2201   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
2202   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
2203 };
2204
2205 static struct validate qgsv_validate = {
2206   qgsv_valobj,
2207   3,
2208   0,
2209   0,
2210   0,
2211   0,
2212   0,
2213   0,
2214   qualified_get_server,
2215 };
2216
2217 static char *asin_fields[] = {
2218   "service", "update_int", "target_file", "script", "type", "enable",
2219   "ace_type", "ace_name",
2220 };
2221
2222 static struct valobj asin_valobj[] = {
2223   {V_CHAR, 0, SERVERS_TABLE, "name"},
2224   {V_NUM, 1},
2225   {V_LEN, 2, SERVERS_TABLE, "target_file"},
2226   {V_LEN, 3, SERVERS_TABLE, "script"},
2227   {V_TYPE, 4, 0, "service", 0, MR_TYPE},
2228   {V_NUM, 5},
2229   {V_TYPE, 6, 0, "ace_type", 0, MR_ACE},
2230   {V_TYPEDATA, 7, 0, 0, 0, MR_ACE},
2231 };
2232
2233 static struct validate asin_validate =  /* for asin, usin */
2234 {
2235   asin_valobj,
2236   8,
2237   "name",
2238   "name = UPPER('%s')",
2239   1,
2240   0,
2241   0,
2242   0,
2243   set_uppercase_modtime,
2244 };
2245
2246 static struct validate rsve_validate = {
2247   asin_valobj,
2248   1,
2249   "name",
2250   "name = UPPER('%s')",
2251   1,
2252   0,
2253   access_service,
2254   0,
2255   set_uppercase_modtime,
2256 };
2257
2258 static char *ssif_fields[] = {
2259   "service", "dfgen", "dfcheck", "inprogress", "harderror", "errmsg",
2260 };
2261
2262 static struct valobj ssif_valobj[] = {
2263   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
2264   {V_NUM, 1},
2265   {V_NUM, 2},
2266   {V_NUM, 3},
2267   {V_NUM, 4},
2268   {V_LEN, 5, SERVERS_TABLE, "errmsg"},
2269 };
2270
2271 static struct validate ssif_validate = {
2272   ssif_valobj,
2273   6,
2274   "name",
2275   "name = UPPER('%s')",
2276   1,
2277   0,
2278   0,
2279   0,
2280   0,
2281 };
2282
2283 static char *dsin_fields[] = {
2284   "service",
2285 };
2286
2287 static struct validate dsin_validate = {
2288   asin_valobj,
2289   1,
2290   "name",
2291   "name = UPPER('%s')",
2292   1,
2293   0,
2294   0,
2295   setup_dsin,
2296   0,
2297 };
2298
2299 static char *gshi_fields[] = {
2300   "service", "machine",
2301   "service", "machine", "enable", "override", "success", "inprogress",
2302   "hosterror", "hosterrormsg", "ltt", "lts", "value1", "value2",
2303   "value3", "modtime", "modby", "modwith",
2304 };
2305
2306 static struct validate gshi_validate = {
2307   0,
2308   0,
2309   0,
2310   0,
2311   0,
2312   0,
2313   access_service,
2314   0,
2315   followup_fix_modby,
2316 };
2317
2318 static char *qgsh_fields[] = {
2319   "service", "enable", "override", "success", "inprogress", "hosterror",
2320   "service", "machine",
2321 };
2322
2323 static struct valobj qgsh_valobj[] = {
2324   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
2325   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
2326   {V_TYPE, 3, 0, "boolean", 0, MR_TYPE},
2327   {V_TYPE, 4, 0, "boolean", 0, MR_TYPE},
2328   {V_TYPE, 5, 0, "boolean", 0, MR_TYPE},
2329 };
2330
2331 static struct validate qgsh_validate = {
2332   qgsh_valobj,
2333   5,
2334   0,
2335   0,
2336   0,
2337   0,
2338   0,
2339   0,
2340   qualified_get_serverhost,
2341 };
2342
2343 static char *ashi_fields[] = {
2344   "service", "machine", "enable", "value1", "value2", "value3",
2345 };
2346
2347 static struct valobj ashi_valobj[] = {
2348   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
2349   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2350   {V_NUM, 2},
2351   {V_NUM, 3},
2352   {V_NUM, 4},
2353   {V_LEN, 5, SERVERHOSTS_TABLE, "value3"},
2354 };
2355
2356 static struct validate ashi_validate = /* ashi & ushi */
2357 {
2358   ashi_valobj,
2359   6,
2360   "service",
2361   "service = UPPER('%s') AND mach_id = %d",
2362   2,
2363   0,
2364   access_service,
2365   0,
2366   set_serverhost_modtime,
2367 };
2368
2369 static struct validate rshe_validate =
2370 {
2371   ashi_valobj,
2372   2,
2373   "service",
2374   "service = UPPER('%s') AND mach_id = %d",
2375   2,
2376   0,
2377   access_service,
2378   0,
2379   set_serverhost_modtime,
2380 };
2381
2382 static struct validate ssho_validate =
2383 {
2384   ashi_valobj,
2385   2,
2386   "service",
2387   "service = UPPER('%s') AND mach_id = %d",
2388   2,
2389   0,
2390   access_service,
2391   0,
2392   trigger_dcm,
2393 };
2394
2395 static char *sshi_fields[] = {
2396   "service", "machine", "override", "success", "inprogress",
2397   "hosterror", "errmsg", "ltt", "lts",
2398 };
2399
2400 static struct valobj sshi_valobj[] = {
2401   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
2402   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2403   {V_NUM, 2},
2404   {V_NUM, 3},
2405   {V_NUM, 4},
2406   {V_NUM, 5},
2407   {V_LEN, 6, SERVERHOSTS_TABLE, "hosterrmsg"},
2408   {V_NUM, 7},
2409   {V_NUM, 8},
2410 };
2411
2412 static struct validate sshi_validate =
2413 {
2414   sshi_valobj,
2415   9,
2416   0,
2417   0,
2418   0,
2419   0,
2420   0,
2421   0,
2422   0,
2423 };
2424
2425 static char *dshi_fields[] = {
2426   "service", "machine",
2427 };
2428
2429 static struct validate dshi_validate =
2430 {
2431   ashi_valobj,
2432   2,
2433   "service",
2434   "service = UPPER('%s') AND mach_id = %d",
2435   2,
2436   0,
2437   access_service,
2438   setup_dshi,
2439   0,
2440 };
2441
2442 static char *gslo_fields[] = {
2443   "server",
2444   "server", "machine",
2445 };
2446
2447 static char *gfsl_fields[] = {
2448   "label",
2449   "label", "type", "machine", "name", "mount", "access", "comments",
2450   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
2451 };
2452
2453 static struct validate gfsl_validate = {
2454   0,
2455   0,
2456   0,
2457   0,
2458   0,
2459   0,
2460   access_filesys,
2461   0,
2462   followup_fix_modby,
2463 };
2464
2465 static char *gfsm_fields[] = {
2466   "machine",
2467   "label", "type", "machine", "name", "mount", "access", "comments",
2468   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
2469 };
2470
2471 static struct validate gfsm_validate = {
2472   VOmach0,
2473   1,
2474   0,
2475   0,
2476   0,
2477   0,
2478   0,
2479   0,
2480   followup_fix_modby,
2481 };
2482
2483 static char *gfsn_fields[] = {
2484   "machine", "partition",
2485   "label", "type", "machine", "name", "mount", "access", "comments",
2486   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
2487 };
2488
2489 static struct validate gfsn_validate = {
2490   VOmach0,
2491   1,
2492   0,
2493   0,
2494   0,
2495   0,
2496   0,
2497   0,
2498   followup_fix_modby,
2499 };
2500
2501 static char *gfsp_fields[] = {
2502   "path",
2503   "label", "type", "machine", "name", "mount", "access", "comments",
2504   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
2505 };
2506
2507 static char *gfsg_fields[] = {
2508   "list",
2509   "label", "type", "machine", "name", "mount", "access", "comments",
2510   "owner", "owners", "create", "lockertype", "modtime", "modby", "modwith",
2511 };
2512
2513 static struct validate gfsg_validate = {
2514   VOlist0,
2515   1,
2516   0,
2517   0,
2518   0,
2519   0,
2520   access_list,
2521   0,
2522   followup_fix_modby,
2523 };
2524
2525 static char *afil_fields[] = {
2526   "label", "type", "machine", "name", "mount", "access", "comments",
2527   "owner", "owners", "create", "lockertype",
2528 };
2529
2530 static struct valobj afil_valobj[] = {
2531   {V_CHAR, 0, FILESYS_TABLE, "label"},
2532   {V_TYPE, 1, 0, "filesys", 0, MR_FSTYPE},
2533   {V_ID, 2, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2534   {V_CHAR, 3, FILESYS_TABLE, "name"},
2535   {V_LEN, 4, FILESYS_TABLE, "mount"},
2536   {V_LEN, 5, FILESYS_TABLE, "rwaccess"},
2537   {V_LEN, 6, FILESYS_TABLE, "comments"},
2538   {V_ID, 7, USERS_TABLE, "login", "users_id", MR_USER},
2539   {V_ID, 8, LIST_TABLE, "name", "list_id", MR_LIST},
2540   {V_NUM, 9},
2541   {V_TYPE, 10, 0, "lockertype", 0, MR_TYPE},
2542 };
2543
2544 static struct validate afil_validate = {
2545   afil_valobj,
2546   11,
2547   "label",
2548   "label = '%s'",
2549   1,
2550   "filsys_id",
2551   0,
2552   setup_afil,
2553   set_filesys_modtime,
2554 };
2555
2556 static char *ufil_fields[] = {
2557   "label", "newlabel", "type", "machine", "name", "mount", "access",
2558   "comments", "owner", "owners", "create", "lockertype",
2559 };
2560
2561 static struct valobj ufil_valobj[] = {
2562   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
2563   {V_RENAME, 1, FILESYS_TABLE, "label", "filsys_id", MR_NOT_UNIQUE},
2564   {V_TYPE, 2, 0, "filesys", 0, MR_FSTYPE},
2565   {V_ID, 3, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2566   {V_CHAR, 4, FILESYS_TABLE, "name"},
2567   {V_LEN, 5, FILESYS_TABLE, "mount"},
2568   {V_LEN, 6, FILESYS_TABLE, "rwaccess"},
2569   {V_LEN, 7, FILESYS_TABLE, "comments"},
2570   {V_ID, 8, USERS_TABLE, "login", "users_id", MR_USER},
2571   {V_ID, 9, LIST_TABLE, "name", "list_id", MR_LIST},
2572   {V_NUM, 10},
2573   {V_TYPE, 11, 0, "lockertype", 0, MR_TYPE},
2574 };
2575
2576 static struct validate ufil_validate = {
2577   ufil_valobj,
2578   12,
2579   "label",
2580   "filsys_id = %d",
2581   1,
2582   "filsys_id",
2583   0,
2584   setup_ufil,
2585   set_filesys_modtime,
2586 };
2587
2588 static char *dfil_fields[] = {
2589   "label",
2590 };
2591
2592 static struct validate dfil_validate = {
2593   VOfilesys0,
2594   1,
2595   "label",
2596   "filsys_id = %d",
2597   1,
2598   0,
2599   0,
2600   setup_dfil,
2601   0,
2602 };
2603
2604 static char *gfgm_fields[] = {
2605   "fsgroup", "filesys", "sortkey"
2606 };
2607
2608 static struct validate gfgm_validate = {
2609   VOfilesys0,
2610   1,
2611   0,
2612   0,
2613   0,
2614   0,
2615   0,
2616   0,
2617   0,
2618 };
2619
2620 static struct valobj aftg_valobj[] = {
2621   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
2622   {V_ID, 1, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
2623 };
2624
2625 static struct validate aftg_validate = {
2626   aftg_valobj,
2627   2,
2628   "group_id",
2629   "group_id = %d and filsys_id = %d",
2630   2,
2631   0,
2632   0,
2633   0,
2634   0,
2635 };
2636
2637 static char *ganf_fields[] = {
2638   "machine", "dir", "device", "status", "allocated", "size",
2639   "modtime", "modby", "modwith",
2640 };
2641
2642 static char *gnfp_fields[] = {
2643   "machine", "dir",
2644   "machine", "dir", "device", "status", "allocated", "size",
2645   "modtime", "modby", "modwith",
2646 };
2647
2648 static struct validate gnfp_validate = {
2649   VOmach0,
2650   1,
2651   0,
2652   0,
2653   0,
2654   0,
2655   0,
2656   0,
2657   followup_fix_modby,
2658 };
2659
2660 static struct valobj anfp_valobj[] = {
2661   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2662   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
2663   {V_LEN, 2, NFSPHYS_TABLE, "device"},
2664   {V_NUM, 3},
2665   {V_NUM, 4},
2666   {V_NUM, 5},
2667 };
2668
2669 static struct validate anfp_validate = {
2670   anfp_valobj,
2671   6,
2672   "dir",
2673   "mach_id = %d and dir = '%s'",
2674   2,
2675   "nfsphys_id",
2676   0,
2677   prefetch_value,
2678   set_nfsphys_modtime,
2679 };
2680
2681 static struct validate unfp_validate = {
2682   anfp_valobj,
2683   6,
2684   "dir",
2685   "mach_id = %d and dir = '%s'",
2686   2,
2687   "nfsphys_id",
2688   0,
2689   0,
2690   set_nfsphys_modtime,
2691 };
2692
2693 static char *ajnf_fields[] = {
2694   "machine", "dir", "adjustment",
2695 };
2696
2697 static struct valobj ajnf_valobj[] = {
2698   {V_ID, 0, MACHINE_TABLE, NAME, "mach_id", MR_MACHINE},
2699   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
2700   {V_NUM, 2},
2701 };
2702
2703 static struct validate ajnf_validate = {
2704   ajnf_valobj,
2705   3,
2706   "dir",
2707   "mach_id = %d and dir = '%s'",
2708   2,
2709   "nfsphys_id",
2710   0,
2711   0,
2712   set_nfsphys_modtime,
2713 };
2714
2715 static char *dnfp_fields[] = {
2716   "machine", "dir",
2717 };
2718
2719 static struct validate dnfp_validate = {
2720   anfp_valobj,
2721   2,
2722   "dir",
2723   "mach_id = %d and dir = '%s'",
2724   2,
2725   "nfsphys_id",
2726   0,
2727   setup_dnfp,
2728   set_nfsphys_modtime,
2729 };
2730
2731 static char *gqot_fields[] = {
2732   "filesys", "type", "name",
2733   "filesys", "type", "name", "quota", "dir", "machine",
2734   "modtime", "modby", "modwith",
2735 };
2736
2737 static struct valobj gqot_valobj[] = {
2738   {V_TYPE, 1, 0, "quota_type", 0, MR_TYPE},
2739   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
2740 };
2741
2742 static struct validate gqot_validate = {
2743   gqot_valobj,
2744   2,
2745   0,
2746   0,
2747   0,
2748   0,
2749   0,
2750   0,
2751   followup_gqot,
2752 };
2753
2754 static char *gqbf_fields[] = {
2755   "filesys",
2756   "filesys", "type", "name", "quota", "dir", "machine",
2757   "modtime", "modby", "modwith",
2758 };
2759
2760 static struct validate gqbf_validate = {
2761   0,
2762   0,
2763   0,
2764   0,
2765   0,
2766   0,
2767   access_filesys,
2768   0,
2769   followup_gqot,
2770 };
2771
2772 static char *aqot_fields[] = {
2773   "filesys", "type", "name", "quota",
2774 };
2775
2776 static struct valobj aqot_valobj[] = {
2777   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
2778   {V_TYPE, 1, 0, "quota_type", 0, MR_TYPE},
2779   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
2780   {V_NUM, 3},
2781 };
2782
2783 static struct validate aqot_validate = {
2784   aqot_valobj,
2785   4,
2786   "filsys_id",
2787   "filsys_id = %d and type = '%s' and entity_id = %d",
2788   3,
2789   0,
2790   0,
2791   prefetch_filesys,
2792   followup_aqot,
2793 };
2794
2795 static struct validate uqot_validate = {
2796   aqot_valobj,
2797   4,
2798   "filsys_id",
2799   "filsys_id = %d AND type = '%s' AND entity_id = %d",
2800   3,
2801   0,
2802   0,
2803   setup_dqot,
2804   followup_aqot,
2805 };
2806
2807 static struct validate dqot_validate = {
2808   aqot_valobj,
2809   3,
2810   "filsys_id",
2811   "filsys_id = %d AND type = '%s' AND entity_id = %d",
2812   3,
2813   0,
2814   0,
2815   setup_dqot,
2816   followup_dqot,
2817 };
2818
2819 static char *gnfq_fields[] = {
2820   "filesys", "login",
2821   "filesys", "login", "quota", "dir", "machine",
2822   "modtime", "modby", "modwith",
2823 };
2824
2825 static struct validate gnfq_validate = {
2826   0,
2827   0,
2828   0,
2829   0,
2830   0,
2831   0,
2832   access_filesys,
2833   0,
2834   followup_gqot,
2835 };
2836
2837 static char *gnqp_fields[] = {
2838   "machine", "dir",
2839   "filesys", "login", "quota", "dir", "machine",
2840   "modtime", "modby", "modwith",
2841 };
2842
2843 static char *anfq_fields[] = {
2844   "filesys", "login", "quota",
2845 };
2846
2847 static struct valobj anfq_valobj[] = {
2848   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
2849   {V_ID, 1, USERS_TABLE, "login", "users_id", MR_USER},
2850   {V_NUM, 2},
2851 };
2852
2853 static struct validate anfq_validate = {
2854   anfq_valobj,
2855   3,
2856   "filsys_id",
2857   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
2858   2,
2859   0, /* object ? */
2860   0,
2861   prefetch_filesys,
2862   followup_aqot,
2863 };
2864
2865 static struct validate unfq_validate = {
2866   anfq_valobj,
2867   3,
2868   "filsys_id",
2869   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
2870   2,
2871   0,
2872   0,
2873   setup_dqot,
2874   followup_aqot,
2875 };
2876
2877 static struct validate dnfq_validate = {
2878   anfq_valobj,
2879   3,
2880   "filsys_id",
2881   "filsys_id = %d AND entity_id = %d",
2882   2,
2883   0,
2884   0,
2885   setup_dqot,
2886   followup_dqot,
2887 };
2888
2889 static char *gzcl2_fields[] = {
2890   "class",
2891   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
2892   "iws_type", "iws_name", "iui_type", "iui_name",
2893   "modtime", "modby", "modwith",
2894 };
2895
2896 static char *gzcl_fields[] = {
2897   "class",
2898   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
2899   "iws_type", "iws_name", "iui_type", "iui_name", "owner_type",
2900   "owner_id", "modtime", "modby", "modwith",
2901 };
2902
2903 static struct validate gzcl_validate = {
2904   0,
2905   0,
2906   0,
2907   0,
2908   0,
2909   0,
2910   access_zephyr,
2911   0,
2912   followup_gzcl,
2913 };
2914
2915 static char *azcl2_fields[] = {
2916   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
2917   "iws_type", "iws_name", "iui_type", "iui_name",
2918 };  
2919
2920 static struct valobj azcl2_valobj[] = {
2921   {V_CHAR, 0, ZEPHYR_TABLE, "class"},
2922   {V_TYPE, 1, 0, "zace_type", 0, MR_ACE},
2923   {V_TYPEDATA, 2, 0, 0, "list_id", MR_ACE},
2924   {V_TYPE, 3, 0, "zace_type", 0, MR_ACE},
2925   {V_TYPEDATA, 4, 0, 0, "list_id", MR_ACE},
2926   {V_TYPE, 5, 0, "zace_type", 0, MR_ACE},
2927   {V_TYPEDATA, 6, 0, 0, "list_id", MR_ACE},
2928   {V_TYPE, 7, 0, "zace_type", 0, MR_ACE},
2929   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
2930 };
2931
2932 static struct validate azcl2_validate = {
2933   azcl2_valobj,
2934   9,
2935   "class",
2936   "class = '%s'",
2937   1,
2938   0,
2939   0,
2940   0,
2941   set_zephyr_modtime,
2942 };
2943
2944 static char *azcl_fields[] = {
2945   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
2946   "iws_type", "iws_name", "iui_type", "iui_name", "owner_type", 
2947   "owner_id",
2948 };
2949
2950 static struct valobj azcl_valobj[] = {
2951   {V_CHAR, 0, ZEPHYR_TABLE, "class"},
2952   {V_TYPE, 1, 0, "zace_type", 0, MR_ACE},
2953   {V_TYPEDATA, 2, 0, 0, "list_id", MR_ACE},
2954   {V_TYPE, 3, 0, "zace_type", 0, MR_ACE},
2955   {V_TYPEDATA, 4, 0, 0, "list_id", MR_ACE},
2956   {V_TYPE, 5, 0, "zace_type", 0, MR_ACE},
2957   {V_TYPEDATA, 6, 0, 0, "list_id", MR_ACE},
2958   {V_TYPE, 7, 0, "zace_type", 0, MR_ACE},
2959   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
2960   {V_TYPE, 9, 0, "ace_type", 0, MR_ACE},
2961   {V_TYPEDATA, 10, 0, 0, "list_id", MR_ACE},
2962 };
2963
2964 static struct validate azcl_validate = {
2965   azcl_valobj,
2966   11,
2967   "class",
2968   "class = '%s'",
2969   1,
2970   0,
2971   0,
2972   0,
2973   set_zephyr_modtime,
2974 };
2975
2976 static char *uzcl2_fields[] = {
2977   "class", "newclass", "xmt_type", "xmt_name", "sub_type", "sub_name",
2978   "iws_type", "iws_name", "iui_type", "iui_name",
2979 };
2980
2981 static struct valobj uzcl2_valobj[] = {
2982   {V_NAME, 0, ZEPHYR_TABLE, "class", 0, MR_BAD_CLASS},
2983   {V_RENAME, 1, ZEPHYR_TABLE, "class", 0, MR_NOT_UNIQUE},
2984   {V_TYPE, 2, 0, "zace_type", 0, MR_ACE},
2985   {V_TYPEDATA, 3, 0, 0, "list_id", MR_ACE},
2986   {V_TYPE, 4, 0, "zace_type", 0, MR_ACE},
2987   {V_TYPEDATA, 5, 0, 0, "list_id", MR_ACE},
2988   {V_TYPE, 6, 0, "zace_type", 0, MR_ACE},
2989   {V_TYPEDATA, 7, 0, 0, "list_id", MR_ACE},
2990   {V_TYPE, 8, 0, "zace_type", 0, MR_ACE},
2991   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
2992 };
2993
2994 static struct validate uzcl2_validate = {
2995   uzcl2_valobj,
2996   10,
2997   "class",
2998   "class = '%s'",
2999   1,
3000   0,
3001   access_zephyr,
3002   0,
3003   set_zephyr_modtime,
3004 };
3005
3006 static char *uzcl_fields[] = {
3007   "class", "newclass", "xmt_type", "xmt_name", "sub_type", "sub_name",
3008   "iws_type", "iws_name", "iui_type", "iui_name", "owner_type", "owner_id",
3009 };
3010
3011 static struct valobj uzcl_valobj[] = {
3012   {V_NAME, 0, ZEPHYR_TABLE, "class", 0, MR_BAD_CLASS},
3013   {V_RENAME, 1, ZEPHYR_TABLE, "class", 0, MR_NOT_UNIQUE},
3014   {V_TYPE, 2, 0, "zace_type", 0, MR_ACE},
3015   {V_TYPEDATA, 3, 0, 0, "list_id", MR_ACE},
3016   {V_TYPE, 4, 0, "zace_type", 0, MR_ACE},
3017   {V_TYPEDATA, 5, 0, 0, "list_id", MR_ACE},
3018   {V_TYPE, 6, 0, "zace_type", 0, MR_ACE},
3019   {V_TYPEDATA, 7, 0, 0, "list_id", MR_ACE},
3020   {V_TYPE, 8, 0, "zace_type", 0, MR_ACE},
3021   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
3022   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
3023   {V_TYPEDATA, 11, 0, 0, "list_id", MR_ACE},
3024 };
3025
3026 static struct validate uzcl_validate = {
3027   uzcl_valobj,
3028   12,
3029   "class",
3030   "class = '%s'",
3031   1,
3032   0,
3033   access_zephyr,
3034   0,
3035   set_zephyr_modtime,
3036 };
3037
3038 static struct validate dzcl_validate = {
3039   0,
3040   0,
3041   "class",
3042   "class = '%s'",
3043   1,
3044   0,
3045   0,
3046   0,
3047   0,
3048 };
3049
3050 static char *gsha_fields[] = {
3051   "machine",
3052   "machine", "ace_type", "ace_name", "modtime", "modby", "modwith",
3053 };
3054
3055 static struct validate gsha_validate =
3056 {
3057   0,
3058   0,
3059   0,
3060   0,
3061   0,
3062   0,
3063   0,
3064   0,
3065   followup_gsha,
3066 };
3067
3068 static char *asha_fields[] = {
3069   "machine", "ace_type", "ace_name",
3070 };
3071
3072 static struct valobj asha_valobj[] = {
3073   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3074   {V_TYPE, 1, 0, "ace_type", 0, MR_ACE},
3075   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
3076 };
3077
3078 static struct validate asha_validate =
3079 {
3080   asha_valobj,
3081   3,
3082   "mach_id",
3083   "mach_id = %d",
3084   1,
3085   "mach_id",
3086   0,
3087   0,
3088   set_modtime_by_id,
3089 };
3090
3091 static char *gacl_fields[] = {
3092   "machine", "target",
3093   "machine", "target", "kind", "list",
3094 };
3095
3096 static char *aacl_fields[] = {
3097   "machine", "target", "kind", "list",
3098 };
3099
3100 static char *dacl_fields[] = {
3101   "machine", "target",
3102 };
3103
3104 static struct valobj aacl_valobj[] = {
3105   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3106   {V_CHAR, 1, ACL_TABLE, "target"},
3107   {V_TYPE, 2, 0, "acl_kind", 0, MR_TYPE},
3108   {V_ID, 3, LIST_TABLE, "name", "list_id", MR_LIST},
3109 };
3110
3111 static struct validate gacl_validate =
3112 {
3113   aacl_valobj,
3114   1,
3115   NULL,
3116   NULL,
3117   0,
3118   "mach_id",
3119   /* access_acl */ 0,
3120   0,
3121   0,
3122 };
3123
3124 static struct validate aacl_validate =
3125 {
3126   aacl_valobj,
3127   4,
3128   "mach_id",
3129   "mach_id = %d AND target = '%s'",
3130   2,
3131   "mach_id",
3132   /* access_acl */ 0,
3133   0,
3134   0,
3135 };
3136
3137 static char *gsvc_fields[] = {
3138   "service", "protocol",
3139   "service", "protocol", "port", "description", "modtime", "modby", "modwith",
3140 };
3141
3142 static char *asvc_fields[] = {
3143   "service", "protocol", "port", "description",
3144 };
3145
3146 static char *dsvc_fields[] = {
3147   "service", "protocol",
3148 };
3149
3150 static struct valobj asvc_valobj[] = {
3151   {V_CHAR, 0, SERVICES_TABLE, "name"},
3152   {V_CHAR, 1, SERVICES_TABLE, "protocol"},
3153   {V_NUM, 2},
3154   {V_CHAR, 3, SERVICES_TABLE, "description"},
3155 };
3156
3157 static struct validate asvc_validate = {
3158   asvc_valobj,
3159   4,
3160   "name",
3161   "name = '%s' AND protocol = '%s'",
3162   2,
3163   0,
3164   0,
3165   0,
3166   set_service_modtime,
3167 };
3168
3169 static struct validate dsvc_validate = {
3170   asvc_valobj,
3171   2,
3172   "name",
3173   "name = '%s' AND protocol = '%s'",
3174   2,
3175   0,
3176   0,
3177   0,
3178   0,
3179 };
3180
3181 static char *gprn_fields[] = {
3182   "name",
3183   "name", "type", "hwtype", "duplexname", "hostname",
3184   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3185   "banner", "location", "contact", "modtime", "modby", "modwith"
3186 };
3187
3188 static char *gpbd_fields[] = {
3189   "duplexname",
3190   "name", "type", "hwtype", "duplexname", "hostname",
3191   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3192   "banner", "location", "contact", "modtime", "modby", "modwith"
3193 };
3194
3195 static char *gpbe_fields[] = {
3196   "hwaddr",
3197   "name", "type", "hwtype", "duplexname", "hostname",
3198   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3199   "banner", "location", "contact", "modtime", "modby", "modwith"
3200 };
3201
3202 static char *gpbh_fields[] = {
3203   "hostname",
3204   "name", "type", "hwtype", "duplexname", "hostname",
3205   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3206   "banner", "location", "contact", "modtime", "modby", "modwith"
3207 };
3208
3209 static char *gpbr_fields[] = {
3210   "rm",
3211   "name", "type", "hwtype", "duplexname", "hostname",
3212   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3213   "banner", "location", "contact", "modtime", "modby", "modwith"
3214 };
3215
3216 static char *gpbl_fields[] = {
3217   "location",
3218   "name", "type", "hwtype", "duplexname", "hostname",
3219   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3220   "banner", "location", "contact", "modtime", "modby", "modwith"
3221 };
3222
3223 static char *gpbc_fields[] = {
3224   "contact",
3225   "name", "type", "hwtype", "duplexname", "hostname",
3226   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3227   "banner", "location", "contact", "modtime", "modby", "modwith"
3228 };
3229
3230 static char *aprn_fields[] = {
3231   "printer", "type", "hwtype", "duplexname", "hostname",
3232   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3233   "banner", "location", "contact",
3234 };
3235
3236 static struct valobj aprn_valobj[] = {
3237   {V_CHAR, 0, PRINTERS_TABLE, "name"},
3238   {V_TYPE, 1, 0, "printertype", 0, MR_TYPE},
3239   {V_TYPE, 2, 0, "printerhwtype", 0, MR_TYPE},
3240   {V_CHAR, 3, PRINTERS_TABLE, "duplexname"},
3241   {V_ID, 4, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3242   {V_ID, 5, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3243   {V_ID, 6, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3244   {V_CHAR, 7, PRINTERS_TABLE, "rp"},
3245   {V_ID, 8, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3246   {V_NUM, 9},
3247   {V_NUM, 10},
3248   {V_ID, 11, LIST_TABLE, "name", "list_id", MR_LIST},
3249   {V_ID, 12, LIST_TABLE, "name", "list_id", MR_LIST},
3250   {V_NUM, 13},
3251   {V_CHAR, 14, PRINTERS_TABLE, "location"},
3252   {V_CHAR, 15, PRINTERS_TABLE, "contact"},
3253 };
3254
3255 static struct validate aprn_validate = {
3256   aprn_valobj,
3257   16,
3258   "name",
3259   "name = '%s'",
3260   1,
3261   0,
3262   access_printer,
3263   setup_aprn,
3264   set_modtime,
3265 };
3266
3267 static char *uprn_fields[] = {
3268   "printer",
3269   "printer", "type", "hwtype", "duplexname", "hostname",
3270   "loghost", "rm", "rp", "rq", "ka", "pc", "ac", "lpc_acl",
3271   "banner", "location", "contact",
3272 };
3273
3274 static struct valobj uprn_valobj[] = {
3275   {V_CHAR, 0, PRINTERS_TABLE, "name"},
3276   {V_CHAR, 1, PRINTERS_TABLE, "name"},
3277   {V_TYPE, 2, 0, "printertype", 0, MR_TYPE},
3278   {V_TYPE, 3, 0, "printerhwtype", 0, MR_TYPE},
3279   {V_CHAR, 4, PRINTERS_TABLE, "duplexname"},
3280   {V_ID, 5, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3281   {V_ID, 6, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3282   {V_ID, 7, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3283   {V_CHAR, 8, PRINTERS_TABLE, "rp"},
3284   {V_ID, 9, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3285   {V_NUM, 10},
3286   {V_NUM, 11},
3287   {V_ID, 12, LIST_TABLE, "name", "list_id", MR_LIST},
3288   {V_ID, 13, LIST_TABLE, "name", "list_id", MR_LIST},
3289   {V_NUM, 14},
3290   {V_CHAR, 15, PRINTERS_TABLE, "location"},
3291   {V_CHAR, 16, PRINTERS_TABLE, "contact"},
3292 };
3293
3294 static struct validate uprn_validate = {
3295   uprn_valobj,
3296   16,
3297   "name",
3298   "name = '%s'",
3299   1,
3300   0,
3301   access_printer,
3302   setup_aprn,
3303   set_modtime,
3304 };
3305
3306 static struct validate dprn_validate = {
3307   0,
3308   0,
3309   "name",
3310   "name = '%s'",
3311   1,
3312   0,
3313   access_printer,
3314   0,
3315   0,
3316 };
3317
3318 static char *gpsv_fields[] = {
3319   "host",
3320   "host", "kind", "printer_types", "owner_type", "owner_name",
3321   "lpc_acl", "modtime", "modby", "modwith"
3322 };
3323
3324 static struct valobj gpsv_valobj[] = {
3325   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3326 };
3327
3328 static struct validate gpsv_validate = {
3329   gpsv_valobj,
3330   1,
3331   0,
3332   0,
3333   0,
3334   0,
3335   0,
3336   0,
3337   followup_gpsv,
3338 };
3339
3340 static char *apsv_fields[] = {
3341   "host", "kind", "printer_types", "owner_type", "owner_name", "lpc_acl"
3342 };
3343
3344 static struct valobj apsv_valobj[] = {
3345   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3346   {V_TYPE, 1, 0, "lpd_kind", 0, MR_TYPE},
3347   {V_ID, 2, STRINGS_TABLE, "string", "string_id", MR_STRING},
3348   {V_TYPE, 3, 0, "ace_type", 0, MR_ACE},
3349   {V_TYPEDATA, 4, 0, 0, 0, MR_ACE},
3350   {V_ID, 5, LIST_TABLE, "name", "list_id", MR_LIST},
3351 };
3352
3353 static struct validate apsv_validate = {
3354   apsv_valobj,
3355   6,
3356   "mach_id",
3357   "mach_id = %d",
3358   1,
3359   "mach_id",
3360   0,
3361   0,
3362   set_modtime_by_id,
3363 };
3364
3365 static char *dpsv_fields[] = {
3366   "host",
3367 };
3368
3369 static struct validate dpsv_validate = {
3370   gpsv_valobj,
3371   1,
3372   "mach_id",
3373   "mach_id = %d",
3374   1,
3375   0,
3376   0,
3377   setup_dpsv,
3378   0,
3379 };  
3380
3381 static char *gali_fields[] = {
3382   "name", "type", "trans",
3383   "name", "type", "trans",
3384 };
3385
3386 static char *aali_fields[] = {
3387   "name", "type", "trans",
3388 };
3389
3390 static struct valobj aali_valobj[] = {
3391   {V_CHAR, 0, ALIAS_TABLE, "name"},
3392   {V_TYPE, 1, 0, "alias", 0, MR_TYPE},
3393   {V_CHAR, 2, ALIAS_TABLE, "trans"},
3394 };
3395
3396 static struct validate aali_validate = {
3397   aali_valobj,
3398   3,
3399   "trans",
3400   "name = '%s' and type = '%s' and trans = '%s'",
3401   3,
3402   0,
3403   0,
3404   0,
3405   0,
3406 };
3407
3408 static struct validate dali_validate =  /* DELETE_ALIAS */
3409 {
3410   0,
3411   0,
3412   "trans",
3413   "name = '%s' and type = '%s' and trans = '%s'",
3414   3,
3415   0,
3416   0,
3417   0,
3418   0,
3419 };
3420
3421 static char *gval_fields[] = {
3422   "name", "value",
3423 };
3424
3425 static struct valobj gval_valobj[] = {
3426   {V_NAME, 0, NUMVALUES_TABLE, "name", 0, MR_NO_MATCH},
3427 };
3428
3429 static struct validate gval_validate = {
3430   gval_valobj,
3431   1,
3432   0,
3433   0,
3434   0,
3435   0,
3436   0,
3437   0,
3438   0,
3439 };
3440
3441 static char *aval_fields[] = {
3442   "name", "value",
3443 };
3444
3445 static struct valobj aval_valobj[] = {
3446   {V_CHAR, 0, NUMVALUES_TABLE, "name"},
3447   {V_NUM, 1},
3448 };
3449
3450 static struct validate aval_validate =  /* for aval, uval, and dval */
3451 {
3452   aval_valobj,
3453   2,
3454   "name",
3455   "name = '%s'",
3456   1,
3457   0,
3458   0,
3459   0,
3460   0,
3461 };
3462
3463 static char *dval_fields[] = {
3464   "name",
3465 };
3466
3467 static char *gats_fields[] = {
3468   "table_name", "appends", "updates", "deletes",
3469   "modtime", "modby", "modwith",
3470 };
3471
3472 static char *_sdl_fields[] = {
3473   "level",
3474 };
3475
3476 static struct validate _sdl_validate =
3477 {
3478   VOnum0,
3479   1,
3480   NULL,
3481   NULL,
3482   0,
3483   0,
3484   0,
3485   0,
3486   _sdl_followup,
3487 };
3488
3489 static char *gusl_fields[] = {
3490   "login", "domain_sid", 
3491   "login", "sid", "created",
3492 };
3493
3494 static struct validate gusl_validate =
3495 {
3496   VOuser0,
3497   1,
3498   NULL,
3499   NULL,
3500   0,
3501   0,
3502   0,
3503   0,
3504   0,
3505 };
3506
3507 static char *glsn_fields[] = {
3508   "name", "domain_sid",
3509   "name", "sid", "created",
3510 };
3511
3512 static struct validate glsn_validate = 
3513 {
3514   VOlist0,
3515   1,
3516   NULL,
3517   NULL,
3518   0,
3519   0,
3520   0,
3521   0,
3522   0,
3523 };
3524
3525 static char *ausl_fields[] = {
3526   "login", "sid",
3527 };
3528
3529 static struct validate ausl_validate =
3530 {
3531   VOuser0,
3532   1,
3533   "sid",
3534   "users_id = %d AND sid = '%s'",
3535   2,
3536   0,
3537   0,
3538   0,
3539   0,
3540 };
3541
3542 static char *alsn_fields[] = {
3543   "name", "sid",
3544 };
3545
3546 static struct validate alsn_validate =
3547 {
3548   VOlist0,
3549   1,
3550   "sid",
3551   "list_id = %d AND sid = '%s'",
3552   2,
3553   0,
3554   0,
3555   0,
3556   0,
3557 };
3558
3559 static char *gdds_fields[] = {
3560   "sid",
3561 };
3562
3563 static char *gcon7_fields[] = {
3564   "name",
3565   "name", "description", "location", "contact",
3566   "ace_type", "ace_name", "memace_type", "memace_name", "modtime", "modby", "modwith",
3567 };
3568
3569 static struct validate gcon_validate = {
3570   0,
3571   0,
3572   0,
3573   0,
3574   0,
3575   0,
3576   0,
3577   0,
3578   followup_gcon,
3579 };
3580
3581 static char *gcon_fields[] = {
3582   "name",
3583   "name", "publicflg", "description", "location", "contact",
3584   "ace_type", "ace_name", "memace_type", "memace_name", "modtime", "modby", "modwith",
3585 };
3586
3587 static char *acon7_fields[] = {
3588   "name", "description", "location", "contact",
3589   "ace_type", "ace_name", "memace_type", "memace_name",
3590 };
3591
3592 static struct valobj acon7_valobj[] = {
3593   {V_CHAR, 0, CONTAINERS_TABLE, "name"},
3594   {V_LEN, 1, CONTAINERS_TABLE, "description"},
3595   {V_CHAR, 2, CONTAINERS_TABLE, "location"},
3596   {V_CHAR, 3, CONTAINERS_TABLE, "contact"},
3597   {V_TYPE, 4, 0, "ace_type", 0, MR_ACE},
3598   {V_TYPEDATA, 5, 0, 0, 0, MR_ACE},
3599   {V_TYPE, 6, 0, "ace_type", 0, MR_ACE},
3600   {V_TYPEDATA, 7, 0, 0, 0, MR_ACE},
3601 };
3602
3603 static struct validate acon7_validate =
3604 {
3605   acon7_valobj,
3606   8,
3607   "name",
3608   "name = '%s'",
3609   1,
3610   "cnt_id",
3611   0,
3612   setup_acon,
3613   set_modtime,
3614 };
3615
3616 static char *acon_fields[] = {
3617   "name", "publicflg", "description", "location", "contact",
3618   "ace_type", "ace_name", "memace_type", "memace_name",
3619 };
3620
3621 static struct valobj acon_valobj[] = {
3622   {V_CHAR, 0, CONTAINERS_TABLE, "name"},
3623   {V_NUM, 1},
3624   {V_LEN, 2, CONTAINERS_TABLE, "description"},
3625   {V_CHAR, 3, CONTAINERS_TABLE, "location"},
3626   {V_CHAR, 4, CONTAINERS_TABLE, "contact"},
3627   {V_TYPE, 5, 0, "ace_type", 0, MR_ACE},
3628   {V_TYPEDATA, 6, 0, 0, 0, MR_ACE},
3629   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
3630   {V_TYPEDATA, 8, 0, 0, 0, MR_ACE},
3631 };
3632
3633 static struct validate acon_validate =
3634 {
3635   acon_valobj,
3636   9,
3637   "name",
3638   "name = '%s'",
3639   1,
3640   "cnt_id",
3641   0,
3642   setup_acon,
3643   set_modtime,
3644 };
3645
3646 static char *ucon7_fields[] = {
3647   "name",
3648   "newname", "description", "location", "contact",
3649   "ace_type", "ace_name", "memace_type", "memace_name",
3650 };
3651
3652 static struct valobj ucon7_valobj[] = {
3653   {V_ID, 0, CONTAINERS_TABLE, "name", "cnt_id", MR_CONTAINER},
3654   {V_RENAME, 1, CONTAINERS_TABLE, "name", "cnt_id", MR_NOT_UNIQUE},
3655   {V_LEN, 2, CONTAINERS_TABLE, "description"},
3656   {V_CHAR, 3, CONTAINERS_TABLE, "location"},
3657   {V_CHAR, 4, CONTAINERS_TABLE, "contact"},
3658   {V_TYPE, 5, 0, "ace_type", 0, MR_ACE},
3659   {V_TYPEDATA, 6, 0, 0, 0, MR_ACE},
3660   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
3661   {V_TYPEDATA, 8, 0, 0, 0, MR_ACE},
3662 };
3663
3664 static struct validate ucon7_validate =
3665 {
3666   ucon7_valobj,
3667   9,
3668   0,
3669   0,
3670   0,
3671   0,
3672   access_container,
3673   0,
3674   update_container,
3675 };
3676
3677 static char *ucon_fields[] = {
3678   "name",
3679   "newname", "publicflg", "description", "location", "contact",
3680   "ace_type", "ace_name", "memace_type", "memace_name",
3681 };
3682
3683 static struct valobj ucon_valobj[] = {
3684   {V_ID, 0, CONTAINERS_TABLE, "name", "cnt_id", MR_CONTAINER},
3685   {V_RENAME, 1, CONTAINERS_TABLE, "name", "cnt_id", MR_NOT_UNIQUE},
3686   {V_NUM, 2},
3687   {V_LEN, 3, CONTAINERS_TABLE, "description"},
3688   {V_CHAR, 4, CONTAINERS_TABLE, "location"},
3689   {V_CHAR, 5, CONTAINERS_TABLE, "contact"},
3690   {V_TYPE, 6, 0, "ace_type", 0, MR_ACE},
3691   {V_TYPEDATA, 7, 0, 0, 0, MR_ACE},
3692   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
3693   {V_TYPEDATA, 9, 0, 0, 0, MR_ACE},
3694 };
3695
3696 static struct validate ucon_validate =
3697 {
3698   ucon_valobj,
3699   10,
3700   0,
3701   0,
3702   0,
3703   0,
3704   access_container,
3705   0,
3706   update_container,
3707 };
3708
3709 static char *dcon_fields[] = {
3710   "name",
3711 };
3712
3713 static struct validate dcon_validate =
3714 {
3715   VOcon0,
3716   1,
3717   0,
3718   0,
3719   0,
3720   0,
3721   0,
3722   setup_dcon,
3723   0,
3724 };
3725
3726 static char *amcn_fields[] = {
3727   "machine", "container",
3728 };
3729
3730 static struct valobj amcn_valobj[] =    /* ADD_MACHINE_TO_CONTAINER */
3731 {                                       /* DELETE_MACHINE_FROM_CONTAINER */
3732   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
3733   {V_ID, 1, CONTAINERS_TABLE, "name", "cnt_id", MR_CONTAINER},
3734 };
3735
3736 static struct validate amcn_validate = /* for amtn and dmfn */
3737 {
3738   amcn_valobj,
3739   2,
3740   "mach_id",
3741   "mach_id = %d",
3742   1,
3743   0,
3744   access_container,
3745   0,
3746   set_mach_modtime_by_id,
3747 };
3748
3749 static struct validate dmcn_validate = /* for amtn and dmfn */
3750 {
3751   amcn_valobj,
3752   2,
3753   "mach_id",
3754   "mach_id = %d and cnt_id = %d",
3755   2,
3756   0,
3757   access_container,
3758   0,
3759   set_mach_modtime_by_id,
3760 };
3761
3762 static char *gmnm_fields[] = {
3763   "machine",
3764   "machine", "container",
3765 };
3766
3767 static char *gmoc_fields[] = {
3768   "container",
3769   "isrecursive",
3770         "machine",
3771   "container",
3772 };
3773
3774 static struct validate gmoc_validate = 
3775 {
3776   VOcon0,
3777   1,
3778   0,
3779   0,
3780   0,
3781   0,
3782   0,
3783   0,
3784   get_machines_of_container,
3785 };
3786
3787 static char *gsoc_fields[] = {
3788   "container",
3789   "isrecursive",
3790         "subcontainer",
3791 };
3792
3793 static struct validate gsoc_validate = 
3794 {
3795   VOcon0,
3796   1,
3797   0,
3798   0,
3799   0,
3800   0,
3801   0,
3802   0,
3803   get_subcontainers_of_container,
3804 };
3805
3806 static char *gtlc_fields[] = {
3807   "name",
3808 };
3809
3810 static char *scli_fields[] = {
3811   "containername",
3812   "listname",
3813 };
3814
3815 static struct valobj scli_valobj[] = {
3816   {V_ID, 0, CONTAINERS_TABLE, "name", "cnt_id", MR_CONTAINER},
3817   {V_ID, 1, LIST_TABLE, "name", "list_id", MR_LIST},
3818 };
3819
3820 static struct validate scli_validate = {
3821   scli_valobj,
3822   2,
3823   0,
3824   0,
3825   0,
3826   0,
3827   0,
3828   setup_scli,
3829   set_container_list,
3830 };
3831
3832 static char *gcli_fields[] = {
3833   "containername",
3834   "containername", "listname",
3835 };
3836
3837 /* Generalized Query Definitions */
3838
3839 /* Multiple versions of the same query MUST be listed in ascending
3840  * order.
3841  */
3842
3843 /* Note: For any query which uses prefetch_value, the vcnt should be
3844  * one less than the number of %-format specifiers in the tlist.
3845  */
3846
3847 struct query Queries[] = {
3848   {
3849     /* Q_GALO - GET_ALL_LOGINS, v2 */
3850     "get_all_logins",
3851     "galo",
3852     2,
3853     RETRIEVE,
3854     "u",
3855     USERS_TABLE,
3856     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
3857     galo2_fields,
3858     6,
3859     "u.users_id != 0",
3860     0,
3861     "u.login",
3862     0,
3863   },
3864
3865   {
3866     /* Q_GALO - GET_ALL_LOGINS, v3 */
3867     "get_all_logins",
3868     "galo",
3869     3,
3870     RETRIEVE,
3871     "u",
3872     USERS_TABLE,
3873     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle FROM users u",
3874     galo_fields,
3875     7,
3876     "u.users_id != 0",
3877     0,
3878     "u.login",
3879     0,
3880   },
3881
3882   {
3883     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS, v2 */
3884     "get_all_active_logins",
3885     "gaal",
3886     2,
3887     RETRIEVE,
3888     "u",
3889     USERS_TABLE,
3890     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
3891     galo2_fields,
3892     6,
3893     "u.status = 1",
3894     0,
3895     "u.login",
3896     0,
3897   },
3898
3899   {
3900     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS, v3 */
3901     "get_all_active_logins",
3902     "gaal",
3903     3,
3904     RETRIEVE,
3905     "u",
3906     USERS_TABLE,
3907     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle FROM users u",
3908     galo_fields,
3909     7,
3910     "u.status = 1",
3911     0,
3912     "u.login",
3913     0,
3914   },
3915
3916   {
3917     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN, v2 */
3918     "get_user_account_by_login",
3919     "gual",
3920     2,
3921     RETRIEVE,
3922     "u",
3923     USERS_TABLE,
3924     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
3925     gual2_fields,
3926     15,
3927     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3928     1,
3929     "u.login",
3930     &gubl2_validate,
3931   },
3932
3933   {
3934     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN, v3 */
3935     "get_user_account_by_login",
3936     "gual",
3937     3,
3938     RETRIEVE,
3939     "u",
3940     USERS_TABLE,
3941     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
3942     gual3_fields,
3943     18,
3944     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3945     1,
3946     "u.login",
3947     &gubl_validate,
3948   },
3949
3950   {
3951     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN, v11 */
3952     "get_user_account_by_login",
3953     "gual",
3954     11,
3955     RETRIEVE,
3956     "u",
3957     USERS_TABLE,
3958     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
3959     gual_fields,
3960     20,
3961     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3962     1,
3963     "u.login",
3964     &gubl_validate,
3965   },
3966
3967   {
3968     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v2 */
3969     "get_user_account_by_uid",
3970     "guau",
3971     2,
3972     RETRIEVE,
3973     "u",
3974     USERS_TABLE,
3975     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
3976     guau2_fields,
3977     15,
3978     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
3979     1,
3980     "u.login",
3981     &gubu2_validate,
3982   },
3983
3984   {
3985     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v3 */
3986     "get_user_account_by_uid",
3987     "guau",
3988     3,
3989     RETRIEVE,
3990     "u",
3991     USERS_TABLE,
3992     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
3993     guau3_fields,
3994     18,
3995     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
3996     1,
3997     "u.login",
3998     &gubu_validate,
3999   },
4000
4001   {
4002     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v11 */
4003     "get_user_account_by_uid",
4004     "guau",
4005     11,
4006     RETRIEVE,
4007     "u",
4008     USERS_TABLE,
4009     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4010     guau_fields,
4011     20,
4012     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
4013     1,
4014     "u.login",
4015     &gubu_validate,
4016   }, 
4017
4018   {
4019     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v2 */
4020     "get_user_account_by_name",
4021     "guan",
4022     2,
4023     RETRIEVE,
4024     "u",
4025     USERS_TABLE,
4026     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
4027     guan2_fields,
4028     15,
4029     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
4030     2,
4031     "u.login",
4032     &guan2_validate,
4033   },
4034
4035   {
4036     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v3 */
4037     "get_user_account_by_name",
4038     "guan",
4039     3,
4040     RETRIEVE,
4041     "u",
4042     USERS_TABLE,
4043     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4044     guan3_fields,
4045     18,
4046     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
4047     2,
4048     "u.login",
4049     &guan_validate,
4050   },
4051
4052   {
4053     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v11 */
4054     "get_user_account_by_name",
4055     "guan",
4056     11,
4057     RETRIEVE,
4058     "u",
4059     USERS_TABLE,
4060     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4061     guan_fields,
4062     20,
4063     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
4064     2,
4065     "u.login",
4066     &guan_validate,
4067   },
4068
4069   {
4070     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v2 */
4071     "get_user_account_by_class",
4072     "guac",
4073     2,
4074     RETRIEVE,
4075     "u",
4076     USERS_TABLE,
4077     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
4078     guac2_fields,
4079     15,
4080     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
4081     1,
4082     "u.login",
4083     &VDfix_modby,
4084   },
4085
4086   {
4087     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v3 */
4088     "get_user_account_by_class",
4089     "guac",
4090     3,
4091     RETRIEVE,
4092     "u",
4093     USERS_TABLE,
4094     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4095     guac3_fields,
4096     18,
4097     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
4098     1,
4099     "u.login",
4100     &guan_validate,
4101   },
4102
4103   {
4104     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v11 */
4105     "get_user_account_by_class",
4106     "guac",
4107     11,
4108     RETRIEVE,
4109     "u",
4110     USERS_TABLE,
4111     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4112     guac_fields,
4113     20,
4114     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
4115     1,
4116     "u.login",
4117     &guan_validate,
4118   },
4119
4120   {
4121     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v2 */
4122     "get_user_account_by_id",
4123     "guai",
4124     2,
4125     RETRIEVE,
4126     "u",
4127     USERS_TABLE,
4128     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
4129     guam2_fields,
4130     15,
4131     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
4132     1,
4133     "u.login",
4134     &VDfix_modby,
4135   },
4136
4137   {
4138     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v3 */
4139     "get_user_account_by_id",
4140     "guai",
4141     3,
4142     RETRIEVE,
4143     "u",
4144     USERS_TABLE,
4145     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4146     guam_fields,
4147     18,
4148     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
4149     1,
4150     "u.login",
4151     &guan_validate,
4152   },
4153
4154   {
4155     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v11 */
4156     "get_user_account_by_id",
4157     "guai",
4158     11,
4159     RETRIEVE,
4160     "u",
4161     USERS_TABLE,
4162     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
4163     guam_fields,
4164     20,
4165     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
4166     1,
4167     "u.login",
4168     &guan_validate,
4169   },
4170
4171   {
4172     /* Q_GUBL - GET_USER_BY_LOGIN, v2 */
4173     "get_user_by_login",
4174     "gubl",
4175     2,
4176     RETRIEVE,
4177     "u",
4178     USERS_TABLE,
4179     "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",
4180     gubl2_fields,
4181     12,
4182     "u.login LIKE '%s' AND u.users_id != 0",
4183     1,
4184     "u.login",
4185     &gubl2_validate,
4186   },
4187
4188   {
4189     /* Q_GUBL - GET_USER_BY_LOGIN, v3 */
4190     "get_user_by_login",
4191     "gubl",
4192     3,
4193     RETRIEVE,
4194     "u",
4195     USERS_TABLE,
4196     "u.login, u.unix_uid, u.shell, u.winconsoleshell, 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, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u",
4197     gubl_fields,
4198     15,
4199     "u.login LIKE '%s' AND u.users_id != 0",
4200     1,
4201     "u.login",
4202     &gubl_validate,
4203   },
4204
4205   {
4206     /* Q_GUBU - GET_USER_BY_UID, v2 */
4207     "get_user_by_uid",
4208     "gubu",
4209     2,
4210     RETRIEVE,
4211     "u",
4212     USERS_TABLE,
4213     "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",
4214     gubu2_fields,
4215     12,
4216     "u.unix_uid = %s AND u.users_id != 0",
4217     1,
4218     "u.login",
4219     &gubu2_validate,
4220   },
4221
4222   {
4223     /* Q_GUBU - GET_USER_BY_UID, v3 */
4224     "get_user_by_uid",
4225     "gubu",
4226     3,
4227     RETRIEVE,
4228     "u",
4229     USERS_TABLE,
4230     "u.login, u.unix_uid, u.shell, u.winconsoleshell, 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, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u",
4231     gubu_fields,
4232     15,
4233     "u.unix_uid = %s AND u.users_id != 0",
4234     1,
4235     "u.login",
4236     &gubu_validate,
4237   },
4238
4239   {
4240     /* Q_GUBN - GET_USER_BY_NAME, v2 */
4241     "get_user_by_name",
4242     "gubn",
4243     2,
4244     RETRIEVE,
4245     "u",
4246     USERS_TABLE,
4247     "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",
4248     gubn2_fields,
4249     12,
4250     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0",
4251     2,
4252     "u.login",
4253     &gubn2_validate,
4254   },
4255
4256   {
4257     /* Q_GUBN - GET_USER_BY_NAME, v3 */
4258     "get_user_by_name",
4259     "gubn",
4260     3,
4261     RETRIEVE,
4262     "u",
4263     USERS_TABLE,
4264     "u.login, u.unix_uid, u.shell, u.winconsoleshell, 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, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u",
4265     gubn_fields,
4266     15,
4267     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0",
4268     2,
4269     "u.login",
4270     &gubn_validate,
4271   },
4272
4273   {
4274     /* Q_GUBC - GET_USER_BY_CLASS, v2 */
4275     "get_user_by_class",
4276     "gubc",
4277     2,
4278     RETRIEVE,
4279     "u",
4280     USERS_TABLE,
4281     "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",
4282     gubc2_fields,
4283     12,
4284     "u.type = UPPER('%s') AND u.users_id != 0",
4285     1,
4286     "u.login",
4287     &VDfix_modby,
4288   },
4289
4290   {
4291     /* Q_GUBC - GET_USER_BY_CLASS, v3 */
4292     "get_user_by_class",
4293     "gubc",
4294     3,
4295     RETRIEVE,
4296     "u",
4297     USERS_TABLE,
4298     "u.login, u.unix_uid, u.shell, u.winconsoleshell, 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, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS') FROM users u",
4299     gubc_fields,
4300     15,
4301     "u.type = UPPER('%s') AND u.users_id != 0",
4302     1,
4303     "u.login",
4304     &guan_validate,
4305   },
4306
4307   {
4308     /* Q_GUBM - GET_USER_BY_MITID, v2 */
4309     "get_user_by_mitid",
4310     "gubm",
4311     2,
4312     RETRIEVE,
4313     "u",
4314     USERS_TABLE,
4315     "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",
4316     gubm2_fields,
4317     12,
4318     "u.clearid LIKE '%s' AND u.users_id != 0",
4319     1,
4320     "u.login",
4321     &VDfix_modby,
4322   },
4323
4324   {
4325     /* Q_GUBM - GET_USER_BY_MITID, v3 */
4326     "get_user_by_mitid",
4327     "gubm",
4328     3,
4329     RETRIEVE,
4330     "u",
4331     USERS_TABLE,
4332     "u.login, u.unix_uid, u.shell, u.winconsoleshell, 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, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u",
4333     gubm_fields,
4334     15,
4335     "u.clearid LIKE '%s' AND u.users_id != 0",
4336     1,
4337     "u.login",
4338     &guan_validate,
4339   },
4340
4341   {
4342     /* Q_AUAC - ADD_USER_ACCOUNT, v2 */  /* uses prefetch_value() for users_id */
4343     "add_user_account",
4344     "auac",
4345     2,
4346     APPEND,
4347     "u",
4348     USERS_TABLE,
4349     /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
4350      * but using up one argv element.
4351      */
4352     "INTO users (login, unix_uid, shell, last, first, middle, status, clearid, type, comments, signature, secure, users_id) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', %d, NVL(CHR(0), '%s'), %s, %s)",
4353     auac2_fields,
4354     12,
4355     NULL,
4356     0,
4357     NULL,
4358     &auac2_validate,
4359   },
4360
4361   {
4362     /* Q_AUAC - ADD_USER_ACCOUNT, v3 */  /* uses prefetch_value() for users_id */
4363     "add_user_account",
4364     "auac",
4365     3,
4366     APPEND,
4367     "u",
4368     USERS_TABLE,
4369     /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
4370      * but using up one argv element.
4371      */
4372     "INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, users_id, created, creator) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', %d, NVL(CHR(0), '%s'), %s, %s, SYSDATE, %s)",
4373     auac3_fields,
4374     13,
4375     NULL,
4376     0,
4377     NULL,
4378     &auac3_validate,
4379   },
4380
4381   {
4382     /* Q_AUAC - ADD_USER_ACCOUNT, v11 */  /* uses prefetch_value() for users_id */
4383     "add_user_account",
4384     "auac",
4385     11,
4386     APPEND,
4387     "u",
4388     USERS_TABLE,
4389     /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
4390      * but using up one argv element.
4391      */
4392     "INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, winhomedir, winprofiledir, users_id, created, creator) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', %d, NVL(CHR(0), '%s'), %s, NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, SYSDATE, %s)",
4393     auac_fields,
4394     15,
4395     NULL,
4396     0,
4397     NULL,
4398     &auac_validate,
4399   },
4400
4401   {
4402     /* Q_AUSR - ADD_USER, v2 */  /* uses prefetch_value() for users_id */
4403     "add_user",
4404     "ausr",
4405     2,
4406     APPEND,
4407     "u",
4408     USERS_TABLE,
4409     "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)",
4410     auac2_fields,
4411     9,
4412     0,
4413     0,
4414     NULL,
4415     &ausr2_validate,
4416   },
4417
4418   {
4419     /* Q_AUSR - ADD_USER, v3 */  /* uses prefetch_value() for users_id */
4420     "add_user",
4421     "ausr",
4422     3,
4423     APPEND,
4424     "u",
4425     USERS_TABLE,
4426     "INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, users_id, created, creator) 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, SYSDATE, %s)",
4427     auac3_fields,
4428     10,
4429     0,
4430     0,
4431     NULL,
4432     &ausr3_validate,
4433   },
4434
4435   {
4436     /* Q_AUSR - ADD_USER, v11 */  /* uses prefetch_value() for users_id */
4437     "add_user",
4438     "ausr",
4439     11,
4440     APPEND,
4441     "u",
4442     USERS_TABLE,
4443     "INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, winhomedir, winprofiledir, users_id, created, creator) 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, NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, SYSDATE, %s)",
4444     auac_fields,
4445     12,
4446     0,
4447     0,
4448     NULL,
4449     &ausr_validate,
4450   },
4451
4452   {
4453     /* Q_RUSR - REGISTER_USER */
4454     "register_user",
4455     "rusr",
4456     2,
4457     APPEND,
4458     0,
4459     0,
4460     0,
4461     rusr_fields,
4462     3,
4463     0,
4464     0,
4465     NULL,
4466     &rusr_validate,
4467   },
4468
4469   {
4470     /* Q_UUAC - UPDATE_USER_ACCOUNT, v2 */
4471     "update_user_account",
4472     "uuac",
4473     2,
4474     UPDATE,
4475     "u",
4476     USERS_TABLE,
4477     /* See comment in auac about signature. */
4478     "users SET login = '%s', unix_uid = %s, shell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', comments = %d, signature = NVL(CHR(0), '%s'), secure = %s",
4479     uuac2_fields,
4480     12,
4481     "users_id = %d",
4482     1,
4483     NULL,
4484     &uuac2_validate,
4485   },
4486
4487   {
4488     /* Q_UUAC - UPDATE_USER_ACCOUNT, v3 */
4489     "update_user_account",
4490     "uuac",
4491     3,
4492     UPDATE,
4493     "u",
4494     USERS_TABLE,
4495     /* See comment in auac about signature. */
4496     "users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', comments = %d, signature = NVL(CHR(0), '%s'), secure = %s",
4497     uuac3_fields,
4498     13,
4499     "users_id = %d",
4500     1,
4501     NULL,
4502     &uuac3_validate,
4503   },
4504
4505   {
4506     /* Q_UUAC - UPDATE_USER_ACCOUNT, v11 */
4507     "update_user_account",
4508     "uuac",
4509     11,
4510     UPDATE,
4511     "u",
4512     USERS_TABLE,
4513     /* See comment in auac about signature. */
4514     "users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', comments = %d, signature = NVL(CHR(0), '%s'), secure = %s, winhomedir = NVL('%s', CHR(0)), winprofiledir = NVL('%s', CHR(0))",
4515     uuac_fields,
4516     15,
4517     "users_id = %d",
4518     1,
4519     NULL,
4520     &uuac_validate,
4521   },
4522
4523   {
4524     /* Q_UUSR - UPDATE_USER, v2 */
4525     "update_user",
4526     "uusr",
4527     2,
4528     UPDATE,
4529     "u",
4530     USERS_TABLE,
4531     "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'",
4532     uuac2_fields,
4533     9,
4534     "users_id = %d",
4535     1,
4536     NULL,
4537     &uusr2_validate,
4538   },
4539
4540   {
4541     /* Q_UUSR - UPDATE_USER, v3 */
4542     "update_user",
4543     "uusr",
4544     3,
4545     UPDATE,
4546     "u",
4547     USERS_TABLE,
4548     "users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%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'",
4549     uuac3_fields,
4550     10,
4551     "users_id = %d",
4552     1,
4553     NULL,
4554     &uusr3_validate,
4555   },
4556
4557   {
4558     /* Q_UUSR - UPDATE_USER, v11 */
4559     "update_user",
4560     "uusr",
4561     11,
4562     UPDATE,
4563     "u",
4564     USERS_TABLE,
4565     "users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%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', winhomedir = NVL('%s', CHR(0)), winprofiledir = NVL('%s', CHR(0)) ",
4566     uuac_fields,
4567     12,
4568     "users_id = %d",
4569     1,
4570     NULL,
4571     &uusr_validate,
4572   },
4573
4574   {
4575     /* Q_UUSH - UPDATE_USER_SHELL */
4576     "update_user_shell",
4577     "uush",
4578     2,
4579     UPDATE,
4580     "u",
4581     USERS_TABLE,
4582     "users SET shell = '%s'",
4583     uush_fields,
4584     1,
4585     "users_id = %d",
4586     1,
4587     NULL,
4588     &uush_validate,
4589   },
4590
4591   {
4592     /* Q_UUWS - UPDATE_USER_WINDOWS_SHELL */
4593     "update_user_windows_shell",
4594     "uuws",
4595     2,
4596     UPDATE,
4597     "u",
4598     USERS_TABLE,
4599     "users SET winconsoleshell = '%s'",
4600     uuws_fields,
4601     1,
4602     "users_id = %d",
4603     1,
4604     NULL,
4605     &uuws_validate,
4606   },
4607
4608   {
4609     /* Q_UUST - UPDATE_USER_STATUS */
4610     "update_user_status",
4611     "uust",
4612     2,
4613     UPDATE,
4614     "u",
4615     USERS_TABLE,
4616     "users SET status = %s",
4617     uust_fields,
4618     1,
4619     "users_id = %d",
4620     1,
4621     NULL,
4622     &uust_validate,
4623   },
4624
4625   {
4626     /* Q_UUSS - UPDATE_USER_SECURITY_STATUS */
4627     "update_user_security_status",
4628     "uuss",
4629     2,
4630     UPDATE,
4631     "u",
4632     USERS_TABLE,
4633     "users SET secure = %s",
4634     uuss_fields,
4635     1,
4636     "users_id = %d",
4637     1,
4638     NULL,
4639     &uust_validate,
4640   },
4641
4642   {
4643     /* Q_DUSR - DELETE_USER */
4644     "delete_user",
4645     "dusr",
4646     2,
4647     DELETE,
4648     "u",
4649     USERS_TABLE,
4650     NULL,
4651     dusr_fields,
4652     0,
4653     "users_id = %d",
4654     1,
4655     NULL,
4656     &dusr_validate,
4657   },
4658
4659   {
4660     /* Q_AURV - ADD_USER_RESERVATION */
4661     "add_user_reservation",
4662     "aurv",
4663     2,
4664     UPDATE,
4665     0,
4666     USERS_TABLE,
4667     0,
4668     aurv_fields,
4669     2,
4670     0,
4671     0,
4672     NULL,
4673     &aurv_validate,
4674   },
4675
4676   {
4677     /* Q_GURV - GET_USER_RESERVATIONS */
4678     "get_user_reservations",
4679     "gurv",
4680     2,
4681     RETRIEVE,
4682     0,
4683     USERS_TABLE,
4684     0,
4685     gurv_fields,
4686     2,
4687     0,
4688     1,
4689     NULL,
4690     &gurv_validate,
4691   },
4692
4693   {
4694     /* Q_GUBR - GET_USER_BY_RESERVATION */
4695     "get_user_by_reservation",
4696     "gubr",
4697     2,
4698     RETRIEVE,
4699     0,
4700     USERS_TABLE,
4701     0,
4702     gubr_fields,
4703     1,
4704     0,
4705     1,
4706     NULL,
4707     &gubr_validate,
4708   },
4709
4710   {
4711     /* Q_DURV - DELETE_USER_RESERVATION */
4712     "delete_user_reservation",
4713     "durv",
4714     2,
4715     UPDATE,
4716     0,
4717     USERS_TABLE,
4718     0,
4719     aurv_fields,
4720     2,
4721     0,
4722     0,
4723     NULL,
4724     &aurv_validate,
4725   },
4726
4727   {
4728     /* Q_GKUM - GET_KERBEROS_USER_MAP */
4729     "get_kerberos_user_map",
4730     "gkum",
4731     2,
4732     RETRIEVE,
4733     "k",
4734     KRBMAP_TABLE,
4735     "u.login, str.string FROM krbmap km, users u, strings str",
4736     gkum_fields,
4737     2,
4738     "u.login LIKE '%s' AND str.string LIKE '%s' AND km.users_id = u.users_id AND km.string_id = str.string_id",
4739     2,
4740     "u.login, str.string",
4741     NULL,
4742   },
4743
4744   {
4745     /* Q_AKUM - ADD_KERBEROS_USER_MAP */
4746     "add_kerberos_user_map",
4747     "akum",
4748     2,
4749     APPEND,
4750     "k",
4751     KRBMAP_TABLE,
4752     "INTO krbmap (users_id, string_id) VALUES (%d, %d)",
4753     akum_fields,
4754     2,
4755     0,
4756     0,
4757     NULL,
4758     &akum_validate,
4759   },
4760
4761   {
4762     /* Q_DKUM - DELETE_KERBEROS_USER_MAP */
4763     "delete_kerberos_user_map",
4764     "dkum",
4765     2,
4766     DELETE,
4767     "k",
4768     KRBMAP_TABLE,
4769     0,
4770     akum_fields,
4771     0,
4772     "users_id = %d AND string_id = %d",
4773     2,
4774     NULL,
4775     &dkum_validate,
4776   },
4777
4778   {
4779     /* Q_GFBL - GET_FINGER_BY_LOGIN */
4780     "get_finger_by_login",
4781     "gfbl",
4782     2,
4783     RETRIEVE,
4784     "u",
4785     USERS_TABLE,
4786     "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",
4787     gfbl_fields,
4788     12,
4789     "users_id = %d",
4790     1,
4791     "login",
4792     &gfbl_validate,
4793   },
4794
4795   {
4796     /* Q_UFBL - UPDATE_FINGER_BY_LOGIN */
4797     "update_finger_by_login",
4798     "ufbl",
4799     2,
4800     UPDATE,
4801     "u",
4802     USERS_TABLE,
4803     "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))",
4804     ufbl_fields,
4805     8,
4806     "users_id = %d",
4807     1,
4808     NULL,
4809     &ufbl_validate,
4810   },
4811
4812   {
4813     /* Q_GPOB - GET_POBOX */
4814     "get_pobox",
4815     "gpob",
4816     2,
4817     RETRIEVE,
4818     "u",
4819     USERS_TABLE,
4820     "login, potype, users_id, CHR(0), TO_CHAR(pmodtime, 'DD-mon-YYYY HH24:MI:SS'), pmodby, pmodwith FROM users",
4821     gpob_fields,
4822     7,
4823     "users_id = %d",
4824     1,
4825     "login",
4826     &gpob_validate,
4827   },
4828
4829   {
4830     /* Q_GAPO - GET_ALL_POBOXES */
4831     "get_all_poboxes",
4832     "gapo",
4833     2,
4834     RETRIEVE,
4835     "u",
4836     USERS_TABLE,
4837     "login, potype, pop_id || ':' || box_id FROM users",
4838     gpox_fields,
4839     3,
4840     "potype != 'NONE'",
4841     0,
4842     "login",
4843     &gpox_validate,
4844   },
4845
4846   {
4847     /* Q_GPOP - GET_POBOXES_POP */
4848     "get_poboxes_pop",
4849     "gpop",
4850     2,
4851     RETRIEVE,
4852     "u",
4853     USERS_TABLE,
4854     "login, potype, users_id FROM users",
4855     gpox_fields,
4856     3,
4857     "potype = 'POP'",
4858     0,
4859     "login",
4860     &gpox_validate
4861   },
4862
4863   {
4864     /* Q_GPOF - GET_POBOXES_SMTP */
4865     "get_poboxes_smtp",
4866     "gpos",
4867     2,
4868     RETRIEVE,
4869     "u",
4870     USERS_TABLE,
4871     "login, potype, users_id FROM users",
4872     gpox_fields,
4873     3,
4874     "potype = 'SMTP'",
4875     0,
4876     "login",
4877     &gpox_validate
4878   },
4879
4880   {
4881     /* Q_SPOB - SET_POBOX */
4882     "set_pobox",
4883     "spob",
4884     2,
4885     UPDATE,
4886     0,
4887     USERS_TABLE,
4888     0,
4889     spob_fields,
4890     3,
4891     NULL,
4892     0,
4893     NULL,
4894     &spob_validate,
4895   },
4896
4897   {
4898     /* Q_SPOP - SET_POBOX_POP */
4899     "set_pobox_pop",
4900     "spop",
4901     2,
4902     UPDATE,
4903     0,
4904     USERS_TABLE,
4905     0,
4906     spob_fields,
4907     1,
4908     NULL,
4909     0,
4910     NULL,
4911     &spop_validate,
4912   },
4913
4914   {
4915     /* Q_DPOB - DELETE_POBOX */
4916     "delete_pobox",
4917     "dpob",
4918     2,
4919     UPDATE,
4920     "u",
4921     USERS_TABLE,
4922     "users SET potype = 'NONE'",
4923     spob_fields,
4924     0,
4925     "users_id = %d",
4926     1,
4927     NULL,
4928     &dpob_validate,
4929   },
4930
4931   {
4932     /* Q_GHST - GET_HOST, v2 */
4933     "get_host",
4934     "ghst",
4935     2,
4936     RETRIEVE,
4937     "m",
4938     MACHINE_TABLE,
4939     "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",
4940     ghst2_fields,
4941     21,
4942     "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",
4943     4,
4944     "m.name",
4945     &ghst_validate,
4946   },
4947
4948   {
4949     /* Q_GHST - GET_HOST, v6 */
4950     "get_host",
4951     "ghst",
4952     6,
4953     RETRIEVE,
4954     "m",
4955     MACHINE_TABLE,
4956     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.billing_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",
4957     ghst6_fields,
4958     22,
4959     "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",
4960     4,
4961     "m.name",
4962     &ghst_validate,
4963   },
4964
4965   {
4966     /* Q_GHST - GET_HOST, v8 */
4967     "get_host",
4968     "ghst",
4969     8,
4970     RETRIEVE,
4971     "m",
4972     MACHINE_TABLE,
4973     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.billing_contact, m.account_number, 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",
4974     ghst_fields,
4975     23,
4976     "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",
4977     4,
4978     "m.name",
4979     &ghst_validate,
4980   },
4981
4982   {
4983     /* Q_GHBH - GET_HOST_BY_HWADDR, v2 */
4984     "get_host_by_hwaddr",
4985     "ghbh",
4986     2,
4987     RETRIEVE,
4988     "m",
4989     MACHINE_TABLE,
4990     "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",
4991     ghbh2_fields,
4992     21,
4993     "m.hwaddr LIKE LOWER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
4994     1,
4995     "m.name",
4996     &ghst_validate,
4997   },
4998
4999   {
5000     /* Q_GHBH - GET_HOST_BY_HWADDR, v6 */
5001     "get_host_by_hwaddr",
5002     "ghbh",
5003     6,
5004     RETRIEVE,
5005     "m",
5006     MACHINE_TABLE,
5007     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.billing_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",
5008     ghbh6_fields,
5009     22,
5010     "m.hwaddr LIKE LOWER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
5011     1,
5012     "m.name",
5013     &ghst_validate,
5014   },
5015
5016   {
5017     /* Q_GHBH - GET_HOST_BY_HWADDR, v8 */
5018     "get_host_by_hwaddr",
5019     "ghbh",
5020     8,
5021     RETRIEVE,
5022     "m",
5023     MACHINE_TABLE,
5024     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.billing_contact, m.account_number, 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",
5025     ghbh_fields,
5026     23,
5027     "m.hwaddr LIKE LOWER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
5028     1,
5029     "m.name",
5030     &ghst_validate,
5031   },
5032
5033   {
5034     /* Q_GHBA - GET_HOST_BY_ACCOUNT_NUMBER, v8 */
5035     "get_host_by_account_number",
5036     "ghba",
5037     8,
5038     RETRIEVE,
5039     "m",
5040     MACHINE_TABLE,
5041     "m.name, m.vendor, m.model, m.os, m.location, m.contact, m.billing_contact, m.account_number, 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",    
5042     ghba_fields,
5043     23,
5044     "m.account_number LIKE '%s' AND m.mach_id != 0 and s.snet_id = m.snet_id",
5045     1,
5046     "m.name",
5047     &ghst_validate,
5048   },
5049
5050   {
5051     /* Q_GHHA - GET_HOST_HWADDR */
5052     "get_host_hwaddr",
5053     "ghha",
5054     2,
5055     RETRIEVE,
5056     "m",
5057     MACHINE_TABLE,
5058     "m.hwaddr FROM machine m",
5059     ghha_fields,
5060     1,
5061     "m.name LIKE UPPER('%s')",
5062     1,
5063     NULL,
5064     NULL,
5065   },
5066
5067   {
5068     /* Q_AHST - ADD_HOST, v2 */ /* uses prefetch_value() for mach_id */
5069     "add_host",
5070     "ahst",
5071     2,
5072     APPEND,
5073     "m",
5074     MACHINE_TABLE,
5075     "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)",
5076     ahst2_fields,
5077     14,
5078     0,
5079     0,
5080     NULL,
5081     &ahst2_validate,
5082   },
5083
5084   {
5085     /* Q_AHST - ADD_HOST, v6 */ /* uses prefetch_value() for mach_id */
5086     "add_host",
5087     "ahst",
5088     6,
5089     APPEND,
5090     "m",
5091     MACHINE_TABLE,
5092     "INTO machine (name, vendor, model, os, location, contact, billing_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)), NVL('%s', CHR(0)), %s, %s, SYSDATE, %d, '%s', '%s', %d, %d, %d, SYSDATE, SYSDATE, %s, %s)",
5093     ahst6_fields,
5094     15,
5095     0,
5096     0,
5097     NULL,
5098     &ahst6_validate,
5099   },
5100
5101   {
5102     /* Q_AHST - ADD_HOST, v8 */ /* Uses prefetch_value() for mach_id */
5103     "add_host",
5104     "ahst",
5105     8,
5106     APPEND,
5107     "m",
5108     MACHINE_TABLE,
5109     "INTO machine (name, vendor, model, os, location, contact, billing_contact, account_number, 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)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, %s, SYSDATE, %d, '%s', '%s', %d, %d, %d, SYSDATE, SYSDATE, %s, %s)",
5110     ahst_fields,
5111     16,
5112     0,
5113     0,
5114     NULL,
5115     &ahst_validate,
5116   },
5117
5118   {
5119     /* Q_UHST - UPDATE_HOST, v2 */
5120     "update_host",
5121     "uhst",
5122     2,
5123     UPDATE,
5124     "m",
5125     MACHINE_TABLE,
5126     "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",
5127     uhst2_fields,
5128     14,
5129     "mach_id = %d",
5130     1,
5131     NULL,
5132     &uhst2_validate,
5133   },
5134
5135   {
5136     /* Q_UHST - UPDATE_HOST, v6 */
5137     "update_host",
5138     "uhst",
5139     6,
5140     UPDATE,
5141     "m",
5142     MACHINE_TABLE,
5143     "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)), billing_contact = NVL('%s', CHR(0)), use = %s, status = %s, snet_id = %d, address = '%s', owner_type = '%s', owner_id = %d, acomment = %d, ocomment = %d",
5144     uhst6_fields,
5145     15,
5146     "mach_id = %d",
5147     1,
5148     NULL,
5149     &uhst6_validate,
5150   },
5151
5152   {
5153     /* Q_UHST - UPDATE_HOST, v8 */
5154     "update_host",
5155     "uhst",
5156     8,
5157     UPDATE,
5158     "m",
5159     MACHINE_TABLE,
5160     "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)), billing_contact = NVL('%s', CHR(0)), account_number = NVL('%s', CHR(0)), use = %s, status = %s, snet_id = %d, address = '%s', owner_type = '%s', owner_id = %d, acomment = %d, ocomment = %d",
5161     uhst_fields,
5162     16,
5163     "mach_id = %d",
5164     1,
5165     NULL,
5166     &uhst_validate,
5167   },
5168
5169   {
5170     /* Q_UHHA - UPDATE_HOST_HWADDR */
5171     "update_host_hwaddr",
5172     "uhha",
5173     2,
5174     UPDATE,
5175     "m",
5176     MACHINE_TABLE,
5177     "machine SET hwaddr = NVL('%s', CHR(0))",
5178     uhha_fields,
5179     1,
5180     "mach_id = %d",
5181     1,
5182     NULL,
5183     &uhha_validate,
5184   },
5185
5186   {
5187     /* Q_DHST - DELETE_HOST */
5188     "delete_host",
5189     "dhst",
5190     2,
5191     DELETE,
5192     "m",
5193     MACHINE_TABLE,
5194     NULL,
5195     dhst_fields,
5196     0,
5197     "mach_id = %d",
5198     1,
5199     NULL,
5200     &dhst_validate,
5201   },
5202
5203   {
5204     /* Q_GMAC - GET_MACHINE */
5205     "get_machine",
5206     "gmac",
5207     2,
5208     RETRIEVE,
5209     "m",
5210     MACHINE_TABLE,
5211     "name, vendor, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM machine",
5212     gmac_fields,
5213     5,
5214     "name LIKE UPPER('%s') AND mach_id != 0",
5215     1,
5216     "name",
5217     &VDfix_modby,
5218   },
5219
5220   {
5221     /* Q_GHAL - GET_HOSTALIAS */
5222     "get_hostalias",
5223     "ghal",
5224     2,
5225     RETRIEVE,
5226     "a",
5227     HOSTALIAS_TABLE,
5228     "a.name, m.name FROM hostalias a, machine m",
5229     ghal_fields,
5230     2,
5231     "m.mach_id = a.mach_id and a.name LIKE UPPER('%s') AND m.name LIKE UPPER('%s')",
5232     2,
5233     "a.name",
5234     &ghal_validate,
5235   },
5236
5237   {
5238     /* Q_AHAL - ADD_HOSTALIAS */
5239     "add_hostalias",
5240     "ahal",
5241     2,
5242     APPEND,
5243     "a",
5244     HOSTALIAS_TABLE,
5245     "INTO hostalias (name, mach_id) VALUES (UPPER('%s'), %d)",
5246     ghal_fields,
5247     2,
5248     0,
5249     0,
5250     NULL,
5251     &ahal_validate,
5252   },
5253
5254   {
5255     /* Q_DHAL - DELETE_HOSTALIAS */
5256     "delete_hostalias",
5257     "dhal",
5258     2,
5259     DELETE,
5260     "a",
5261     HOSTALIAS_TABLE,
5262     NULL,
5263     ghal_fields,
5264     0,
5265     "name = UPPER('%s') AND mach_id = %d",
5266     2,
5267     NULL,
5268     &dhal_validate,
5269   },
5270
5271   {
5272     /* Q_GSNT - GET_SUBNET, v2 */
5273     "get_subnet",
5274     "gsnt",
5275     2,
5276     RETRIEVE,
5277     "s",
5278     SUBNET_TABLE,
5279     "name, description, saddr, mask, low, high, prefix, owner_type, owner_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM subnet",
5280     gsnt2_fields,
5281     12,
5282     "name LIKE UPPER('%s')",
5283     1,
5284     "name",
5285     &gsnt_validate,
5286   },
5287
5288   {
5289     /* Q_GSNT - GET_SUBNET, v8 */
5290     "get_subnet",
5291     "gsnt",
5292     8,
5293     RETRIEVE,
5294     "s",
5295     SUBNET_TABLE,
5296     "name, description, status, contact, account_number, saddr, mask, low, high, prefix, owner_type, owner_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM subnet",
5297     gsnt_fields,
5298     15,
5299     "name LIKE UPPER('%s')",
5300     1,
5301     "name",
5302     &gsnt_validate,
5303   },
5304
5305   {
5306     /* Q_ASNT - ADD_SUBNET, v2 */
5307     "add_subnet",
5308     "asnt",
5309     2,
5310     APPEND,
5311     "s",
5312     SUBNET_TABLE,
5313     "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)",
5314     asnt2_fields,
5315     9,
5316     0,
5317     0,
5318     NULL,
5319     &asnt2_validate,
5320   },
5321
5322   {
5323     /* Q_ASNT - ADD_SUBNET, v8 */
5324     "add_subnet",
5325     "asnt",
5326     8,
5327     APPEND,
5328     "s",
5329     SUBNET_TABLE,
5330     "INTO subnet (name, description, status, contact, account_number, saddr, mask, low, high, prefix, owner_type, owner_id, snet_id) VALUES (UPPER('%s'), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, %s, %s, %s, NVL('%s', CHR(0)), '%s', %d, %s)",
5331     asnt_fields,
5332     12,
5333     0,
5334     0,
5335     NULL,
5336     &asnt_validate,
5337   },
5338
5339   {
5340     /* Q_USNT - UPDATE_SUBNET, v2 */
5341     "update_subnet",
5342     "usnt",
5343     2,
5344     UPDATE,
5345     "s",
5346     SUBNET_TABLE,
5347     "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",
5348     usnt2_fields,
5349     9,
5350     "snet_id = %d",
5351     1,
5352     NULL,
5353     &usnt2_validate,
5354   },
5355
5356   {
5357     /* Q_USNT - UPDATE_SUBNET, v8 */
5358     "update_subnet",
5359     "usnt",
5360     8,
5361     UPDATE,
5362     "s",
5363     SUBNET_TABLE,
5364     "subnet SET name = UPPER('%s'), description = NVL('%s', CHR(0)), status = %s, contact = NVL('%s', CHR(0)), account_number = NVL('%s', CHR(0)), saddr = %s, mask = %s, low = %s, high = %s, prefix = NVL('%s', CHR(0)), owner_type = '%s', owner_id = %d",
5365     usnt_fields,
5366     12,
5367     "snet_id = %d",
5368     1,
5369     NULL,
5370     &usnt_validate,
5371   },
5372
5373   {
5374     /* Q_DSNT - DELETE_SUBNET */
5375     "delete_subnet",
5376     "dsnt",
5377     2,
5378     DELETE,
5379     "s",
5380     SUBNET_TABLE,
5381     NULL,
5382     dsnt_fields,
5383     0,
5384     "snet_id = %d",
5385     1,
5386     NULL,
5387     &dsnt_validate,
5388   },
5389
5390   {
5391     /* Q_GCLU - GET_CLUSTER */
5392     "get_cluster",
5393     "gclu",
5394     2,
5395     RETRIEVE,
5396     "c",
5397     CLUSTERS_TABLE,
5398     "name, description, location, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM clusters",
5399     gclu_fields,
5400     6,
5401     "name LIKE '%s' AND clu_id != 0",
5402     1,
5403     "name",
5404     &VDfix_modby,
5405   },
5406
5407   {
5408     /* Q_ACLU - ADD_CLUSTER */ /* uses prefetch_value() for clu_id */
5409     "add_cluster",
5410     "aclu",
5411     2,
5412     APPEND,
5413     "c",
5414     CLUSTERS_TABLE,
5415     "INTO clusters (name, description, location, clu_id) VALUES ('%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s)",
5416     aclu_fields,
5417     3,
5418     0,
5419     0,
5420     NULL,
5421     &aclu_validate,
5422   },
5423
5424   {
5425     /* Q_UCLU - UPDATE_CLUSTER */
5426     "update_cluster",
5427     "uclu",
5428     2,
5429     UPDATE,
5430     "c",
5431     CLUSTERS_TABLE,
5432     "clusters SET name = '%s', description = NVL('%s', CHR(0)), location = NVL('%s', CHR(0))",
5433     uclu_fields,
5434     3,
5435     "clu_id = %d",
5436     1,
5437     NULL,
5438     &uclu_validate,
5439   },
5440
5441   {
5442     /* Q_DCLU - DELETE_CLUSTER */
5443     "delete_cluster",
5444     "dclu",
5445     2,
5446     DELETE,
5447     "c",
5448     CLUSTERS_TABLE,
5449     NULL,
5450     dclu_fields,
5451     0,
5452     "clu_id = %d",
5453     1,
5454     NULL,
5455     &dclu_validate,
5456   },
5457
5458   {
5459     /* Q_GMCM - GET_MACHINE_TO_CLUSTER_MAP */
5460     "get_machine_to_cluster_map",
5461     "gmcm",
5462     2,
5463     RETRIEVE,
5464     "mcm",
5465     MCMAP_TABLE,
5466     "m.name, c.name FROM machine m, clusters c, mcmap mcm",
5467     gmcm_fields,
5468     2,
5469     "m.name LIKE UPPER('%s') AND c.name LIKE '%s' AND mcm.clu_id = c.clu_id AND mcm.mach_id = m.mach_id",
5470     2,
5471     "m.name",
5472     NULL,
5473   },
5474
5475   {
5476     /* Q_AMTC - ADD_MACHINE_TO_CLUSTER */
5477     "add_machine_to_cluster",
5478     "amtc",
5479     2,
5480     APPEND,
5481     "mcm",
5482     MCMAP_TABLE,
5483     "INTO mcmap (mach_id, clu_id) VALUES (%d, %d)",
5484     gmcm_fields,
5485     2,
5486     0,
5487     0,
5488     NULL,
5489     &amtc_validate,
5490   },
5491
5492   {
5493     /* Q_DMFC - DELETE_MACHINE_FROM_CLUSTER */
5494     "delete_machine_from_cluster",
5495     "dmfc",
5496     2,
5497     DELETE,
5498     "mcm",
5499     MCMAP_TABLE,
5500     0,
5501     gmcm_fields,
5502     0,
5503     "mach_id = %d AND clu_id = %d",
5504     2,
5505     NULL,
5506     &amtc_validate,
5507   },
5508
5509   {
5510     /* Q_GCLD - GET_CLUSTER_DATA */
5511     "get_cluster_data",
5512     "gcld",
5513     2,
5514     RETRIEVE,
5515     "svc",
5516     SVC_TABLE,
5517     "c.name, svc.serv_label, svc.serv_cluster FROM svc svc, clusters c",
5518     gcld_fields,
5519     3,
5520     "c.clu_id = svc.clu_id AND c.name LIKE '%s' AND svc.serv_label LIKE '%s'",
5521     2,
5522     "c.name, svc.serv_label",
5523     NULL,
5524   },
5525
5526   {
5527     /* Q_ACLD - ADD_CLUSTER_DATA */
5528     "add_cluster_data",
5529     "acld",
5530     2,
5531     APPEND,
5532     "svc",
5533     SVC_TABLE,
5534     "INTO svc (clu_id, serv_label, serv_cluster) VALUES (%d, '%s', '%s')",
5535     acld_fields,
5536     3,
5537     NULL,
5538     0,
5539     NULL,
5540     &acld_validate,
5541   },
5542
5543   {
5544     /* Q_DCLD - DELETE_CLUSTER_DATA */
5545     "delete_cluster_data",
5546     "dcld",
5547     2,
5548     DELETE,
5549     "svc",
5550     SVC_TABLE,
5551     NULL,
5552     acld_fields,
5553     0,
5554     "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
5555     3,
5556     NULL,
5557     &dcld_validate,
5558   },
5559
5560   {
5561     /* Q_GLIN - GET_LIST_INFO, v2 */
5562     "get_list_info",
5563     "glin",
5564     2,
5565     RETRIEVE,
5566     "l",
5567     LIST_TABLE,
5568     "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",
5569     glin2_fields,
5570     13,
5571     "name LIKE '%s'",
5572     1,
5573     "name",
5574     &glin_validate,
5575   },
5576
5577   {
5578     /* Q_GLIN - GET_LIST_INFO, v3 */
5579     "get_list_info",
5580     "glin",
5581     3,
5582     RETRIEVE,
5583     "l",
5584     LIST_TABLE,
5585     "name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, acl_type, acl_id, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM list",
5586     glin3_fields,
5587     14,
5588     "name LIKE '%s'",
5589     1,
5590     "name",
5591     &glin_validate,
5592   },
5593
5594   {
5595     /* Q_GLIN - GET_LIST_INFO, v4 */
5596     "get_list_info",
5597     "glin",
5598     4,
5599     RETRIEVE,
5600     "l",
5601     LIST_TABLE,
5602     "name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, acl_type, acl_id, memacl_type, memacl_id, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM list",
5603     glin4_fields,
5604     16,
5605     "name LIKE '%s'",
5606     1,
5607     "name",
5608     &glin_validate,
5609   },
5610
5611   {
5612     /* Q_GLIN - GET_LIST_INFO, v10 */
5613     "get_list_info",
5614     "glin",
5615     10,
5616     RETRIEVE,
5617     "l",
5618     LIST_TABLE,
5619     "l.name, l.active, l.publicflg, l.hidden, l.maillist, l.grouplist, l.gid, l.nfsgroup, l.mailman, m.name, l.acl_type, l.acl_id, l.memacl_type, l.memacl_id, l.description, TO_CHAR(l.modtime, 'DD-mon-YYYY HH24:MI:SS'), l.modby, l.modwith FROM list l, machine m",
5620     glin_fields,
5621     18,
5622     "l.name LIKE '%s' AND m.mach_id = l.mailman_id",
5623     1,
5624     "l.name",
5625     &glin_validate,
5626   },
5627
5628   {
5629     /* Q_EXLN - EXPAND_LIST_NAMES */
5630     "expand_list_names",
5631     "exln",
5632     2,
5633     RETRIEVE,
5634     "l",
5635     LIST_TABLE,
5636     "name FROM list",
5637     glin_fields,
5638     1,
5639     "name LIKE '%s' AND list_id != 0",
5640     1,
5641     "name",
5642     NULL,
5643   },
5644
5645   {
5646     /* Q_ALIS - ADD_LIST, v2 */ /* uses prefetch_value() for list_id */
5647     "add_list",
5648     "alis",
5649     2,
5650     APPEND,
5651     "l",
5652     LIST_TABLE,
5653     "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)",
5654     alis2_fields,
5655     10,
5656     0,
5657     0,
5658     NULL,
5659     &alis2_validate,
5660   },
5661
5662   {
5663     /* Q_ALIS - ADD_LIST, v3 */ /* uses prefetch_value() for list_id */
5664     "add_list",
5665     "alis",
5666     3,
5667     APPEND,
5668     "l",
5669     LIST_TABLE,
5670     "INTO list (name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, acl_type, acl_id, description, list_id) VALUES ('%s', %s, %s, %s, %s, %s, %s, %s, '%s', %d, NVL('%s', CHR(0)), %s)", 
5671     alis3_fields,
5672     11,
5673     0,
5674     0,
5675     NULL,
5676     &alis3_validate,
5677   },
5678
5679   {
5680     /* Q_ALIS - ADD_LIST, v4 */ /* uses prefetch_value() for list_id */
5681     "add_list",
5682     "alis",
5683     4,
5684     APPEND,
5685     "l",
5686     LIST_TABLE,
5687     "INTO list (name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, acl_type, acl_id, memacl_type, memacl_id, description, list_id) VALUES ('%s', %s, %s, %s, %s, %s, %s, %s, '%s', %d, '%s', %d, NVL('%s', CHR(0)), %s)",
5688     alis4_fields,
5689     13,
5690     0,
5691     0,
5692     NULL,
5693     &alis4_validate,
5694   },
5695
5696   {
5697     /* Q_ALIS - ADD_LIST, v10 */ /* uses prefetch_value() for list_id */
5698     "add_list",
5699     "alis",
5700     10,
5701     APPEND,
5702     "l",
5703     LIST_TABLE,
5704     "INTO list (name, active, publicflg, hidden, maillist, grouplist, gid, nfsgroup, mailman, mailman_id, acl_type, acl_id, memacl_type, memacl_id, description, list_id) VALUES ('%s', %s, %s, %s, %s, %s, %s, %s, %s, %d, '%s', %d, '%s', %d, NVL('%s', CHR(0)), %s)",
5705     alis_fields,
5706     15,
5707     0,
5708     0,
5709     NULL,
5710     &alis_validate,
5711   },
5712
5713   {
5714     /* Q_ULIS - UPDATE_LIST, v2 */
5715     "update_list",
5716     "ulis",
5717     2,
5718     UPDATE,
5719     "l",
5720     LIST_TABLE,
5721     "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))",
5722     ulis2_fields,
5723     10,
5724     "list_id = %d",
5725     1,
5726     NULL,
5727     &ulis2_validate,
5728   },
5729
5730   {
5731     /* Q_ULIS - UPDATE_LIST, v3 */
5732     "update_list",
5733     "ulis",
5734     3,
5735     UPDATE,
5736     "l",
5737     LIST_TABLE,
5738     "list SET name = '%s', active = %s, publicflg = %s, hidden = %s, maillist = %s, grouplist = %s, gid = %s, nfsgroup = %s, acl_type = '%s', acl_id = %d, description = NVL('%s', CHR(0))",
5739     ulis3_fields,
5740     11,
5741     "list_id = %d",
5742     1,
5743     NULL,
5744     &ulis3_validate,
5745   },
5746
5747   {
5748     /* Q_ULIS, UPDATE_LIST, v4 */
5749     "update_list",
5750     "ulis",
5751     4,
5752     UPDATE,
5753     "l",
5754     LIST_TABLE,
5755     "list SET name = '%s', active = %s, publicflg = %s, hidden = %s, maillist = %s, grouplist = %s, gid = %s, nfsgroup = %s, acl_type = '%s', acl_id = %d, memacl_type = '%s', memacl_id = %d, description = NVL('%s', CHR(0))",
5756     ulis4_fields,
5757     13,
5758     "list_id = %d",
5759     1,
5760     NULL,
5761     &ulis4_validate,
5762   },
5763
5764   {
5765     /* Q_ULIS, UPDATE_LIST, v10 */
5766     "update_list",
5767     "ulis",
5768     10,
5769     UPDATE,
5770     "l",
5771     LIST_TABLE,
5772     "list SET name = '%s', active = %s, publicflg = %s, hidden = %s, maillist = %s, grouplist = %s, gid = %s, nfsgroup = %s, mailman = %s, mailman_id = %d, acl_type = '%s', acl_id = %d, memacl_type = '%s', memacl_id = %d, description = NVL('%s', CHR(0))",
5773     ulis_fields,
5774     15,
5775     "list_id = %d",
5776     1,
5777     NULL,
5778     &ulis_validate,
5779   },
5780
5781   {
5782     /* Q_DLIS - DELETE_LIST */
5783     "delete_list",
5784     "dlis",
5785     2,
5786     DELETE,
5787     "l",
5788     LIST_TABLE,
5789     NULL,
5790     dlis_fields,
5791     0,
5792     "list_id = %d",
5793     1,
5794     NULL,
5795     &dlis_validate,
5796   },
5797
5798   {
5799     /* Q_AMTL - ADD_MEMBER_TO_LIST */
5800     "add_member_to_list",
5801     "amtl",
5802     2,
5803     APPEND,
5804     0,
5805     IMEMBERS_TABLE,
5806     0,
5807     amtl_fields,
5808     3,
5809     NULL,
5810     0,
5811     NULL,
5812     &amtl_validate,
5813   },
5814
5815   {
5816     /* Q_ATML - ADD_TAGGED_MEMBER_TO_LIST */
5817     "add_tagged_member_to_list",
5818     "atml",
5819     2,
5820     APPEND,
5821     0,
5822     IMEMBERS_TABLE,
5823     0,
5824     atml_fields,
5825     4,
5826     NULL,
5827     0,
5828     NULL,
5829     &atml_validate,
5830   },
5831
5832   {
5833     /* Q_TMOL - TAG_MEMBER_OF_LIST */
5834     "tag_member_of_list",
5835     "tmol",
5836     2,
5837     UPDATE,
5838     0,
5839     IMEMBERS_TABLE,
5840     0,
5841     atml_fields,
5842     1,
5843     0,
5844     3,
5845     NULL,
5846     &tmol_validate,
5847   },
5848
5849   {
5850     /* Q_DMFL - DELETE_MEMBER_FROM_LIST */
5851     "delete_member_from_list",
5852     "dmfl",
5853     2,
5854     DELETE,
5855     0,
5856     IMEMBERS_TABLE,
5857     NULL,
5858     amtl_fields,
5859     0,
5860     0,
5861     3,
5862     NULL,
5863     &dmfl_validate,
5864   },
5865
5866   {
5867     /* Q_GAUS - GET_ACE_USE */
5868     "get_ace_use",
5869     "gaus",
5870     2,
5871     RETRIEVE,
5872     0,
5873     0,
5874     0,
5875     gaus_fields,
5876     2,
5877     0,
5878     2,
5879     NULL,
5880     &gaus_validate,
5881   },
5882
5883   {
5884     /* Q_GHBO - GET_HOST_BY_OWNER */
5885     "get_host_by_owner",
5886     "ghbo",
5887     2,
5888     RETRIEVE,
5889     0,
5890     0,
5891     0,
5892     ghbo_fields,
5893     1,
5894     0,
5895     2,
5896     NULL,
5897     &ghbo_validate,
5898   },
5899
5900   {
5901     /* Q_QGLI - QUALIFIED_GET_LISTS */
5902     "qualified_get_lists",
5903     "qgli",
5904     2,
5905     RETRIEVE,
5906     0,
5907     LIST_TABLE,
5908     0,
5909     qgli_fields,
5910     1,
5911     0,
5912     5,
5913     NULL,
5914     &qgli_validate,
5915   },
5916
5917   {
5918     /* Q_GMOL - GET_MEMBERS_OF_LIST */
5919     "get_members_of_list",
5920     "gmol",
5921     2,
5922     RETRIEVE,
5923     NULL,
5924     IMEMBERS_TABLE,
5925     NULL,
5926     gmol_fields,
5927     2,
5928     NULL,
5929     1,
5930     NULL,
5931     &gmol_validate,
5932   },
5933
5934   {
5935     /* Q_GEML - GET_END_MEMBERS_OF_LIST */
5936     "get_end_members_of_list",
5937     "geml",
5938     2,
5939     RETRIEVE,
5940     NULL,
5941     IMEMBERS_TABLE,
5942     NULL,
5943     gmol_fields,
5944     2,
5945     NULL,
5946     1,
5947     NULL,
5948     &gmol_validate,
5949   },
5950
5951   {
5952     /* Q_GTML - GET_TAGGED_MEMBERS_OF_LIST */
5953     "get_tagged_members_of_list",
5954     "gtml",
5955     2,
5956     RETRIEVE,
5957     NULL,
5958     IMEMBERS_TABLE,
5959     NULL,
5960     gtml_fields,
5961     3,
5962     NULL,
5963     1,
5964     NULL,
5965     &gmol_validate,
5966   },
5967
5968   {
5969     /* Q_GLOM - GET_LISTS_OF_MEMBER */
5970     "get_lists_of_member",
5971     "glom",
5972     2,
5973     RETRIEVE,
5974     0,
5975     IMEMBERS_TABLE,
5976     0,
5977     glom_fields,
5978     6,
5979     0,
5980     2,
5981     NULL,
5982     &glom_validate,
5983   },
5984
5985   {
5986     /* Q_CMOL - COUNT_MEMBERS_OF_LIST */
5987     "count_members_of_list",
5988     "cmol",
5989     2,
5990     RETRIEVE,
5991     0,
5992     IMEMBERS_TABLE,
5993     0,
5994     cmol_fields,
5995     1,
5996     0,
5997     1,
5998     NULL,
5999     &cmol_validate,
6000   },
6001
6002   {
6003     /* Q_GSIN - GET_SERVER_INFO */
6004     "get_server_info",
6005     "gsin",
6006     2,
6007     RETRIEVE,
6008     "s",
6009     SERVERS_TABLE,
6010     "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",
6011     gsin_fields,
6012     16,
6013     "name LIKE UPPER('%s')",
6014     1,
6015     "name",
6016     &gsin_validate,
6017   },
6018
6019   {
6020     /* Q_QGSV - QUALIFIED_GET_SERVER */
6021     "qualified_get_server",
6022     "qgsv",
6023     2,
6024     RETRIEVE,
6025     0,
6026     SERVERS_TABLE,
6027     0,
6028     qgsv_fields,
6029     1,
6030     0,
6031     3,
6032     NULL,
6033     &qgsv_validate,
6034   },
6035
6036   {
6037     /* Q_ASIN - ADD_SERVER_INFO */
6038     "add_server_info",
6039     "asin",
6040     2,
6041     APPEND,
6042     "s",
6043     SERVERS_TABLE,
6044     "INTO servers (name, update_int, target_file, script, type, enable, acl_type, acl_id) VALUES (UPPER('%s'), %s, '%s', '%s', '%s', %s, '%s', %d)",
6045     asin_fields,
6046     8,
6047     NULL,
6048     0,
6049     NULL,
6050     &asin_validate,
6051   },
6052
6053   {
6054     /* Q_USIN - UPDATE_SERVER_INFO */
6055     "update_server_info",
6056     "usin",
6057     2,
6058     UPDATE,
6059     "s",
6060     SERVERS_TABLE,
6061     "servers SET update_int = %s, target_file = '%s', script = '%s', type = '%s', enable = %s, acl_type = '%s', acl_id = %d",
6062     asin_fields,
6063     7,
6064     "name = UPPER('%s')",
6065     1,
6066     NULL,
6067     &asin_validate,
6068   },
6069
6070   {
6071     /* Q_RSVE - RESET_SERVER_ERROR */
6072     "reset_server_error",
6073     "rsve",
6074     2,
6075     UPDATE,
6076     "s",
6077     SERVERS_TABLE,
6078     "servers SET harderror = 0, dfcheck = dfgen",
6079     dsin_fields,
6080     0,
6081     "name = UPPER('%s')",
6082     1,
6083     NULL,
6084     &rsve_validate,
6085   },
6086
6087   {
6088     /* Q_SSIF - SET_SERVER_INTERNAL_FLAGS */
6089     "set_server_internal_flags",
6090     "ssif",
6091     2,
6092     UPDATE,
6093     "s",
6094     SERVERS_TABLE,
6095     "servers SET dfgen = %s, dfcheck = %s, inprogress = %s, harderror = %s, errmsg = NVL('%s', CHR(0))",
6096     ssif_fields,
6097     5,
6098     "name = UPPER('%s')",
6099     1,
6100     NULL,
6101     &ssif_validate,
6102   },
6103
6104   {
6105     /* Q_DSIN - DELETE_SERVER_INFO */
6106     "delete_server_info",
6107     "dsin",
6108     2,
6109     DELETE,
6110     "s",
6111     SERVERS_TABLE,
6112     NULL,
6113     dsin_fields,
6114     0,
6115     "name = UPPER('%s')",
6116     1,
6117     NULL,
6118     &dsin_validate,
6119   },
6120
6121   {
6122     /* Q_GSHI - GET_SERVER_HOST_INFO */
6123     "get_server_host_info",
6124     "gshi",
6125     2,
6126     RETRIEVE,
6127     "sh",
6128     SERVERHOSTS_TABLE,
6129     "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",
6130     gshi_fields,
6131     16,
6132     "sh.service LIKE UPPER('%s') AND m.name LIKE UPPER('%s') AND m.mach_id = sh.mach_id",
6133     2,
6134     "sh.service, m.name",
6135     &gshi_validate,
6136   },
6137
6138   {
6139     /* Q_QGSH - QUALIFIED_GET_SERVER_HOST */
6140     "qualified_get_server_host",
6141     "qgsh",
6142     2,
6143     RETRIEVE,
6144     0,
6145     SERVERHOSTS_TABLE,
6146     0,
6147     qgsh_fields,
6148     2,
6149     0,
6150     6,
6151     NULL,
6152     &qgsh_validate,
6153   },
6154
6155   {
6156     /* Q_ASHI - ADD_SERVER_HOST_INFO */
6157     "add_server_host_info",
6158     "ashi",
6159     2,
6160     APPEND,
6161     "sh",
6162     SERVERHOSTS_TABLE,
6163     "INTO serverhosts (service, mach_id, enable, value1, value2, value3) VALUES (UPPER('%s'), %d, %s, %s, %s, NVL('%s', CHR(0)))",
6164     ashi_fields,
6165     6,
6166     NULL,
6167     0,
6168     NULL,
6169     &ashi_validate,
6170   },
6171
6172   {
6173     /* Q_USHI - UPDATE_SERVER_HOST_INFO */
6174     "update_server_host_info",
6175     "ushi",
6176     2,
6177     UPDATE,
6178     "sh",
6179     SERVERHOSTS_TABLE,
6180     "serverhosts SET enable = %s, value1 = %s, value2 = %s, value3 = NVL('%s', CHR(0))",
6181     ashi_fields,
6182     4,
6183     "service = UPPER('%s') AND mach_id = %d",
6184     2,
6185     NULL,
6186     &ashi_validate,
6187   },
6188
6189   {
6190     /* Q_RSHE - RESET_SERVER_HOST_ERROR */
6191     "reset_server_host_error",
6192     "rshe",
6193     2,
6194     UPDATE,
6195     "sh",
6196     SERVERHOSTS_TABLE,
6197     "serverhosts SET hosterror = 0",
6198     dshi_fields,
6199     0,
6200     "service = UPPER('%s') AND mach_id = %d",
6201     2,
6202     NULL,
6203     &rshe_validate,
6204   },
6205
6206   {
6207     /* Q_SSHO - SET_SERVER_HOST_OVERRIDE */
6208     "set_server_host_override",
6209     "ssho",
6210     2,
6211     UPDATE,
6212     "sh",
6213     SERVERHOSTS_TABLE,
6214     "serverhosts SET override = 1",
6215     dshi_fields,
6216     0,
6217     "service = UPPER('%s') AND mach_id = %d",
6218     2,
6219     NULL,
6220     &ssho_validate,
6221   },
6222
6223   {
6224     /* Q_SSHI - SET_SERVER_HOST_INTERNAL */
6225     "set_server_host_internal",
6226     "sshi",
6227     2,
6228     UPDATE,
6229     "s",
6230     SERVERHOSTS_TABLE,
6231     "serverhosts SET override = %s, success = %s, inprogress = %s, hosterror = %s, hosterrmsg = NVL('%s', CHR(0)), ltt = %s, lts = %s",
6232     sshi_fields,
6233     7,
6234     "service = UPPER('%s') AND mach_id = %d",
6235     2,
6236     NULL,
6237     &sshi_validate,
6238   },
6239
6240   {
6241     /* Q_DSHI - DELETE_SERVER_HOST_INFO */
6242     "delete_server_host_info",
6243     "dshi",
6244     2,
6245     DELETE,
6246     "sh",
6247     SERVERHOSTS_TABLE,
6248     NULL,
6249     dshi_fields,
6250     0,
6251     "service = UPPER('%s') AND mach_id = %d",
6252     2,
6253     NULL,
6254     &dshi_validate,
6255   },
6256
6257   {
6258     /* Q_GSLO - GET_SERVER_LOCATIONS */
6259     "get_server_locations",
6260     "gslo",
6261     2,
6262     RETRIEVE,
6263     "sh",
6264     SERVERHOSTS_TABLE,
6265     "sh.service, m.name FROM serverhosts sh, machine m",
6266     gslo_fields,
6267     2,
6268     "sh.service LIKE UPPER('%s') AND sh.mach_id = m.mach_id",
6269     1,
6270     "sh.service, m.name",
6271     NULL,
6272   },
6273
6274   {
6275     /* Q_GFSL - GET_FILESYS_BY_LABEL */
6276     "get_filesys_by_label",
6277     "gfsl",
6278     2,
6279     RETRIEVE,
6280     "fs",
6281     FILESYS_TABLE,
6282     "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",
6283     gfsl_fields,
6284     14,
6285     "fs.label LIKE '%s' AND fs.mach_id = m.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
6286     1,
6287     "fs.label",
6288     &gfsl_validate,
6289   },
6290
6291   {
6292     /* Q_GFSM - GET_FILESYS_BY_MACHINE */
6293     "get_filesys_by_machine",
6294     "gfsm",
6295     2,
6296     RETRIEVE,
6297     "fs",
6298     FILESYS_TABLE,
6299     "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",
6300     gfsm_fields,
6301     14,
6302     "fs.mach_id = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
6303     1,
6304     "fs.label",
6305     &gfsm_validate,
6306   },
6307
6308   {
6309     /* Q_GFSN - GET_FILESYS_BY_NFSPHYS */
6310     "get_filesys_by_nfsphys",
6311     "gfsn",
6312     2,
6313     RETRIEVE,
6314     "fs",
6315     FILESYS_TABLE,
6316     "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",
6317     gfsn_fields,
6318     14,
6319     "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'",
6320     2,
6321     "fs.label",
6322     &gfsn_validate,
6323   },
6324
6325   {
6326     /* Q_GFSG - GET_FILESYS_BY_GROUP */
6327     "get_filesys_by_group",
6328     "gfsg",
6329     2,
6330     RETRIEVE,
6331     "fs",
6332     FILESYS_TABLE,
6333     "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",
6334     gfsg_fields,
6335     14,
6336     "fs.owners = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
6337     1,
6338     "fs.label",
6339     &gfsg_validate,
6340   },
6341
6342   {
6343     /* Q_GFSP - GET_FILESYS_BY_PATH */
6344     "get_filesys_by_path",
6345     "gfsp",
6346     2,
6347     RETRIEVE,
6348     "fs",
6349     FILESYS_TABLE,
6350     "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",
6351     gfsp_fields,
6352     14,
6353     "fs.name LIKE '%s' AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = list_id",
6354     1,
6355     "fs.label",
6356     &VDfix_modby,
6357   },
6358
6359   {
6360     /* Q_AFIL - ADD_FILESYS */ /* uses prefetch_value() for filsys_id */
6361     "add_filesys",
6362     "afil",
6363     2,
6364     APPEND,
6365     "fs",
6366     FILESYS_TABLE,
6367     "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)",
6368     afil_fields,
6369     11,
6370     0,
6371     0,
6372     NULL,
6373     &afil_validate,
6374   },
6375
6376   {
6377     /* Q_UFIL - UPDATE_FILESYS */
6378     "update_filesys",
6379     "ufil",
6380     2,
6381     UPDATE,
6382     "fs",
6383     FILESYS_TABLE,
6384     "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'",
6385     ufil_fields,
6386     11,
6387     "filsys_id = %d",
6388     1,
6389     NULL,
6390     &ufil_validate,
6391   },
6392
6393   {
6394     /* Q_DFIL - DELETE_FILESYS */
6395     "delete_filesys",
6396     "dfil",
6397     2,
6398     DELETE,
6399     "fs",
6400     FILESYS_TABLE,
6401     NULL,
6402     dfil_fields,
6403     0,
6404     "filsys_id = %d",
6405     1,
6406     NULL,
6407     &dfil_validate,
6408   },
6409
6410   {
6411     /* Q_GFGM - GET_FSGROUP_MEMBERS */
6412     "get_fsgroup_members",
6413     "gfgm",
6414     2,
6415     RETRIEVE,
6416     "fg",
6417     FSGROUP_TABLE,
6418     "fs.label, fg.key FROM fsgroup fg, filesys fs",
6419     gfgm_fields,
6420     2,
6421     "fg.group_id = %d AND fs.filsys_id = fg.filsys_id",
6422     1,
6423     "fs.label, fg.key",
6424     &gfgm_validate,
6425   },
6426
6427   {
6428     /* Q_AFTG - ADD_FILESYS_TO_FSGROUP */
6429     "add_filesys_to_fsgroup",
6430     "aftg",
6431     2,
6432     APPEND,
6433     "fg",
6434     FSGROUP_TABLE,
6435     "INTO fsgroup (group_id, filsys_id, key) VALUES (%d, %d, '%s')",
6436     gfgm_fields,
6437     3,
6438     NULL,
6439     0,
6440     NULL,
6441     &aftg_validate,
6442   },
6443
6444   {
6445     /* Q_RFFG - REMOVE_FILESYS_FROM_FSGROUP */
6446     "remove_filesys_from_fsgroup",
6447     "rffg",
6448     2,
6449     DELETE,
6450     "fg",
6451     FSGROUP_TABLE,
6452     NULL,
6453     gfgm_fields,
6454     0,
6455     "group_id = %d AND filsys_id = %d",
6456     2,
6457     NULL,
6458     &aftg_validate,
6459   },
6460
6461   {
6462     /* Q_GANF - GET_ALL_NFSPHYS */
6463     "get_all_nfsphys",
6464     "ganf",
6465     2,
6466     RETRIEVE,
6467     "np",
6468     NFSPHYS_TABLE,
6469     "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",
6470     ganf_fields,
6471     9,
6472     "m.mach_id = np.mach_id",
6473     0,
6474     "m.name, np.dir",
6475     &VDfix_modby,
6476   },
6477
6478   {
6479     /* Q_GNFP - GET_NFSPHYS */
6480     "get_nfsphys",
6481     "gnfp",
6482     2,
6483     RETRIEVE,
6484     "np",
6485     NFSPHYS_TABLE,
6486     "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",
6487     gnfp_fields,
6488     9,
6489     "np.mach_id = %d AND np.dir LIKE '%s' AND m.mach_id = np.mach_id",
6490     2,
6491     "m.name, np.dir",
6492     &gnfp_validate,
6493   },
6494
6495   {
6496     /* Q_ANFP - ADD_NFSPHYS */ /* uses prefetch_value() for nfsphys_id */
6497     "add_nfsphys",
6498     "anfp",
6499     2,
6500     APPEND,
6501     "np",
6502     NFSPHYS_TABLE,
6503     "INTO nfsphys (mach_id, dir, device, status, allocated, partsize, nfsphys_id) VALUES (%d, '%s', NVL('%s', CHR(0)), %s, %s, %s, %s)",
6504     ganf_fields,
6505     6,
6506     0,
6507     0,
6508     NULL,
6509     &anfp_validate,
6510   },
6511
6512   {
6513     /* Q_UNFP - UPDATE_NFSPHYS */
6514     "update_nfsphys",
6515     "unfp",
6516     2,
6517     UPDATE,
6518     "np",
6519     NFSPHYS_TABLE,
6520     "nfsphys SET device = NVL('%s', CHR(0)), status = %s, allocated = %s, partsize = %s",
6521     ganf_fields,
6522     4,
6523     "mach_id = %d AND dir = '%s'",
6524     2,
6525     NULL,
6526     &unfp_validate,
6527   },
6528
6529   {
6530     /* Q_AJNF - ADJUST_NFSPHYS_ALLOCATION */
6531     "adjust_nfsphys_allocation",
6532     "ajnf",
6533     2,
6534     UPDATE,
6535     "np",
6536     NFSPHYS_TABLE,
6537     "nfsphys SET allocated = allocated + %s",
6538     ajnf_fields,
6539     1,
6540     "mach_id = %d AND dir = '%s'",
6541     2,
6542     NULL,
6543     &ajnf_validate,
6544   },
6545
6546   {
6547     /* Q_DNFP - DELETE_NFSPHYS */
6548     "delete_nfsphys",
6549     "dnfp",
6550     2,
6551     DELETE,
6552     "np",
6553     NFSPHYS_TABLE,
6554     NULL,
6555     dnfp_fields,
6556     0,
6557     "mach_id = %d AND dir = '%s'",
6558     2,
6559     NULL,
6560     &dnfp_validate,
6561   },
6562
6563   {
6564     /* Q_GQOT - GET_QUOTA */
6565     "get_quota",
6566     "gqot",
6567     2,
6568     RETRIEVE,
6569     "q",
6570     QUOTA_TABLE,
6571     "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",
6572     gqot_fields,
6573     9,
6574     "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",
6575     3,
6576     NULL,
6577     &gqot_validate,
6578   },
6579
6580   {
6581     /* Q_GQBF - GET_QUOTA_BY_FILESYS */
6582     "get_quota_by_filesys",
6583     "gqbf",
6584     2,
6585     RETRIEVE,
6586     "q",
6587     QUOTA_TABLE,
6588     "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",
6589     gqbf_fields,
6590     9,
6591     "fs.label LIKE '%s' AND fs.filsys_id = q.filsys_id AND m.mach_id = fs.mach_id",
6592     1,
6593     "fs.label, q.type",
6594     &gqbf_validate,
6595   },
6596
6597   {
6598     /* Q_AQOT - ADD_QUOTA */ /* prefetch_filsys() gets last 1 value */
6599     "add_quota",
6600     "aqot",
6601     2,
6602     APPEND,
6603     0,
6604     QUOTA_TABLE,
6605     "INTO quota (filsys_id, type, entity_id, quota, phys_id) VALUES ('%s', %d, %d, %s, %s)",
6606     aqot_fields,
6607     4,
6608     NULL,
6609     0,
6610     NULL,
6611     &aqot_validate,
6612   },
6613
6614   {
6615     /* Q_UQOT - UPDATE_QUOTA */
6616     "update_quota",
6617     "uqot",
6618     2,
6619     UPDATE,
6620     0,
6621     QUOTA_TABLE,
6622     "quota SET quota = %s",
6623     aqot_fields,
6624     1,
6625     0,
6626     3,
6627     NULL,
6628     &uqot_validate,
6629   },
6630
6631   {
6632     /* Q_DQOT - DELETE_QUOTA */
6633     "delete_quota",
6634     "dqot",
6635     2,
6636     DELETE,
6637     0,
6638     QUOTA_TABLE,
6639     NULL,
6640     aqot_fields,
6641     0,
6642     0,
6643     3,
6644     NULL,
6645     &dqot_validate,
6646   },
6647
6648   {
6649     /* Q_GNFQ - GET_NFS_QUOTAS */
6650     "get_nfs_quota",
6651     "gnfq",
6652     2,
6653     RETRIEVE,
6654     "q",
6655     QUOTA_TABLE,
6656     "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",
6657     gnfq_fields,
6658     8,
6659     "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'",
6660     2,
6661     "fs.label, u.login",
6662     &gnfq_validate,
6663   },
6664
6665   {
6666     /* Q_GNQP - GET_NFS_QUOTAS_BY_PARTITION */
6667     "get_nfs_quotas_by_partition",
6668     "gnqp",
6669     2,
6670     RETRIEVE,
6671     "q",
6672     QUOTA_TABLE,
6673     "fs.label, u.login, q.quota, np.dir, m.name FROM quota q, filesys fs, users u, nfsphys np, machine m",
6674     gnqp_fields,
6675     5,
6676     "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",
6677     2,
6678     "fs.label",
6679     NULL,
6680   },
6681
6682   {
6683     /* Q_ANFQ - ADD_NFS_QUOTA */ /* prefetch_filsys() gets last 1 value */
6684     "add_nfs_quota",
6685     "anfq",
6686     2,
6687     APPEND,
6688     0,
6689     QUOTA_TABLE,
6690     "INTO quota (type, filsys_id, entity_id, quota, phys_id ) VALUES ('USER', %d, %d, %s, %s)",
6691     anfq_fields,
6692     3,
6693     NULL,
6694     0,
6695     NULL,
6696     &anfq_validate,
6697   },
6698
6699   {
6700     /* Q_UNFQ - UPDATE_NFS_QUOTA */
6701     "update_nfs_quota",
6702     "unfq",
6703     2,
6704     UPDATE,
6705     0,
6706     QUOTA_TABLE,
6707     "quota SET quota = %s",
6708     anfq_fields,
6709     1,
6710     0,
6711     2,
6712     NULL,
6713     &unfq_validate,
6714   },
6715
6716   {
6717     /* Q_DNFQ - DELETE_NFS_QUOTA */
6718     "delete_nfs_quota",
6719     "dnfq",
6720     2,
6721     DELETE,
6722     0,
6723     QUOTA_TABLE,
6724     NULL,
6725     anfq_fields,
6726     0,
6727     0,
6728     2,
6729     NULL,
6730     &dnfq_validate,
6731   },
6732
6733   {
6734     /* Q_GZCL - GET_ZEPHYR_CLASS, v2 */
6735     "get_zephyr_class",
6736     "gzcl",
6737     2,
6738     RETRIEVE,
6739     "z",
6740     ZEPHYR_TABLE,
6741     "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",
6742     gzcl2_fields,
6743     12,
6744     "class LIKE '%s'",
6745     1,
6746     "class",
6747     &gzcl_validate,
6748   },
6749
6750   {
6751     /* Q_GZCL - GET_ZEPHYR_CLASS, v5 */
6752     "get_zephyr_class",
6753     "gzcl",
6754     5,
6755     RETRIEVE,
6756     "z",
6757     ZEPHYR_TABLE,
6758     "class, xmt_type, xmt_id, sub_type, sub_id, iws_type, iws_id, iui_type, iui_id, owner_type, owner_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM zephyr",
6759     gzcl_fields,
6760     14,
6761     "class LIKE '%s'",
6762     1,
6763     "class",
6764     &gzcl_validate,
6765   },
6766
6767   {
6768     /* Q_AZCL - ADD_ZEPHYR_CLASS, v2 */
6769     "add_zephyr_class",
6770     "azcl",
6771     2,
6772     APPEND,
6773     "z",
6774     ZEPHYR_TABLE,
6775     "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)",
6776     azcl2_fields,
6777     9,
6778     0,
6779     0,
6780     NULL,
6781     &azcl2_validate,
6782   },
6783
6784   {
6785     /* Q_AZCL - ADD_ZEPHYR_CLASS, v5 */
6786     "add_zephyr_class",
6787     "azcl",
6788     5,
6789     APPEND,
6790     "z",
6791     ZEPHYR_TABLE,
6792     "INTO zephyr (class, xmt_type, xmt_id, sub_type, sub_id, iws_type, iws_id, iui_type, iui_id, owner_type, owner_id) VALUES ('%s', '%s', %d, '%s', %d, '%s', %d, '%s', %d, '%s', %d)",
6793     azcl_fields,
6794     11,
6795     0,
6796     0,
6797     NULL,
6798     &azcl_validate,
6799   },
6800
6801   {
6802     /* Q_UZCL - UPDATE_ZEPHYR_CLASS, v2 */
6803     "update_zephyr_class",
6804     "uzcl",
6805     2,
6806     UPDATE,
6807     "z",
6808     ZEPHYR_TABLE,
6809     "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",
6810     uzcl2_fields,
6811     9,
6812     "class = '%s'",
6813     1,
6814     NULL,
6815     &uzcl2_validate,
6816   },
6817
6818   {
6819     /* Q_UZCL - UPDATE_ZEPHYR_CLASS, v5 */
6820     "update_zephyr_class",
6821     "uzcl",
6822     5,
6823     UPDATE,
6824     "z",
6825     ZEPHYR_TABLE,
6826     "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, owner_type = '%s', owner_id = %d",
6827     uzcl_fields,
6828     11,
6829     "class = '%s'",
6830     1,
6831     NULL,
6832     &uzcl_validate,
6833   },
6834
6835   {
6836     /* Q_DZCL - DELETE_ZEPHYR_CLASS */
6837     "delete_zephyr_class",
6838     "dzcl",
6839     2,
6840     DELETE,
6841     "z",
6842     ZEPHYR_TABLE,
6843     0,
6844     uzcl_fields,
6845     0,
6846     "class = '%s'",
6847     1,
6848     NULL,
6849     &dzcl_validate,
6850   },
6851
6852   {
6853     /* Q_GSHA - GET_SERVER_HOST_ACCESS */
6854     "get_server_host_access",
6855     "gsha",
6856     2,
6857     RETRIEVE,
6858     "ha",
6859     HOSTACCESS_TABLE,
6860     "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",
6861     gsha_fields,
6862     6,
6863     "m.name LIKE UPPER('%s') AND ha.mach_id = m.mach_id",
6864     1,
6865     "m.name",
6866     &gsha_validate,
6867   },
6868
6869   {
6870     /* Q_ASHA - ADD_SERVER_HOST_ACCESS */
6871     "add_server_host_access",
6872     "asha",
6873     2,
6874     APPEND,
6875     "ha",
6876     HOSTACCESS_TABLE,
6877     "INTO hostaccess (mach_id, acl_type, acl_id) VALUES (%d, '%s', %d)",
6878     asha_fields,
6879     3,
6880     0,
6881     0,
6882     NULL,
6883     &asha_validate,
6884   },
6885
6886   {
6887     /* Q_USHA - UPDATE_SERVER_HOST_ACCESS */
6888     "update_server_host_access",
6889     "usha",
6890     2,
6891     UPDATE,
6892     "ha",
6893     HOSTACCESS_TABLE,
6894     "hostaccess SET acl_type = '%s', acl_id = %d",
6895     asha_fields,
6896     2,
6897     "mach_id = %d",
6898     1,
6899     NULL,
6900     &asha_validate,
6901   },
6902
6903   {
6904     /* Q_DSHA - DELETE_SERVER_HOST_ACCESS */
6905     "delete_server_host_access",
6906     "dsha",
6907     2,
6908     DELETE,
6909     "ha",
6910     HOSTACCESS_TABLE,
6911     0,
6912     asha_fields,
6913     0,
6914     "mach_id = %d",
6915     1,
6916     NULL,
6917     &VDmach,
6918   },
6919
6920   {
6921     /* Q_GACL - GET_ACL */
6922     "get_acl",
6923     "gacl",
6924     2,
6925     RETRIEVE,
6926     "ac",
6927     ACL_TABLE,
6928     "m.name, ac.target, ac.kind, l.name FROM acl ac, machine m, list l",
6929     gacl_fields,
6930     4,
6931     "m.mach_id = %d AND m.mach_id = ac.mach_id AND ac.target LIKE '%s' AND l.list_id = ac.list_id",
6932     2,
6933     "m.name, ac.target, ac.kind",
6934     &gacl_validate,
6935   },
6936
6937   {
6938     /* Q_AACL - ADD_ACL */
6939     "add_acl",
6940     "aacl",
6941     2,
6942     APPEND,
6943     "ac",
6944     ACL_TABLE,
6945     "INTO acl (mach_id, target, kind, list_id) VALUES (%d, '%s', '%s', %d)",
6946     aacl_fields,
6947     4,
6948     0,
6949     0,
6950     NULL,
6951     &aacl_validate,
6952   },
6953
6954   {
6955     /* Q_DACL - DELETE_ACL */
6956     "delete_acl",
6957     "dacl",
6958     2,
6959     DELETE,
6960     "ac",
6961     ACL_TABLE,
6962     0,
6963     dacl_fields,
6964     0,
6965     "mach_id = %d AND target = '%s'",
6966     2,
6967     NULL,
6968     &gacl_validate,
6969   },
6970
6971   {
6972     /* Q_GSVC - GET_SERVICE */
6973     "get_service",
6974     "gsvc",
6975     2,
6976     RETRIEVE,
6977     "ss",
6978     SERVICES_TABLE,
6979     "name, protocol, port, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM services",
6980     gsvc_fields,
6981     7,
6982     "name LIKE '%s' AND protocol LIKE '%s'",
6983     2,
6984     "name",
6985     &VDfix_modby,
6986   },
6987
6988   {
6989     /* Q_ASVC - ADD_SERVICE */
6990     "add_service",
6991     "asvc",
6992     2,
6993     APPEND,
6994     "ss",
6995     SERVICES_TABLE,
6996     "INTO services (name, protocol, port, description) VALUES ('%s', '%s', %s, NVL('%s', CHR(0)))",
6997     asvc_fields,
6998     4,
6999     NULL,
7000     0,
7001     NULL,
7002     &asvc_validate,
7003   },
7004
7005   {
7006     /* Q_DSVC - DELETE_SERVICE */
7007     "delete_service",
7008     "dsvc",
7009     2,
7010     DELETE,
7011     "ss",
7012     SERVICES_TABLE,
7013     0,
7014     dsvc_fields,
7015     0,
7016     "name = '%s' AND protocol = '%s'",
7017     2,
7018     NULL,
7019     &dsvc_validate,
7020   },
7021
7022   {
7023     /* Q_GPRN - GET_PRINTER */
7024     "get_printer",
7025     "gprn",
7026     2,
7027     RETRIEVE,
7028     "pr",
7029     PRINTERS_TABLE,
7030     "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",
7031     gprn_fields,
7032     19,
7033     "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",
7034     1,
7035     "pr.name",
7036     &VDfix_modby,
7037   },
7038
7039   {
7040     /* Q_GPBD - GET_PRINTER_BY_DUPLEXNAME */
7041     "get_printer_by_duplexname",
7042     "gpbd",
7043     2,
7044     RETRIEVE,
7045     "pr",
7046     PRINTERS_TABLE,
7047     "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",
7048     gpbd_fields,
7049     19,
7050     "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",
7051     1,
7052     "pr.name",
7053     &VDfix_modby,
7054   },
7055
7056   {
7057     /* Q_GPBE - GET_PRINTER_BY_ETHERNET */
7058     "get_printer_by_ethernet",
7059     "gpbe",
7060     2,
7061     RETRIEVE,
7062     "pr",
7063     PRINTERS_TABLE,
7064     "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",
7065     gpbd_fields,
7066     19,
7067     "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",
7068     1,
7069     "pr.name",
7070     &VDfix_modby,
7071   },
7072
7073   {
7074     /* Q_GPBH - GET_PRINTER_BY_HOSTNAME */
7075     "get_printer_by_hostname",
7076     "gpbh",
7077     2,
7078     RETRIEVE,
7079     "pr",
7080     PRINTERS_TABLE,
7081     "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",
7082     gpbh_fields,
7083     19,
7084     "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",
7085     1,
7086     "pr.name",
7087     &VDfix_modby,
7088   },
7089
7090   {
7091     /* Q_GPBR - GET_PRINTER_BY_RM */
7092     "get_printer_by_rm",
7093     "gpbr",
7094     2,
7095     RETRIEVE,
7096     "pr",
7097     PRINTERS_TABLE,
7098     "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",
7099     gpbr_fields,
7100     19,
7101     "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",
7102     1,
7103     "pr.name",
7104     &VDfix_modby,
7105   },
7106
7107   {
7108     /* Q_GPBL - GET_PRINTER_BY_LOCATION */
7109     "get_printer_by_location",
7110     "gpbl",
7111     2,
7112     RETRIEVE,
7113     "pr",
7114     PRINTERS_TABLE,
7115     "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",
7116     gpbl_fields,
7117     19,
7118     "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",
7119     1,
7120     "pr.name",
7121     &VDfix_modby,
7122   },
7123
7124   {
7125     /* Q_GPBC - GET_PRINTER_BY_CONTACT */
7126     "get_printer_by_contact",
7127     "gpbc",
7128     2,
7129     RETRIEVE,
7130     "pr",
7131     PRINTERS_TABLE,
7132     "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",
7133     gpbc_fields,
7134     19,
7135     "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",
7136     1,
7137     "pr.name",
7138     &VDfix_modby,
7139   },
7140
7141   {
7142     /* Q_APRN - ADD_PRINTER */
7143     "add_printer",
7144     "aprn",
7145     2,
7146     APPEND,
7147     "pr",
7148     PRINTERS_TABLE,
7149     "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)))",
7150     aprn_fields,
7151     16,
7152     0,
7153     0,
7154     NULL,
7155     &aprn_validate,
7156   },
7157
7158   {
7159     /* Q_UPRN - UPDATE_PRINTER */
7160     "update_printer",
7161     "uprn",
7162     2,
7163     UPDATE,
7164     "pr",
7165     PRINTERS_TABLE,
7166     "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))",
7167     uprn_fields,
7168     16,
7169     0,
7170     0,
7171     NULL,
7172     &uprn_validate,
7173   },
7174
7175   {
7176     /* Q_DPRN - DELETE_PRINTER */
7177     "delete_printer",
7178     "dprn",
7179     2,
7180     DELETE,
7181     "pr",
7182     PRINTERS_TABLE,
7183     0,
7184     aprn_fields,
7185     0,
7186     "name = '%s'",
7187     1,
7188     NULL,
7189     &dprn_validate,
7190   },
7191
7192   {
7193     /* Q_GPSV - GET_PRINT_SERVER */
7194     "get_print_server",
7195     "gpsv",
7196     2,
7197     RETRIEVE,
7198     "ps",
7199     PRINTSERVERS_TABLE,
7200     "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",
7201     gpsv_fields,
7202     9,
7203     "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",
7204     1,
7205     NULL,
7206     &gpsv_validate,
7207   },
7208
7209   {
7210     /* Q_APSV - ADD_PRINT_SERVER */
7211     "add_print_server",
7212     "apsv",
7213     2,
7214     APPEND,
7215     "ps",
7216     PRINTSERVERS_TABLE,
7217     "INTO printservers (mach_id, kind, printer_types, owner_type, owner_id, lpc_acl) VALUES (%d, '%s', %d, '%s', %d, %d)",
7218     apsv_fields,
7219     6,
7220     0,
7221     0,
7222     NULL,
7223     &apsv_validate,
7224   },
7225
7226   {
7227     /* Q_UPSV - UPDATE_PRINT_SERVER */
7228     "update_print_server",
7229     "upsv",
7230     2,
7231     UPDATE,
7232     "ps",
7233     PRINTSERVERS_TABLE,
7234     "printservers SET kind = '%s', printer_types = %d, owner_type = '%s', owner_id = %d, lpc_acl = %d",
7235     apsv_fields,
7236     5,
7237     "mach_id = %d",
7238     1,
7239     NULL,
7240     &apsv_validate,
7241   },
7242
7243   {
7244     /* Q_DPSV - DELETE_PRINT_SERVER */
7245     "delete_print_server",
7246     "dpsv",
7247     2,
7248     DELETE,
7249     "ps",
7250     PRINTSERVERS_TABLE,
7251     0,
7252     dpsv_fields,
7253     0,
7254     "mach_id = %d",
7255     1,
7256     NULL,
7257     &dpsv_validate,
7258   },
7259
7260   {
7261     /* Q_GALI - GET_ALIAS */
7262     "get_alias",
7263     "gali",
7264     2,
7265     RETRIEVE,
7266     "a",
7267     ALIAS_TABLE,
7268     "name, type, trans FROM alias",
7269     gali_fields,
7270     3,
7271     "name LIKE '%s' AND type LIKE '%s' AND trans LIKE '%s'",
7272     3,
7273     "type, name, trans",
7274     NULL,
7275   },
7276
7277   {
7278     /* Q_AALI - ADD_ALIAS */
7279     "add_alias",
7280     "aali",
7281     2,
7282     APPEND,
7283     "a",
7284     ALIAS_TABLE,
7285     "INTO alias (name, type, trans) VALUES ('%s', '%s', '%s')",
7286     aali_fields,
7287     3,
7288     NULL,
7289     0,
7290     NULL,
7291     &aali_validate,
7292   },
7293
7294   {
7295     /* Q_DALI - DELETE_ALIAS */
7296     "delete_alias",
7297     "dali",
7298     2,
7299     DELETE,
7300     "a",
7301     ALIAS_TABLE,
7302     NULL,
7303     aali_fields,
7304     0,
7305     "name = '%s' AND type = '%s' AND  trans = '%s'",
7306     3,
7307     NULL,
7308     &dali_validate,
7309   },
7310
7311   {
7312     /* Q_GVAL - GET_VALUE */
7313     "get_value",
7314     "gval",
7315     2,
7316     RETRIEVE,
7317     "val",
7318     NUMVALUES_TABLE,
7319     "value FROM numvalues",
7320     gval_fields,
7321     1,
7322     "name = '%s'",
7323     1,
7324     NULL,
7325     &gval_validate,
7326   },
7327
7328   {
7329     /* Q_AVAL - ADD_VALUE */
7330     "add_value",
7331     "aval",
7332     2,
7333     APPEND,
7334     "val",
7335     NUMVALUES_TABLE,
7336     "INTO numvalues (name, value) VALUES ('%s', %s)",
7337     aval_fields,
7338     2,
7339     NULL,
7340     0,
7341     NULL,
7342     &aval_validate,
7343   },
7344
7345   {
7346     /* Q_UVAL - UPDATE_VALUE */
7347     "update_value",
7348     "uval",
7349     2,
7350     UPDATE,
7351     "val",
7352     NUMVALUES_TABLE,
7353     "numvalues SET value = %s",
7354     aval_fields,
7355     1,
7356     "name = '%s'",
7357     1,
7358     NULL,
7359     &aval_validate,
7360   },
7361
7362   {
7363     /* Q_DVAL - DELETE_VALUE */
7364     "delete_value",
7365     "dval",
7366     2,
7367     DELETE,
7368     "val",
7369     NUMVALUES_TABLE,
7370     NULL,
7371     dval_fields,
7372     0,
7373     "name = '%s'",
7374     1,
7375     NULL,
7376     &aval_validate,
7377   },
7378
7379   {
7380     /* Q_GATS - GET_ALL_TABLE_STATS */
7381     "get_all_table_stats",
7382     "gats",
7383     2,
7384     RETRIEVE,
7385     "tbs",
7386     TBLSTATS_TABLE,
7387     "table_name, appends, updates, deletes, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS') FROM tblstats",
7388     gats_fields,
7389     5,
7390     NULL,
7391     0,
7392     "table_name",
7393     0,
7394   },
7395
7396   {
7397     /* Q__SDL - _SET_DEBUG_LEVEL */
7398     "_set_debug_level",
7399     "_sdl",
7400     2,
7401     UPDATE,
7402     NULL,
7403     0,
7404     NULL,
7405     _sdl_fields,
7406     1,
7407     NULL,
7408     0,
7409     NULL,
7410     &_sdl_validate,
7411   },
7412
7413   {
7414     /* Q_GUSL - GET_USER_SIDS_BY_LOGIN, v4 */
7415     "get_user_sids_by_login",
7416     "gusl",
7417     4,
7418     RETRIEVE,
7419     "s",
7420     USERSIDS_TABLE,
7421     "u.login, us.sid, TO_CHAR(us.created, 'YYYY-MM-DD HH24:MI:SS') FROM users u, usersids us",
7422     gusl_fields,
7423     3,
7424     "us.users_id = %d AND u.users_id = us.users_id AND SUBSTR(us.sid, 1, LENGTH(us.sid)-8) = '%s'",
7425     2,
7426     NULL,
7427     &gusl_validate,
7428   },
7429
7430   {
7431     /* Q_AUSL - ADD_USER_SID_BY_LOGIN, v4 */
7432     "add_user_sid_by_login",
7433     "ausl",
7434     4,
7435     APPEND,
7436     "s",
7437     USERSIDS_TABLE,
7438     "INTO usersids (users_id, sid) VALUES (%d, '%s')",
7439     ausl_fields,
7440     2,
7441     NULL,
7442     0,
7443     NULL,
7444     &ausl_validate,
7445   },
7446   
7447   {
7448     /* Q_GLSN - GET_LIST_SIDS_BY_NAME, v4 */
7449     "get_list_sids_by_name",
7450     "glsn",
7451     4,
7452     RETRIEVE,
7453     "s",
7454     LISTSIDS_TABLE,
7455     "l.name, ls.sid, TO_CHAR(ls.created, 'YYYY-MM-DD HH24:MI:SS') FROM list l, listsids ls",
7456     glsn_fields,
7457     3,
7458     "ls.list_id = %d AND l.list_id = ls.list_id AND SUBSTR(ls.sid, 1, LENGTH(ls.sid)-8) = '%s'",
7459     2,
7460     NULL,
7461     &glsn_validate,
7462   },
7463
7464   {
7465     /* Q_ALSN - ADD_LIST_SID_BY_NAME, v4 */
7466     "add_list_sid_by_name",
7467     "alsn",
7468     4,
7469     APPEND,
7470     "s",
7471     LISTSIDS_TABLE,
7472     "INTO listsids (list_id, sid) VALUES (%d, '%s')",
7473     alsn_fields,
7474     2,
7475     NULL,
7476     0,
7477     NULL,
7478     &alsn_validate,
7479   },
7480
7481   {
7482     /* Q_GDDS - GET_DISTINCT_DOMAIN_SIDS, v4 */
7483     "get_distinct_domain_sids",
7484     "gdds",
7485     4,
7486     RETRIEVE,
7487     "s",
7488     USERSIDS_TABLE,
7489     "DISTINCT SUBSTR(sid, 1, LENGTH(sid)-8) FROM usersids",
7490     gdds_fields,
7491     1,
7492     NULL,
7493     0,
7494     NULL,
7495     NULL,
7496   },
7497
7498   {
7499     /* Q_GCON - GET_CONTAINER, v7 */
7500     "get_container",
7501     "gcon",
7502     7,
7503     RETRIEVE,
7504     "c",
7505     CONTAINERS_TABLE,
7506     "name, description, location, contact, acl_type, acl_id, memacl_type, memacl_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM containers",
7507     gcon7_fields,
7508     11,
7509     "LOWER(name) LIKE LOWER('%s') AND cnt_id != 0",
7510     1,
7511     NULL,
7512     &gcon_validate,
7513   },
7514
7515   {
7516     /* Q_GCON - GET_CONTAINER, v9 */
7517     "get_container",
7518     "gcon",
7519     9,
7520     RETRIEVE,
7521     "c",
7522     CONTAINERS_TABLE,
7523     "name, publicflg, description, location, contact, acl_type, acl_id, memacl_type, memacl_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM containers",
7524     gcon_fields,
7525     12,
7526     "LOWER(name) LIKE LOWER('%s') AND cnt_id != 0",
7527     1,
7528     NULL,
7529     &gcon_validate,
7530   },
7531
7532   {
7533     /* Q_ACON - ADD_CONTAINER, v7 */ /* uses prefetch_value() for cnt_id */
7534     "add_container",
7535     "acon",
7536     7,
7537     APPEND,
7538     "c",
7539     CONTAINERS_TABLE,
7540     "INTO containers (name, description, location, contact, acl_type, acl_id, memacl_type, memacl_id, cnt_id) VALUES ('%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), '%s', %d, '%s', %d, %s)",
7541     acon7_fields,
7542     8,
7543     0,
7544     0,
7545     NULL,
7546     &acon7_validate,
7547   },
7548
7549   {
7550     /* Q_ACON - ADD_CONTAINER, v9 */ /* uses prefetch_value() for cnt_id */
7551     "add_container",
7552     "acon",
7553     9,
7554     APPEND,
7555     "c",
7556     CONTAINERS_TABLE,
7557     "INTO containers (name, publicflg, description, location, contact, acl_type, acl_id, memacl_type, memacl_id, cnt_id) VALUES ('%s', %s, NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), '%s', %d, '%s', %d, %s)",
7558     acon_fields,
7559     9,
7560     0,
7561     0,
7562     NULL,
7563     &acon_validate,
7564   },
7565
7566   {
7567     /* Q_UCON - UPDATE_CONTAINER, v7 */
7568     "update_container",
7569     "ucon",
7570     7,
7571     UPDATE,
7572     0,
7573     CONTAINERS_TABLE,
7574     0,
7575     ucon7_fields,
7576     8,
7577     0,
7578     1,
7579     NULL,
7580     &ucon7_validate,
7581   },
7582
7583   {
7584     /* Q_UCON - UPDATE_CONTAINER, v9 */
7585     "update_container",
7586     "ucon",
7587     9,
7588     UPDATE,
7589     0,
7590     CONTAINERS_TABLE,
7591     0,
7592     ucon_fields,
7593     9,
7594     0,
7595     1,
7596     NULL,
7597     &ucon_validate,
7598   },
7599
7600   {
7601     /* Q_DCON - DELETE_CONTAINER, v7 */
7602     "delete_container",
7603     "dcon",
7604     7,
7605     DELETE,
7606     "c",
7607     CONTAINERS_TABLE,
7608     NULL,
7609     dcon_fields,
7610     0,
7611     "cnt_id = %d",
7612     1,
7613     NULL,
7614     &dcon_validate,
7615   },
7616
7617   {
7618     /* Q_AMCN - ADD_MACHINE_TO_CONTAINER, v7 */
7619     "add_machine_to_container",
7620     "amcn",
7621     7,
7622     APPEND,
7623     "mcn",
7624     MCNTMAP_TABLE,
7625     "INTO mcntmap (mach_id, cnt_id) VALUES (%d, %d)",
7626     amcn_fields,
7627     2,
7628     0,
7629     0,
7630     NULL,
7631     &amcn_validate,
7632   },
7633
7634   {
7635     /* Q_DMCN - DELETE_MACHINE_FROM_CONTAINER, v7 */
7636     "delete_machine_from_container",
7637     "dmcn",
7638     7,
7639     DELETE,
7640     "mcn",
7641     MCNTMAP_TABLE,
7642     0,
7643     amcn_fields,
7644     0,
7645     "mach_id = %d AND cnt_id = %d",
7646     2,
7647     NULL,
7648     &dmcn_validate,
7649   },
7650
7651   {
7652     /* Q_GMNM - GET_MACHINE_TO_CONTAINER_MAP, v7 */
7653     "get_machine_to_container_map",
7654     "gmnm",
7655     7,
7656     RETRIEVE,
7657     "mcn",
7658     MCNTMAP_TABLE,
7659     "m.name, c.name FROM machine m, containers c, mcntmap mcn",
7660     gmnm_fields,
7661     2,
7662     "m.name LIKE UPPER('%s') AND mcn.cnt_id = c.cnt_id AND mcn.mach_id = m.mach_id",
7663     1,
7664     NULL,
7665     NULL,
7666   },
7667
7668   {
7669     /* Q_GMOC - GET_MACHINES_OF_CONTAINER, v7 */
7670     "get_machines_of_container",
7671     "gmoc",
7672     7,
7673     RETRIEVE,
7674     NULL,
7675     MCNTMAP_TABLE,
7676     NULL,
7677     gmoc_fields,
7678     2,
7679     NULL,
7680     2,
7681     NULL,
7682     &gmoc_validate,
7683   },
7684
7685   {
7686     /* Q_GSOC - GET_SUBCONTAINERS_OF_CONTAINER, v7 */
7687     "get_subcontainers_of_container",
7688     "gsoc",
7689     7,
7690     RETRIEVE,
7691     NULL,
7692     CONTAINERS_TABLE,
7693     NULL,
7694     gsoc_fields,
7695     1,
7696     NULL,
7697     2,
7698     NULL,
7699     &gsoc_validate,
7700   },
7701
7702   {
7703     /* Q_GTLC - GET_TOPLEVEL_CONTAINERS, v7 */
7704     "get_toplevel_containers",
7705     "gtlc",
7706     7,
7707     RETRIEVE,
7708     "c",
7709     CONTAINERS_TABLE,
7710     "name FROM containers",
7711     gtlc_fields,
7712     1,
7713     "name NOT LIKE '%%/%%'",
7714     0,
7715     "name",
7716     NULL,
7717   },
7718
7719   {
7720     /* Q_SCLI - SET_CONTAINER_LIST, v9 */
7721     "set_container_list",
7722     "scli",
7723     9,
7724     UPDATE,
7725     0,
7726     CONTAINERS_TABLE,
7727     0,
7728     scli_fields,
7729     1,
7730     0,
7731     1,
7732     NULL,
7733     &scli_validate,
7734   },
7735
7736   {
7737     /* Q_GCLI - GET_CONTAINER_LIST, v9 */
7738     "get_container_list",
7739     "gcli",
7740     9,
7741     RETRIEVE,
7742     "c",
7743     CONTAINERS_TABLE,
7744     "c.name, l.name FROM containers c, list l",
7745     gcli_fields,
7746     2,
7747     "LOWER(c.name) = LOWER('%s') AND c.list_id = l.list_id AND c.list_id != 0",
7748     1,
7749     NULL,
7750     NULL,
7751   },
7752
7753 };
7754
7755 int QueryCount = (sizeof(Queries) / sizeof(struct query));
This page took 0.694904 seconds and 3 git commands to generate.