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