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