]> andersk Git - moira.git/blob - server/queries2.c
Move conversion of UNIX->SQL wildcards from query validation stage to
[moira.git] / server / queries2.c
1 /* $Id$
2  *
3  * This file defines the query dispatch table for version 2 of the protocol
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 VOnum0[] = {
46   {V_NUM, 0},
47 };
48
49 /* Validations
50  * Commonly used validation records defined here so that they may
51  * be shared.
52  */
53
54 static struct validate VDmach = { VOmach0, 1 };
55
56 static struct validate VDfix_modby = {
57   0,
58   0,
59   0,
60   0,
61   0,
62   0,
63   0,
64   0,
65   followup_fix_modby,
66 };
67
68 /* Query data */
69
70 static char *galo_fields[] = {
71   "login", "unix_uid", "shell", "last", "first", "middle",
72 };
73
74 static char *gual_fields[] = {
75   "login",
76   "login", "unix_uid", "shell", "last", "first", "middle", "status",
77   "clearid", "class", "comments", "signature", "secure", "modby", "modby", "modwith",
78 };
79
80 static char *gubl_fields[] = {
81   "login",
82   "login", "unix_uid", "shell", "last", "first", "middle", "status",
83   "clearid", "class", "modby", "modby", "modwith",
84 };
85
86 static struct validate gubl_validate =
87 {
88   0,
89   0,
90   0,
91   0,
92   0,
93   0,
94   access_login,
95   0,
96   followup_guax,
97 };
98
99 static char *guau_fields[] = {
100   "unix_uid",
101   "login", "unix_uid", "shell", "last", "first", "middle", "status",
102   "clearid", "class", "comments", "signature", "secure", "modby", "modby", "modwith",
103 };
104
105 static char *guan_fields[] = {
106   "first", "last",
107   "login", "unix_uid", "shell", "last", "first", "middle", "status",
108   "clearid", "class", "comments", "signature", "secure", "modby", "modby", "modwith",
109 };
110
111 static struct validate guan_validate =
112 {
113   0,
114   0,
115   0,
116   0,
117   0,
118   0,
119   0,
120   0,
121   followup_guax,
122 };
123
124 static char *guac_fields[] = {
125   "class",
126   "login", "unix_uid", "shell", "last", "first", "middle", "status",
127   "clearid", "class", "comments", "signature", "secure", "modby", "modby", "modwith",
128 };
129
130 static char *guam_fields[] = {
131   "clearid",
132   "login", "unix_uid", "shell", "last", "first", "middle", "status",
133   "clearid", "class", "comments", "signature", "secure", "modby", "modby", "modwith",
134 };
135
136 static char *gubu_fields[] = {
137   "unix_uid",
138   "login", "unix_uid", "shell", "last", "first", "middle", "status",
139   "clearid", "class", "modby", "modby", "modwith",
140 };
141
142 static struct validate gubu_validate =
143 {
144   VOnum0,
145   1,
146   0,
147   0,
148   0,
149   0,
150   access_login,
151   0,
152   followup_fix_modby,
153 };
154
155 static char *gubn_fields[] = {
156   "first", "last",
157   "login", "unix_uid", "shell", "last", "first", "middle", "status",
158   "clearid", "class", "modby", "modby", "modwith",
159 };
160
161 static struct validate gubn_validate =
162 {
163   0,
164   0,
165   0,
166   0,
167   0,
168   0,
169   0,
170   0,
171   followup_fix_modby,
172 };
173
174 static char *gubc_fields[] = {
175   "class",
176   "login", "unix_uid", "shell", "last", "first", "middle", "status",
177   "clearid", "class", "modby", "modby", "modwith",
178 };
179
180 static char *gubm_fields[] = {
181   "clearid",
182   "login", "unix_uid", "shell", "last", "first", "middle", "status",
183   "clearid", "class", "modby", "modby", "modwith",
184 };
185
186 static char *gudf_fields[] = {
187   "login",
188   "dirsuppress", "dirremote"
189 };
190
191 static struct validate gudf_validate =
192 {
193   VOuser0,
194   2,
195   0,
196   0,
197   0,
198   0,
199   access_user,
200   0,
201   0,
202 };
203
204 static char *auac_fields[] = {
205   "login", "unix_uid", "shell", "last", "first", "middle", "status",
206   "clearid", "class", "comments", "signature", "secure",
207 };
208
209 static struct valobj auac_valobj[] = {
210   {V_CHAR, 0, USERS_TABLE, "login"},
211   {V_NUM, 1},
212   {V_CHAR, 2, USERS_TABLE, "shell"},
213   {V_CHAR, 3, USERS_TABLE, "last"},
214   {V_CHAR, 4, USERS_TABLE, "first"},
215   {V_CHAR, 5, USERS_TABLE, "middle"},
216   {V_NUM, 6},
217   {V_CHAR, 7, USERS_TABLE, "clearid"},
218   {V_TYPE, 8, 0, "class", 0, MR_BAD_CLASS},
219   {V_ID, 9, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
220   {V_NUM, 10},
221 };
222
223 static struct validate auac_validate = {
224   auac_valobj,
225   11,
226   "login",
227   "login = '%s'",
228   1,
229   "users_id",
230   0,
231   setup_ausr,
232   followup_ausr,
233 };
234
235 static struct validate ausr_validate = {
236   auac_valobj,
237   9,
238   "login",
239   "login = '%s'",
240   1,
241   "users_id",
242   0,
243   setup_ausr,
244   followup_ausr,
245 };
246
247 static char *rusr_fields[] = {
248   "unix_uid", "login", "fs_type"
249 };
250
251 static struct valobj rusr_valobj[] = {
252   {V_NUM, 0},
253   {V_CHAR, 1},
254   {V_NUM, 2},
255 };
256
257 static struct validate rusr_validate = {
258   rusr_valobj,
259   3,
260   0,
261   0,
262   0,
263   0,
264   0,
265   register_user,
266   0,
267 };
268
269 static char *uuac_fields[] = {
270   "login",
271   "newlogin", "unix_uid", "shell", "last", "first", "middle", "status",
272   "clearid", "class", "comments", "signature", "secure",
273 };
274
275 static struct valobj uuac_valobj[] = {
276   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
277   {V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
278   {V_NUM, 2},
279   {V_CHAR, 3, USERS_TABLE, "shell"},
280   {V_CHAR, 4, USERS_TABLE, "first"},
281   {V_CHAR, 5, USERS_TABLE, "last"},
282   {V_CHAR, 6, USERS_TABLE, "middle"},
283   {V_NUM, 7},
284   {V_CHAR, 8, USERS_TABLE, "clearid"},
285   {V_TYPE, 9, 0, "class", 0, MR_BAD_CLASS},
286   {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
287   {V_NUM, 12},
288 };
289
290 static struct validate uuac_validate = {
291   uuac_valobj,
292   12,
293   0,
294   0,
295   0,
296   "users_id",
297   0,
298   setup_ausr,
299   followup_uuac,
300 };
301
302 static struct validate uusr_validate = {
303   uuac_valobj,
304   11,
305   0,
306   0,
307   0,
308   "users_id",
309   0,
310   setup_ausr,
311   set_modtime_by_id,
312 };
313
314 static char *uush_fields[] = {
315   "login",
316   "shell",
317 };
318
319 static struct valobj uush_valobj[] = {
320   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
321   {V_CHAR, 1, USERS_TABLE, "shell"},
322 };
323
324 static struct validate uush_validate = {
325   uush_valobj,
326   2,
327   0,
328   0,
329   0,
330   "users_id",
331   access_user,
332   0,
333   set_modtime_by_id,
334 };
335
336 static char *uust_fields[] = {
337   "login",
338   "status",
339 };
340
341 static char *uuss_fields[] = {
342   "login",
343   "secure",
344 };
345
346 static struct valobj uust_valobj[] = {
347   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
348   {V_NUM, 1},
349   {V_NUM, 2},
350 };
351
352 static struct validate uust_validate = {
353   uust_valobj,
354   2,
355   0,
356   0,
357   0,
358   "users_id",
359   0,
360   0,
361   set_modtime_by_id,
362 };
363
364 static char *uudf_fields[] = {
365   "login",
366   "dirsuppress", "dirremote"
367 };
368
369 static struct validate uudf_validate = {
370   uust_valobj,
371   3,
372   0,
373   0,
374   0,
375   "users_id",
376   access_user,
377   0,
378   set_modtime_by_id,
379 };
380
381 static char *dusr_fields[] = {
382   "login",
383 };
384
385 static struct validate dusr_validate = {
386   VOuser0,
387   1,
388   0,
389   0,
390   0,
391   0,
392   0,
393   setup_dusr,
394   0,
395 };
396
397 static char *dubu_fields[] = {
398   "unix_uid",
399 };
400
401 static struct valobj dubu_valobj[] = {
402   {V_ID, 0, USERS_TABLE, "unix_uid", "users_id", MR_USER}
403 };
404
405 static struct validate dubu_validate = {
406   dubu_valobj,
407   1,
408   0,
409   0,
410   0,
411   0,
412   0,
413   setup_dusr,
414   0,
415 };
416
417 static char *gkum_fields[] = { "login", "kerberos",
418                                    "login", "kerberos" };
419
420 static char *akum_fields[] = { "login", "kerberos" };
421
422 static struct valobj akum_valobj[] =
423 {
424   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
425   {V_ID, 1, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
426 };
427
428 static struct validate akum_validate =
429 {
430   akum_valobj,
431   2,
432   "users_id",
433   "users_id = %d or string_id = %d",
434   2,
435   "users_id",
436   access_user,
437   setup_akum,
438   0,
439 };
440
441 static struct validate dkum_validate =
442 {
443   akum_valobj,
444   2,
445   "users_id",
446   "users_id = %d and string_id = %d",
447   2,
448   "users_id",
449   access_user,
450   0,
451   0,
452 };
453
454 static char *gfbl_fields[] = {
455   "login",
456   "login", "fullname", "nickname", "home_addr",
457   "home_phone", "office_addr", "office_phone", "department",
458   "affiliation", "modby", "modby", "modwith",
459 };
460
461 static struct validate gfbl_validate = {
462   VOuser0,
463   1,
464   0,
465   0,
466   0,
467   0,
468   access_user,
469   0,
470   followup_fix_modby,
471 };
472
473 static char *ufbl_fields[] = {
474   "login",
475   "fullname", "nickname", "home_addr",
476   "home_phone", "office_addr", "office_phone", "department",
477   "affiliation",
478 };
479
480 static struct valobj ufbl_valobj[] = {
481   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
482   {V_LEN, 1, USERS_TABLE, "fullname"},
483   {V_LEN, 2, USERS_TABLE, "nickname"},
484   {V_LEN, 3, USERS_TABLE, "home_addr"},
485   {V_LEN, 4, USERS_TABLE, "home_phone"},
486   {V_LEN, 5, USERS_TABLE, "office_addr"},
487   {V_LEN, 6, USERS_TABLE, "office_phone"},
488   {V_LEN, 7, USERS_TABLE, "department"},
489   {V_LEN, 8, USERS_TABLE, "affiliation"},
490 };
491
492 static struct validate ufbl_validate = {
493   ufbl_valobj,
494   9,
495   0,
496   0,
497   0,
498   0,
499   access_user,
500   0,
501   set_finger_modtime,
502 };
503
504 static char *gpob_fields[] = {
505   "login",
506   "login", "type", "box", "modby", "modby", "modwith",
507 };
508
509 static struct validate gpob_validate = {
510   VOuser0,
511   1,
512   "potype",
513   "potype != 'NONE' and users_id = %d",
514   1,
515   0,
516   access_user,
517   0,
518   followup_gpob,
519 };
520
521 static char *gpox_fields[] = {
522   "login", "type", "box",
523 };
524
525 static struct validate gpox_validate = {
526   0,
527   0,
528   0,
529   0,
530   0,
531   0,
532   0,
533   0,
534   followup_gpob,
535 };
536
537 static char *spob_fields[] = {
538   "login", "type", "box",
539 };
540
541 static struct valobj spob_valobj[] = {
542   {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
543   {V_TYPE, 1, 0, "pobox", 0, MR_TYPE},
544 };
545
546 static struct validate spob_validate =  /* SET_POBOX */
547 {
548   spob_valobj,
549   2,
550   0,
551   0,
552   0,
553   0,
554   access_user,
555   0,
556   set_pobox,
557 };
558
559 static struct validate spop_validate =  /* SET_POBOX_POP */
560 {
561   VOuser0,
562   1,
563   0,
564   0,
565   0,
566   0,
567   access_user,
568   setup_spop,
569   set_pobox_modtime,
570 };
571
572 static struct validate dpob_validate =  /* DELETE_POBOX */
573 {
574   VOuser0,
575   1,
576   0,
577   0,
578   0,
579   0,
580   access_user,
581   setup_dpob,
582   set_pobox_modtime,
583 };
584
585 static char *gmac_fields[] = {
586   "name",
587   "name", "type", "modby", "modby", "modwith",
588 };
589
590 static char *ghst_fields[] = {
591   "name", "address", "location", "network",
592   "name", "vendor", "model", "os", "location", "contact", "use", "status", "status_change", "network", "address", "ace_type", "ace_name", "admin_comment", "ops_comment", "created", "creator", "inuse", "modby", "modby", "modwith",
593 };
594
595 static struct validate ghst_validate = {
596   0,
597   0,
598   0,
599   0,
600   0,
601   0,
602   access_host,
603   0,
604   followup_ghst,
605 };
606
607 static char *ahst_fields[] = {
608   "name", "vendor", "model", "os", "location", "contact", "use", "status", "subnet", "address", "ace_type", "ace_name", "admin_comment", "ops_comment",
609 };
610
611 static struct valobj ahst_valobj[] = {
612   {V_CHAR, 0, MACHINE_TABLE, "name"},
613   {V_CHAR, 1, MACHINE_TABLE, "vendor"},
614   {V_CHAR, 2, MACHINE_TABLE, "model"},
615   {V_CHAR, 3, MACHINE_TABLE, "os"},
616   {V_CHAR, 4, MACHINE_TABLE, "location"},
617   {V_CHAR, 5, MACHINE_TABLE, "contact"},
618   {V_NUM, 6},
619   {V_NUM, 7},
620   {V_ID, 8, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
621   {V_TYPE, 10, 0, "ace_type", 0, MR_ACE},
622   {V_TYPEDATA, 11, 0, 0, 0, MR_ACE},
623   {V_ID, 12, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
624   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
625 };
626
627 static struct validate ahst_validate = {
628   ahst_valobj,
629   13,
630   "name",
631   "name = UPPER('%s')",
632   1,
633   "mach_id",
634   access_host,
635   setup_ahst,
636   set_uppercase_modtime,
637 };
638
639 static char *uhst_fields[] = {
640   "name",
641   "newname", "vendor", "model", "os", "location", "contact", "use", "status", "subnet", "address", "ace_type", "ace_name", "admin_comment", "ops_comment",
642 };
643
644 static struct valobj uhst_valobj[] = {
645   {V_CHAR, 0, MACHINE_TABLE, "name"},
646   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
647   {V_RENAME, 1, MACHINE_TABLE, "name", "mach_id", MR_NOT_UNIQUE},
648   {V_CHAR, 2, MACHINE_TABLE, "vendor"},
649   {V_CHAR, 3, MACHINE_TABLE, "model"},
650   {V_CHAR, 4, MACHINE_TABLE, "os"},
651   {V_CHAR, 5, MACHINE_TABLE, "location"},
652   {V_CHAR, 6, MACHINE_TABLE, "contact"},
653   {V_NUM, 7},
654   {V_NUM, 8},
655   {V_ID, 9, SUBNET_TABLE, "name", "snet_id", MR_SUBNET},
656   {V_TYPE, 11, 0, "ace_type", 0, MR_ACE},
657   {V_TYPEDATA, 12, 0, 0, 0, MR_ACE},
658   {V_ID, 13, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
659   {V_ID, 14, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
660 };
661
662 static struct validate uhst_validate = {
663   uhst_valobj,
664   15,
665   0,
666   0,
667   0,
668   "mach_id",
669   access_host,
670   setup_ahst,
671   set_modtime_by_id,
672 };
673
674 static char *dhst_fields[] = {
675   "name",
676 };
677
678 static struct validate dhst_validate = {
679   VOmach0,
680   1,
681   0,
682   0,
683   0,
684   0,
685   0,
686   setup_dmac,
687   0,
688 };
689
690 static char *ghal_fields[] = {
691   "alias", "canonical_hostname",
692   "alias", "canonical_hostname"
693 };
694
695 static struct validate ghal_validate = {
696   0,
697   0,
698   0,
699   0,
700   0,
701   0,
702   access_ahal,
703   0,
704   0,
705 };
706
707 static struct valobj ahal_valobj[] = {
708   {V_CHAR, 0, HOSTALIAS_TABLE, "name"},
709   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
710 };
711
712 static struct validate ahal_validate = {
713   ahal_valobj,
714   2,
715   "name",
716   "name = '%s'",
717   1,
718   "mach_id",
719   access_ahal,
720   setup_ahal,
721   0,
722 };
723
724 static struct valobj dhal_valobj[] = {
725   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
726 };
727
728 static struct validate dhal_validate = {
729   dhal_valobj,
730   1,
731   "name",
732   "name = '%s' AND mach_id = %d",
733   2,
734   "mach_id",
735   access_ahal,
736   0,
737   0,
738 };
739
740 static char *gsnt_fields[] = {
741   "name",
742   "name", "description", "address", "mask", "low", "high", "prefix", "ace_type", "ace_name",
743   "modby", "modby", "modwith"
744 };
745
746 static struct validate gsnt_validate = {
747   0,
748   0,
749   0,
750   0,
751   0,
752   0,
753   access_snt,
754   0,
755   followup_gsnt,
756 };
757
758 static char *asnt_fields[] = {
759   "name", "description", "address", "mask", "low", "high", "prefix", "ace_type", "ace_name",
760 };
761
762 static struct valobj asnt_valobj[] = {
763   {V_CHAR, 0, SUBNET_TABLE, "name"},
764   {V_LEN, 1, SUBNET_TABLE, "description"},
765   {V_NUM, 2},
766   {V_NUM, 3},
767   {V_NUM, 4},
768   {V_NUM, 5},
769   {V_LEN, 6, SUBNET_TABLE, "prefix"},
770   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
771   {V_TYPEDATA, 8, 0, 0, 0, MR_ACE},
772 };
773
774 static struct validate asnt_validate =
775 {
776   asnt_valobj,
777   9,
778   "name",
779   "name = UPPER('%s')",
780   1,
781   "snet_id",
782   0,
783   prefetch_value,
784   set_uppercase_modtime,
785 };
786
787 static char *usnt_fields[] = {
788   "name",
789   "newname", "description", "address", "mask", "low", "high", "prefix", "ace_type", "ace_name",
790 };
791
792 static struct valobj usnt_valobj[] = {
793   {V_ID, 0, SUBNET_TABLE, "name", "snet_id", MR_NO_MATCH},
794   {V_RENAME, 1, SUBNET_TABLE, "name", "snet_id", MR_NOT_UNIQUE},
795   {V_LEN, 2, SUBNET_TABLE, "description"},
796   {V_NUM, 3},
797   {V_NUM, 4},
798   {V_NUM, 5},
799   {V_NUM, 6},
800   {V_LEN, 7, SUBNET_TABLE, "prefix"},
801   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
802   {V_TYPEDATA, 9, 0, 0, 0, MR_ACE},
803 };
804
805 static struct validate usnt_validate =
806 {
807   usnt_valobj,
808   10,
809   "name",
810   "snet_id = %d",
811   1,
812   "snet_id",
813   0,
814   0,
815   set_modtime_by_id,
816 };
817
818 static char *dsnt_fields[] = {
819   "name",
820 };
821
822 static struct validate dsnt_validate = {
823   VOsnet0,
824   1,
825   0,
826   0,
827   0,
828   0,
829   0,
830   setup_dsnt,
831   0,
832 };
833
834 static char *gclu_fields[] = {
835   "name",
836   "name", "description", "location", "modby", "modby", "modwith",
837 };
838
839 static char *aclu_fields[] = {
840   "name", "description", "location",
841 };
842
843 static struct valobj aclu_valobj[] = {
844   {V_CHAR, 0, CLUSTERS_TABLE, "name"},
845   {V_LEN, 1, CLUSTERS_TABLE, "description"},
846   {V_LEN, 2, CLUSTERS_TABLE, "location"},
847 };
848
849 static struct validate aclu_validate =
850 {
851   aclu_valobj,
852   3,
853   "name",
854   "name = '%s'",
855   1,
856   "clu_id",
857   0,
858   prefetch_value,
859   set_modtime,
860 };
861
862 static char *uclu_fields[] = {
863   "name",
864   "newname", "description", "location",
865 };
866
867 static struct valobj uclu_valobj[] = {
868   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
869   {V_RENAME, 1, CLUSTERS_TABLE, "name", "clu_id", MR_NOT_UNIQUE},
870   {V_LEN, 2, CLUSTERS_TABLE, "description"},
871   {V_LEN, 3, CLUSTERS_TABLE, "location"},
872 };
873
874 static struct validate uclu_validate = {
875   uclu_valobj,
876   4,
877   0,
878   0,
879   0,
880   "clu_id",
881   0,
882   0,
883   set_modtime_by_id,
884 };
885
886 static char *dclu_fields[] = {
887   "name",
888 };
889
890 static struct validate dclu_validate = {
891   VOclu0,
892   1,
893   0,
894   0,
895   0,
896   0,
897   0,
898   setup_dclu,
899   0,
900 };
901
902 static char *gmcm_fields[] = {
903   "machine", "cluster",
904   "machine", "cluster",
905 };
906
907 static struct valobj amtc_valobj[] =    /* ADD_MACHINE_TO_CLUSTER */
908 {                                       /* DELETE_MACHINE_FROM_CLUSTER */
909   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
910   {V_ID, 1, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
911 };
912
913 static struct validate amtc_validate = /* for amtc and dmfc */
914 {
915   amtc_valobj,
916   2,
917   "mach_id",
918   "mach_id = %d and clu_id = %d",
919   2,
920   0,
921   0,
922   0,
923   set_mach_modtime_by_id,
924 };
925
926 static char *gcld_fields[] = {
927   "cluster", "serv_label",
928   "cluster", "serv_label", "serv_cluster",
929 };
930
931 static char *acld_fields[] = {
932   "cluster", "serv_label", "serv_cluster",
933 };
934
935 static struct valobj acld_valobj[] =
936 {
937   {V_ID, 0, CLUSTERS_TABLE, "name", "clu_id", MR_CLUSTER},
938   {V_CHAR, 1, SVC_TABLE, "serv_label"},
939   {V_CHAR, 2, SVC_TABLE, "serv_cluster"}
940 };
941
942 static struct validate acld_validate =
943 {
944   acld_valobj,
945   3,
946   "clu_id",
947   "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
948   3,
949   0,
950   0,
951   0,
952   set_cluster_modtime_by_id,
953 };
954
955 static struct validate dcld_validate =
956 {
957   VOclu0,
958   1,
959   "clu_id",
960   "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
961   3,
962   0,
963   0,
964   0,
965   set_cluster_modtime_by_id,
966 };
967
968 static char *glin_fields[] = {
969   "name",
970   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
971   "ace_type", "ace_name", "description", "modby", "modby", "modwith",
972 };
973
974 static struct validate glin_validate = {
975   0,
976   0,
977   0,
978   0,
979   0,
980   0,
981   access_vis_list_by_name,
982   0,
983   followup_glin,
984 };
985
986 static char *alis_fields[] = {
987   "name", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
988   "ace_type", "ace_name", "description",
989 };
990
991 static struct valobj alis_valobj[] = {
992   {V_CHAR, 0, LIST_TABLE, "name"},
993   {V_NUM, 1},
994   {V_NUM, 2},
995   {V_NUM, 3},
996   {V_NUM, 4},
997   {V_NUM, 5},
998   {V_NUM, 6},
999   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
1000   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
1001   {V_LEN, 9, LIST_TABLE, "description"},
1002 };
1003
1004 static struct validate alis_validate = {
1005   alis_valobj,
1006   10,
1007   "name",
1008   "name = '%s'",
1009   1,
1010   "list_id",
1011   0,
1012   setup_alis,
1013   set_modtime,
1014 };
1015
1016 static char *ulis_fields[] = {
1017   "name",
1018   "newname", "active", "publicflg", "hidden", "maillist", "grouplist", "gid",
1019   "ace_type", "ace_name", "description",
1020 };
1021
1022 static struct valobj ulis_valobj[] = {
1023   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1024   {V_RENAME, 1, LIST_TABLE, "name", "list_id", MR_NOT_UNIQUE},
1025   {V_NUM, 2},
1026   {V_NUM, 3},
1027   {V_NUM, 4},
1028   {V_NUM, 5},
1029   {V_NUM, 6},
1030   {V_NUM, 7},
1031   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1032   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1033   {V_LEN, 10, LIST_TABLE, "description"},
1034 };
1035
1036 static struct validate ulis_validate = {
1037   ulis_valobj,
1038   11,
1039   "name",
1040   "list_id = %d",
1041   1,
1042   "list_id",
1043   access_list,
1044   setup_alis,
1045   set_modtime_by_id,
1046 };
1047
1048 static char *dlis_fields[] = {
1049   "name",
1050 };
1051
1052 static struct validate dlis_validate = {
1053   VOlist0,
1054   1,
1055   "name",
1056   "list_id = %d",
1057   1,
1058   0,
1059   access_list,
1060   setup_dlis,
1061   0,
1062 };
1063
1064 static char *amtl_fields[] = {
1065   "list_name", "member_type", "member_name",
1066 };
1067
1068 static struct valobj amtl_valobj[] = {
1069   {V_ID, 0, LIST_TABLE, "name", "list_id", MR_LIST},
1070   {V_TYPE, 1, 0, "member", 0, MR_TYPE},
1071   {V_TYPEDATA, 2, 0, 0, 0, MR_NO_MATCH},
1072 };
1073
1074 static struct validate amtl_validate =
1075 {
1076   amtl_valobj,
1077   3,
1078   0,
1079   0,
1080   0,
1081   0,
1082   access_list,
1083   0,
1084   add_member_to_list,
1085 };
1086
1087 static struct validate dmfl_validate =
1088 {
1089   amtl_valobj,
1090   3,
1091   0,
1092   0,
1093   0,
1094   0,
1095   access_list,
1096   0,
1097   delete_member_from_list,
1098 };
1099
1100 static char *gaus_fields[] = {
1101   "ace_type", "ace_name",
1102   "use_type", "use_name",
1103 };
1104
1105 static struct valobj gaus_valobj[] = {
1106   {V_TYPE, 0, 0, "gaus", 0, MR_TYPE},
1107   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
1108 };
1109
1110 static struct validate gaus_validate = {
1111   gaus_valobj,
1112   2,
1113   0,
1114   0,
1115   0,
1116   0,
1117   access_member,
1118   0,
1119   get_ace_use,
1120 };
1121
1122 static char *qgli_fields[] = {
1123   "active", "publicflg", "hidden", "maillist", "grouplist",
1124   "list",
1125 };
1126
1127 static struct valobj qgli_valobj[] = {
1128   {V_TYPE, 0, 0, "boolean", 0, MR_TYPE},
1129   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
1130   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
1131   {V_TYPE, 3, 0, "boolean", 0, MR_TYPE},
1132   {V_TYPE, 4, 0, "boolean", 0, MR_TYPE},
1133 };
1134
1135 static struct validate qgli_validate = {
1136   qgli_valobj,
1137   5,
1138   0,
1139   0,
1140   0,
1141   0,
1142   access_qgli,
1143   0,
1144   qualified_get_lists,
1145 };
1146
1147 static char *gmol_fields[] = {
1148   "list_name",
1149   "member_type", "member_name",
1150 };
1151
1152 static struct validate gmol_validate = {
1153   VOlist0,
1154   1,
1155   0,
1156   0,
1157   0,
1158   0,
1159   access_visible_list,
1160   0,
1161   get_members_of_list,
1162 };
1163
1164 static struct validate geml_validate = {
1165   VOlist0,
1166   1,
1167   0,
1168   0,
1169   0,
1170   0,
1171   access_visible_list,
1172   0,
1173   get_end_members_of_list,
1174 };
1175
1176 static char *glom_fields[] = {
1177   "member_type", "member_name",
1178   "list_name", "active", "publicflg", "hidden", "maillist", "grouplist",
1179 };
1180
1181 static struct valobj glom_valobj[] = {
1182   {V_TYPE, 0, 0, "rmember", 0, MR_TYPE},
1183   {V_TYPEDATA, 1, 0, 0, 0, MR_NO_MATCH},
1184 };
1185
1186 static struct validate glom_validate = {
1187   glom_valobj,
1188   2,
1189   0,
1190   0,
1191   0,
1192   0,
1193   access_member,
1194   0,
1195   get_lists_of_member,
1196 };
1197
1198 static char *cmol_fields[] = {
1199   "list_name",
1200   "count",
1201 };
1202
1203 static struct validate cmol_validate = {
1204   VOlist0,
1205   1,
1206   0,
1207   0,
1208   0,
1209   0,
1210   access_visible_list,
1211   0,
1212   count_members_of_list,
1213 };
1214
1215 static char *gsin_fields[] = {
1216   "service",
1217   "service", "update_int", "target_file", "script", "dfgen", "dfcheck",
1218   "type", "enable", "inprogress", "harderror", "errmsg",
1219   "ace_type", "ace_name", "modby", "modby", "modwith",
1220 };
1221
1222 static struct validate gsin_validate =
1223 {
1224   0,
1225   0,
1226   0,
1227   0,
1228   0,
1229   0,
1230   access_service,
1231   0,
1232   followup_glin,
1233 };
1234
1235 static char *qgsv_fields[] = {
1236   "enable", "inprogress", "harderror",
1237   "service",
1238 };
1239
1240 static struct valobj qgsv_valobj[] = {
1241   {V_TYPE, 0, 0, "boolean", 0, MR_TYPE},
1242   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
1243   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
1244 };
1245
1246 static struct validate qgsv_validate = {
1247   qgsv_valobj,
1248   3,
1249   0,
1250   0,
1251   0,
1252   0,
1253   0,
1254   0,
1255   qualified_get_server,
1256 };
1257
1258 static char *asin_fields[] = {
1259   "service", "update_int", "target_file", "script", "type", "enable",
1260   "ace_type", "ace_name",
1261 };
1262
1263 static struct valobj asin_valobj[] = {
1264   {V_CHAR, 0, SERVERS_TABLE, "name"},
1265   {V_NUM, 1},
1266   {V_LEN, 2, SERVERS_TABLE, "target_file"},
1267   {V_LEN, 3, SERVERS_TABLE, "script"},
1268   {V_TYPE, 4, 0, "service", 0, MR_TYPE},
1269   {V_NUM, 5},
1270   {V_TYPE, 6, 0, "ace_type", 0, MR_ACE},
1271   {V_TYPEDATA, 7, 0, 0, 0, MR_ACE},
1272 };
1273
1274 static struct validate asin_validate =  /* for asin, usin */
1275 {
1276   asin_valobj,
1277   8,
1278   "name",
1279   "name = UPPER('%s')",
1280   1,
1281   0,
1282   0,
1283   0,
1284   set_uppercase_modtime,
1285 };
1286
1287 static struct validate rsve_validate = {
1288   asin_valobj,
1289   1,
1290   "name",
1291   "name = UPPER('%s')",
1292   1,
1293   0,
1294   access_service,
1295   0,
1296   set_uppercase_modtime,
1297 };
1298
1299 static char *ssif_fields[] = {
1300   "service", "dfgen", "dfcheck", "inprogress", "harderror", "errmsg",
1301 };
1302
1303 static struct valobj ssif_valobj[] = {
1304   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
1305   {V_NUM, 1},
1306   {V_NUM, 2},
1307   {V_NUM, 3},
1308   {V_NUM, 4},
1309   {V_LEN, 5, SERVERS_TABLE, "errmsg"},
1310 };
1311
1312 static struct validate ssif_validate = {
1313   ssif_valobj,
1314   6,
1315   "name",
1316   "name = UPPER('%s')",
1317   1,
1318   0,
1319   0,
1320   0,
1321   0,
1322 };
1323
1324 static char *dsin_fields[] = {
1325   "service",
1326 };
1327
1328 static struct validate dsin_validate = {
1329   asin_valobj,
1330   1,
1331   "name",
1332   "name = UPPER('%s')",
1333   1,
1334   0,
1335   0,
1336   setup_dsin,
1337   0,
1338 };
1339
1340 static char *gshi_fields[] = {
1341   "service", "machine",
1342   "service", "machine", "enable", "override", "success", "inprogress",
1343   "hosterror", "hosterrormsg", "ltt", "lts", "value1", "value2",
1344   "value3", "modby", "modby", "modwith",
1345 };
1346
1347 static struct validate gshi_validate = {
1348   0,
1349   0,
1350   0,
1351   0,
1352   0,
1353   0,
1354   access_service,
1355   0,
1356   followup_fix_modby,
1357 };
1358
1359 static char *qgsh_fields[] = {
1360   "service", "enable", "override", "success", "inprogress", "hosterror",
1361   "service", "machine",
1362 };
1363
1364 static struct valobj qgsh_valobj[] = {
1365   {V_TYPE, 1, 0, "boolean", 0, MR_TYPE},
1366   {V_TYPE, 2, 0, "boolean", 0, MR_TYPE},
1367   {V_TYPE, 3, 0, "boolean", 0, MR_TYPE},
1368   {V_TYPE, 4, 0, "boolean", 0, MR_TYPE},
1369   {V_TYPE, 5, 0, "boolean", 0, MR_TYPE},
1370 };
1371
1372 static struct validate qgsh_validate = {
1373   qgsh_valobj,
1374   5,
1375   0,
1376   0,
1377   0,
1378   0,
1379   0,
1380   0,
1381   qualified_get_serverhost,
1382 };
1383
1384 static char *ashi_fields[] = {
1385   "service", "machine", "enable", "value1", "value2", "value3",
1386 };
1387
1388 static struct valobj ashi_valobj[] = {
1389   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
1390   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1391   {V_NUM, 2},
1392   {V_NUM, 3},
1393   {V_NUM, 4},
1394   {V_LEN, 5, SERVERHOSTS_TABLE, "value3"},
1395 };
1396
1397 static struct validate ashi_validate = /* ashi & ushi */
1398 {
1399   ashi_valobj,
1400   6,
1401   "service",
1402   "service = UPPER('%s') AND mach_id = %d",
1403   2,
1404   0,
1405   access_service,
1406   0,
1407   set_serverhost_modtime,
1408 };
1409
1410 static struct validate rshe_validate =
1411 {
1412   ashi_valobj,
1413   2,
1414   "service",
1415   "service = UPPER('%s') AND mach_id = %d",
1416   2,
1417   0,
1418   access_service,
1419   0,
1420   set_serverhost_modtime,
1421 };
1422
1423 static struct validate ssho_validate =
1424 {
1425   ashi_valobj,
1426   2,
1427   "service",
1428   "service = UPPER('%s') AND mach_id = %d",
1429   2,
1430   0,
1431   access_service,
1432   0,
1433   trigger_dcm,
1434 };
1435
1436 static char *sshi_fields[] = {
1437   "service", "machine", "override", "success", "inprogress",
1438   "hosterror", "errmsg", "ltt", "lts",
1439 };
1440
1441 static struct valobj sshi_valobj[] = {
1442   {V_NAME, 0, SERVERS_TABLE, "name", 0, MR_SERVICE},
1443   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1444   {V_NUM, 2},
1445   {V_NUM, 3},
1446   {V_NUM, 4},
1447   {V_NUM, 5},
1448   {V_LEN, 6, SERVERHOSTS_TABLE, "hosterrmsg"},
1449   {V_NUM, 7},
1450   {V_NUM, 8},
1451 };
1452
1453 static struct validate sshi_validate =
1454 {
1455   sshi_valobj,
1456   9,
1457   0,
1458   0,
1459   0,
1460   0,
1461   0,
1462   0,
1463   0,
1464 };
1465
1466 static char *dshi_fields[] = {
1467   "service", "machine",
1468 };
1469
1470 static struct validate dshi_validate =
1471 {
1472   ashi_valobj,
1473   2,
1474   "service",
1475   "service = UPPER('%s') AND mach_id = %d",
1476   2,
1477   0,
1478   access_service,
1479   setup_dshi,
1480   0,
1481 };
1482
1483 static char *gslo_fields[] = {
1484   "server",
1485   "server", "machine",
1486 };
1487
1488 static char *gfsl_fields[] = {
1489   "label",
1490   "label", "type", "machine", "name", "mount", "access", "comments", "owner", "owners",
1491   "create", "lockertype", "modby", "modby", "modwith",
1492 };
1493
1494 static char *gfsm_fields[] = {
1495   "machine",
1496   "label", "type", "machine", "name", "mount", "access", "comments", "owner", "owners",
1497   "create", "lockertype", "modby", "modby", "modwith",
1498 };
1499
1500 static struct validate gfsm_validate = {
1501   VOmach0,
1502   1,
1503   0,
1504   0,
1505   0,
1506   0,
1507   0,
1508   0,
1509   followup_fix_modby,
1510 };
1511
1512 static char *gfsn_fields[] = {
1513   "machine", "parition",
1514   "label", "type", "machine", "name", "mount", "access", "comments", "owner", "owners",
1515   "create", "lockertype", "modby", "modby", "modwith",
1516 };
1517
1518 static struct validate gfsn_validate = {
1519   VOmach0,
1520   1,
1521   0,
1522   0,
1523   0,
1524   0,
1525   0,
1526   0,
1527   followup_fix_modby,
1528 };
1529
1530 static char *gfsp_fields[] = {
1531   "path",
1532   "label", "type", "machine", "name", "mount", "access", "comments", "owner", "owners",
1533   "create", "lockertype", "modby", "modby", "modwith",
1534 };
1535
1536 static char *gfsg_fields[] = {
1537   "list",
1538   "label", "type", "machine", "name", "mount", "access", "comments", "owner", "owners",
1539   "create", "lockertype", "modby", "modby", "modwith",
1540 };
1541
1542 static struct validate gfsg_validate = {
1543   VOlist0,
1544   1,
1545   0,
1546   0,
1547   0,
1548   0,
1549   access_list,
1550   0,
1551   followup_fix_modby,
1552 };
1553
1554 static char *afil_fields[] = {
1555   "label", "type", "machine", "name", "mount", "access", "comments", "owner", "owners",
1556   "create", "lockertype",
1557 };
1558
1559 static struct valobj afil_valobj[] = {
1560   {V_CHAR, 0, FILESYS_TABLE, "label"},
1561   {V_TYPE, 1, 0, "filesys", 0, MR_FSTYPE},
1562   {V_ID, 2, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1563   {V_CHAR, 3, FILESYS_TABLE, "name"},
1564   {V_LEN, 4, FILESYS_TABLE, "mount"},
1565   {V_LEN, 5, FILESYS_TABLE, "rwaccess"},
1566   {V_LEN, 6, FILESYS_TABLE, "comments"},
1567   {V_ID, 7, USERS_TABLE, "login", "users_id", MR_USER},
1568   {V_ID, 8, LIST_TABLE, "name", "list_id", MR_LIST},
1569   {V_NUM, 9},
1570   {V_TYPE, 10, 0, "lockertype", 0, MR_TYPE},
1571 };
1572
1573 static struct validate afil_validate = {
1574   afil_valobj,
1575   11,
1576   "label",
1577   "label = '%s'",
1578   1,
1579   "filsys_id",
1580   0,
1581   setup_afil,
1582   set_filesys_modtime,
1583 };
1584
1585 static char *ufil_fields[] = {
1586   "label", "newlabel", "type", "machine", "name", "mount", "access", "comments",
1587   "owner", "owners", "create", "lockertype",
1588 };
1589
1590 static struct valobj ufil_valobj[] = {
1591   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1592   {V_RENAME, 1, FILESYS_TABLE, "label", "filsys_id", MR_NOT_UNIQUE},
1593   {V_TYPE, 2, 0, "filesys", 0, MR_FSTYPE},
1594   {V_ID, 3, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1595   {V_CHAR, 4, FILESYS_TABLE, "name"},
1596   {V_LEN, 5, FILESYS_TABLE, "mount"},
1597   {V_LEN, 6, FILESYS_TABLE, "rwaccess"},
1598   {V_LEN, 7, FILESYS_TABLE, "comments"},
1599   {V_ID, 8, USERS_TABLE, "login", "users_id", MR_USER},
1600   {V_ID, 9, LIST_TABLE, "name", "list_id", MR_LIST},
1601   {V_NUM, 10},
1602   {V_TYPE, 11, 0, "lockertype", 0, MR_TYPE},
1603 };
1604
1605 static struct validate ufil_validate = {
1606   ufil_valobj,
1607   12,
1608   "label",
1609   "filsys_id = %d",
1610   1,
1611   "filsys_id",
1612   0,
1613   setup_ufil,
1614   set_filesys_modtime,
1615 };
1616
1617 static char *dfil_fields[] = {
1618   "label",
1619 };
1620
1621 static struct validate dfil_validate = {
1622   VOfilesys0,
1623   1,
1624   "label",
1625   "filsys_id = %d",
1626   1,
1627   0,
1628   0,
1629   setup_dfil,
1630   0,
1631 };
1632
1633 static char *gfgm_fields[] = {
1634   "fsgroup", "filesys", "sortkey"
1635 };
1636
1637 static struct validate gfgm_validate = {
1638   VOfilesys0,
1639   1,
1640   0,
1641   0,
1642   0,
1643   0,
1644   0,
1645   0,
1646   0,
1647 };
1648
1649 static struct valobj aftg_valobj[] = {
1650   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1651   {V_ID, 1, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1652 };
1653
1654 static struct validate aftg_validate = {
1655   aftg_valobj,
1656   2,
1657   "group_id",
1658   "group_id = %d and filsys_id = %d",
1659   2,
1660   0,
1661   0,
1662   0,
1663   0,
1664 };
1665
1666 static char *ganf_fields[] = {
1667   "machine", "dir", "device", "status", "allocated", "size", "modby", "modby", "modwith",
1668 };
1669
1670 static char *gnfp_fields[] = {
1671   "machine", "dir",
1672   "machine", "dir", "device", "status", "allocated", "size", "modby", "modby", "modwith",
1673 };
1674
1675 static struct validate gnfp_validate = {
1676   VOmach0,
1677   1,
1678   0,
1679   0,
1680   0,
1681   0,
1682   0,
1683   0,
1684   followup_fix_modby,
1685 };
1686
1687 static struct valobj anfp_valobj[] = {
1688   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
1689   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
1690   {V_LEN, 2, NFSPHYS_TABLE, "device"},
1691   {V_NUM, 3},
1692   {V_NUM, 4},
1693   {V_NUM, 5},
1694 };
1695
1696 static struct validate anfp_validate = {
1697   anfp_valobj,
1698   6,
1699   "dir",
1700   "mach_id = %d and dir = '%s'",
1701   2,
1702   "nfsphys_id",
1703   0,
1704   prefetch_value,
1705   set_nfsphys_modtime,
1706 };
1707
1708 static struct validate unfp_validate = {
1709   anfp_valobj,
1710   6,
1711   "dir",
1712   "mach_id = %d and dir = '%s'",
1713   2,
1714   "nfsphys_id",
1715   0,
1716   0,
1717   set_nfsphys_modtime,
1718 };
1719
1720 static char *ajnf_fields[] = {
1721   "machine", "dir", "adjustment",
1722 };
1723
1724 static struct valobj ajnf_valobj[] = {
1725   {V_ID, 0, MACHINE_TABLE, NAME, "mach_id", MR_MACHINE},
1726   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
1727   {V_NUM, 2},
1728 };
1729
1730 static struct validate ajnf_validate = {
1731   ajnf_valobj,
1732   3,
1733   "dir",
1734   "mach_id = %d and dir = '%s'",
1735   2,
1736   "nfsphys_id",
1737   0,
1738   0,
1739   set_nfsphys_modtime,
1740 };
1741
1742 static char *dnfp_fields[] = {
1743   "machine", "dir",
1744 };
1745
1746 static struct validate dnfp_validate = {
1747   anfp_valobj,
1748   2,
1749   "dir",
1750   "mach_id = %d and dir = '%s'",
1751   2,
1752   "nfsphys_id",
1753   0,
1754   setup_dnfp,
1755   set_nfsphys_modtime,
1756 };
1757
1758 static char *gqot_fields[] = {
1759   "filesys", "type", "name",
1760   "filesys", "type", "name", "quota", "dir", "machine", "modby", "modby", "modwith",
1761 };
1762
1763 static struct valobj gqot_valobj[] = {
1764   {V_TYPE, 1, 0, "quota_type", 0, MR_TYPE},
1765   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
1766 };
1767
1768 static struct validate gqot_validate = {
1769   gqot_valobj,
1770   2,
1771   0,
1772   0,
1773   0,
1774   0,
1775   0,
1776   0,
1777   followup_gqot,
1778 };
1779
1780 static char *gqbf_fields[] = {
1781   "filesys",
1782   "filesys", "type", "name", "quota", "dir", "machine", "modby", "modby", "modwith",
1783 };
1784
1785 static struct validate gqbf_validate = {
1786   0,
1787   0,
1788   0,
1789   0,
1790   0,
1791   0,
1792   access_filesys,
1793   0,
1794   followup_gqot,
1795 };
1796
1797 static char *aqot_fields[] = {
1798   "filesys", "type", "name", "quota",
1799 };
1800
1801 static struct valobj aqot_valobj[] = {
1802   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1803   {V_TYPE, 1, 0, "quota_type", 0, MR_TYPE},
1804   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
1805   {V_NUM, 3},
1806 };
1807
1808 static struct validate aqot_validate = {
1809   aqot_valobj,
1810   4,
1811   "filsys_id",
1812   "filsys_id = %d and type = '%s' and entity_id = %d",
1813   3,
1814   0,
1815   0,
1816   prefetch_filesys,
1817   followup_aqot,
1818 };
1819
1820 static struct validate uqot_validate = {
1821   aqot_valobj,
1822   4,
1823   "filsys_id",
1824   "filsys_id = %d AND type = '%s' AND entity_id = %d",
1825   3,
1826   0,
1827   0,
1828   setup_dqot,
1829   followup_aqot,
1830 };
1831
1832 static struct validate dqot_validate = {
1833   aqot_valobj,
1834   3,
1835   "filsys_id",
1836   "filsys_id = %d AND type = '%s' AND entity_id = %d",
1837   3,
1838   0,
1839   0,
1840   setup_dqot,
1841   followup_dqot,
1842 };
1843
1844 static char *gnfq_fields[] = {
1845   "filesys", "login",
1846   "filesys", "login", "quota", "dir", "machine", "modby", "modby", "modwith",
1847 };
1848
1849 static struct validate gnfq_validate = {
1850   0,
1851   0,
1852   0,
1853   0,
1854   0,
1855   0,
1856   access_filesys,
1857   0,
1858   followup_gqot,
1859 };
1860
1861 static char *gnqp_fields[] = {
1862   "machine", "dir",
1863   "filesys", "login", "quota", "dir", "machine", "modby", "modby", "modwith",
1864 };
1865
1866 static char *anfq_fields[] = {
1867   "filesys", "login", "quota",
1868 };
1869
1870 static struct valobj anfq_valobj[] = {
1871   {V_ID, 0, FILESYS_TABLE, "label", "filsys_id", MR_FILESYS},
1872   {V_ID, 1, USERS_TABLE, "login", "users_id", MR_USER},
1873   {V_NUM, 2},
1874 };
1875
1876 static struct validate anfq_validate = {
1877   anfq_valobj,
1878   3,
1879   "filsys_id",
1880   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
1881   2,
1882   0, /* object ? */
1883   0,
1884   prefetch_filesys,
1885   followup_aqot,
1886 };
1887
1888 static struct validate unfq_validate = {
1889   anfq_valobj,
1890   3,
1891   "filsys_id",
1892   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
1893   2,
1894   0,
1895   0,
1896   setup_dqot,
1897   followup_aqot,
1898 };
1899
1900 static struct validate dnfq_validate = {
1901   anfq_valobj,
1902   3,
1903   "filsys_id",
1904   "filsys_id = %d AND entity_id = %d",
1905   2,
1906   0,
1907   0,
1908   setup_dqot,
1909   followup_dqot,
1910 };
1911
1912 static char *gzcl_fields[] = {
1913   "class",
1914   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
1915   "iws_type", "iws_name", "iui_type", "iui_name", "modby", "modby", "modwith",
1916 };
1917
1918 static struct validate gzcl_validate = {
1919   0,
1920   0,
1921   0,
1922   0,
1923   0,
1924   0,
1925   0,
1926   0,
1927   followup_gzcl,
1928 };
1929
1930 static char *azcl_fields[] = {
1931   "class", "xmt_type", "xmt_name", "sub_type", "sub_name",
1932   "iws_type", "iws_name", "iui_type", "iui_name",
1933 };
1934
1935 static struct valobj azcl_valobj[] = {
1936   {V_CHAR, 0, ZEPHYR_TABLE, "class"},
1937   {V_TYPE, 1, 0, "ace_type", 0, MR_ACE},
1938   {V_TYPEDATA, 2, 0, 0, "list_id", MR_ACE},
1939   {V_TYPE, 3, 0, "ace_type", 0, MR_ACE},
1940   {V_TYPEDATA, 4, 0, 0, "list_id", MR_ACE},
1941   {V_TYPE, 5, 0, "ace_type", 0, MR_ACE},
1942   {V_TYPEDATA, 6, 0, 0, "list_id", MR_ACE},
1943   {V_TYPE, 7, 0, "ace_type", 0, MR_ACE},
1944   {V_TYPEDATA, 8, 0, 0, "list_id", MR_ACE},
1945 };
1946
1947 static struct validate azcl_validate = {
1948   azcl_valobj,
1949   9,
1950   "class",
1951   "class = '%s'",
1952   1,
1953   0,
1954   0,
1955   0,
1956   set_zephyr_modtime,
1957 };
1958
1959 static char *uzcl_fields[] = {
1960   "class", "newclass", "xmt_type", "xmt_name", "sub_type", "sub_name",
1961   "iws_type", "iws_name", "iui_type", "iui_name",
1962 };
1963
1964 static struct valobj uzcl_valobj[] = {
1965   {V_NAME, 0, ZEPHYR_TABLE, "class", 0, MR_BAD_CLASS},
1966   {V_RENAME, 1, ZEPHYR_TABLE, "class", 0, MR_NOT_UNIQUE},
1967   {V_TYPE, 2, 0, "ace_type", 0, MR_ACE},
1968   {V_TYPEDATA, 3, 0, 0, "list_id", MR_ACE},
1969   {V_TYPE, 4, 0, "ace_type", 0, MR_ACE},
1970   {V_TYPEDATA, 5, 0, 0, "list_id", MR_ACE},
1971   {V_TYPE, 6, 0, "ace_type", 0, MR_ACE},
1972   {V_TYPEDATA, 7, 0, 0, "list_id", MR_ACE},
1973   {V_TYPE, 8, 0, "ace_type", 0, MR_ACE},
1974   {V_TYPEDATA, 9, 0, 0, "list_id", MR_ACE},
1975 };
1976
1977 static struct validate uzcl_validate = {
1978   uzcl_valobj,
1979   10,
1980   "class",
1981   "class = '%s'",
1982   1,
1983   0,
1984   0,
1985   0,
1986   set_zephyr_modtime,
1987 };
1988
1989 static struct validate dzcl_validate = {
1990   0,
1991   0,
1992   "class",
1993   "class = '%s'",
1994   1,
1995   0,
1996   0,
1997   0,
1998   0,
1999 };
2000
2001 static char *gsha_fields[] = {
2002   "machine",
2003   "machine", "ace_type", "ace_name", "modby", "modby", "modwith",
2004 };
2005
2006 static struct validate gsha_validate =
2007 {
2008   0,
2009   0,
2010   0,
2011   0,
2012   0,
2013   0,
2014   0,
2015   0,
2016   followup_gsha,
2017 };
2018
2019 static char *asha_fields[] = {
2020   "machine", "ace_type", "ace_name",
2021 };
2022
2023 static struct valobj asha_valobj[] = {
2024   {V_ID, 0, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2025   {V_TYPE, 1, 0, "ace_type", 0, MR_ACE},
2026   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
2027 };
2028
2029 static struct validate asha_validate =
2030 {
2031   asha_valobj,
2032   3,
2033   "mach_id",
2034   "mach_id = %d",
2035   1,
2036   "mach_id",
2037   0,
2038   0,
2039   set_modtime_by_id,
2040 };
2041
2042 static char *gsvc_fields[] = {
2043   "service",
2044   "service", "protocol", "port", "description", "modby", "modby", "modwith",
2045 };
2046
2047 static char *asvc_fields[] = {
2048   "service", "protocol", "port", "description",
2049 };
2050
2051 static struct valobj asvc_valobj[] = {
2052   {V_CHAR, 0, SERVICES_TABLE, "name"},
2053   {V_CHAR, 1, SERVICES_TABLE, "protocol"},
2054   {V_NUM, 2},
2055   {V_CHAR, 3, SERVICES_TABLE, "description"},
2056 };
2057
2058 static struct validate asvc_validate = {
2059   asvc_valobj,
2060   4,
2061   "name",
2062   "name = '%s'",
2063   1,
2064   0,
2065   0,
2066   0,
2067   set_modtime,
2068 };
2069
2070 static char *gpce_fields[] = {
2071   "printer",
2072   "printer", "spooling_host", "spool_directory", "rprinter",
2073   "quotaserver", "authenticate", "price", "comments",
2074   "modby", "modby", "modwith",
2075 };
2076
2077 static struct validate gpce_validate = {
2078   0,
2079   0,
2080   0,
2081   0,
2082   0,
2083   0,
2084   0,
2085   0,
2086   followup_gpce,
2087 };
2088
2089 static char *apce_fields[] = {
2090   "printer", "spooling_host", "spool_directory", "rprinter",
2091   "quotaserver", "authenticate", "price", "comments",
2092   "modby", "modby", "modwith",
2093 };
2094
2095 static struct valobj apce_valobj[] = {
2096   {V_CHAR, 0, PRINTCAP_TABLE, "name"},
2097   {V_ID, 1, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2098   {V_LEN, 2, PRINTCAP_TABLE, "dir"},
2099   {V_LEN, 3, PRINTCAP_TABLE, "rp"},
2100   {V_ID, 4, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2101   {V_NUM, 5},
2102   {V_NUM, 6},
2103   {V_CHAR, 7, PRINTCAP_TABLE, "comments"},
2104 };
2105
2106 static struct validate apce_validate = {
2107   apce_valobj,
2108   8,
2109   "name",
2110   "name = '%s'",
2111   1,
2112   0,
2113   0,
2114   0,
2115   set_modtime,
2116 };
2117
2118 static struct validate dpce_validate = {
2119   0,
2120   0,
2121   "name",
2122   "name = '%s'",
2123   1,
2124   0,
2125   0,
2126   0,
2127   0,
2128 };
2129
2130 static char *gpcp_fields[] = {
2131   "printer",
2132   "printer", "spooling_host", "spool_directory", "rprinter", "comments",
2133   "modby", "modby", "modwith",
2134 };
2135
2136 static char *gpdm_fields[] = {
2137   "name",
2138   "name", "rpcnum", "host", "modby", "modby", "modwith",
2139 };
2140
2141 static char *apdm_fields[] = {
2142   "name", "rpcnum", "host"
2143 };
2144
2145 static struct valobj apdm_valobj[] = {
2146   {V_CHAR, 0, PALLADIUM_TABLE, "name"},
2147   {V_NUM, 1},
2148   {V_ID, 2, MACHINE_TABLE, "name", "mach_id", MR_MACHINE},
2149 };
2150
2151 static struct validate apdm_validate = {
2152   apdm_valobj,
2153   3,
2154   "name",
2155   "name = '%s'",
2156   1,
2157   0,
2158   0,
2159   0,
2160   set_modtime,
2161 };
2162
2163 static struct validate dpdm_validate = {
2164   0,
2165   0,
2166   "name",
2167   "name = '%s'",
2168   1,
2169   0,
2170   0,
2171   0,
2172   0,
2173 };
2174
2175 static char *gali_fields[] = {
2176   "name", "type", "trans",
2177   "name", "type", "trans",
2178 };
2179
2180 static char *aali_fields[] = {
2181   "name", "type", "trans",
2182 };
2183
2184 static struct valobj aali_valobj[] = {
2185   {V_CHAR, 0, ALIAS_TABLE, "name"},
2186   {V_TYPE, 1, 0, "alias", 0, MR_TYPE},
2187   {V_CHAR, 2, ALIAS_TABLE, "trans"},
2188 };
2189
2190 static struct validate aali_validate = {
2191   aali_valobj,
2192   3,
2193   "trans",
2194   "name = '%s' and type = '%s' and trans = '%s'",
2195   3,
2196   0,
2197   0,
2198   0,
2199   0,
2200 };
2201
2202 static struct validate dali_validate =  /* DELETE_ALIAS */
2203 {
2204   0,
2205   0,
2206   "trans",
2207   "name = '%s' and type = '%s' and trans = '%s'",
2208   3,
2209   0,
2210   0,
2211   0,
2212   0,
2213 };
2214
2215 static char *gval_fields[] = {
2216   "name", "value",
2217 };
2218
2219 static struct valobj gval_valobj[] = {
2220   {V_NAME, 0, NUMVALUES_TABLE, "name", 0, MR_NO_MATCH},
2221 };
2222
2223 static struct validate gval_validate = {
2224   gval_valobj,
2225   1,
2226   0,
2227   0,
2228   0,
2229   0,
2230   0,
2231   0,
2232   0,
2233 };
2234
2235 static char *aval_fields[] = {
2236   "name", "value",
2237 };
2238
2239 static struct valobj aval_valobj[] = {
2240   {V_CHAR, 0, NUMVALUES_TABLE, "name"},
2241   {V_NUM, 1},
2242 };
2243
2244 static struct validate aval_validate =  /* for aval, uval, and dval */
2245 {
2246   aval_valobj,
2247   2,
2248   "name",
2249   "name = '%s'",
2250   1,
2251   0,
2252   0,
2253   0,
2254   0,
2255 };
2256
2257 static char *dval_fields[] = {
2258   "name",
2259 };
2260
2261 static char *gats_fields[] = {
2262   "table_name", "appends", "updates", "deletes", "modby", "modby", "modwith",
2263 };
2264
2265 static char *_sdl_fields[] = {
2266   "level",
2267 };
2268
2269 static struct validate _sdl_validate =
2270 {
2271   VOnum0,
2272   1,
2273   NULL,
2274   NULL,
2275   0,
2276   0,
2277   0,
2278   0,
2279   _sdl_followup,
2280 };
2281
2282
2283 \f
2284 /* Generalized Query Definitions */
2285
2286 /* Note: For any query which uses prefetch_value, the vcnt should be
2287  * one less than the number of %-format specifiers in the tlist.
2288  */
2289
2290 struct query Queries2[] = {
2291   {
2292     /* Q_GALO - GET_ALL_LOGINS */
2293     "get_all_logins",
2294     "galo",
2295     RETRIEVE,
2296     "u",
2297     USERS_TABLE,
2298     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
2299     galo_fields,
2300     6,
2301     "u.users_id != 0",
2302     0,
2303     "u.login",
2304     0,
2305   },
2306
2307   {
2308     /* Q_GAAL - GET_ALL_ACTIVE_LOGINS */
2309     "get_all_active_logins",
2310     "gaal",
2311     RETRIEVE,
2312     "u",
2313     USERS_TABLE,
2314     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle FROM users u",
2315     galo_fields,
2316     6,
2317     "u.status = 1",
2318     0,
2319     "u.login",
2320     0,
2321   },
2322
2323   {
2324     /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN */
2325     "get_user_account_by_login",
2326     "gual",
2327     RETRIEVE,
2328     "u",
2329     USERS_TABLE,
2330     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, u.signature, u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2331     gual_fields,
2332     15,
2333     "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
2334     1,
2335     "u.login",
2336     &gubl_validate,
2337   },
2338
2339   {
2340     /* Q_GUAU - GET_USER_ACCOUNT_BY_UID */
2341     "get_user_account_by_uid",
2342     "guau",
2343     RETRIEVE,
2344     "u",
2345     USERS_TABLE,
2346     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, u.signature, u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2347     guau_fields,
2348     15,
2349     "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
2350     1,
2351     "u.login",
2352     &gubu_validate,
2353   },
2354
2355   {
2356     /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME */
2357     "get_user_account_by_name",
2358     "guan",
2359     RETRIEVE,
2360     "u",
2361     USERS_TABLE,
2362     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, u.signature, u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2363     guan_fields,
2364     15,
2365     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
2366     2,
2367     "u.login",
2368     &guan_validate,
2369   },
2370
2371   {
2372     /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS */
2373     "get_user_account_by_class",
2374     "guac",
2375     RETRIEVE,
2376     "u",
2377     USERS_TABLE,
2378     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, u.signature, u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2379     guac_fields,
2380     15,
2381     "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
2382     1,
2383     "u.login",
2384     &VDfix_modby,
2385   },
2386
2387   {
2388     /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID */
2389     "get_user_account_by_id",
2390     "guai",
2391     RETRIEVE,
2392     "u",
2393     USERS_TABLE,
2394     "u.login, u.unix_uid, u.shell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, u.signature, u.secure, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith FROM users u, strings str",
2395     guam_fields,
2396     15,
2397     "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
2398     1,
2399     "u.login",
2400     &VDfix_modby,
2401   },
2402
2403   {
2404     /* Q_GUBL - GET_USER_BY_LOGIN */
2405     "get_user_by_login",
2406     "gubl",
2407     RETRIEVE,
2408     "u",
2409     USERS_TABLE,
2410     "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",
2411     gubl_fields,
2412     12,
2413     "u.login LIKE '%s' AND u.users_id != 0",
2414     1,
2415     "u.login",
2416     &gubl_validate,
2417   },
2418
2419   {
2420     /* Q_GUBU - GET_USER_BY_UID */
2421     "get_user_by_uid",
2422     "gubu",
2423     RETRIEVE,
2424     "u",
2425     USERS_TABLE,
2426     "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",
2427     gubu_fields,
2428     12,
2429     "u.unix_uid = %s AND u.users_id != 0",
2430     1,
2431     "u.login",
2432     &gubu_validate,
2433   },
2434
2435   {
2436     /* Q_GUBN - GET_USER_BY_NAME */
2437     "get_user_by_name",
2438     "gubn",
2439     RETRIEVE,
2440     "u",
2441     USERS_TABLE,
2442     "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",
2443     gubn_fields,
2444     12,
2445     "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0",
2446     2,
2447     "u.login",
2448     &gubn_validate,
2449   },
2450
2451   {
2452     /* Q_GUBC - GET_USER_BY_CLASS */
2453     "get_user_by_class",
2454     "gubc",
2455     RETRIEVE,
2456     "u",
2457     USERS_TABLE,
2458     "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",
2459     gubc_fields,
2460     12,
2461     "u.type = UPPER('%s') AND u.users_id != 0",
2462     1,
2463     "u.login",
2464     &VDfix_modby,
2465   },
2466
2467   {
2468     /* Q_GUBM - GET_USER_BY_MITID */
2469     "get_user_by_mitid",
2470     "gubm",
2471     RETRIEVE,
2472     "u",
2473     USERS_TABLE,
2474     "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",
2475     gubm_fields,
2476     12,
2477     "u.clearid LIKE '%s' AND u.users_id != 0",
2478     1,
2479     "u.login",
2480     &VDfix_modby,
2481   },
2482
2483   {
2484     /* Q_GUDF - GET_USER_DIRECTORY_FLAGS */
2485     "get_user_directory_flags",
2486     "gudf",
2487     RETRIEVE,
2488     "u",
2489     USERS_TABLE,
2490     "u.dirsuppress, u.dirremote FROM users u",
2491     gudf_fields,
2492     2,
2493     "u.users_id = %d",
2494     1,
2495     NULL,
2496     &gudf_validate,
2497   },
2498
2499   {
2500     /* Q_AUAC - ADD_USER_ACCOUNT */  /* uses prefetch_value() for users_id */
2501     "add_user_account",
2502     "auac",
2503     APPEND,
2504     "u",
2505     USERS_TABLE,
2506     "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, LENGTH(NVL('%s', CHR(0))), %s, %s)", /* followup_ausr fixes signature field */
2507     auac_fields,
2508     12,
2509     NULL,
2510     0,
2511     NULL,
2512     &auac_validate,
2513   },
2514
2515   {
2516     /* Q_AUSR - ADD_USER */  /* uses prefetch_value() for users_id */
2517     "add_user",
2518     "ausr",
2519     APPEND,
2520     "u",
2521     USERS_TABLE,
2522     "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)",
2523     auac_fields,
2524     9,
2525     0,
2526     0,
2527     NULL,
2528     &ausr_validate,
2529   },
2530
2531   {
2532     /* Q_RUSR - REGISTER_USER */
2533     "register_user",
2534     "rusr",
2535     APPEND,
2536     0,
2537     0,
2538     0,
2539     rusr_fields,
2540     3,
2541     0,
2542     0,
2543     NULL,
2544     &rusr_validate,
2545   },
2546
2547   {
2548     /* Q_UUAC - UPDATE_USER_ACCOUNT */
2549     "update_user_account",
2550     "uuac",
2551     UPDATE,
2552     "u",
2553     USERS_TABLE,
2554     "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 = LENGTH(NVL('%s', CHR(0))), secure = %s", /* followup_uuac fixes signature */
2555     uuac_fields,
2556     12,
2557     "users_id = %d",
2558     1,
2559     NULL,
2560     &uuac_validate,
2561   },
2562
2563   {
2564     /* Q_UUSR - UPDATE_USER */
2565     "update_user",
2566     "uusr",
2567     UPDATE,
2568     "u",
2569     USERS_TABLE,
2570     "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'",
2571     uuac_fields,
2572     9,
2573     "users_id = %d",
2574     1,
2575     NULL,
2576     &uusr_validate,
2577   },
2578
2579   {
2580     /* Q_UUSH - UPDATE_USER_SHELL */
2581     "update_user_shell",
2582     "uush",
2583     UPDATE,
2584     "u",
2585     USERS_TABLE,
2586     "users SET shell = '%s'",
2587     uush_fields,
2588     1,
2589     "users_id = %d",
2590     1,
2591     NULL,
2592     &uush_validate,
2593   },
2594
2595   {
2596     /* Q_UUST - UPDATE_USER_STATUS */
2597     "update_user_status",
2598     "uust",
2599     UPDATE,
2600     "u",
2601     USERS_TABLE,
2602     "users SET status = %s",
2603     uust_fields,
2604     1,
2605     "users_id = %d",
2606     1,
2607     NULL,
2608     &uust_validate,
2609   },
2610
2611   {
2612     /* Q_UUSS - UPDATE_USER_SECURITY_STATUS */
2613     "update_user_security_status",
2614     "uuss",
2615     UPDATE,
2616     "u",
2617     USERS_TABLE,
2618     "users SET secure = %s",
2619     uuss_fields,
2620     1,
2621     "users_id = %d",
2622     1,
2623     NULL,
2624     &uust_validate,
2625   },
2626
2627   {
2628     /* Q_UUDF - UPDATE_USER_DIRECTORY_FLAGS */
2629     "update_user_directory_flags",
2630     "uudf",
2631     UPDATE,
2632     "u",
2633     USERS_TABLE,
2634     "users SET dirsuppress = %s, dirremote = %s",
2635     uudf_fields,
2636     2,
2637     "users_id = %d",
2638     1,
2639     NULL,
2640     &uudf_validate,
2641   },
2642
2643   {
2644     /* Q_DUSR - DELETE_USER */
2645     "delete_user",
2646     "dusr",
2647     DELETE,
2648     "u",
2649     USERS_TABLE,
2650     NULL,
2651     dusr_fields,
2652     0,
2653     "users_id = %d",
2654     1,
2655     NULL,
2656     &dusr_validate,
2657   },
2658
2659   {
2660     /* Q_DUBU - DELETE_USER_BY_UID */
2661     "delete_user_by_uid",
2662     "dubu",
2663     DELETE,
2664     "u",
2665     USERS_TABLE,
2666     NULL,
2667     dubu_fields,
2668     0,
2669     "users_id = %d",
2670     1,
2671     NULL,
2672     &dubu_validate,
2673   },
2674
2675   {
2676     /* Q_GKUM - GET_KERBEROS_USER_MAP */
2677     "get_kerberos_user_map",
2678     "gkum",
2679     RETRIEVE,
2680     "k",
2681     KRBMAP_TABLE,
2682     "u.login, str.string FROM krbmap km, users u, strings str",
2683     gkum_fields,
2684     2,
2685     "u.login LIKE '%s' AND str.string LIKE '%s' AND km.users_id = u.users_id AND km.string_id = str.string_id",
2686     2,
2687     "u.login, str.string",
2688     NULL,
2689   },
2690
2691   {
2692     /* Q_AKUM - ADD_KERBEROS_USER_MAP */
2693     "add_kerberos_user_map",
2694     "akum",
2695     APPEND,
2696     "k",
2697     KRBMAP_TABLE,
2698     "INTO krbmap (users_id, string_id) VALUES (%d, %d)",
2699     akum_fields,
2700     2,
2701     0,
2702     0,
2703     NULL,
2704     &akum_validate,
2705   },
2706
2707   {
2708     /* Q_DKUM - DELETE_KERBEROS_USER_MAP */
2709     "delete_kerberos_user_map",
2710     "dkum",
2711     DELETE,
2712     "k",
2713     KRBMAP_TABLE,
2714     0,
2715     akum_fields,
2716     0,
2717     "users_id = %d AND string_id = %d",
2718     2,
2719     NULL,
2720     &dkum_validate,
2721   },
2722
2723   {
2724     /* Q_GFBL - GET_FINGER_BY_LOGIN */
2725     "get_finger_by_login",
2726     "gfbl",
2727     RETRIEVE,
2728     "u",
2729     USERS_TABLE,
2730     "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",
2731     gfbl_fields,
2732     12,
2733     "users_id = %d",
2734     1,
2735     "login",
2736     &gfbl_validate,
2737   },
2738
2739   {
2740     /* Q_UFBL - UPDATE_FINGER_BY_LOGIN */
2741     "update_finger_by_login",
2742     "ufbl",
2743     UPDATE,
2744     "u",
2745     USERS_TABLE,
2746     "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))",
2747     ufbl_fields,
2748     8,
2749     "users_id = %d",
2750     1,
2751     NULL,
2752     &ufbl_validate,
2753   },
2754
2755   {
2756     /* Q_GPOB - GET_POBOX */
2757     "get_pobox",
2758     "gpob",
2759     RETRIEVE,
2760     "u",
2761     USERS_TABLE,
2762     "login, potype, pop_id || ':' || box_id, TO_CHAR(pmodtime, 'DD-mon-YYYY HH24:MI:SS'), pmodby, pmodwith FROM users",
2763     gpob_fields,
2764     6,
2765     "users_id = %d",
2766     1,
2767     "login",
2768     &gpob_validate,
2769   },
2770
2771   {
2772     /* Q_GAPO - GET_ALL_POBOXES */
2773     "get_all_poboxes",
2774     "gapo",
2775     RETRIEVE,
2776     "u",
2777     USERS_TABLE,
2778     "login, potype, pop_id || ':' || box_id FROM users",
2779     gpox_fields,
2780     3,
2781     "potype != 'NONE'",
2782     0,
2783     "login",
2784     &gpox_validate,
2785   },
2786
2787   {
2788     /* Q_GPOP - GET_POBOXES_POP */
2789     "get_poboxes_pop",
2790     "gpop",
2791     RETRIEVE,
2792     "u",
2793     USERS_TABLE,
2794     "login, potype, pop_id || ':' || box_id FROM users",
2795     gpox_fields,
2796     3,
2797     "potype = 'POP'",
2798     0,
2799     "login",
2800     &gpox_validate
2801   },
2802
2803   {
2804     /* Q_GPOF - GET_POBOXES_SMTP */
2805     "get_poboxes_smtp",
2806     "gpos",
2807     RETRIEVE,
2808     "u",
2809     USERS_TABLE,
2810     "login, potype, pop_id || ':' || box_id FROM users",
2811     gpox_fields,
2812     3,
2813     "potype = 'SMTP'",
2814     0,
2815     "login",
2816     &gpox_validate
2817   },
2818
2819   {
2820     /* Q_SPOB - SET_POBOX */
2821     "set_pobox",
2822     "spob",
2823     UPDATE,
2824     0,
2825     USERS_TABLE,
2826     0,
2827     spob_fields,
2828     3,
2829     NULL,
2830     0,
2831     NULL,
2832     &spob_validate,
2833   },
2834
2835   {
2836     /* Q_SPOP - SET_POBOX_POP */
2837     "set_pobox_pop",
2838     "spop",
2839     UPDATE,
2840     "u",
2841     USERS_TABLE,
2842     "users SET potype = 'POP'",
2843     spob_fields,
2844     0,
2845     "users_id = %d",
2846     1,
2847     NULL,
2848     &spop_validate,
2849   },
2850
2851   {
2852     /* Q_DPOB - DELETE_POBOX */
2853     "delete_pobox",
2854     "dpob",
2855     UPDATE,
2856     "u",
2857     USERS_TABLE,
2858     "users SET potype = 'NONE'",
2859     spob_fields,
2860     0,
2861     "users_id = %d",
2862     1,
2863     NULL,
2864     &dpob_validate,
2865   },
2866
2867   {
2868     /* Q_GHST - GET_HOST */
2869     "get_host",
2870     "ghst",
2871     RETRIEVE,
2872     "m",
2873     MACHINE_TABLE,
2874     "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",
2875     ghst_fields,
2876     21,
2877     "m.name LIKE UPPER('%s') AND m.address LIKE '%s' AND m.location LIKE '%s' AND s.name LIKE UPPER('%s') AND m.mach_id != 0 AND s.snet_id = m.snet_id",
2878     4,
2879     "m.name",
2880     &ghst_validate,
2881   },
2882
2883   {
2884     /* Q_AHST - ADD_HOST */ /* uses prefetch_value() for mach_id */
2885     "add_host",
2886     "ahst",
2887     APPEND,
2888     "m",
2889     MACHINE_TABLE,
2890     "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)",
2891     ahst_fields,
2892     14,
2893     0,
2894     0,
2895     NULL,
2896     &ahst_validate,
2897   },
2898
2899   {
2900     /* Q_UHST - UPDATE_HOST */
2901     "update_host",
2902     "uhst",
2903     UPDATE,
2904     "m",
2905     MACHINE_TABLE,
2906     "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",
2907     uhst_fields,
2908     14,
2909     "mach_id = %d",
2910     1,
2911     NULL,
2912     &uhst_validate,
2913   },
2914
2915   {
2916     /* Q_DHST - DELETE_HOST */
2917     "delete_host",
2918     "dhst",
2919     DELETE,
2920     "m",
2921     MACHINE_TABLE,
2922     NULL,
2923     dhst_fields,
2924     0,
2925     "mach_id = %d",
2926     1,
2927     NULL,
2928     &dhst_validate,
2929   },
2930
2931   {
2932     /* Q_GMAC - GET_MACHINE */
2933     "get_machine",
2934     "gmac",
2935     RETRIEVE,
2936     "m",
2937     MACHINE_TABLE,
2938     "name, vendor, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM machine",
2939     gmac_fields,
2940     5,
2941     "name LIKE UPPER('%s') AND mach_id != 0",
2942     1,
2943     "name",
2944     &VDfix_modby,
2945   },
2946
2947   {
2948     /* Q_GHAL - GET_HOSTALIAS */
2949     "get_hostalias",
2950     "ghal",
2951     RETRIEVE,
2952     "a",
2953     HOSTALIAS_TABLE,
2954     "a.name, m.name FROM hostalias a, machine m",
2955     ghal_fields,
2956     2,
2957     "m.mach_id = a.mach_id and a.name LIKE UPPER('%s') AND m.name LIKE UPPER('%s')",
2958     2,
2959     "a.name",
2960     &ghal_validate,
2961   },
2962
2963   {
2964     /* Q_AHAL - ADD_HOSTALIAS */
2965     "add_hostalias",
2966     "ahal",
2967     APPEND,
2968     "a",
2969     HOSTALIAS_TABLE,
2970     "INTO hostalias (name, mach_id) VALUES (UPPER('%s'), %d)",
2971     ghal_fields,
2972     2,
2973     0,
2974     0,
2975     NULL,
2976     &ahal_validate,
2977   },
2978
2979   {
2980     /* Q_DHAL - DELETE_HOSTALIAS */
2981     "delete_hostalias",
2982     "dhal",
2983     DELETE,
2984     "a",
2985     HOSTALIAS_TABLE,
2986     NULL,
2987     ghal_fields,
2988     0,
2989     "name = UPPER('%s') AND mach_id = %d",
2990     2,
2991     NULL,
2992     &dhal_validate,
2993   },
2994
2995   {
2996     /* Q_GSNT - GET_SUBNET */
2997     "get_subnet",
2998     "gsnt",
2999     RETRIEVE,
3000     "s",
3001     SUBNET_TABLE,
3002     "name, description, saddr, mask, low, high, prefix, owner_type, owner_id, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM subnet",
3003     gsnt_fields,
3004     12,
3005     "name LIKE UPPER('%s') and snet_id != 0",
3006     1,
3007     "name",
3008     &gsnt_validate,
3009   },
3010
3011   {
3012     /* Q_ASNT - ADD_SUBNET */
3013     "add_subnet",
3014     "asnt",
3015     APPEND,
3016     "s",
3017     SUBNET_TABLE,
3018     "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)",
3019     asnt_fields,
3020     9,
3021     0,
3022     0,
3023     NULL,
3024     &asnt_validate,
3025   },
3026
3027   {
3028     /* Q_USNT - UPDATE_SUBNET */
3029     "update_subnet",
3030     "usnt",
3031     UPDATE,
3032     "s",
3033     SUBNET_TABLE,
3034     "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",
3035     usnt_fields,
3036     9,
3037     "snet_id = %d",
3038     1,
3039     NULL,
3040     &usnt_validate,
3041   },
3042
3043   {
3044     /* Q_DSNT - DELETE_SUBNET */
3045     "delete_subnet",
3046     "dsnt",
3047     DELETE,
3048     "s",
3049     SUBNET_TABLE,
3050     NULL,
3051     dsnt_fields,
3052     0,
3053     "snet_id = %d",
3054     1,
3055     NULL,
3056     &dsnt_validate,
3057   },
3058
3059   {
3060     /* Q_GCLU - GET_CLUSTER */
3061     "get_cluster",
3062     "gclu",
3063     RETRIEVE,
3064     "c",
3065     CLUSTERS_TABLE,
3066     "name, description, location, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM clusters",
3067     gclu_fields,
3068     6,
3069     "name LIKE '%s' AND clu_id != 0",
3070     1,
3071     "name",
3072     &VDfix_modby,
3073   },
3074
3075   {
3076     /* Q_ACLU - ADD_CLUSTER */ /* uses prefetch_value() for clu_id */
3077     "add_cluster",
3078     "aclu",
3079     APPEND,
3080     "c",
3081     CLUSTERS_TABLE,
3082     "INTO clusters (name, description, location, clu_id) VALUES ('%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s)",
3083     aclu_fields,
3084     3,
3085     0,
3086     0,
3087     NULL,
3088     &aclu_validate,
3089   },
3090
3091   {
3092     /* Q_UCLU - UPDATE_CLUSTER */
3093     "update_cluster",
3094     "uclu",
3095     UPDATE,
3096     "c",
3097     CLUSTERS_TABLE,
3098     "clusters SET name = '%s', description = NVL('%s', CHR(0)), location = NVL('%s', CHR(0))",
3099     uclu_fields,
3100     3,
3101     "clu_id = %d",
3102     1,
3103     NULL,
3104     &uclu_validate,
3105   },
3106
3107   {
3108     /* Q_DCLU - DELETE_CLUSTER */
3109     "delete_cluster",
3110     "dclu",
3111     DELETE,
3112     "c",
3113     CLUSTERS_TABLE,
3114     NULL,
3115     dclu_fields,
3116     0,
3117     "clu_id = %d",
3118     1,
3119     NULL,
3120     &dclu_validate,
3121   },
3122
3123   {
3124     /* Q_GMCM - GET_MACHINE_TO_CLUSTER_MAP */
3125     "get_machine_to_cluster_map",
3126     "gmcm",
3127     RETRIEVE,
3128     "mcm",
3129     MCMAP_TABLE,
3130     "m.name, c.name FROM machine m, clusters c, mcmap mcm",
3131     gmcm_fields,
3132     2,
3133     "m.name LIKE UPPER('%s') AND c.name LIKE '%s' AND mcm.clu_id = c.clu_id AND mcm.mach_id = m.mach_id",
3134     2,
3135     "m.name",
3136     NULL,
3137   },
3138
3139   {
3140     /* Q_AMTC - ADD_MACHINE_TO_CLUSTER */
3141     "add_machine_to_cluster",
3142     "amtc",
3143     APPEND,
3144     "mcm",
3145     MCMAP_TABLE,
3146     "INTO mcmap (mach_id, clu_id) VALUES (%d, %d)",
3147     gmcm_fields,
3148     2,
3149     0,
3150     0,
3151     NULL,
3152     &amtc_validate,
3153   },
3154
3155   {
3156     /* Q_DMFC - DELETE_MACHINE_FROM_CLUSTER */
3157     "delete_machine_from_cluster",
3158     "dmfc",
3159     DELETE,
3160     "mcm",
3161     MCMAP_TABLE,
3162     0,
3163     gmcm_fields,
3164     0,
3165     "mach_id = %d AND clu_id = %d",
3166     2,
3167     NULL,
3168     &amtc_validate,
3169   },
3170
3171   {
3172     /* Q_GCLD - GET_CLUSTER_DATA */
3173     "get_cluster_data",
3174     "gcld",
3175     RETRIEVE,
3176     "svc",
3177     SVC_TABLE,
3178     "c.name, svc.serv_label, svc.serv_cluster FROM svc svc, clusters c",
3179     gcld_fields,
3180     3,
3181     "c.clu_id = svc.clu_id AND c.name LIKE '%s' AND svc.serv_label LIKE '%s'",
3182     2,
3183     "c.name, svc.serv_label",
3184     NULL,
3185   },
3186
3187   {
3188     /* Q_ACLD - ADD_CLUSTER_DATA */
3189     "add_cluster_data",
3190     "acld",
3191     APPEND,
3192     "svc",
3193     SVC_TABLE,
3194     "INTO svc (clu_id, serv_label, serv_cluster) VALUES (%d, '%s', '%s')",
3195     acld_fields,
3196     3,
3197     NULL,
3198     0,
3199     NULL,
3200     &acld_validate,
3201   },
3202
3203   {
3204     /* Q_DCLD - DELETE_CLUSTER_DATA */
3205     "delete_cluster_data",
3206     "dcld",
3207     DELETE,
3208     "svc",
3209     SVC_TABLE,
3210     NULL,
3211     acld_fields,
3212     0,
3213     "clu_id = %d AND serv_label = '%s' AND serv_cluster = '%s'",
3214     3,
3215     NULL,
3216     &dcld_validate,
3217   },
3218
3219   {
3220     /* Q_GLIN - GET_LIST_INFO */
3221     "get_list_info",
3222     "glin",
3223     RETRIEVE,
3224     "l",
3225     LIST_TABLE,
3226     "name, active, publicflg, hidden, maillist, group, gid, ace_type, ace_name, description, modtime, modby, modwith FROM list",
3227     glin_fields,
3228     13,
3229     "name LIKE '%s'",
3230     1,
3231     "name",
3232     &glin_validate,
3233   },
3234
3235   {
3236     /* Q_EXLN - EXPAND_LIST_NAMES */
3237     "expand_list_names",
3238     "exln",
3239     RETRIEVE,
3240     "l",
3241     LIST_TABLE,
3242     "name FROM list",
3243     glin_fields,
3244     1,
3245     "name LIKE '%s' AND list_id != 0",
3246     1,
3247     "name",
3248     NULL,
3249   },
3250
3251   {
3252     /* Q_ALIS - ADD_LIST */ /* uses prefetch_value() for list_id */
3253     "add_list",
3254     "alis",
3255     APPEND,
3256     "l",
3257     LIST_TABLE,
3258     "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)",
3259     alis_fields,
3260     10,
3261     0,
3262     0,
3263     NULL,
3264     &alis_validate,
3265   },
3266
3267   {
3268     /* Q_ULIS - UPDATE_LIST */
3269     "update_list",
3270     "ulis",
3271     UPDATE,
3272     "l",
3273     LIST_TABLE,
3274     "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))",
3275     ulis_fields,
3276     10,
3277     "list_id = %d",
3278     1,
3279     NULL,
3280     &ulis_validate,
3281   },
3282
3283   {
3284     /* Q_DLIS - DELETE_LIST */
3285     "delete_list",
3286     "dlis",
3287     DELETE,
3288     "l",
3289     LIST_TABLE,
3290     NULL,
3291     dlis_fields,
3292     0,
3293     "list_id = %d",
3294     1,
3295     NULL,
3296     &dlis_validate,
3297   },
3298
3299   {
3300     /* Q_AMTL - ADD_MEMBER_TO_LIST */
3301     "add_member_to_list",
3302     "amtl",
3303     APPEND,
3304     0,
3305     IMEMBERS_TABLE,
3306     0,
3307     amtl_fields,
3308     3,
3309     NULL,
3310     0,
3311     NULL,
3312     &amtl_validate,
3313   },
3314
3315   {
3316     /* Q_DMFL - DELETE_MEMBER_FROM_LIST */
3317     "delete_member_from_list",
3318     "dmfl",
3319     DELETE,
3320     0,
3321     IMEMBERS_TABLE,
3322     NULL,
3323     amtl_fields,
3324     0,
3325     0,
3326     3,
3327     NULL,
3328     &dmfl_validate,
3329   },
3330
3331   {
3332     /* Q_GAUS - GET_ACE_USE */
3333     "get_ace_use",
3334     "gaus",
3335     RETRIEVE,
3336     0,
3337     0,
3338     0,
3339     gaus_fields,
3340     2,
3341     0,
3342     2,
3343     NULL,
3344     &gaus_validate,
3345   },
3346
3347   {
3348     /* Q_QGLI - QUALIFIED_GET_LISTS */
3349     "qualified_get_lists",
3350     "qgli",
3351     RETRIEVE,
3352     0,
3353     LIST_TABLE,
3354     0,
3355     qgli_fields,
3356     1,
3357     0,
3358     5,
3359     NULL,
3360     &qgli_validate,
3361   },
3362
3363   {
3364     /* Q_GMOL - GET_MEMBERS_OF_LIST */
3365     "get_members_of_list",
3366     "gmol",
3367     RETRIEVE,
3368     NULL,
3369     IMEMBERS_TABLE,
3370     NULL,
3371     gmol_fields,
3372     2,
3373     NULL,
3374     1,
3375     NULL,
3376     &gmol_validate,
3377   },
3378
3379   {
3380     /* Q_GEML - GET_END_MEMBERS_OF_LIST */
3381     "get_end_members_of_list",
3382     "geml",
3383     RETRIEVE,
3384     NULL,
3385     IMEMBERS_TABLE,
3386     NULL,
3387     gmol_fields,
3388     2,
3389     NULL,
3390     1,
3391     NULL,
3392     &geml_validate,
3393   },
3394
3395   {
3396     /* Q_GLOM - GET_LISTS_OF_MEMBER */
3397     "get_lists_of_member",
3398     "glom",
3399     RETRIEVE,
3400     0,
3401     IMEMBERS_TABLE,
3402     0,
3403     glom_fields,
3404     6,
3405     0,
3406     2,
3407     NULL,
3408     &glom_validate,
3409   },
3410
3411   {
3412     /* Q_CMOL - COUNT_MEMBERS_OF_LIST */
3413     "count_members_of_list",
3414     "cmol",
3415     RETRIEVE,
3416     0,
3417     IMEMBERS_TABLE,
3418     0,
3419     cmol_fields,
3420     1,
3421     0,
3422     1,
3423     NULL,
3424     &cmol_validate,
3425   },
3426
3427   {
3428     /* Q_GSIN - GET_SERVER_INFO */
3429     "get_server_info",
3430     "gsin",
3431     RETRIEVE,
3432     "s",
3433     SERVERS_TABLE,
3434     "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",
3435     gsin_fields,
3436     16,
3437     "name LIKE UPPER('%s')",
3438     1,
3439     "name",
3440     &gsin_validate,
3441   },
3442
3443   {
3444     /* Q_QGSV - QUALIFIED_GET_SERVER */
3445     "qualified_get_server",
3446     "qgsv",
3447     RETRIEVE,
3448     0,
3449     SERVERS_TABLE,
3450     0,
3451     qgsv_fields,
3452     1,
3453     0,
3454     3,
3455     NULL,
3456     &qgsv_validate,
3457   },
3458
3459   {
3460     /* Q_ASIN - ADD_SERVER_INFO */
3461     "add_server_info",
3462     "asin",
3463     APPEND,
3464     "s",
3465     SERVERS_TABLE,
3466     "INTO servers (name, update_int, target_file, script, type, enable, acl_type, acl_id) VALUES (UPPER('%s'), %s, '%s', '%s', '%s', %s, '%s', %d)",
3467     asin_fields,
3468     8,
3469     NULL,
3470     0,
3471     NULL,
3472     &asin_validate,
3473   },
3474
3475   {
3476     /* Q_USIN - UPDATE_SERVER_INFO */
3477     "update_server_info",
3478     "usin",
3479     UPDATE,
3480     "s",
3481     SERVERS_TABLE,
3482     "servers SET update_int = %s, target_file = '%s', script = '%s', type = '%s', enable = %s, acl_type = '%s', acl_id = %d",
3483     asin_fields,
3484     7,
3485     "name = UPPER('%s')",
3486     1,
3487     NULL,
3488     &asin_validate,
3489   },
3490
3491   {
3492     /* Q_RSVE - RESET_SERVER_ERROR */
3493     "reset_server_error",
3494     "rsve",
3495     UPDATE,
3496     "s",
3497     SERVERS_TABLE,
3498     "servers SET harderror = 0, dfcheck = dfgen",
3499     dsin_fields,
3500     0,
3501     "name = UPPER('%s')",
3502     1,
3503     NULL,
3504     &rsve_validate,
3505   },
3506
3507   {
3508     /* Q_SSIF - SET_SERVER_INTERNAL_FLAGS */
3509     "set_server_internal_flags",
3510     "ssif",
3511     UPDATE,
3512     "s",
3513     SERVERS_TABLE,
3514     "servers SET dfgen = %s, dfcheck = %s, inprogress = %s, harderror = %s, errmsg = NVL('%s', CHR(0))",
3515     ssif_fields,
3516     5,
3517     "name = UPPER('%s')",
3518     1,
3519     NULL,
3520     &ssif_validate,
3521   },
3522
3523   {
3524     /* Q_DSIN - DELETE_SERVER_INFO */
3525     "delete_server_info",
3526     "dsin",
3527     DELETE,
3528     "s",
3529     SERVERS_TABLE,
3530     NULL,
3531     dsin_fields,
3532     0,
3533     "name = UPPER('%s')",
3534     1,
3535     NULL,
3536     &dsin_validate,
3537   },
3538
3539   {
3540     /* Q_GSHI - GET_SERVER_HOST_INFO */
3541     "get_server_host_info",
3542     "gshi",
3543     RETRIEVE,
3544     "sh",
3545     SERVERHOSTS_TABLE,
3546     "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",
3547     gshi_fields,
3548     16,
3549     "sh.service LIKE UPPER('%s') AND m.name LIKE UPPER('%s') AND m.mach_id = sh.mach_id",
3550     2,
3551     "sh.service, m.name",
3552     &gshi_validate,
3553   },
3554
3555   {
3556     /* Q_QGSH - QUALIFIED_GET_SERVER_HOST */
3557     "qualified_get_server_host",
3558     "qgsh",
3559     RETRIEVE,
3560     0,
3561     SERVERHOSTS_TABLE,
3562     0,
3563     qgsh_fields,
3564     2,
3565     0,
3566     6,
3567     NULL,
3568     &qgsh_validate,
3569   },
3570
3571   {
3572     /* Q_ASHI - ADD_SERVER_HOST_INFO */
3573     "add_server_host_info",
3574     "ashi",
3575     APPEND,
3576     "sh",
3577     SERVERHOSTS_TABLE,
3578     "INTO serverhosts (service, mach_id, enable, value1, value2, value3) VALUES (UPPER('%s'), %d, %s, %s, %s, NVL('%s', CHR(0)))",
3579     ashi_fields,
3580     6,
3581     NULL,
3582     0,
3583     NULL,
3584     &ashi_validate,
3585   },
3586
3587   {
3588     /* Q_USHI - UPDATE_SERVER_HOST_INFO */
3589     "update_server_host_info",
3590     "ushi",
3591     UPDATE,
3592     "sh",
3593     SERVERHOSTS_TABLE,
3594     "serverhosts SET enable = %s, value1 = %s, value2 = %s, value3 = NVL('%s', CHR(0))",
3595     ashi_fields,
3596     4,
3597     "service = UPPER('%s') AND mach_id = %d",
3598     2,
3599     NULL,
3600     &ashi_validate,
3601   },
3602
3603   {
3604     /* Q_RSHE - RESET_SERVER_HOST_ERROR */
3605     "reset_server_host_error",
3606     "rshe",
3607     UPDATE,
3608     "sh",
3609     SERVERHOSTS_TABLE,
3610     "serverhosts SET hosterror = 0",
3611     dshi_fields,
3612     0,
3613     "service = UPPER('%s') AND mach_id = %d",
3614     2,
3615     NULL,
3616     &rshe_validate,
3617   },
3618
3619   {
3620     /* Q_SSHO - SET_SERVER_HOST_OVERRIDE */
3621     "set_server_host_override",
3622     "ssho",
3623     UPDATE,
3624     "sh",
3625     SERVERHOSTS_TABLE,
3626     "serverhosts SET override = 1",
3627     dshi_fields,
3628     0,
3629     "service = UPPER('%s') AND mach_id = %d",
3630     2,
3631     NULL,
3632     &ssho_validate,
3633   },
3634
3635   {
3636     /* Q_SSHI - SET_SERVER_HOST_INTERNAL */
3637     "set_server_host_internal",
3638     "sshi",
3639     UPDATE,
3640     "s",
3641     SERVERHOSTS_TABLE,
3642     "serverhosts SET override = %s, success = %s, inprogress = %s, hosterror = %s, hosterrmsg = NVL('%s', CHR(0)), ltt = %s, lts = %s",
3643     sshi_fields,
3644     7,
3645     "service = UPPER('%s') AND mach_id = %d",
3646     2,
3647     NULL,
3648     &sshi_validate,
3649   },
3650
3651   {
3652     /* Q_DSHI - DELETE_SERVER_HOST_INFO */
3653     "delete_server_host_info",
3654     "dshi",
3655     DELETE,
3656     "sh",
3657     SERVERHOSTS_TABLE,
3658     NULL,
3659     dshi_fields,
3660     0,
3661     "service = UPPER('%s') AND mach_id = %d",
3662     2,
3663     NULL,
3664     &dshi_validate,
3665   },
3666
3667   {
3668     /* Q_GSLO - GET_SERVER_LOCATIONS */
3669     "get_server_locations",
3670     "gslo",
3671     RETRIEVE,
3672     "sh",
3673     SERVERHOSTS_TABLE,
3674     "sh.service, m.name FROM serverhosts sh, machine m",
3675     gslo_fields,
3676     2,
3677     "sh.service LIKE UPPER('%s') AND sh.mach_id = m.mach_id",
3678     1,
3679     "sh.service, m.name",
3680     NULL,
3681   },
3682
3683   {
3684     /* Q_GFSL - GET_FILESYS_BY_LABEL */
3685     "get_filesys_by_label",
3686     "gfsl",
3687     RETRIEVE,
3688     "fs",
3689     FILESYS_TABLE,
3690     "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",
3691     gfsl_fields,
3692     14,
3693     "fs.label LIKE '%s' AND fs.mach_id = m.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
3694     1,
3695     "fs.label",
3696     &VDfix_modby,
3697   },
3698
3699   {
3700     /* Q_GFSM - GET_FILESYS_BY_MACHINE */
3701     "get_filesys_by_machine",
3702     "gfsm",
3703     RETRIEVE,
3704     "fs",
3705     FILESYS_TABLE,
3706     "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",
3707     gfsm_fields,
3708     14,
3709     "fs.mach_id = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
3710     1,
3711     "fs.label",
3712     &gfsm_validate,
3713   },
3714
3715   {
3716     /* Q_GFSN - GET_FILESYS_BY_NFSPHYS */
3717     "get_filesys_by_nfsphys",
3718     "gfsn",
3719     RETRIEVE,
3720     "fs",
3721     FILESYS_TABLE,
3722     "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",
3723     gfsn_fields,
3724     14,
3725     "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' AND fs.type = 'NFS'",
3726     2,
3727     "fs.label",
3728     &gfsn_validate,
3729   },
3730
3731   {
3732     /* Q_GFSG - GET_FILESYS_BY_GROUP */
3733     "get_filesys_by_group",
3734     "gfsg",
3735     RETRIEVE,
3736     "fs",
3737     FILESYS_TABLE,
3738     "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",
3739     gfsg_fields,
3740     14,
3741     "fs.owners = %d AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = l.list_id",
3742     1,
3743     "fs.label",
3744     &gfsg_validate,
3745   },
3746
3747   {
3748     /* Q_GFSP - GET_FILESYS_BY_PATH */
3749     "get_filesys_by_path",
3750     "gfsp",
3751     RETRIEVE,
3752     "fs",
3753     FILESYS_TABLE,
3754     "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",
3755     gfsp_fields,
3756     14,
3757     "fs.name LIKE '%s' AND m.mach_id = fs.mach_id AND fs.owner = u.users_id AND fs.owners = list_id",
3758     1,
3759     "fs.label",
3760     &VDfix_modby,
3761   },
3762
3763   {
3764     /* Q_AFIL - ADD_FILESYS */ /* uses prefetch_value() for filsys_id */
3765     "add_filesys",
3766     "afil",
3767     APPEND,
3768     "fs",
3769     FILESYS_TABLE,
3770     "INTO filesys (label, type, mach_id, name, mount, rwaccess, comments, owner, owners, createflg, lockertype, filsys_id) VALUES ('%s', '%s', %d, NVL('%s', CHR(0)), '%s', '%s', NVL('%s', CHR(0)), %d, %d, %s, '%s', %s)",
3771     afil_fields,
3772     11,
3773     0,
3774     0,
3775     NULL,
3776     &afil_validate,
3777   },
3778
3779   {
3780     /* Q_UFIL - UPDATE_FILESYS */
3781     "update_filesys",
3782     "ufil",
3783     UPDATE,
3784     "fs",
3785     FILESYS_TABLE,
3786     "filesys SET label = '%s', type = '%s', mach_id = %d, name = NVL('%s', CHR(0)), mount = '%s', rwaccess = '%s', comments = NVL('%s', CHR(0)), owner = %d, owners = %d, createflg = %s, lockertype = '%s'",
3787     ufil_fields,
3788     11,
3789     "filsys_id = %d",
3790     1,
3791     NULL,
3792     &ufil_validate,
3793   },
3794
3795   {
3796     /* Q_DFIL - DELETE_FILESYS */
3797     "delete_filesys",
3798     "dfil",
3799     DELETE,
3800     "fs",
3801     FILESYS_TABLE,
3802     NULL,
3803     dfil_fields,
3804     0,
3805     "filsys_id = %d",
3806     1,
3807     NULL,
3808     &dfil_validate,
3809   },
3810
3811   {
3812     /* Q_GFGM - GET_FSGROUP_MEMBERS */
3813     "get_fsgroup_members",
3814     "gfgm",
3815     RETRIEVE,
3816     "fg",
3817     FSGROUP_TABLE,
3818     "fs.label, fg.key FROM fsgroup fg, filesys fs",
3819     gfgm_fields,
3820     2,
3821     "fg.group_id = %d AND fs.filsys_id = fg.filsys_id",
3822     1,
3823     "fs.label, fg.key",
3824     &gfgm_validate,
3825   },
3826
3827   {
3828     /* Q_AFTG - ADD_FILESYS_TO_FSGROUP */
3829     "add_filesys_to_fsgroup",
3830     "aftg",
3831     APPEND,
3832     "fg",
3833     FSGROUP_TABLE,
3834     "INTO fsgroup (group_id, filsys_id, key) VALUES (%d, %d, '%s')",
3835     gfgm_fields,
3836     3,
3837     NULL,
3838     0,
3839     NULL,
3840     &aftg_validate,
3841   },
3842
3843   {
3844     /* Q_RFFG - REMOVE_FILESYS_FROM_FSGROUP */
3845     "remove_filesys_from_fsgroup",
3846     "rffg",
3847     DELETE,
3848     "fg",
3849     FSGROUP_TABLE,
3850     NULL,
3851     gfgm_fields,
3852     0,
3853     "group_id = %d AND filsys_id = %d",
3854     2,
3855     NULL,
3856     &aftg_validate,
3857   },
3858
3859   {
3860     /* Q_GANF - GET_ALL_NFSPHYS */
3861     "get_all_nfsphys",
3862     "ganf",
3863     RETRIEVE,
3864     "np",
3865     NFSPHYS_TABLE,
3866     "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",
3867     ganf_fields,
3868     9,
3869     "m.mach_id = np.mach_id",
3870     0,
3871     "m.name, np.dir",
3872     &VDfix_modby,
3873   },
3874
3875   {
3876     /* Q_GNFP - GET_NFSPHYS */
3877     "get_nfsphys",
3878     "gnfp",
3879     RETRIEVE,
3880     "np",
3881     NFSPHYS_TABLE,
3882     "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",
3883     gnfp_fields,
3884     9,
3885     "np.mach_id = %d AND np.dir LIKE '%s' AND m.mach_id = np.mach_id",
3886     2,
3887     "m.name, np.dir",
3888     &gnfp_validate,
3889   },
3890
3891   {
3892     /* Q_ANFP - ADD_NFSPHYS */ /* uses prefetch_value() for nfsphys_id */
3893     "add_nfsphys",
3894     "anfp",
3895     APPEND,
3896     "np",
3897     NFSPHYS_TABLE,
3898     "INTO nfsphys (mach_id, dir, device, status, allocated, partsize, nfsphys_id) VALUES (%d, '%s', NVL('%s', CHR(0)), %s, %s, %s, %s)",
3899     ganf_fields,
3900     6,
3901     0,
3902     0,
3903     NULL,
3904     &anfp_validate,
3905   },
3906
3907   {
3908     /* Q_UNFP - UPDATE_NFSPHYS */
3909     "update_nfsphys",
3910     "unfp",
3911     UPDATE,
3912     "np",
3913     NFSPHYS_TABLE,
3914     "nfsphys SET device = NVL('%s', CHR(0)), status = %s, allocated = %s, partsize = %s",
3915     ganf_fields,
3916     4,
3917     "mach_id = %d AND dir = '%s'",
3918     2,
3919     NULL,
3920     &unfp_validate,
3921   },
3922
3923   {
3924     /* Q_AJNF - ADJUST_NFSPHYS_ALLOCATION */
3925     "adjust_nfsphys_allocation",
3926     "ajnf",
3927     UPDATE,
3928     "np",
3929     NFSPHYS_TABLE,
3930     "nfsphys SET allocated = allocated + %s",
3931     ajnf_fields,
3932     1,
3933     "mach_id = %d AND dir = '%s'",
3934     2,
3935     NULL,
3936     &ajnf_validate,
3937   },
3938
3939   {
3940     /* Q_DNFP - DELETE_NFSPHYS */
3941     "delete_nfsphys",
3942     "dnfp",
3943     DELETE,
3944     "np",
3945     NFSPHYS_TABLE,
3946     NULL,
3947     dnfp_fields,
3948     0,
3949     "mach_id = %d AND dir = '%s'",
3950     2,
3951     NULL,
3952     &dnfp_validate,
3953   },
3954
3955   {
3956     /* Q_GQOT - GET_QUOTA */
3957     "get_quota",
3958     "gqot",
3959     RETRIEVE,
3960     "q",
3961     QUOTA_TABLE,
3962     "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",
3963     gqot_fields,
3964     9,
3965     "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",
3966     3,
3967     NULL,
3968     &gqot_validate,
3969   },
3970
3971   {
3972     /* Q_GQBF - GET_QUOTA_BY_FILESYS */
3973     "get_quota_by_filesys",
3974     "gqbf",
3975     RETRIEVE,
3976     "q",
3977     QUOTA_TABLE,
3978     "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",
3979     gqbf_fields,
3980     9,
3981     "fs.label LIKE '%s' AND fs.filsys_id = q.filsys_id AND m.mach_id = fs.mach_id",
3982     1,
3983     "fs.label, q.type",
3984     &gqbf_validate,
3985   },
3986
3987   {
3988     /* Q_AQOT - ADD_QUOTA */ /* prefetch_filsys() gets last 1 value */
3989     "add_quota",
3990     "aqot",
3991     APPEND,
3992     0,
3993     QUOTA_TABLE,
3994     "INTO quota (filsys_id, type, entity_id, quota, phys_id) VALUES ('%s', %d, %d, %s, %s)",
3995     aqot_fields,
3996     4,
3997     NULL,
3998     0,
3999     NULL,
4000     &aqot_validate,
4001   },
4002
4003   {
4004     /* Q_UQOT - UPDATE_QUOTA */
4005     "update_quota",
4006     "uqot",
4007     UPDATE,
4008     0,
4009     QUOTA_TABLE,
4010     "quota SET quota = %s",
4011     aqot_fields,
4012     1,
4013     0,
4014     3,
4015     NULL,
4016     &uqot_validate,
4017   },
4018
4019   {
4020     /* Q_DQOT - DELETE_QUOTA */
4021     "delete_quota",
4022     "dqot",
4023     DELETE,
4024     0,
4025     QUOTA_TABLE,
4026     NULL,
4027     aqot_fields,
4028     0,
4029     0,
4030     3,
4031     NULL,
4032     &dqot_validate,
4033   },
4034
4035   {
4036     /* Q_GNFQ - GET_NFS_QUOTAS */
4037     "get_nfs_quota",
4038     "gnfq",
4039     RETRIEVE,
4040     "q",
4041     QUOTA_TABLE,
4042     "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",
4043     gnfq_fields,
4044     8,
4045     "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'",
4046     2,
4047     "fs.label, u.login",
4048     &gnfq_validate,
4049   },
4050
4051   {
4052     /* Q_GNQP - GET_NFS_QUOTAS_BY_PARTITION */
4053     "get_nfs_quotas_by_partition",
4054     "gnqp",
4055     RETRIEVE,
4056     "q",
4057     QUOTA_TABLE,
4058     "fs.label, u.login, q.quota, np.dir, m.name FROM quota q, filesys fs, users u, nfsphys np, machine m",
4059     gnqp_fields,
4060     5,
4061     "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",
4062     2,
4063     "fs.label",
4064     NULL,
4065   },
4066
4067   {
4068     /* Q_ANFQ - ADD_NFS_QUOTA */ /* prefetch_filsys() gets last 1 value */
4069     "add_nfs_quota",
4070     "anfq",
4071     APPEND,
4072     0,
4073     QUOTA_TABLE,
4074     "INTO quota (type, filsys_id, entity_id, quota, phys_id ) VALUES ('USER', %d, %d, %s, %s)",
4075     anfq_fields,
4076     3,
4077     NULL,
4078     0,
4079     NULL,
4080     &anfq_validate,
4081   },
4082
4083   {
4084     /* Q_UNFQ - UPDATE_NFS_QUOTA */
4085     "update_nfs_quota",
4086     "unfq",
4087     UPDATE,
4088     0,
4089     QUOTA_TABLE,
4090     "quota SET quota = %s",
4091     anfq_fields,
4092     1,
4093     0,
4094     2,
4095     NULL,
4096     &unfq_validate,
4097   },
4098
4099   {
4100     /* Q_DNFQ - DELETE_NFS_QUOTA */
4101     "delete_nfs_quota",
4102     "dnfq",
4103     DELETE,
4104     0,
4105     QUOTA_TABLE,
4106     NULL,
4107     anfq_fields,
4108     0,
4109     0,
4110     2,
4111     NULL,
4112     &dnfq_validate,
4113   },
4114
4115   {
4116     /* Q_GZCL - GET_ZEPHYR_CLASS */
4117     "get_zephyr_class",
4118     "gzcl",
4119     RETRIEVE,
4120     "z",
4121     ZEPHYR_TABLE,
4122     "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",
4123     gzcl_fields,
4124     12,
4125     "class LIKE '%s'",
4126     1,
4127     "class",
4128     &gzcl_validate,
4129   },
4130
4131   {
4132     /* Q_AZCL - ADD_ZEPHYR_CLASS */
4133     "add_zephyr_class",
4134     "azcl",
4135     APPEND,
4136     "z",
4137     ZEPHYR_TABLE,
4138     "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)",
4139     azcl_fields,
4140     9,
4141     0,
4142     0,
4143     NULL,
4144     &azcl_validate,
4145   },
4146
4147   {
4148     /* Q_UZCL - UPDATE_ZEPHYR_CLASS */
4149     "update_zephyr_class",
4150     "uzcl",
4151     UPDATE,
4152     "z",
4153     ZEPHYR_TABLE,
4154     "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",
4155     uzcl_fields,
4156     9,
4157     "class = '%s'",
4158     1,
4159     NULL,
4160     &uzcl_validate,
4161   },
4162
4163   {
4164     /* Q_DZCL - DELETE_ZEPHYR_CLASS */
4165     "delete_zephyr_class",
4166     "dzcl",
4167     DELETE,
4168     "z",
4169     ZEPHYR_TABLE,
4170     0,
4171     uzcl_fields,
4172     0,
4173     "class = '%s'",
4174     1,
4175     NULL,
4176     &dzcl_validate,
4177   },
4178
4179   {
4180     /* Q_GSHA - GET_SERVER_HOST_ACCESS */
4181     "get_server_host_access",
4182     "gsha",
4183     RETRIEVE,
4184     "ha",
4185     HOSTACCESS_TABLE,
4186     "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",
4187     gsha_fields,
4188     6,
4189     "m.name LIKE UPPER('%s') AND ha.mach_id = m.mach_id",
4190     1,
4191     "m.name",
4192     &gsha_validate,
4193   },
4194
4195   {
4196     /* Q_ASHA - ADD_SERVER_HOST_ACCESS */
4197     "add_server_host_access",
4198     "asha",
4199     APPEND,
4200     "ha",
4201     HOSTACCESS_TABLE,
4202     "INTO hostaccess (mach_id, acl_type, acl_id) VALUES (%d, '%s', %d)",
4203     asha_fields,
4204     3,
4205     0,
4206     0,
4207     NULL,
4208     &asha_validate,
4209   },
4210
4211   {
4212     /* Q_USHA - UPDATE_SERVER_HOST_ACCESS */
4213     "update_server_host_access",
4214     "usha",
4215     UPDATE,
4216     "ha",
4217     HOSTACCESS_TABLE,
4218     "hostaccess SET acl_type = '%s', acl_id = %d",
4219     asha_fields,
4220     2,
4221     "mach_id = %d",
4222     1,
4223     NULL,
4224     &asha_validate,
4225   },
4226
4227   {
4228     /* Q_DSHA - DELETE_SERVER_HOST_ACCESS */
4229     "delete_server_host_access",
4230     "dsha",
4231     DELETE,
4232     "ha",
4233     HOSTACCESS_TABLE,
4234     0,
4235     asha_fields,
4236     0,
4237     "mach_id = %d",
4238     1,
4239     NULL,
4240     &VDmach,
4241   },
4242
4243   {
4244     /* Q_GSVC - GET_SERVICE */
4245     "get_service",
4246     "gsvc",
4247     RETRIEVE,
4248     "ss",
4249     SERVICES_TABLE,
4250     "name, protocol, port, description, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS'), modby, modwith FROM services",
4251     gsvc_fields,
4252     7,
4253     "name LIKE '%s'",
4254     1,
4255     "name",
4256     &VDfix_modby,
4257   },
4258
4259   {
4260     /* Q_ASVC - ADD_SERVICE */
4261     "add_service",
4262     "asvc",
4263     APPEND,
4264     "ss",
4265     SERVICES_TABLE,
4266     "INTO services (name, protocol, port, description) VALUES ('%s', '%s', %s, NVL('%s', CHR(0)))",
4267     asvc_fields,
4268     4,
4269     NULL,
4270     0,
4271     NULL,
4272     &asvc_validate,
4273   },
4274
4275   {
4276     /* Q_DSVC - DELETE_SERVICE */
4277     "delete_service",
4278     "dsvc",
4279     DELETE,
4280     "ss",
4281     SERVICES_TABLE,
4282     0,
4283     asvc_fields,
4284     0,
4285     "name = '%s'",
4286     1,
4287     NULL,
4288     &asvc_validate,
4289   },
4290
4291   {
4292     /* Q_GPCE - GET_PRINTCAP_ENTRY */
4293     "get_printcap_entry",
4294     "gpce",
4295     RETRIEVE,
4296     "pc",
4297     PRINTCAP_TABLE,
4298     "pc.name, m.name, pc.dir, pc.rp, pc.quotaserver, pc.auth, pc.price, pc.comments, TO_CHAR(pc.modtime, 'DD-mon-YYYY HH24:MI:SS'), pc.modby, pc.modwith FROM printcap pc, machine m",
4299     gpce_fields,
4300     11,
4301     "pc.name LIKE '%s' AND m.mach_id = pc.mach_id",
4302     1,
4303     "pc.name",
4304     &gpce_validate,
4305   },
4306
4307   {
4308     /* Q_APCE - ADD_PRINTCAP_ENTRY */
4309     "add_printcap_entry",
4310     "apce",
4311     APPEND,
4312     "pc",
4313     PRINTCAP_TABLE,
4314     "INTO printcap (name, mach_id, dir, rp, quotaserver, auth, price, comments) VALUES ('%s', %d, '%s', '%s', %d, %s, %s, NVL('%s', CHR(0)))",
4315     apce_fields,
4316     8,
4317     0,
4318     0,
4319     NULL,
4320     &apce_validate,
4321   },
4322
4323   {
4324     /* Q_DPCE - DELETE_PRINTCAP_ENTRY */
4325     "delete_printcap_entry",
4326     "dpce",
4327     DELETE,
4328     "pc",
4329     PRINTCAP_TABLE,
4330     0,
4331     apce_fields,
4332     0,
4333     "name = '%s'",
4334     1,
4335     NULL,
4336     &dpce_validate,
4337   },
4338
4339   {
4340     /* Q_GPCP - GET_PRINTCAP */
4341     "get_printcap",
4342     "gpcp",
4343     RETRIEVE,
4344     "pc",
4345     PRINTCAP_TABLE,
4346     "pc.name, m.name, pc.dir, pc.rp, pc.comments, TO_CHAR(pc.modtime, 'DD-mon-YYYY HH24:MI:SS'), pc.modby, pc.modwith FROM printcap pc, machine m",
4347     gpcp_fields,
4348     8,
4349     "pc.name LIKE '%s' AND m.mach_id = pc.mach_id",
4350     1,
4351     "pc.name",
4352     &VDfix_modby,
4353   },
4354
4355   {
4356     /* Q_DPCP - DELETE_PRINTCAP */
4357     "delete_printcap",
4358     "dpcp",
4359     DELETE,
4360     "pc",
4361     PRINTCAP_TABLE,
4362     0,
4363     apce_fields,
4364     0,
4365     "name = '%s'",
4366     1,
4367     NULL,
4368     &dpce_validate,
4369   },
4370
4371   {
4372     /* Q_GPDM - GET_PALLADIUM */
4373     "get_palladium",
4374     "gpdm",
4375     RETRIEVE,
4376     "pal",
4377     PALLADIUM_TABLE,
4378     "pal.name, pal.identifier, m.name, TO_CHAR(pal.modtime, 'DD-mon-YYYY HH24:MI:SS'), pal.modby, pal.modwith FROM palladium pal, machine m",
4379     gpdm_fields,
4380     6,
4381     "pal.name LIKE '%s' AND m.mach_id = pal.mach_id",
4382     1,
4383     "pal.name",
4384     &VDfix_modby,
4385   },
4386
4387   {
4388     /* Q_APDM - ADD_PALLADIUM */
4389     "add_palladium",
4390     "apdm",
4391     APPEND,
4392     "pal",
4393     PALLADIUM_TABLE,
4394     "INTO palladium (name, identifier, mach_id) VALUES ('%s', %s, %d)",
4395     apdm_fields,
4396     3,
4397     0,
4398     0,
4399     NULL,
4400     &apdm_validate,
4401   },
4402
4403   {
4404     /* Q_DPDM - DELETE_PALLADIUM */
4405     "delete_palladium",
4406     "dpdm",
4407     DELETE,
4408     "pal",
4409     PALLADIUM_TABLE,
4410     0,
4411     apdm_fields,
4412     0,
4413     "name = '%s'",
4414     1,
4415     NULL,
4416     &dpdm_validate,
4417   },
4418
4419   {
4420     /* Q_GALI - GET_ALIAS */
4421     "get_alias",
4422     "gali",
4423     RETRIEVE,
4424     "a",
4425     ALIAS_TABLE,
4426     "name, type, trans FROM alias",
4427     gali_fields,
4428     3,
4429     "name LIKE '%s' AND type LIKE '%s' AND trans LIKE '%s'",
4430     3,
4431     "type, name, trans",
4432     NULL,
4433   },
4434
4435   {
4436     /* Q_AALI - ADD_ALIAS */
4437     "add_alias",
4438     "aali",
4439     APPEND,
4440     "a",
4441     ALIAS_TABLE,
4442     "INTO alias (name, type, trans) VALUES ('%s', '%s', '%s')",
4443     aali_fields,
4444     3,
4445     NULL,
4446     0,
4447     NULL,
4448     &aali_validate,
4449   },
4450
4451   {
4452     /* Q_DALI - DELETE_ALIAS */
4453     "delete_alias",
4454     "dali",
4455     DELETE,
4456     "a",
4457     ALIAS_TABLE,
4458     NULL,
4459     aali_fields,
4460     0,
4461     "name = '%s' AND type = '%s' AND  trans = '%s'",
4462     3,
4463     NULL,
4464     &dali_validate,
4465   },
4466
4467   {
4468     /* Q_GVAL - GET_VALUE */
4469     "get_value",
4470     "gval",
4471     RETRIEVE,
4472     "val",
4473     NUMVALUES_TABLE,
4474     "value FROM numvalues",
4475     gval_fields,
4476     1,
4477     "name = '%s'",
4478     1,
4479     NULL,
4480     &gval_validate,
4481   },
4482
4483   {
4484     /* Q_AVAL - ADD_VALUE */
4485     "add_value",
4486     "aval",
4487     APPEND,
4488     "val",
4489     NUMVALUES_TABLE,
4490     "INTO numvalues (name, value) VALUES ('%s', %s)",
4491     aval_fields,
4492     2,
4493     NULL,
4494     0,
4495     NULL,
4496     &aval_validate,
4497   },
4498
4499   {
4500     /* Q_UVAL - UPDATE_VALUE */
4501     "update_value",
4502     "uval",
4503     UPDATE,
4504     "val",
4505     NUMVALUES_TABLE,
4506     "numvalues SET value = %s",
4507     aval_fields,
4508     1,
4509     "name = '%s'",
4510     1,
4511     NULL,
4512     &aval_validate,
4513   },
4514
4515   {
4516     /* Q_DVAL - DELETE_VALUE */
4517     "delete_value",
4518     "dval",
4519     DELETE,
4520     "val",
4521     NUMVALUES_TABLE,
4522     NULL,
4523     dval_fields,
4524     0,
4525     "name = '%s'",
4526     1,
4527     NULL,
4528     &aval_validate,
4529   },
4530
4531   {
4532     /* Q_GATS - GET_ALL_TABLE_STATS */
4533     "get_all_table_stats",
4534     "gats",
4535     RETRIEVE,
4536     "tbs",
4537     TBLSTATS_TABLE,
4538     "table_name, appends, updates, deletes, TO_CHAR(modtime, 'DD-mon-YYYY HH24:MI:SS') FROM tblstats",
4539     gats_fields,
4540     5,
4541     NULL,
4542     0,
4543     "table_name",
4544     0,
4545   },
4546
4547   {
4548     /* Q__SDL - _SET_DEBUG_LEVEL */
4549     "_set_debug_level",
4550     "_sdl",
4551     UPDATE,
4552     NULL,
4553     0,
4554     NULL,
4555     _sdl_fields,
4556     1,
4557     NULL,
4558     0,
4559     NULL,
4560     &_sdl_validate,
4561   },
4562
4563 };
4564
4565 int QueryCount2 = (sizeof(Queries2) / sizeof(struct query));
This page took 0.533636 seconds and 5 git commands to generate.