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