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