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