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