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