]> andersk Git - moira.git/blob - server/queries2.c
Add queries for manipulating the listsids and usersids tables.
[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",
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",
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   "sid = '%s'",
2994   1,
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   "sid = '%s'",
3011   1,
3012   0,
3013   0,
3014   0,
3015   0,
3016 };
3017
3018 \f
3019 /* Generalized Query Definitions */
3020
3021 /* Multiple versions of the same query MUST be listed in ascending
3022  * order.
3023  */
3024
3025 /* Note: For any query which uses prefetch_value, the vcnt should be
3026  * one less than the number of %-format specifiers in the tlist.
3027  */
3028
3029 struct query Queries[] = {
3030   {
3031     /* Q_GALO - GET_ALL_LOGINS, v2 */
3032     "get_all_logins",
3033     "galo",
3034     2,
3035     RETRIEVE,
3036     "u",
3037     USERS_TABLE,
3038     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
3039     galo2_fields,
3040     6,
3041     "u.users_id != 0",
3042     0,
3043     "u.login",
3044     0,
3045   },
3046
3047   {
3048     /* Q_GALO - GET_ALL_LOGINS, v3 */
3049     "get_all_logins",
3050     "galo",
3051     3,
3052     RETRIEVE,
3053     "u",
3054     USERS_TABLE,
3055     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle FROM users u",
3056     galo_fields,
3057     7,
3058     "u.users_id != 0",
3059     0,
3060     "u.login",
3061     0,
3062   },
3063
3064   {
3065     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS, v2 */
3066     "get_all_active_logins",
3067     "gaal",
3068     2,
3069     RETRIEVE,
3070     "u",
3071     USERS_TABLE,
3072     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
3073     galo2_fields,
3074     6,
3075     "u.status = 1",
3076     0,
3077     "u.login",
3078     0,
3079   },
3080
3081   {
3082     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS, v3 */
3083     "get_all_active_logins",
3084     "gaal",
3085     3,
3086     RETRIEVE,
3087     "u",
3088     USERS_TABLE,
3089     "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle FROM users u",
3090     galo_fields,
3091     7,
3092     "u.status = 1",
3093     0,
3094     "u.login",
3095     0,
3096   },
3097
3098   {
3099     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN, v2 */
3100     "get_user_account_by_login",
3101     "gual",
3102     2,
3103     RETRIEVE,
3104     "u",
3105     USERS_TABLE,
3106     "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",
3107     gual2_fields,
3108     15,
3109     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3110     1,
3111     "u.login",
3112     &gubl_validate,
3113   },
3114
3115   {
3116     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN, v3 */
3117     "get_user_account_by_login",
3118     "gual",
3119     3,
3120     RETRIEVE,
3121     "u",
3122     USERS_TABLE,
3123     "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",
3124     gual_fields,
3125     16,
3126     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3127     1,
3128     "u.login",
3129     &gubl_validate,
3130   },
3131
3132   {
3133     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v2 */
3134     "get_user_account_by_uid",
3135     "guau",
3136     2,
3137     RETRIEVE,
3138     "u",
3139     USERS_TABLE,
3140     "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",
3141     guau2_fields,
3142     15,
3143     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
3144     1,
3145     "u.login",
3146     &gubu_validate,
3147   },
3148
3149   {
3150     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v3 */
3151     "get_user_account_by_uid",
3152     "guau",
3153     3,
3154     RETRIEVE,
3155     "u",
3156     USERS_TABLE,
3157     "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",
3158     guau_fields,
3159     16,
3160     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
3161     1,
3162     "u.login",
3163     &gubu_validate,
3164   },
3165
3166   {
3167     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v2 */
3168     "get_user_account_by_name",
3169     "guan",
3170     2,
3171     RETRIEVE,
3172     "u",
3173     USERS_TABLE,
3174     "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",
3175     guan2_fields,
3176     15,
3177     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
3178     2,
3179     "u.login",
3180     &guan_validate,
3181   },
3182
3183   {
3184     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v3 */
3185     "get_user_account_by_name",
3186     "guan",
3187     3,
3188     RETRIEVE,
3189     "u",
3190     USERS_TABLE,
3191     "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",
3192     guan_fields,
3193     16,
3194     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
3195     2,
3196     "u.login",
3197     &guan_validate,
3198   },
3199
3200   {
3201     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v2 */
3202     "get_user_account_by_class",
3203     "guac",
3204     2,
3205     RETRIEVE,
3206     "u",
3207     USERS_TABLE,
3208     "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",
3209     guac2_fields,
3210     15,
3211     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
3212     1,
3213     "u.login",
3214     &VDfix_modby,
3215   },
3216
3217   {
3218     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v3 */
3219     "get_user_account_by_class",
3220     "guac",
3221     3,
3222     RETRIEVE,
3223     "u",
3224     USERS_TABLE,
3225     "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",
3226     guac_fields,
3227     16,
3228     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
3229     1,
3230     "u.login",
3231     &VDfix_modby,
3232   },
3233
3234   {
3235     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v2 */
3236     "get_user_account_by_id",
3237     "guai",
3238     2,
3239     RETRIEVE,
3240     "u",
3241     USERS_TABLE,
3242     "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",
3243     guam2_fields,
3244     15,
3245     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3246     1,
3247     "u.login",
3248     &VDfix_modby,
3249   },
3250
3251   {
3252     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v3 */
3253     "get_user_account_by_id",
3254     "guai",
3255     3,
3256     RETRIEVE,
3257     "u",
3258     USERS_TABLE,
3259     "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",
3260     guam_fields,
3261     16,
3262     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
3263     1,
3264     "u.login",
3265     &VDfix_modby,
3266   },
3267
3268   {
3269     /* Q_GUBL - GET_USER_BY_LOGIN, v2 */
3270     "get_user_by_login",
3271     "gubl",
3272     2,
3273     RETRIEVE,
3274     "u",
3275     USERS_TABLE,
3276     "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",
3277     gubl2_fields,
3278     12,
3279     "u.login LIKE '%s' AND u.users_id != 0",
3280     1,
3281     "u.login",
3282     &gubl_validate,
3283   },
3284
3285   {
3286     /* Q_GUBL - GET_USER_BY_LOGIN, v3 */
3287     "get_user_by_login",
3288     "gubl",
3289     3,
3290     RETRIEVE,
3291     "u",
3292     USERS_TABLE,
3293     "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",
3294     gubl_fields,
3295     13,
3296     "u.login LIKE '%s' AND u.users_id != 0",
3297     1,
3298     "u.login",
3299     &gubl_validate,
3300   },
3301
3302   {
3303     /* Q_GUBU - GET_USER_BY_UID, v2 */
3304     "get_user_by_uid",
3305     "gubu",
3306     2,
3307     RETRIEVE,
3308     "u",
3309     USERS_TABLE,
3310     "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",
3311     gubu2_fields,
3312     12,
3313     "u.unix_uid = %s AND u.users_id != 0",
3314     1,
3315     "u.login",
3316     &gubu_validate,
3317   },
3318
3319   {
3320     /* Q_GUBU - GET_USER_BY_UID, v3 */
3321     "get_user_by_uid",
3322     "gubu",
3323     3,
3324     RETRIEVE,
3325     "u",
3326     USERS_TABLE,
3327     "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",
3328     gubu_fields,
3329     13,
3330     "u.unix_uid = %s AND u.users_id != 0",
3331     1,
3332     "u.login",
3333     &gubu_validate,
3334   },
3335
3336   {
3337     /* Q_GUBN - GET_USER_BY_NAME, v2 */
3338     "get_user_by_name",
3339     "gubn",
3340     2,
3341     RETRIEVE,
3342     "u",
3343     USERS_TABLE,
3344     "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",
3345     gubn2_fields,
3346     12,
3347     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0",
3348     2,
3349     "u.login",
3350     &gubn_validate,
3351   },
3352
3353   {
3354     /* Q_GUBN - GET_USER_BY_NAME, v3 */
3355     "get_user_by_name",
3356     "gubn",
3357     3,
3358     RETRIEVE,
3359     "u",
3360     USERS_TABLE,
3361     "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",
3362     gubn_fields,
3363     13,
3364     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0",
3365     2,
3366     "u.login",
3367     &gubn_validate,
3368   },
3369
3370   {
3371     /* Q_GUBC - GET_USER_BY_CLASS, v2 */
3372     "get_user_by_class",
3373     "gubc",
3374     2,
3375     RETRIEVE,
3376     "u",
3377     USERS_TABLE,
3378     "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",
3379     gubc2_fields,
3380     12,
3381     "u.type = UPPER('%s') AND u.users_id != 0",
3382     1,
3383     "u.login",
3384     &VDfix_modby,
3385   },
3386
3387   {
3388     /* Q_GUBC - GET_USER_BY_CLASS, v3 */
3389     "get_user_by_class",
3390     "gubc",
3391     3,
3392     RETRIEVE,
3393     "u",
3394     USERS_TABLE,
3395     "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",
3396     gubc_fields,
3397     13,
3398     "u.type = UPPER('%s') AND u.users_id != 0",
3399     1,
3400     "u.login",
3401     &VDfix_modby,
3402   },
3403
3404   {
3405     /* Q_GUBM - GET_USER_BY_MITID, v2 */
3406     "get_user_by_mitid",
3407     "gubm",
3408     2,
3409     RETRIEVE,
3410     "u",
3411     USERS_TABLE,
3412     "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",
3413     gubm2_fields,
3414     12,
3415     "u.clearid LIKE '%s' AND u.users_id != 0",
3416     1,
3417     "u.login",
3418     &VDfix_modby,
3419   },
3420
3421   {
3422     /* Q_GUBM - GET_USER_BY_MITID, v3 */
3423     "get_user_by_mitid",
3424     "gubm",
3425     3,
3426     RETRIEVE,
3427     "u",
3428     USERS_TABLE,
3429     "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",
3430     gubm_fields,
3431     13,
3432     "u.clearid LIKE '%s' AND u.users_id != 0",
3433     1,
3434     "u.login",
3435     &VDfix_modby,
3436   },
3437
3438   {
3439     /* Q_AUAC - ADD_USER_ACCOUNT, v2 */  /* uses prefetch_value() for users_id */
3440     "add_user_account",
3441     "auac",
3442     2,
3443     APPEND,
3444     "u",
3445     USERS_TABLE,
3446     /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
3447      * but using up one argv element.
3448      */
3449     "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)",
3450     auac2_fields,
3451     12,
3452     NULL,
3453     0,
3454     NULL,
3455     &auac2_validate,
3456   },
3457
3458   {
3459     /* Q_AUAC - ADD_USER_ACCOUNT, v3 */  /* uses prefetch_value() for users_id */
3460     "add_user_account",
3461     "auac",
3462     3,
3463     APPEND,
3464     "u",
3465     USERS_TABLE,
3466     /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
3467      * but using up one argv element.
3468      */
3469     "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)",
3470     auac_fields,
3471     13,
3472     NULL,
3473     0,
3474     NULL,
3475     &auac_validate,
3476   },
3477
3478   {
3479     /* Q_AUSR - ADD_USER, v2 */  /* uses prefetch_value() for users_id */
3480     "add_user",
3481     "ausr",
3482     2,
3483     APPEND,
3484     "u",
3485     USERS_TABLE,
3486     "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)",
3487     auac2_fields,
3488     9,
3489     0,
3490     0,
3491     NULL,
3492     &ausr2_validate,
3493   },
3494
3495   {
3496     /* Q_AUSR - ADD_USER, v3 */  /* uses prefetch_value() for users_id */
3497     "add_user",
3498     "ausr",
3499     3,
3500     APPEND,
3501     "u",
3502     USERS_TABLE,
3503     "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)",
3504     auac_fields,
3505     10,
3506     0,
3507     0,
3508     NULL,
3509     &ausr_validate,
3510   },
3511
3512   {
3513     /* Q_RUSR - REGISTER_USER */
3514     "register_user",
3515     "rusr",
3516     2,
3517     APPEND,
3518     0,
3519     0,
3520     0,
3521     rusr_fields,
3522     3,
3523     0,
3524     0,
3525     NULL,
3526     &rusr_validate,
3527   },
3528
3529   {
3530     /* Q_UUAC - UPDATE_USER_ACCOUNT, v2 */
3531     "update_user_account",
3532     "uuac",
3533     2,
3534     UPDATE,
3535     "u",
3536     USERS_TABLE,
3537     /* See comment in auac about signature. */
3538     "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",
3539     uuac2_fields,
3540     12,
3541     "users_id = %d",
3542     1,
3543     NULL,
3544     &uuac2_validate,
3545   },
3546
3547   {
3548     /* Q_UUAC - UPDATE_USER_ACCOUNT, v3 */
3549     "update_user_account",
3550     "uuac",
3551     3,
3552     UPDATE,
3553     "u",
3554     USERS_TABLE,
3555     /* See comment in auac about signature. */
3556     "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",
3557     uuac_fields,
3558     13,
3559     "users_id = %d",
3560     1,
3561     NULL,
3562     &uuac_validate,
3563   },
3564
3565   {
3566     /* Q_UUSR - UPDATE_USER, v2 */
3567     "update_user",
3568     "uusr",
3569     2,
3570     UPDATE,
3571     "u",
3572     USERS_TABLE,
3573     "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'",
3574     uuac2_fields,
3575     9,
3576     "users_id = %d",
3577     1,
3578     NULL,
3579     &uusr2_validate,
3580   },
3581
3582   {
3583     /* Q_UUSR - UPDATE_USER, v3 */
3584     "update_user",
3585     "uusr",
3586     3,
3587     UPDATE,
3588     "u",
3589     USERS_TABLE,
3590     "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'",
3591     uuac_fields,
3592     10,
3593     "users_id = %d",
3594     1,
3595     NULL,
3596     &uusr_validate,
3597   },
3598
3599   {
3600     /* Q_UUSH - UPDATE_USER_SHELL */
3601     "update_user_shell",
3602     "uush",
3603     2,
3604     UPDATE,
3605     "u",
3606     USERS_TABLE,
3607     "users SET shell = '%s'",
3608     uush_fields,
3609     1,
3610     "users_id = %d",
3611     1,
3612     NULL,
3613     &uush_validate,
3614   },
3615
3616   {
3617     /* Q_UUWS - UPDATE_USER_WINDOWS_SHELL */
3618     "update_user_windows_shell",
3619     "uuws",
3620     2,
3621     UPDATE,
3622     "u",
3623     USERS_TABLE,
3624     "users SET winconsoleshell = '%s'",
3625     uuws_fields,
3626     1,
3627     "users_id = %d",
3628     1,
3629     NULL,
3630     &uuws_validate,
3631   },
3632
3633   {
3634     /* Q_UUST - UPDATE_USER_STATUS */
3635     "update_user_status",
3636     "uust",
3637     2,
3638     UPDATE,
3639     "u",
3640     USERS_TABLE,
3641     "users SET status = %s",
3642     uust_fields,
3643     1,
3644     "users_id = %d",
3645     1,
3646     NULL,
3647     &uust_validate,
3648   },
3649
3650   {
3651     /* Q_UUSS - UPDATE_USER_SECURITY_STATUS */
3652     "update_user_security_status",
3653     "uuss",
3654     2,
3655     UPDATE,
3656     "u",
3657     USERS_TABLE,
3658     "users SET secure = %s",
3659     uuss_fields,
3660     1,
3661     "users_id = %d",
3662     1,
3663     NULL,
3664     &uust_validate,
3665   },
3666
3667   {
3668     /* Q_DUSR - DELETE_USER */
3669     "delete_user",
3670     "dusr",
3671     2,
3672     DELETE,
3673     "u",
3674     USERS_TABLE,
3675     NULL,
3676     dusr_fields,
3677     0,
3678     "users_id = %d",
3679     1,
3680     NULL,
3681     &dusr_validate,
3682   },
3683
3684   {
3685     /* Q_AURV - ADD_USER_RESERVATION */
3686     "add_user_reservation",
3687     "aurv",
3688     2,
3689     UPDATE,
3690     0,
3691     USERS_TABLE,
3692     0,
3693     aurv_fields,
3694     2,
3695     0,
3696     0,
3697     NULL,
3698     &aurv_validate,
3699   },
3700
3701   {
3702     /* Q_GURV - GET_USER_RESERVATIONS */
3703     "get_user_reservations",
3704     "gurv",
3705     2,
3706     RETRIEVE,
3707     0,
3708     USERS_TABLE,
3709     0,
3710     gurv_fields,
3711     2,
3712     0,
3713     1,
3714     NULL,
3715     &gurv_validate,
3716   },
3717
3718   {
3719     /* Q_GUBR - GET_USER_BY_RESERVATION */
3720     "get_user_by_reservation",
3721     "gubr",
3722     2,
3723     RETRIEVE,
3724     0,
3725     USERS_TABLE,
3726     0,
3727     gubr_fields,
3728     1,
3729     0,
3730     1,
3731     NULL,
3732     &gubr_validate,
3733   },
3734
3735   {
3736     /* Q_DURV - DELETE_USER_RESERVATION */
3737     "delete_user_reservation",
3738     "durv",
3739     2,
3740     UPDATE,
3741     0,
3742     USERS_TABLE,
3743     0,
3744     aurv_fields,
3745     2,
3746     0,
3747     0,
3748     NULL,
3749     &aurv_validate,
3750   },
3751
3752   {
3753     /* Q_GKUM - GET_KERBEROS_USER_MAP */
3754     "get_kerberos_user_map",
3755     "gkum",
3756     2,
3757     RETRIEVE,
3758     "k",
3759     KRBMAP_TABLE,
3760     "u.login, str.string FROM krbmap km, users u, strings str",
3761     gkum_fields,
3762     2,
3763     "u.login LIKE '%s' AND str.string LIKE '%s' AND km.users_id = u.users_id AND km.string_id = str.string_id",
3764     2,
3765     "u.login, str.string",
3766     NULL,
3767   },
3768
3769   {
3770     /* Q_AKUM - ADD_KERBEROS_USER_MAP */
3771     "add_kerberos_user_map",
3772     "akum",
3773     2,
3774     APPEND,
3775     "k",
3776     KRBMAP_TABLE,
3777     "INTO krbmap (users_id, string_id) VALUES (%d, %d)",
3778     akum_fields,
3779     2,
3780     0,
3781     0,
3782     NULL,
3783     &akum_validate,
3784   },
3785
3786   {
3787     /* Q_DKUM - DELETE_KERBEROS_USER_MAP */
3788     "delete_kerberos_user_map",
3789     "dkum",
3790     2,
3791     DELETE,
3792     "k",
3793     KRBMAP_TABLE,
3794     0,
3795     akum_fields,
3796     0,
3797     "users_id = %d AND string_id = %d",
3798     2,
3799     NULL,
3800     &dkum_validate,
3801   },
3802
3803   {
3804     /* Q_GFBL - GET_FINGER_BY_LOGIN */
3805     "get_finger_by_login",
3806     "gfbl",
3807     2,
3808     RETRIEVE,
3809     "u",
3810     USERS_TABLE,
3811     "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",
3812     gfbl_fields,
3813     12,
3814     "users_id = %d",
3815     1,
3816     "login",
3817     &gfbl_validate,
3818   },
3819
3820   {
3821     /* Q_UFBL - UPDATE_FINGER_BY_LOGIN */
3822     "update_finger_by_login",
3823     "ufbl",
3824     2,
3825     UPDATE,
3826     "u",
3827     USERS_TABLE,
3828     "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))",
3829     ufbl_fields,
3830     8,
3831     "users_id = %d",
3832     1,
3833     NULL,
3834     &ufbl_validate,
3835   },
3836
3837   {
3838     /* Q_GPOB - GET_POBOX */
3839     "get_pobox",
3840     "gpob",
3841     2,
3842     RETRIEVE,
3843     "u",
3844     USERS_TABLE,
3845     "login, potype, users_id, CHR(0), TO_CHAR(pmodtime, 'DD-mon-YYYY HH24:MI:SS'), pmodby, pmodwith FROM users",
3846     gpob_fields,
3847     7,
3848     "users_id = %d",
3849     1,
3850     "login",
3851     &gpob_validate,
3852   },
3853
3854   {
3855     /* Q_GAPO - GET_ALL_POBOXES */
3856     "get_all_poboxes",
3857     "gapo",
3858     2,
3859     RETRIEVE,
3860     "u",
3861     USERS_TABLE,
3862     "login, potype, pop_id || ':' || box_id FROM users",
3863     gpox_fields,
3864     3,
3865     "potype != 'NONE'",
3866     0,
3867     "login",
3868     &gpox_validate,
3869   },
3870
3871   {
3872     /* Q_GPOP - GET_POBOXES_POP */
3873     "get_poboxes_pop",
3874     "gpop",
3875     2,
3876     RETRIEVE,
3877     "u",
3878     USERS_TABLE,
3879     "login, potype, users_id FROM users",
3880     gpox_fields,
3881     3,
3882     "potype = 'POP'",
3883     0,
3884     "login",
3885     &gpox_validate
3886   },
3887
3888   {
3889     /* Q_GPOF - GET_POBOXES_SMTP */
3890     "get_poboxes_smtp",
3891     "gpos",
3892     2,
3893     RETRIEVE,
3894     "u",
3895     USERS_TABLE,
3896     "login, potype, users_id FROM users",
3897     gpox_fields,
3898     3,
3899     "potype = 'SMTP'",
3900     0,
3901     "login",
3902     &gpox_validate
3903   },
3904
3905   {
3906     /* Q_SPOB - SET_POBOX */
3907     "set_pobox",
3908     "spob",
3909     2,
3910     UPDATE,
3911     0,
3912     USERS_TABLE,
3913     0,
3914     spob_fields,
3915     3,
3916     NULL,
3917     0,
3918     NULL,
3919     &spob_validate,
3920   },
3921
3922   {
3923     /* Q_SPOP - SET_POBOX_POP */
3924     "set_pobox_pop",
3925     "spop",
3926     2,
3927     UPDATE,
3928     0,
3929     USERS_TABLE,
3930     0,
3931     spob_fields,
3932     1,
3933     NULL,
3934     0,
3935     NULL,
3936     &spop_validate,
3937   },
3938
3939   {
3940     /* Q_DPOB - DELETE_POBOX */
3941     "delete_pobox",
3942     "dpob",
3943     2,
3944     UPDATE,
3945     "u",
3946     USERS_TABLE,
3947     "users SET potype = 'NONE'",
3948     spob_fields,
3949     0,
3950     "users_id = %d",
3951     1,
3952     NULL,
3953     &dpob_validate,
3954   },
3955
3956   {
3957     /* Q_GHST - GET_HOST */
3958     "get_host",
3959     "ghst",
3960     2,
3961     RETRIEVE,
3962     "m",
3963     MACHINE_TABLE,
3964     "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",
3965     ghst_fields,
3966     21,
3967     "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",
3968     4,
3969     "m.name",
3970     &ghst_validate,
3971   },
3972
3973   {
3974     /* Q_GHBH - GET_HOST_BY_HWADDR */
3975     "get_host_by_hwaddr",
3976     "ghbh",
3977     2,
3978     RETRIEVE,
3979     "m",
3980     MACHINE_TABLE,
3981     "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",
3982     ghbh_fields,
3983     21,
3984     "m.hwaddr LIKE LOWER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
3985     1,
3986     "m.name",
3987     &ghst_validate,
3988   },
3989
3990   {
3991     /* Q_GHHA - GET_HOST_HWADDR */
3992     "get_host_hwaddr",
3993     "ghha",
3994     2,
3995     RETRIEVE,
3996     "m",
3997     MACHINE_TABLE,
3998     "m.hwaddr FROM machine m",
3999     ghha_fields,
4000     1,
4001     "m.name LIKE UPPER('%s')",
4002     1,
4003     NULL,
4004     NULL,
4005   },
4006
4007   {
4008     /* Q_AHST - ADD_HOST */ /* uses prefetch_value() for mach_id */
4009     "add_host",
4010     "ahst",
4011     2,
4012     APPEND,
4013     "m",
4014     MACHINE_TABLE,
4015     "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)",
4016     ahst_fields,
4017     14,
4018     0,
4019     0,
4020     NULL,
4021     &ahst_validate,
4022   },
4023
4024   {
4025     /* Q_UHST - UPDATE_HOST */
4026     "update_host",
4027     "uhst",
4028     2,
4029     UPDATE,
4030     "m",
4031     MACHINE_TABLE,
4032     "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",
4033     uhst_fields,
4034     14,
4035     "mach_id = %d",
4036     1,
4037     NULL,
4038     &uhst_validate,
4039   },
4040
4041   {
4042     /* Q_UHHA - UPDATE_HOST_HWADDR */
4043     "update_host_hwaddr",
4044     "uhha",
4045     2,
4046     UPDATE,
4047     "m",
4048     MACHINE_TABLE,
4049     "machine SET hwaddr = NVL('%s', CHR(0))",
4050     uhha_fields,
4051     1,
4052     "mach_id = %d",
4053     1,
4054     NULL,
4055     &uhha_validate,
4056   },
4057
4058   {
4059     /* Q_DHST - DELETE_HOST */
4060     "delete_host",
4061     "dhst",
4062     2,
4063     DELETE,
4064     "m",
4065     MACHINE_TABLE,
4066     NULL,
4067     dhst_fields,
4068     0,
4069     "mach_id = %d",
4070     1,
4071     NULL,
4072     &dhst_validate,
4073   },
4074
4075   {
4076     /* Q_GMAC - GET_MACHINE */
4077     "get_machine",
4078     "gmac",
4079     2,
4080     RETRIEVE,
4081     "m",
4082     MACHINE_TABLE,
4083     "name, vendor, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM machine",
4084     gmac_fields,
4085     5,
4086     "name LIKE UPPER('%s') AND mach_id != 0",
4087     1,
4088     "name",
4089     &VDfix_modby,
4090   },
4091
4092   {
4093     /* Q_GHAL - GET_HOSTALIAS */
4094     "get_hostalias",
4095     "ghal",
4096     2,
4097     RETRIEVE,
4098     "a",
4099     HOSTALIAS_TABLE,
4100     "a.name, m.name FROM hostalias a, machine m",
4101     ghal_fields,
4102     2,
4103     "m.mach_id = a.mach_id and a.name LIKE UPPER('%s') AND m.name LIKE UPPER('%s')",
4104     2,
4105     "a.name",
4106     &ghal_validate,
4107   },
4108
4109   {
4110     /* Q_AHAL - ADD_HOSTALIAS */
4111     "add_hostalias",
4112     "ahal",
4113     2,
4114     APPEND,
4115     "a",
4116     HOSTALIAS_TABLE,
4117     "INTO hostalias (name, mach_id) VALUES (UPPER('%s'), %d)",
4118     ghal_fields,
4119     2,
4120     0,
4121     0,
4122     NULL,
4123     &ahal_validate,
4124   },
4125
4126   {
4127     /* Q_DHAL - DELETE_HOSTALIAS */
4128     "delete_hostalias",
4129     "dhal",
4130     2,
4131     DELETE,
4132     "a",
4133     HOSTALIAS_TABLE,
4134     NULL,
4135     ghal_fields,
4136     0,
4137     "name = UPPER('%s') AND mach_id = %d",
4138     2,
4139     NULL,
4140     &dhal_validate,
4141   },
4142
4143   {
4144     /* Q_GSNT - GET_SUBNET */
4145     "get_subnet",
4146     "gsnt",
4147     2,
4148     RETRIEVE,
4149     "s",
4150     SUBNET_TABLE,
4151     "name, description, saddr, mask, low, high, prefix, owner_type, owner_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM subnet",
4152     gsnt_fields,
4153     12,
4154     "name LIKE UPPER('%s')",
4155     1,
4156     "name",
4157     &gsnt_validate,
4158   },
4159
4160   {
4161     /* Q_ASNT - ADD_SUBNET */
4162     "add_subnet",
4163     "asnt",
4164     2,
4165     APPEND,
4166     "s",
4167     SUBNET_TABLE,
4168     "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)",
4169     asnt_fields,
4170     9,
4171     0,
4172     0,
4173     NULL,
4174     &asnt_validate,
4175   },
4176
4177   {
4178     /* Q_USNT - UPDATE_SUBNET */
4179     "update_subnet",
4180     "usnt",
4181     2,
4182     UPDATE,
4183     "s",
4184     SUBNET_TABLE,
4185     "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",
4186     usnt_fields,
4187     9,
4188     "snet_id = %d",
4189     1,
4190     NULL,
4191     &usnt_validate,
4192   },
4193
4194   {
4195     /* Q_DSNT - DELETE_SUBNET */
4196     "delete_subnet",
4197     "dsnt",
4198     2,
4199     DELETE,
4200     "s",
4201     SUBNET_TABLE,
4202     NULL,
4203     dsnt_fields,
4204     0,
4205     "snet_id = %d",
4206     1,
4207     NULL,
4208     &dsnt_validate,
4209   },
4210
4211   {
4212     /* Q_GCLU - GET_CLUSTER */
4213     "get_cluster",
4214     "gclu",
4215     2,
4216     RETRIEVE,
4217     "c",
4218     CLUSTERS_TABLE,
4219     "name, description, location, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM clusters",
4220     gclu_fields,
4221     6,
4222     "name LIKE '%s' AND clu_id != 0",
4223     1,
4224     "name",
4225     &VDfix_modby,
4226   },
4227
4228   {
4229     /* Q_ACLU - ADD_CLUSTER */ /* uses prefetch_value() for clu_id */
4230     "add_cluster",
4231     "aclu",
4232     2,
4233     APPEND,
4234     "c",
4235     CLUSTERS_TABLE,
4236     "INTO clusters (name, description, location, clu_id) VALUES ('%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s)",
4237     aclu_fields,
4238     3,
4239     0,
4240     0,
4241     NULL,
4242     &aclu_validate,
4243   },
4244
4245   {
4246     /* Q_UCLU - UPDATE_CLUSTER */
4247     "update_cluster",
4248     "uclu",
4249     2,
4250     UPDATE,
4251     "c",
4252     CLUSTERS_TABLE,
4253     "clusters SET name = '%s', description = NVL('%s', CHR(0)), location = NVL('%s', CHR(0))",
4254     uclu_fields,
4255     3,
4256     "clu_id = %d",
4257     1,
4258     NULL,
4259     &uclu_validate,
4260   },
4261
4262   {
4263     /* Q_DCLU - DELETE_CLUSTER */
4264     "delete_cluster",
4265     "dclu",
4266     2,
4267     DELETE,
4268     "c",
4269     CLUSTERS_TABLE,
4270     NULL,
4271     dclu_fields,
4272     0,
4273     "clu_id = %d",
4274     1,
4275     NULL,
4276     &dclu_validate,
4277   },
4278
4279   {
4280     /* Q_GMCM - GET_MACHINE_TO_CLUSTER_MAP */
4281     "get_machine_to_cluster_map",
4282     "gmcm",
4283     2,
4284     RETRIEVE,
4285     "mcm",
4286     MCMAP_TABLE,
4287     "m.name, c.name FROM machine m, clusters c, mcmap mcm",
4288     gmcm_fields,
4289     2,
4290     "m.name LIKE UPPER('%s') AND c.name LIKE '%s' AND mcm.clu_id = c.clu_id AND mcm.mach_id = m.mach_id",
4291     2,
4292     "m.name",
4293     NULL,
4294   },
4295
4296   {
4297     /* Q_AMTC - ADD_MACHINE_TO_CLUSTER */
4298     "add_machine_to_cluster",
4299     "amtc",
4300     2,
4301     APPEND,
4302     "mcm",
4303     MCMAP_TABLE,
4304     "INTO mcmap (mach_id, clu_id) VALUES (%d, %d)",
4305     gmcm_fields,
4306     2,
4307     0,
4308     0,
4309     NULL,
4310     &amtc_validate,
4311   },
4312
4313   {
4314     /* Q_DMFC - DELETE_MACHINE_FROM_CLUSTER */
4315     "delete_machine_from_cluster",
4316     "dmfc",
4317     2,
4318     DELETE,
4319     "mcm",
4320     MCMAP_TABLE,
4321     0,
4322     gmcm_fields,
4323     0,
4324     "mach_id = %d AND clu_id = %d",
4325     2,
4326     NULL,
4327     &amtc_validate,
4328   },
4329
4330   {
4331     /* Q_GCLD - GET_CLUSTER_DATA */
4332     "get_cluster_data",
4333     "gcld",
4334     2,
4335     RETRIEVE,
4336     "svc",
4337     SVC_TABLE,
4338     "c.name, svc.serv_label, svc.serv_cluster FROM svc svc, clusters c",
4339     gcld_fields,
4340     3,
4341     "c.clu_id = svc.clu_id AND c.name LIKE '%s' AND svc.serv_label LIKE '%s'",
4342     2,
4343     "c.name, svc.serv_label",
4344     NULL,
4345   },
4346
4347   {
4348     /* Q_ACLD - ADD_CLUSTER_DATA */
4349     "add_cluster_data",
4350     "acld",
4351     2,
4352     APPEND,
4353     "svc",
4354     SVC_TABLE,
4355     "INTO svc (clu_id, serv_label, serv_cluster) VALUES (%d, '%s', '%s')",
4356     acld_fields,
4357     3,
4358     NULL,
4359     0,
4360     NULL,
4361     &acld_validate,
4362   },
4363
4364   {
4365     /* Q_DCLD - DELETE_CLUSTER_DATA */
4366     "delete_cluster_data",
4367     "dcld",
4368     2,
4369     DELETE,
4370     "svc",
4371     SVC_TABLE,
4372     NULL,
4373     acld_fields,
4374     0,
4375     "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
4376     3,
4377     NULL,
4378     &dcld_validate,
4379   },
4380
4381   {
4382     /* Q_GLIN - GET_LIST_INFO, v2 */
4383     "get_list_info",
4384     "glin",
4385     2,
4386     RETRIEVE,
4387     "l",
4388     LIST_TABLE,
4389     "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",
4390     glin2_fields,
4391     13,
4392     "name LIKE '%s'",
4393     1,
4394     "name",
4395     &glin_validate,
4396   },
4397
4398   {
4399     /* Q_GLIN - GET_LIST_INFO, v3 */
4400     "get_list_info",
4401     "glin",
4402     3,
4403     RETRIEVE,
4404     "l",
4405     LIST_TABLE,
4406     "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",
4407     glin3_fields,
4408     14,
4409     "name LIKE '%s'",
4410     1,
4411     "name",
4412     &glin_validate,
4413   },
4414
4415   {
4416     /* Q_GLIN - GET_LIST_INFO, v4 */
4417     "get_list_info",
4418     "glin",
4419     4,
4420     RETRIEVE,
4421     "l",
4422     LIST_TABLE,
4423     "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",
4424     glin_fields,
4425     16,
4426     "name LIKE '%s'",
4427     1,
4428     "name",
4429     &glin_validate,
4430   },
4431
4432   {
4433     /* Q_EXLN - EXPAND_LIST_NAMES */
4434     "expand_list_names",
4435     "exln",
4436     2,
4437     RETRIEVE,
4438     "l",
4439     LIST_TABLE,
4440     "name FROM list",
4441     glin_fields,
4442     1,
4443     "name LIKE '%s' AND list_id != 0",
4444     1,
4445     "name",
4446     NULL,
4447   },
4448
4449   {
4450     /* Q_ALIS - ADD_LIST, v2 */ /* uses prefetch_value() for list_id */
4451     "add_list",
4452     "alis",
4453     2,
4454     APPEND,
4455     "l",
4456     LIST_TABLE,
4457     "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)",
4458     alis2_fields,
4459     10,
4460     0,
4461     0,
4462     NULL,
4463     &alis2_validate,
4464   },
4465
4466   {
4467     /* Q_ALIS - ADD_LIST, v3 */ /* uses prefetch_value() for list_id */
4468     "add_list",
4469     "alis",
4470     3,
4471     APPEND,
4472     "l",
4473     LIST_TABLE,
4474     "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)", 
4475     alis3_fields,
4476     11,
4477     0,
4478     0,
4479     NULL,
4480     &alis3_validate,
4481   },
4482
4483   {
4484     /* Q_ALIS - ADD_LIST, v4 */ /* uses prefetch_value() for list_id */
4485     "add_list",
4486     "alis",
4487     4,
4488     APPEND,
4489     "l",
4490     LIST_TABLE,
4491     "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)",
4492     alis_fields,
4493     13,
4494     0,
4495     0,
4496     NULL,
4497     &alis_validate,
4498   },
4499
4500   {
4501     /* Q_ULIS - UPDATE_LIST, v2 */
4502     "update_list",
4503     "ulis",
4504     2,
4505     UPDATE,
4506     "l",
4507     LIST_TABLE,
4508     "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))",
4509     ulis2_fields,
4510     10,
4511     "list_id = %d",
4512     1,
4513     NULL,
4514     &ulis2_validate,
4515   },
4516
4517   {
4518     /* Q_ULIS - UPDATE_LIST, v3 */
4519     "update_list",
4520     "ulis",
4521     3,
4522     UPDATE,
4523     "l",
4524     LIST_TABLE,
4525     "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))",
4526     ulis3_fields,
4527     11,
4528     "list_id = %d",
4529     1,
4530     NULL,
4531     &ulis3_validate,
4532   },
4533
4534   {
4535     /* Q_ULIS, UPDATE_LIST, v4 */
4536     "update_list",
4537     "ulis",
4538     4,
4539     UPDATE,
4540     "l",
4541     LIST_TABLE,
4542     "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))",
4543     ulis_fields,
4544     13,
4545     "list_id = %d",
4546     1,
4547     NULL,
4548     &ulis_validate,
4549   },
4550
4551   {
4552     /* Q_DLIS - DELETE_LIST */
4553     "delete_list",
4554     "dlis",
4555     2,
4556     DELETE,
4557     "l",
4558     LIST_TABLE,
4559     NULL,
4560     dlis_fields,
4561     0,
4562     "list_id = %d",
4563     1,
4564     NULL,
4565     &dlis_validate,
4566   },
4567
4568   {
4569     /* Q_AMTL - ADD_MEMBER_TO_LIST */
4570     "add_member_to_list",
4571     "amtl",
4572     2,
4573     APPEND,
4574     0,
4575     IMEMBERS_TABLE,
4576     0,
4577     amtl_fields,
4578     3,
4579     NULL,
4580     0,
4581     NULL,
4582     &amtl_validate,
4583   },
4584
4585   {
4586     /* Q_ATML - ADD_TAGGED_MEMBER_TO_LIST */
4587     "add_tagged_member_to_list",
4588     "atml",
4589     2,
4590     APPEND,
4591     0,
4592     IMEMBERS_TABLE,
4593     0,
4594     atml_fields,
4595     4,
4596     NULL,
4597     0,
4598     NULL,
4599     &atml_validate,
4600   },
4601
4602   {
4603     /* Q_TMOL - TAG_MEMBER_OF_LIST */
4604     "tag_member_of_list",
4605     "tmol",
4606     2,
4607     UPDATE,
4608     0,
4609     IMEMBERS_TABLE,
4610     0,
4611     atml_fields,
4612     1,
4613     0,
4614     3,
4615     NULL,
4616     &tmol_validate,
4617   },
4618
4619   {
4620     /* Q_DMFL - DELETE_MEMBER_FROM_LIST */
4621     "delete_member_from_list",
4622     "dmfl",
4623     2,
4624     DELETE,
4625     0,
4626     IMEMBERS_TABLE,
4627     NULL,
4628     amtl_fields,
4629     0,
4630     0,
4631     3,
4632     NULL,
4633     &dmfl_validate,
4634   },
4635
4636   {
4637     /* Q_GAUS - GET_ACE_USE */
4638     "get_ace_use",
4639     "gaus",
4640     2,
4641     RETRIEVE,
4642     0,
4643     0,
4644     0,
4645     gaus_fields,
4646     2,
4647     0,
4648     2,
4649     NULL,
4650     &gaus_validate,
4651   },
4652
4653   {
4654     /* Q_GHBO - GET_HOST_BY_OWNER */
4655     "get_host_by_owner",
4656     "ghbo",
4657     2,
4658     RETRIEVE,
4659     0,
4660     0,
4661     0,
4662     ghbo_fields,
4663     1,
4664     0,
4665     2,
4666     NULL,
4667     &ghbo_validate,
4668   },
4669
4670   {
4671     /* Q_QGLI - QUALIFIED_GET_LISTS */
4672     "qualified_get_lists",
4673     "qgli",
4674     2,
4675     RETRIEVE,
4676     0,
4677     LIST_TABLE,
4678     0,
4679     qgli_fields,
4680     1,
4681     0,
4682     5,
4683     NULL,
4684     &qgli_validate,
4685   },
4686
4687   {
4688     /* Q_GMOL - GET_MEMBERS_OF_LIST */
4689     "get_members_of_list",
4690     "gmol",
4691     2,
4692     RETRIEVE,
4693     NULL,
4694     IMEMBERS_TABLE,
4695     NULL,
4696     gmol_fields,
4697     2,
4698     NULL,
4699     1,
4700     NULL,
4701     &gmol_validate,
4702   },
4703
4704   {
4705     /* Q_GEML - GET_END_MEMBERS_OF_LIST */
4706     "get_end_members_of_list",
4707     "geml",
4708     2,
4709     RETRIEVE,
4710     NULL,
4711     IMEMBERS_TABLE,
4712     NULL,
4713     gmol_fields,
4714     2,
4715     NULL,
4716     1,
4717     NULL,
4718     &gmol_validate,
4719   },
4720
4721   {
4722     /* Q_GTML - GET_TAGGED_MEMBERS_OF_LIST */
4723     "get_tagged_members_of_list",
4724     "gtml",
4725     2,
4726     RETRIEVE,
4727     NULL,
4728     IMEMBERS_TABLE,
4729     NULL,
4730     gtml_fields,
4731     3,
4732     NULL,
4733     1,
4734     NULL,
4735     &gmol_validate,
4736   },
4737
4738   {
4739     /* Q_GLOM - GET_LISTS_OF_MEMBER */
4740     "get_lists_of_member",
4741     "glom",
4742     2,
4743     RETRIEVE,
4744     0,
4745     IMEMBERS_TABLE,
4746     0,
4747     glom_fields,
4748     6,
4749     0,
4750     2,
4751     NULL,
4752     &glom_validate,
4753   },
4754
4755   {
4756     /* Q_CMOL - COUNT_MEMBERS_OF_LIST */
4757     "count_members_of_list",
4758     "cmol",
4759     2,
4760     RETRIEVE,
4761     0,
4762     IMEMBERS_TABLE,
4763     0,
4764     cmol_fields,
4765     1,
4766     0,
4767     1,
4768     NULL,
4769     &cmol_validate,
4770   },
4771
4772   {
4773     /* Q_GSIN - GET_SERVER_INFO */
4774     "get_server_info",
4775     "gsin",
4776     2,
4777     RETRIEVE,
4778     "s",
4779     SERVERS_TABLE,
4780     "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",
4781     gsin_fields,
4782     16,
4783     "name LIKE UPPER('%s')",
4784     1,
4785     "name",
4786     &gsin_validate,
4787   },
4788
4789   {
4790     /* Q_QGSV - QUALIFIED_GET_SERVER */
4791     "qualified_get_server",
4792     "qgsv",
4793     2,
4794     RETRIEVE,
4795     0,
4796     SERVERS_TABLE,
4797     0,
4798     qgsv_fields,
4799     1,
4800     0,
4801     3,
4802     NULL,
4803     &qgsv_validate,
4804   },
4805
4806   {
4807     /* Q_ASIN - ADD_SERVER_INFO */
4808     "add_server_info",
4809     "asin",
4810     2,
4811     APPEND,
4812     "s",
4813     SERVERS_TABLE,
4814     "INTO servers (name, update_int, target_file, script, type, enable, acl_type, acl_id) VALUES (UPPER('%s'), %s, '%s', '%s', '%s', %s, '%s', %d)",
4815     asin_fields,
4816     8,
4817     NULL,
4818     0,
4819     NULL,
4820     &asin_validate,
4821   },
4822
4823   {
4824     /* Q_USIN - UPDATE_SERVER_INFO */
4825     "update_server_info",
4826     "usin",
4827     2,
4828     UPDATE,
4829     "s",
4830     SERVERS_TABLE,
4831     "servers SET update_int = %s, target_file = '%s', script = '%s', type = '%s', enable = %s, acl_type = '%s', acl_id = %d",
4832     asin_fields,
4833     7,
4834     "name = UPPER('%s')",
4835     1,
4836     NULL,
4837     &asin_validate,
4838   },
4839
4840   {
4841     /* Q_RSVE - RESET_SERVER_ERROR */
4842     "reset_server_error",
4843     "rsve",
4844     2,
4845     UPDATE,
4846     "s",
4847     SERVERS_TABLE,
4848     "servers SET harderror = 0, dfcheck = dfgen",
4849     dsin_fields,
4850     0,
4851     "name = UPPER('%s')",
4852     1,
4853     NULL,
4854     &rsve_validate,
4855   },
4856
4857   {
4858     /* Q_SSIF - SET_SERVER_INTERNAL_FLAGS */
4859     "set_server_internal_flags",
4860     "ssif",
4861     2,
4862     UPDATE,
4863     "s",
4864     SERVERS_TABLE,
4865     "servers SET dfgen = %s, dfcheck = %s, inprogress = %s, harderror = %s, errmsg = NVL('%s', CHR(0))",
4866     ssif_fields,
4867     5,
4868     "name = UPPER('%s')",
4869     1,
4870     NULL,
4871     &ssif_validate,
4872   },
4873
4874   {
4875     /* Q_DSIN - DELETE_SERVER_INFO */
4876     "delete_server_info",
4877     "dsin",
4878     2,
4879     DELETE,
4880     "s",
4881     SERVERS_TABLE,
4882     NULL,
4883     dsin_fields,
4884     0,
4885     "name = UPPER('%s')",
4886     1,
4887     NULL,
4888     &dsin_validate,
4889   },
4890
4891   {
4892     /* Q_GSHI - GET_SERVER_HOST_INFO */
4893     "get_server_host_info",
4894     "gshi",
4895     2,
4896     RETRIEVE,
4897     "sh",
4898     SERVERHOSTS_TABLE,
4899     "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",
4900     gshi_fields,
4901     16,
4902     "sh.service LIKE UPPER('%s') AND m.name LIKE UPPER('%s') AND m.mach_id = sh.mach_id",
4903     2,
4904     "sh.service, m.name",
4905     &gshi_validate,
4906   },
4907
4908   {
4909     /* Q_QGSH - QUALIFIED_GET_SERVER_HOST */
4910     "qualified_get_server_host",
4911     "qgsh",
4912     2,
4913     RETRIEVE,
4914     0,
4915     SERVERHOSTS_TABLE,
4916     0,
4917     qgsh_fields,
4918     2,
4919     0,
4920     6,
4921     NULL,
4922     &qgsh_validate,
4923   },
4924
4925   {
4926     /* Q_ASHI - ADD_SERVER_HOST_INFO */
4927     "add_server_host_info",
4928     "ashi",
4929     2,
4930     APPEND,
4931     "sh",
4932     SERVERHOSTS_TABLE,
4933     "INTO serverhosts (service, mach_id, enable, value1, value2, value3) VALUES (UPPER('%s'), %d, %s, %s, %s, NVL('%s', CHR(0)))",
4934     ashi_fields,
4935     6,
4936     NULL,
4937     0,
4938     NULL,
4939     &ashi_validate,
4940   },
4941
4942   {
4943     /* Q_USHI - UPDATE_SERVER_HOST_INFO */
4944     "update_server_host_info",
4945     "ushi",
4946     2,
4947     UPDATE,
4948     "sh",
4949     SERVERHOSTS_TABLE,
4950     "serverhosts SET enable = %s, value1 = %s, value2 = %s, value3 = NVL('%s', CHR(0))",
4951     ashi_fields,
4952     4,
4953     "service = UPPER('%s') AND mach_id = %d",
4954     2,
4955     NULL,
4956     &ashi_validate,
4957   },
4958
4959   {
4960     /* Q_RSHE - RESET_SERVER_HOST_ERROR */
4961     "reset_server_host_error",
4962     "rshe",
4963     2,
4964     UPDATE,
4965     "sh",
4966     SERVERHOSTS_TABLE,
4967     "serverhosts SET hosterror = 0",
4968     dshi_fields,
4969     0,
4970     "service = UPPER('%s') AND mach_id = %d",
4971     2,
4972     NULL,
4973     &rshe_validate,
4974   },
4975
4976   {
4977     /* Q_SSHO - SET_SERVER_HOST_OVERRIDE */
4978     "set_server_host_override",
4979     "ssho",
4980     2,
4981     UPDATE,
4982     "sh",
4983     SERVERHOSTS_TABLE,
4984     "serverhosts SET override = 1",
4985     dshi_fields,
4986     0,
4987     "service = UPPER('%s') AND mach_id = %d",
4988     2,
4989     NULL,
4990     &ssho_validate,
4991   },
4992
4993   {
4994     /* Q_SSHI - SET_SERVER_HOST_INTERNAL */
4995     "set_server_host_internal",
4996     "sshi",
4997     2,
4998     UPDATE,
4999     "s",
5000     SERVERHOSTS_TABLE,
5001     "serverhosts SET override = %s, success = %s, inprogress = %s, hosterror = %s, hosterrmsg = NVL('%s', CHR(0)), ltt = %s, lts = %s",
5002     sshi_fields,
5003     7,
5004     "service = UPPER('%s') AND mach_id = %d",
5005     2,
5006     NULL,
5007     &sshi_validate,
5008   },
5009
5010   {
5011     /* Q_DSHI - DELETE_SERVER_HOST_INFO */
5012     "delete_server_host_info",
5013     "dshi",
5014     2,
5015     DELETE,
5016     "sh",
5017     SERVERHOSTS_TABLE,
5018     NULL,
5019     dshi_fields,
5020     0,
5021     "service = UPPER('%s') AND mach_id = %d",
5022     2,
5023     NULL,
5024     &dshi_validate,
5025   },
5026
5027   {
5028     /* Q_GSLO - GET_SERVER_LOCATIONS */
5029     "get_server_locations",
5030     "gslo",
5031     2,
5032     RETRIEVE,
5033     "sh",
5034     SERVERHOSTS_TABLE,
5035     "sh.service, m.name FROM serverhosts sh, machine m",
5036     gslo_fields,
5037     2,
5038     "sh.service LIKE UPPER('%s') AND sh.mach_id = m.mach_id",
5039     1,
5040     "sh.service, m.name",
5041     NULL,
5042   },
5043
5044   {
5045     /* Q_GFSL - GET_FILESYS_BY_LABEL */
5046     "get_filesys_by_label",
5047     "gfsl",
5048     2,
5049     RETRIEVE,
5050     "fs",
5051     FILESYS_TABLE,
5052     "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",
5053     gfsl_fields,
5054     14,
5055     "fs.label LIKE '%s' AND fs.mach_id = m.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
5056     1,
5057     "fs.label",
5058     &gfsl_validate,
5059   },
5060
5061   {
5062     /* Q_GFSM - GET_FILESYS_BY_MACHINE */
5063     "get_filesys_by_machine",
5064     "gfsm",
5065     2,
5066     RETRIEVE,
5067     "fs",
5068     FILESYS_TABLE,
5069     "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",
5070     gfsm_fields,
5071     14,
5072     "fs.mach_id = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
5073     1,
5074     "fs.label",
5075     &gfsm_validate,
5076   },
5077
5078   {
5079     /* Q_GFSN - GET_FILESYS_BY_NFSPHYS */
5080     "get_filesys_by_nfsphys",
5081     "gfsn",
5082     2,
5083     RETRIEVE,
5084     "fs",
5085     FILESYS_TABLE,
5086     "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",
5087     gfsn_fields,
5088     14,
5089     "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'",
5090     2,
5091     "fs.label",
5092     &gfsn_validate,
5093   },
5094
5095   {
5096     /* Q_GFSG - GET_FILESYS_BY_GROUP */
5097     "get_filesys_by_group",
5098     "gfsg",
5099     2,
5100     RETRIEVE,
5101     "fs",
5102     FILESYS_TABLE,
5103     "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",
5104     gfsg_fields,
5105     14,
5106     "fs.owners = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
5107     1,
5108     "fs.label",
5109     &gfsg_validate,
5110   },
5111
5112   {
5113     /* Q_GFSP - GET_FILESYS_BY_PATH */
5114     "get_filesys_by_path",
5115     "gfsp",
5116     2,
5117     RETRIEVE,
5118     "fs",
5119     FILESYS_TABLE,
5120     "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",
5121     gfsp_fields,
5122     14,
5123     "fs.name LIKE '%s' AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = list_id",
5124     1,
5125     "fs.label",
5126     &VDfix_modby,
5127   },
5128
5129   {
5130     /* Q_AFIL - ADD_FILESYS */ /* uses prefetch_value() for filsys_id */
5131     "add_filesys",
5132     "afil",
5133     2,
5134     APPEND,
5135     "fs",
5136     FILESYS_TABLE,
5137     "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)",
5138     afil_fields,
5139     11,
5140     0,
5141     0,
5142     NULL,
5143     &afil_validate,
5144   },
5145
5146   {
5147     /* Q_UFIL - UPDATE_FILESYS */
5148     "update_filesys",
5149     "ufil",
5150     2,
5151     UPDATE,
5152     "fs",
5153     FILESYS_TABLE,
5154     "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'",
5155     ufil_fields,
5156     11,
5157     "filsys_id = %d",
5158     1,
5159     NULL,
5160     &ufil_validate,
5161   },
5162
5163   {
5164     /* Q_DFIL - DELETE_FILESYS */
5165     "delete_filesys",
5166     "dfil",
5167     2,
5168     DELETE,
5169     "fs",
5170     FILESYS_TABLE,
5171     NULL,
5172     dfil_fields,
5173     0,
5174     "filsys_id = %d",
5175     1,
5176     NULL,
5177     &dfil_validate,
5178   },
5179
5180   {
5181     /* Q_GFGM - GET_FSGROUP_MEMBERS */
5182     "get_fsgroup_members",
5183     "gfgm",
5184     2,
5185     RETRIEVE,
5186     "fg",
5187     FSGROUP_TABLE,
5188     "fs.label, fg.key FROM fsgroup fg, filesys fs",
5189     gfgm_fields,
5190     2,
5191     "fg.group_id = %d AND fs.filsys_id = fg.filsys_id",
5192     1,
5193     "fs.label, fg.key",
5194     &gfgm_validate,
5195   },
5196
5197   {
5198     /* Q_AFTG - ADD_FILESYS_TO_FSGROUP */
5199     "add_filesys_to_fsgroup",
5200     "aftg",
5201     2,
5202     APPEND,
5203     "fg",
5204     FSGROUP_TABLE,
5205     "INTO fsgroup (group_id, filsys_id, key) VALUES (%d, %d, '%s')",
5206     gfgm_fields,
5207     3,
5208     NULL,
5209     0,
5210     NULL,
5211     &aftg_validate,
5212   },
5213
5214   {
5215     /* Q_RFFG - REMOVE_FILESYS_FROM_FSGROUP */
5216     "remove_filesys_from_fsgroup",
5217     "rffg",
5218     2,
5219     DELETE,
5220     "fg",
5221     FSGROUP_TABLE,
5222     NULL,
5223     gfgm_fields,
5224     0,
5225     "group_id = %d AND filsys_id = %d",
5226     2,
5227     NULL,
5228     &aftg_validate,
5229   },
5230
5231   {
5232     /* Q_GANF - GET_ALL_NFSPHYS */
5233     "get_all_nfsphys",
5234     "ganf",
5235     2,
5236     RETRIEVE,
5237     "np",
5238     NFSPHYS_TABLE,
5239     "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",
5240     ganf_fields,
5241     9,
5242     "m.mach_id = np.mach_id",
5243     0,
5244     "m.name, np.dir",
5245     &VDfix_modby,
5246   },
5247
5248   {
5249     /* Q_GNFP - GET_NFSPHYS */
5250     "get_nfsphys",
5251     "gnfp",
5252     2,
5253     RETRIEVE,
5254     "np",
5255     NFSPHYS_TABLE,
5256     "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",
5257     gnfp_fields,
5258     9,
5259     "np.mach_id = %d AND np.dir LIKE '%s' AND m.mach_id = np.mach_id",
5260     2,
5261     "m.name, np.dir",
5262     &gnfp_validate,
5263   },
5264
5265   {
5266     /* Q_ANFP - ADD_NFSPHYS */ /* uses prefetch_value() for nfsphys_id */
5267     "add_nfsphys",
5268     "anfp",
5269     2,
5270     APPEND,
5271     "np",
5272     NFSPHYS_TABLE,
5273     "INTO nfsphys (mach_id, dir, device, status, allocated, partsize, nfsphys_id) VALUES (%d, '%s', NVL('%s', CHR(0)), %s, %s, %s, %s)",
5274     ganf_fields,
5275     6,
5276     0,
5277     0,
5278     NULL,
5279     &anfp_validate,
5280   },
5281
5282   {
5283     /* Q_UNFP - UPDATE_NFSPHYS */
5284     "update_nfsphys",
5285     "unfp",
5286     2,
5287     UPDATE,
5288     "np",
5289     NFSPHYS_TABLE,
5290     "nfsphys SET device = NVL('%s', CHR(0)), status = %s, allocated = %s, partsize = %s",
5291     ganf_fields,
5292     4,
5293     "mach_id = %d AND dir = '%s'",
5294     2,
5295     NULL,
5296     &unfp_validate,
5297   },
5298
5299   {
5300     /* Q_AJNF - ADJUST_NFSPHYS_ALLOCATION */
5301     "adjust_nfsphys_allocation",
5302     "ajnf",
5303     2,
5304     UPDATE,
5305     "np",
5306     NFSPHYS_TABLE,
5307     "nfsphys SET allocated = allocated + %s",
5308     ajnf_fields,
5309     1,
5310     "mach_id = %d AND dir = '%s'",
5311     2,
5312     NULL,
5313     &ajnf_validate,
5314   },
5315
5316   {
5317     /* Q_DNFP - DELETE_NFSPHYS */
5318     "delete_nfsphys",
5319     "dnfp",
5320     2,
5321     DELETE,
5322     "np",
5323     NFSPHYS_TABLE,
5324     NULL,
5325     dnfp_fields,
5326     0,
5327     "mach_id = %d AND dir = '%s'",
5328     2,
5329     NULL,
5330     &dnfp_validate,
5331   },
5332
5333   {
5334     /* Q_GQOT - GET_QUOTA */
5335     "get_quota",
5336     "gqot",
5337     2,
5338     RETRIEVE,
5339     "q",
5340     QUOTA_TABLE,
5341     "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",
5342     gqot_fields,
5343     9,
5344     "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",
5345     3,
5346     NULL,
5347     &gqot_validate,
5348   },
5349
5350   {
5351     /* Q_GQBF - GET_QUOTA_BY_FILESYS */
5352     "get_quota_by_filesys",
5353     "gqbf",
5354     2,
5355     RETRIEVE,
5356     "q",
5357     QUOTA_TABLE,
5358     "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",
5359     gqbf_fields,
5360     9,
5361     "fs.label LIKE '%s' AND fs.filsys_id = q.filsys_id AND m.mach_id = fs.mach_id",
5362     1,
5363     "fs.label, q.type",
5364     &gqbf_validate,
5365   },
5366
5367   {
5368     /* Q_AQOT - ADD_QUOTA */ /* prefetch_filsys() gets last 1 value */
5369     "add_quota",
5370     "aqot",
5371     2,
5372     APPEND,
5373     0,
5374     QUOTA_TABLE,
5375     "INTO quota (filsys_id, type, entity_id, quota, phys_id) VALUES ('%s', %d, %d, %s, %s)",
5376     aqot_fields,
5377     4,
5378     NULL,
5379     0,
5380     NULL,
5381     &aqot_validate,
5382   },
5383
5384   {
5385     /* Q_UQOT - UPDATE_QUOTA */
5386     "update_quota",
5387     "uqot",
5388     2,
5389     UPDATE,
5390     0,
5391     QUOTA_TABLE,
5392     "quota SET quota = %s",
5393     aqot_fields,
5394     1,
5395     0,
5396     3,
5397     NULL,
5398     &uqot_validate,
5399   },
5400
5401   {
5402     /* Q_DQOT - DELETE_QUOTA */
5403     "delete_quota",
5404     "dqot",
5405     2,
5406     DELETE,
5407     0,
5408     QUOTA_TABLE,
5409     NULL,
5410     aqot_fields,
5411     0,
5412     0,
5413     3,
5414     NULL,
5415     &dqot_validate,
5416   },
5417
5418   {
5419     /* Q_GNFQ - GET_NFS_QUOTAS */
5420     "get_nfs_quota",
5421     "gnfq",
5422     2,
5423     RETRIEVE,
5424     "q",
5425     QUOTA_TABLE,
5426     "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",
5427     gnfq_fields,
5428     8,
5429     "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'",
5430     2,
5431     "fs.label, u.login",
5432     &gnfq_validate,
5433   },
5434
5435   {
5436     /* Q_GNQP - GET_NFS_QUOTAS_BY_PARTITION */
5437     "get_nfs_quotas_by_partition",
5438     "gnqp",
5439     2,
5440     RETRIEVE,
5441     "q",
5442     QUOTA_TABLE,
5443     "fs.label, u.login, q.quota, np.dir, m.name FROM quota q, filesys fs, users u, nfsphys np, machine m",
5444     gnqp_fields,
5445     5,
5446     "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",
5447     2,
5448     "fs.label",
5449     NULL,
5450   },
5451
5452   {
5453     /* Q_ANFQ - ADD_NFS_QUOTA */ /* prefetch_filsys() gets last 1 value */
5454     "add_nfs_quota",
5455     "anfq",
5456     2,
5457     APPEND,
5458     0,
5459     QUOTA_TABLE,
5460     "INTO quota (type, filsys_id, entity_id, quota, phys_id ) VALUES ('USER', %d, %d, %s, %s)",
5461     anfq_fields,
5462     3,
5463     NULL,
5464     0,
5465     NULL,
5466     &anfq_validate,
5467   },
5468
5469   {
5470     /* Q_UNFQ - UPDATE_NFS_QUOTA */
5471     "update_nfs_quota",
5472     "unfq",
5473     2,
5474     UPDATE,
5475     0,
5476     QUOTA_TABLE,
5477     "quota SET quota = %s",
5478     anfq_fields,
5479     1,
5480     0,
5481     2,
5482     NULL,
5483     &unfq_validate,
5484   },
5485
5486   {
5487     /* Q_DNFQ - DELETE_NFS_QUOTA */
5488     "delete_nfs_quota",
5489     "dnfq",
5490     2,
5491     DELETE,
5492     0,
5493     QUOTA_TABLE,
5494     NULL,
5495     anfq_fields,
5496     0,
5497     0,
5498     2,
5499     NULL,
5500     &dnfq_validate,
5501   },
5502
5503   {
5504     /* Q_GZCL - GET_ZEPHYR_CLASS, v2 */
5505     "get_zephyr_class",
5506     "gzcl",
5507     2,
5508     RETRIEVE,
5509     "z",
5510     ZEPHYR_TABLE,
5511     "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",
5512     gzcl2_fields,
5513     12,
5514     "class LIKE '%s'",
5515     1,
5516     "class",
5517     &gzcl_validate,
5518   },
5519
5520   {
5521     /* Q_GZCL - GET_ZEPHYR_CLASS, v5 */
5522     "get_zephyr_class",
5523     "gzcl",
5524     5,
5525     RETRIEVE,
5526     "z",
5527     ZEPHYR_TABLE,
5528     "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",
5529     gzcl_fields,
5530     14,
5531     "class LIKE '%s'",
5532     1,
5533     "class",
5534     &gzcl_validate,
5535   },
5536
5537   {
5538     /* Q_AZCL - ADD_ZEPHYR_CLASS, v2 */
5539     "add_zephyr_class",
5540     "azcl",
5541     2,
5542     APPEND,
5543     "z",
5544     ZEPHYR_TABLE,
5545     "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)",
5546     azcl2_fields,
5547     9,
5548     0,
5549     0,
5550     NULL,
5551     &azcl2_validate,
5552   },
5553
5554   {
5555     /* Q_AZCL - ADD_ZEPHYR_CLASS, v5 */
5556     "add_zephyr_class",
5557     "azcl",
5558     5,
5559     APPEND,
5560     "z",
5561     ZEPHYR_TABLE,
5562     "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)",
5563     azcl_fields,
5564     11,
5565     0,
5566     0,
5567     NULL,
5568     &azcl_validate,
5569   },
5570
5571   {
5572     /* Q_UZCL - UPDATE_ZEPHYR_CLASS, v2 */
5573     "update_zephyr_class",
5574     "uzcl",
5575     2,
5576     UPDATE,
5577     "z",
5578     ZEPHYR_TABLE,
5579     "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",
5580     uzcl2_fields,
5581     9,
5582     "class = '%s'",
5583     1,
5584     NULL,
5585     &uzcl2_validate,
5586   },
5587
5588   {
5589     /* Q_UZCL - UPDATE_ZEPHYR_CLASS, v5 */
5590     "update_zephyr_class",
5591     "uzcl",
5592     5,
5593     UPDATE,
5594     "z",
5595     ZEPHYR_TABLE,
5596     "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",
5597     uzcl_fields,
5598     11,
5599     "class = '%s'",
5600     1,
5601     NULL,
5602     &uzcl_validate,
5603   },
5604
5605   {
5606     /* Q_DZCL - DELETE_ZEPHYR_CLASS */
5607     "delete_zephyr_class",
5608     "dzcl",
5609     2,
5610     DELETE,
5611     "z",
5612     ZEPHYR_TABLE,
5613     0,
5614     uzcl_fields,
5615     0,
5616     "class = '%s'",
5617     1,
5618     NULL,
5619     &dzcl_validate,
5620   },
5621
5622   {
5623     /* Q_GSHA - GET_SERVER_HOST_ACCESS */
5624     "get_server_host_access",
5625     "gsha",
5626     2,
5627     RETRIEVE,
5628     "ha",
5629     HOSTACCESS_TABLE,
5630     "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",
5631     gsha_fields,
5632     6,
5633     "m.name LIKE UPPER('%s') AND ha.mach_id = m.mach_id",
5634     1,
5635     "m.name",
5636     &gsha_validate,
5637   },
5638
5639   {
5640     /* Q_ASHA - ADD_SERVER_HOST_ACCESS */
5641     "add_server_host_access",
5642     "asha",
5643     2,
5644     APPEND,
5645     "ha",
5646     HOSTACCESS_TABLE,
5647     "INTO hostaccess (mach_id, acl_type, acl_id) VALUES (%d, '%s', %d)",
5648     asha_fields,
5649     3,
5650     0,
5651     0,
5652     NULL,
5653     &asha_validate,
5654   },
5655
5656   {
5657     /* Q_USHA - UPDATE_SERVER_HOST_ACCESS */
5658     "update_server_host_access",
5659     "usha",
5660     2,
5661     UPDATE,
5662     "ha",
5663     HOSTACCESS_TABLE,
5664     "hostaccess SET acl_type = '%s', acl_id = %d",
5665     asha_fields,
5666     2,
5667     "mach_id = %d",
5668     1,
5669     NULL,
5670     &asha_validate,
5671   },
5672
5673   {
5674     /* Q_DSHA - DELETE_SERVER_HOST_ACCESS */
5675     "delete_server_host_access",
5676     "dsha",
5677     2,
5678     DELETE,
5679     "ha",
5680     HOSTACCESS_TABLE,
5681     0,
5682     asha_fields,
5683     0,
5684     "mach_id = %d",
5685     1,
5686     NULL,
5687     &VDmach,
5688   },
5689
5690   {
5691     /* Q_GACL - GET_ACL */
5692     "get_acl",
5693     "gacl",
5694     2,
5695     RETRIEVE,
5696     "ac",
5697     ACL_TABLE,
5698     "m.name, ac.target, ac.kind, l.name FROM acl ac, machine m, list l",
5699     gacl_fields,
5700     4,
5701     "m.mach_id = %d AND m.mach_id = ac.mach_id AND ac.target LIKE '%s' AND l.list_id = ac.list_id",
5702     2,
5703     "m.name, ac.target, ac.kind",
5704     &gacl_validate,
5705   },
5706
5707   {
5708     /* Q_AACL - ADD_ACL */
5709     "add_acl",
5710     "aacl",
5711     2,
5712     APPEND,
5713     "ac",
5714     ACL_TABLE,
5715     "INTO acl (mach_id, target, kind, list_id) VALUES (%d, '%s', '%s', %d)",
5716     aacl_fields,
5717     4,
5718     0,
5719     0,
5720     NULL,
5721     &aacl_validate,
5722   },
5723
5724   {
5725     /* Q_DACL - DELETE_ACL */
5726     "delete_acl",
5727     "dacl",
5728     2,
5729     DELETE,
5730     "ac",
5731     ACL_TABLE,
5732     0,
5733     dacl_fields,
5734     0,
5735     "mach_id = %d AND target = '%s'",
5736     2,
5737     NULL,
5738     &gacl_validate,
5739   },
5740
5741   {
5742     /* Q_GSVC - GET_SERVICE */
5743     "get_service",
5744     "gsvc",
5745     2,
5746     RETRIEVE,
5747     "ss",
5748     SERVICES_TABLE,
5749     "name, protocol, port, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM services",
5750     gsvc_fields,
5751     7,
5752     "name LIKE '%s' AND protocol LIKE '%s'",
5753     2,
5754     "name",
5755     &VDfix_modby,
5756   },
5757
5758   {
5759     /* Q_ASVC - ADD_SERVICE */
5760     "add_service",
5761     "asvc",
5762     2,
5763     APPEND,
5764     "ss",
5765     SERVICES_TABLE,
5766     "INTO services (name, protocol, port, description) VALUES ('%s', '%s', %s, NVL('%s', CHR(0)))",
5767     asvc_fields,
5768     4,
5769     NULL,
5770     0,
5771     NULL,
5772     &asvc_validate,
5773   },
5774
5775   {
5776     /* Q_DSVC - DELETE_SERVICE */
5777     "delete_service",
5778     "dsvc",
5779     2,
5780     DELETE,
5781     "ss",
5782     SERVICES_TABLE,
5783     0,
5784     dsvc_fields,
5785     0,
5786     "name = '%s' AND protocol = '%s'",
5787     2,
5788     NULL,
5789     &dsvc_validate,
5790   },
5791
5792   {
5793     /* Q_GPRN - GET_PRINTER */
5794     "get_printer",
5795     "gprn",
5796     2,
5797     RETRIEVE,
5798     "pr",
5799     PRINTERS_TABLE,
5800     "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",
5801     gprn_fields,
5802     19,
5803     "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",
5804     1,
5805     "pr.name",
5806     &VDfix_modby,
5807   },
5808
5809   {
5810     /* Q_GPBD - GET_PRINTER_BY_DUPLEXNAME */
5811     "get_printer_by_duplexname",
5812     "gpbd",
5813     2,
5814     RETRIEVE,
5815     "pr",
5816     PRINTERS_TABLE,
5817     "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",
5818     gpbd_fields,
5819     19,
5820     "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",
5821     1,
5822     "pr.name",
5823     &VDfix_modby,
5824   },
5825
5826   {
5827     /* Q_GPBE - GET_PRINTER_BY_ETHERNET */
5828     "get_printer_by_ethernet",
5829     "gpbe",
5830     2,
5831     RETRIEVE,
5832     "pr",
5833     PRINTERS_TABLE,
5834     "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",
5835     gpbd_fields,
5836     19,
5837     "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",
5838     1,
5839     "pr.name",
5840     &VDfix_modby,
5841   },
5842
5843   {
5844     /* Q_GPBH - GET_PRINTER_BY_HOSTNAME */
5845     "get_printer_by_hostname",
5846     "gpbh",
5847     2,
5848     RETRIEVE,
5849     "pr",
5850     PRINTERS_TABLE,
5851     "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",
5852     gpbh_fields,
5853     19,
5854     "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",
5855     1,
5856     "pr.name",
5857     &VDfix_modby,
5858   },
5859
5860   {
5861     /* Q_GPBR - GET_PRINTER_BY_RM */
5862     "get_printer_by_rm",
5863     "gpbr",
5864     2,
5865     RETRIEVE,
5866     "pr",
5867     PRINTERS_TABLE,
5868     "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",
5869     gpbr_fields,
5870     19,
5871     "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",
5872     1,
5873     "pr.name",
5874     &VDfix_modby,
5875   },
5876
5877   {
5878     /* Q_GPBL - GET_PRINTER_BY_LOCATION */
5879     "get_printer_by_location",
5880     "gpbl",
5881     2,
5882     RETRIEVE,
5883     "pr",
5884     PRINTERS_TABLE,
5885     "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",
5886     gpbl_fields,
5887     19,
5888     "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",
5889     1,
5890     "pr.name",
5891     &VDfix_modby,
5892   },
5893
5894   {
5895     /* Q_GPBC - GET_PRINTER_BY_CONTACT */
5896     "get_printer_by_contact",
5897     "gpbc",
5898     2,
5899     RETRIEVE,
5900     "pr",
5901     PRINTERS_TABLE,
5902     "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",
5903     gpbc_fields,
5904     19,
5905     "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",
5906     1,
5907     "pr.name",
5908     &VDfix_modby,
5909   },
5910
5911   {
5912     /* Q_APRN - ADD_PRINTER */
5913     "add_printer",
5914     "aprn",
5915     2,
5916     APPEND,
5917     "pr",
5918     PRINTERS_TABLE,
5919     "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)))",
5920     aprn_fields,
5921     16,
5922     0,
5923     0,
5924     NULL,
5925     &aprn_validate,
5926   },
5927
5928   {
5929     /* Q_UPRN - UPDATE_PRINTER */
5930     "update_printer",
5931     "uprn",
5932     2,
5933     UPDATE,
5934     "pr",
5935     PRINTERS_TABLE,
5936     "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))",
5937     uprn_fields,
5938     16,
5939     0,
5940     0,
5941     NULL,
5942     &uprn_validate,
5943   },
5944
5945   {
5946     /* Q_DPRN - DELETE_PRINTER */
5947     "delete_printer",
5948     "dprn",
5949     2,
5950     DELETE,
5951     "pr",
5952     PRINTERS_TABLE,
5953     0,
5954     aprn_fields,
5955     0,
5956     "name = '%s'",
5957     1,
5958     NULL,
5959     &dprn_validate,
5960   },
5961
5962   {
5963     /* Q_GPSV - GET_PRINT_SERVER */
5964     "get_print_server",
5965     "gpsv",
5966     2,
5967     RETRIEVE,
5968     "ps",
5969     PRINTSERVERS_TABLE,
5970     "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",
5971     gpsv_fields,
5972     9,
5973     "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",
5974     1,
5975     NULL,
5976     &gpsv_validate,
5977   },
5978
5979   {
5980     /* Q_APSV - ADD_PRINT_SERVER */
5981     "add_print_server",
5982     "apsv",
5983     2,
5984     APPEND,
5985     "ps",
5986     PRINTSERVERS_TABLE,
5987     "INTO printservers (mach_id, kind, printer_types, owner_type, owner_id, lpc_acl) VALUES (%d, '%s', %d, '%s', %d, %d)",
5988     apsv_fields,
5989     6,
5990     0,
5991     0,
5992     NULL,
5993     &apsv_validate,
5994   },
5995
5996   {
5997     /* Q_UPSV - UPDATE_PRINT_SERVER */
5998     "update_print_server",
5999     "upsv",
6000     2,
6001     UPDATE,
6002     "ps",
6003     PRINTSERVERS_TABLE,
6004     "printservers SET kind = '%s', printer_types = %d, owner_type = '%s', owner_id = %d, lpc_acl = %d",
6005     apsv_fields,
6006     5,
6007     "mach_id = %d",
6008     1,
6009     NULL,
6010     &apsv_validate,
6011   },
6012
6013   {
6014     /* Q_DPSV - DELETE_PRINT_SERVER */
6015     "delete_print_server",
6016     "dpsv",
6017     2,
6018     DELETE,
6019     "ps",
6020     PRINTSERVERS_TABLE,
6021     0,
6022     dpsv_fields,
6023     0,
6024     "mach_id = %d",
6025     1,
6026     NULL,
6027     &dpsv_validate,
6028   },
6029
6030   {
6031     /* Q_GALI - GET_ALIAS */
6032     "get_alias",
6033     "gali",
6034     2,
6035     RETRIEVE,
6036     "a",
6037     ALIAS_TABLE,
6038     "name, type, trans FROM alias",
6039     gali_fields,
6040     3,
6041     "name LIKE '%s' AND type LIKE '%s' AND trans LIKE '%s'",
6042     3,
6043     "type, name, trans",
6044     NULL,
6045   },
6046
6047   {
6048     /* Q_AALI - ADD_ALIAS */
6049     "add_alias",
6050     "aali",
6051     2,
6052     APPEND,
6053     "a",
6054     ALIAS_TABLE,
6055     "INTO alias (name, type, trans) VALUES ('%s', '%s', '%s')",
6056     aali_fields,
6057     3,
6058     NULL,
6059     0,
6060     NULL,
6061     &aali_validate,
6062   },
6063
6064   {
6065     /* Q_DALI - DELETE_ALIAS */
6066     "delete_alias",
6067     "dali",
6068     2,
6069     DELETE,
6070     "a",
6071     ALIAS_TABLE,
6072     NULL,
6073     aali_fields,
6074     0,
6075     "name = '%s' AND type = '%s' AND  trans = '%s'",
6076     3,
6077     NULL,
6078     &dali_validate,
6079   },
6080
6081   {
6082     /* Q_GVAL - GET_VALUE */
6083     "get_value",
6084     "gval",
6085     2,
6086     RETRIEVE,
6087     "val",
6088     NUMVALUES_TABLE,
6089     "value FROM numvalues",
6090     gval_fields,
6091     1,
6092     "name = '%s'",
6093     1,
6094     NULL,
6095     &gval_validate,
6096   },
6097
6098   {
6099     /* Q_AVAL - ADD_VALUE */
6100     "add_value",
6101     "aval",
6102     2,
6103     APPEND,
6104     "val",
6105     NUMVALUES_TABLE,
6106     "INTO numvalues (name, value) VALUES ('%s', %s)",
6107     aval_fields,
6108     2,
6109     NULL,
6110     0,
6111     NULL,
6112     &aval_validate,
6113   },
6114
6115   {
6116     /* Q_UVAL - UPDATE_VALUE */
6117     "update_value",
6118     "uval",
6119     2,
6120     UPDATE,
6121     "val",
6122     NUMVALUES_TABLE,
6123     "numvalues SET value = %s",
6124     aval_fields,
6125     1,
6126     "name = '%s'",
6127     1,
6128     NULL,
6129     &aval_validate,
6130   },
6131
6132   {
6133     /* Q_DVAL - DELETE_VALUE */
6134     "delete_value",
6135     "dval",
6136     2,
6137     DELETE,
6138     "val",
6139     NUMVALUES_TABLE,
6140     NULL,
6141     dval_fields,
6142     0,
6143     "name = '%s'",
6144     1,
6145     NULL,
6146     &aval_validate,
6147   },
6148
6149   {
6150     /* Q_GATS - GET_ALL_TABLE_STATS */
6151     "get_all_table_stats",
6152     "gats",
6153     2,
6154     RETRIEVE,
6155     "tbs",
6156     TBLSTATS_TABLE,
6157     "table_name, appends, updates, deletes, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS') FROM tblstats",
6158     gats_fields,
6159     5,
6160     NULL,
6161     0,
6162     "table_name",
6163     0,
6164   },
6165
6166   {
6167     /* Q__SDL - _SET_DEBUG_LEVEL */
6168     "_set_debug_level",
6169     "_sdl",
6170     2,
6171     UPDATE,
6172     NULL,
6173     0,
6174     NULL,
6175     _sdl_fields,
6176     1,
6177     NULL,
6178     0,
6179     NULL,
6180     &_sdl_validate,
6181   },
6182
6183   {
6184     /* Q_GUSL - GET_USER_SIDS_BY_LOGIN, v4 */
6185     "get_user_sids_by_login",
6186     "gusl",
6187     4,
6188     RETRIEVE,
6189     "s",
6190     USERSIDS_TABLE,
6191     "u.login, us.sid, TO_CHAR(us.created, 'YYYY-MM-DD HH24:MI:SS') FROM users u, usersids us",
6192     gusl_fields,
6193     3,
6194     "us.users_id = %d AND u.users_id = us.users_id",
6195     1,
6196     "us.created",
6197     &gusl_validate,
6198   },
6199
6200   {
6201     /* Q_AUSL - ADD_USER_SID_BY_LOGIN, v4 */
6202     "add_user_sid_by_login",
6203     "ausl",
6204     4,
6205     APPEND,
6206     "s",
6207     USERSIDS_TABLE,
6208     "INTO usersids (users_id, sid) VALUES (%d, '%s')",
6209     ausl_fields,
6210     2,
6211     NULL,
6212     0,
6213     NULL,
6214     &ausl_validate,
6215   },
6216   
6217   {
6218     /* Q_GLSN - GET_LIST_SIDS_BY_NAME, v4 */
6219     "get_list_sids_by_name",
6220     "glsn",
6221     4,
6222     RETRIEVE,
6223     "s",
6224     LISTSIDS_TABLE,
6225     "l.name, ls.sid, TO_CHAR(ls.created, 'YYYY-MM-DD HH24:MI:SS') FROM list l, listsids ls",
6226     glsn_fields,
6227     3,
6228     "ls.list_id = %d AND l.list_id = ls.list_id",
6229     1,
6230     "created",
6231     &glsn_validate,
6232   },
6233
6234   {
6235     /* Q_ALSN - ADD_LIST_SID_BY_NAME, v4 */
6236     "add_list_sid_by_name",
6237     "alsn",
6238     4,
6239     APPEND,
6240     "s",
6241     LISTSIDS_TABLE,
6242     "INTO listsids (list_id, sid) VALUES (%d, '%s')",
6243     alsn_fields,
6244     2,
6245     NULL,
6246     0,
6247     NULL,
6248     &alsn_validate,
6249   },
6250
6251 };
6252
6253 int QueryCount = (sizeof(Queries) / sizeof(struct query));
This page took 0.54008 seconds and 5 git commands to generate.