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