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