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