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