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