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