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