]> andersk Git - moira.git/blob - clients/mmoira/display.c
fix duplicated accelerators
[moira.git] / clients / mmoira / display.c
1 /* $Header$
2  */
3
4 #include <stdio.h>
5 #include <moira.h>
6 #include <moira_site.h>
7 #include <sys/types.h>
8 #include <netdb.h>
9 #include <sys/socket.h>
10 #include <netinet/in.h>
11 #include <Xm/Xm.h>
12 #include "mmoira.h"
13 #ifdef GDSS
14 #include <des.h>
15 #include <krb.h>
16 #include <gdss.h>
17 #endif /* GDSS */
18
19
20 static char *MOD_FORMAT = "Modified by %s at %s with %s\n";
21
22
23 /* atot: convert ASCII integer unix time into human readable date string */
24
25 char *atot(itime)
26 char *itime;
27 {
28     int time;
29     char *ct, *ctime();
30
31     time = atoi(itime);
32     ct = ctime(&time);
33     ct[24] = 0;
34     return(&ct[4]);
35 }
36
37
38 /* Turn an integer number of minutes into a print string */
39
40 char *unparse_interval(i)
41 int i;
42 {
43     static char uibuf[32];
44
45     sprintf(uibuf, "%d hrs %d mins", i / 60, i % 60);
46     return(&uibuf[0]);
47 }
48
49
50 static save_info(argc, argv, sq)
51 int argc;
52 char **argv;
53 struct save_queue *sq;
54 {
55     sq_save_args(argc, argv, sq);
56     return(MR_CONT);
57 }
58
59
60 int DisplayCallback(argc, info, form)
61 int argc;
62 char **info;
63 EntryForm *form;
64 {
65     char buf[1024], name[128];
66 #ifdef GDSS
67     SigInfo si;
68 #endif
69     int i, status;
70
71     switch (form->menu->operation) {
72     case MM_SHOW_USER:
73         sprintf(name, "%s, %s %s", info[U_LAST], info[U_FIRST], info[U_MIDDLE]);
74         sprintf(buf, "Login name: %-20s Full name: %s\n", info[U_NAME], name);
75         AppendToLog(buf);
76         sprintf(buf, "User id: %-23s Login shell %-10s Class: %s\n", 
77                 info[U_UID], info[U_SHELL], info[U_CLASS]);
78         AppendToLog(buf);
79
80 #ifdef GDSS
81         sprintf(buf, "%s:%s", info[U_NAME], info[U_MITID]);
82         si.rawsig = NULL;
83         status = GDSS_Verify(buf, strlen(buf), info[U_SIGNATURE], &si);
84 #ifdef DEBUG
85         hex_dump(info[U_SIGNATURE]);
86         sprintf(buf, "GDSS_Verify => %d", status);
87         AppendToLog(buf);
88 #endif /* DEBUG */
89 #else /* GDSS */
90         status = 0;
91 #endif /* GDSS */
92         
93         sprintf(buf, "Account is: %-20s ID number: %-11s Signed: %s\n",
94                 user_states[atoi(info[U_STATE])], info[U_MITID],
95                 *info[U_SIGNATURE] ? (status ? "Bad" : "Yes") : "No");
96         AppendToLog(buf);
97         if (atoi(info[U_SECURE]))
98           sprintf(buf, "Secure password set on %s.\n", atot(info[U_SECURE]));
99         else
100           sprintf(buf, "No secure password set.\n");
101         AppendToLog(buf);
102         sprintf(buf, "Comments: %s\n", info[U_COMMENT]);
103         AppendToLog(buf);
104         sprintf(buf, MOD_FORMAT,
105                 info[U_MODBY], info[U_MODTIME],info[U_MODWITH]);
106         AppendToLog(buf);
107         break;
108     case MM_SHOW_FINGER:
109         sprintf(buf, "Finger information for user: %s\n", info[F_NAME]);
110         AppendToLog(buf);
111         sprintf(buf, "Login name: %-27s In real life: %s\n", info[F_NAME],
112                 info[F_FULLNAME]);
113         AppendToLog(buf);
114         sprintf(buf, "Nickname: %-29s Department: %s\n", info[F_NICKNAME],
115                 info[F_MIT_DEPT]);
116         AppendToLog(buf);
117         sprintf(buf, "Home: %-33s Home phone: %s\n", info[F_HOME_ADDR],
118                 info[F_HOME_PHONE]);
119         AppendToLog(buf);
120         sprintf(buf, "Office: %-31s Office phone: %s\n", info[F_OFFICE_ADDR],
121                 info[F_OFFICE_PHONE]);
122         AppendToLog(buf);
123         sprintf(buf, MOD_FORMAT, info[F_MODBY], info[F_MODTIME],
124                 info[F_MODWITH]);
125         AppendToLog(buf);
126         break;
127     case MM_SHOW_POBOX:
128         sprintf(buf, "Post Office information for user: %s\n", info[PO_NAME]);
129         AppendToLog(buf);
130         sprintf(buf, "Type: %-8s Box: %s\n", info[PO_TYPE], info[PO_BOX]);
131         AppendToLog(buf);
132         sprintf(buf, MOD_FORMAT, info[4], info[3], info[5]);
133         AppendToLog(buf);
134         break;
135     case MM_SHOW_KRBMAP:
136         sprintf(buf, "Kerberos mapping: User %-9s Principal %s",
137                 info[KMAP_USER], info[KMAP_PRINCIPAL]);
138         AppendToLog(buf);
139         break;
140     case MM_SHOW_FILSYS:
141     case MM_SHOW_FSGROUP:
142         sq_save_args(argc, info, form->extrastuff);
143         return(MR_CONT);
144         break;
145     case MM_SHOW_NFS:
146         sprintf(buf,"Machine: %-20s Directory: %-15s Device: %s\n",
147                 info[NFS_NAME], info[NFS_DIR], info[NFS_DEVICE]);
148         AppendToLog(buf);
149         sprintf(buf, "Status: %s\n", format_filesys_type(info[NFS_STATUS]));
150         AppendToLog(buf);
151         sprintf(buf, "Quota Allocated: %-17s Size: %s\n",
152                 info[NFS_ALLOC], info[NFS_SIZE]);
153         AppendToLog(buf);
154         sprintf(buf, MOD_FORMAT, info[NFS_MODBY], info[NFS_MODTIME],
155                 info[NFS_MODWITH]);
156         AppendToLog(buf);
157         break;
158     case MM_SHOW_QUOTA:
159         if (!strcmp(info[Q_TYPE], "ANY"))
160           sprintf(buf, "Filesystem: %s\n", info[Q_FILESYS]);
161         else
162           sprintf(buf, "Filesystem: %-45s %s %s\n", info[Q_FILESYS],
163                   info[Q_TYPE], info[Q_NAME]);
164         AppendToLog(buf);
165         sprintf(buf, "Machine: %-20s Directory: %-15s\n",
166                 info[Q_MACHINE], info[Q_DIRECTORY]);
167         AppendToLog(buf);
168         sprintf(buf, "Quota: %s\n", info[Q_QUOTA]);
169         AppendToLog(buf);
170         sprintf(buf, MOD_FORMAT, info[Q_MODBY], info[Q_MODTIME], info[Q_MODWITH]);
171         AppendToLog(buf);
172         break;
173     case MM_SHOW_LIST:
174         (void) sprintf(buf, "List: %s\n", info[L_NAME]);
175         AppendToLog(buf);
176         (void) sprintf(buf, "Description: %s\n", info[L_DESC]);
177         AppendToLog(buf);
178         if ( atoi(info[L_MAILLIST]))
179           AppendToLog("This list is a mailing list.\n");
180         else
181           AppendToLog("This list is NOT a mailing list.\n");
182         if (atoi(info[L_GROUP])) {
183             (void) sprintf(buf,"This list is a Group and its ID number is %s\n",
184                            info[L_GID]);
185             AppendToLog(buf);
186         } else
187           AppendToLog("This list is NOT a Group.\n");
188         if (strcmp(info[L_ACE_TYPE],"NONE") == 0)
189           AppendToLog("This list has no Administrator, how strange?!\n");
190         else {
191             sprintf(buf, "The Administrator of this list is the %s: %s\n",
192                     info[L_ACE_TYPE], info[L_ACE_NAME]);
193             AppendToLog(buf);
194         }
195         (void) sprintf(buf, "This list is: %s, %s, and %s\n",
196                        atoi(info[L_ACTIVE]) ? "active" : "inactive",
197                        atoi(info[L_PUBLIC]) ? "public" : "private",
198                        atoi(info[L_HIDDEN]) ? "hidden" : "visible");
199         AppendToLog(buf);
200         sprintf(buf, MOD_FORMAT, info[L_MODBY], info[L_MODTIME], info[L_MODWITH]);
201         AppendToLog(buf);
202         break;
203     case MM_SHOW_MACH:
204         sprintf(buf, "Machine: %-30s Type: %s\n", info[M_NAME], info[M_TYPE]);
205         AppendToLog(buf);
206         sprintf(buf, MOD_FORMAT, info[M_MODBY], info[M_MODTIME], info[M_MODWITH]);
207         AppendToLog(buf);
208         break;
209     case MM_SHOW_CLUSTER:
210         sprintf(buf, "Cluster:     %s\n", info[C_NAME]);
211         AppendToLog(buf);
212         sprintf(buf, "Description: %s\n", info[C_DESCRIPT]);
213         AppendToLog(buf);
214         sprintf(buf, "Location:    %s\n", info[C_LOCATION]);
215         AppendToLog(buf);
216         sprintf(buf, MOD_FORMAT, info[C_MODBY], info[C_MODTIME], info[C_MODWITH]);
217         AppendToLog(buf);
218         break;
219     case MM_SHOW_CLDATA:
220         sprintf(buf, "Cluster: %-20s Label: %-15s Data: %s",
221                 info[CD_NAME], info[CD_LABEL], info[CD_DATA]);
222         AppendToLog(buf);
223         break;
224     case MM_SHOW_MCMAP:
225         sprintf(buf, "Machine: %-20s Cluster: %s", info[0], info[1]);
226         AppendToLog(buf);
227         break;
228     case MM_SHOW_MEMBERS:
229         if (argc == 2)
230           sprintf(buf, "%-9s %s", info[0], info[1]);
231         else
232           sprintf(buf, "%s", info[0]);
233         AppendToLog(buf);
234         break;
235     case MM_STATS:
236         sprintf(buf, "Table: %-20s Modified: %s\n", info[0], info[argc-1]);
237         AppendToLog(buf);
238         sprintf(buf, "  %-8D appends, %-8d updates, %-8d deletes",
239                 info[2], info[3], info[4]);
240         AppendToLog(buf);
241         break;
242     case MM_CLIENTS:
243         {
244             unsigned long host_address;
245             struct hostent *host_entry;
246
247             host_address = inet_addr(info[1]);
248             if (host_address != NULL) {
249                 host_entry = gethostbyaddr((char *)&host_address, 4, AF_INET);
250                 if (host_entry != NULL) {
251                     free(info[1]);
252                     info[1] = strsave(host_entry->h_name);
253                 }
254             }
255         }
256         sprintf(buf, "Principal %s on %s (%s)\n", info[0], info[1], info[2]);
257         AppendToLog(buf);
258         sprintf(buf, "  Connected at %s, client %s", info[3], info[4]);
259         AppendToLog(buf);
260         break;
261     case MM_SHOW_VALUE:
262         sprintf(buf, "Variable: %-20s Value: %s\n", stringval(form, 0),
263                 info[0]);
264         AppendToLog(buf);
265         break;
266     case MM_SHOW_ALIAS:
267         sprintf(buf, "Alias: %-20s Type: %-8s Value: %s\n",
268                 info[0], info[1], info[2]);
269         AppendToLog(buf);
270         break;
271     case MM_SHOW_HOST:
272         if (atoi(info[SH_HOSTERROR]))
273           sprintf(name, "Error %d: %s", atoi(info[SH_HOSTERROR]),
274                   info[SH_ERRMSG]);
275         else
276           strcpy(name, "No error");
277         sprintf(buf, "%s:%s   %s/%s/%s/%s/%s\n",
278                 info[SH_MACHINE], info[SH_SERVICE], 
279                 atoi(info[SH_ENABLE]) ? "Enabled" : "Disabled",
280                 atoi(info[SH_SUCCESS]) ? "Success" : "Failure",
281                 atoi(info[SH_INPROGRESS]) ? "InProgress" : "Idle",
282                 atoi(info[SH_OVERRIDE]) ? "Override" : "Normal", name);
283         AppendToLog(buf);
284         AppendToLog("Last Try             Last Success         Value1    Value2    Value3\n");
285         strcpy(name, atot(info[SH_LASTTRY]));
286         sprintf(buf, "%-20s %-20s %-9d %-9d %s\n", name,
287                 atot(info[SH_LASTSUCCESS]), atoi(info[SH_VALUE1]),
288                 atoi(info[SH_VALUE2]), info[SH_VALUE3]);
289         AppendToLog(buf);
290         sprintf(buf, MOD_FORMAT, info[SH_MODBY], info[SH_MODTIME],
291                 info[SH_MODWITH]);
292         AppendToLog(buf);
293         break;
294     case MM_SHOW_DQUOTA:
295         sprintf(buf, "The default quota is %s Kbytes.\n", info[0]);
296         AppendToLog(buf);
297         break;
298     case MM_SHOW_DCM:
299         if (argc == 2)
300           sprintf(buf, "%s:%s\n", info[0], info[1]);
301         else
302           sprintf(buf, "%s\n", info[0]);
303         AppendToLog(buf);
304         break;
305     case MM_SHOW_PCAP:
306         sprintf(buf, "Printer: %-35s Spool host: %s\n", info[PCAP_NAME],
307                 info[PCAP_SPOOL_HOST]);
308         AppendToLog(buf);
309         sprintf(buf, "Spool directory: %-27s Remote Printer Name: %s\n",
310                 info[PCAP_SPOOL_DIR], info[PCAP_RPRINTER]);
311         AppendToLog(buf);
312         sprintf(buf, "Authentication: %-3s Price/page: %-3s  Quota Server: %s\n",
313                 atoi(info[PCAP_AUTH]) ? "yes" : "no",
314                 info[PCAP_PRICE], info[PCAP_QSERVER]);
315         AppendToLog(buf);
316         sprintf(buf, "Comments: %s\n", info[PCAP_COMMENTS]);
317         AppendToLog(buf);
318         sprintf(buf, MOD_FORMAT, info[PCAP_MODBY], info[PCAP_MODTIME], 
319                 info[PCAP_MODWITH]);
320         AppendToLog(buf);
321         break;
322     case MM_SHOW_ZEPHYR:
323         sprintf(buf, "Zephyr class: %s\n", info[ZA_CLASS]);
324         AppendToLog(buf);
325         if (!strcmp("NONE", info[ZA_XMT_TYPE]))
326           name[0] = 0;
327         else
328           sprintf(name, "Name: %s", info[ZA_XMT_ID]);
329         sprintf(buf, "XMT ACL Type %s %s\n", info[ZA_XMT_TYPE], name);
330         AppendToLog(buf);
331         if (!strcmp("NONE", info[ZA_SUB_TYPE]))
332           name[0] = 0;
333         else
334           sprintf(name, "Name: %s", info[ZA_SUB_ID]);
335         sprintf(buf, "SUB ACL Type %s %s\n", info[ZA_SUB_TYPE], name);
336         AppendToLog(buf);
337         if (!strcmp("NONE", info[ZA_IWS_TYPE]))
338           name[0] = 0;
339         else
340           sprintf(name, "Name: %s", info[ZA_IWS_ID]);
341         sprintf(buf, "IWS ACL Type %s %s\n", info[ZA_IWS_TYPE], name);
342         AppendToLog(buf);
343         if (!strcmp("NONE", info[ZA_IUI_TYPE]))
344           name[0] = 0;
345         else
346           sprintf(name, "Name: %s", info[ZA_IUI_ID]);
347         sprintf(buf, "IUI ACL Type %s %s\n", info[ZA_IUI_TYPE], name);
348         AppendToLog(buf);
349         break;
350     case MM_SHOW_SERVICE:
351         sprintf(name, "%s:%s", info[SVC_ACE_TYPE], info[SVC_ACE_NAME]);
352         sprintf(buf, "Service: %-10s Type: %-8s   Owner: %-11s\n",
353                 info[SVC_SERVICE], info[SVC_TYPE], name);
354         AppendToLog(buf);
355         sprintf(buf, "Interval %s, Target:%s, Script:%s\n",
356                 unparse_interval(atoi(info[SVC_INTERVAL])), info[SVC_TARGET],
357                 info[SVC_SCRIPT]);
358         AppendToLog(buf);
359         strcpy(name, atot(info[SVC_DFGEN]));
360         sprintf(buf, "Generated %s; Last Checked %s\n", name,
361                 atot(info[SVC_DFCHECK]));
362         AppendToLog(buf);
363         if (atoi(info[SVC_HARDERROR]))
364           sprintf(name, "Error %d: %s", atoi(info[SVC_HARDERROR]),
365                   info[SVC_ERRMSG]);
366         else
367           strcpy(name, "No error");
368         sprintf(buf, "%s/%s/%s\n",
369                 atoi(info[SVC_ENABLE]) ? "Enabled" : "Disabled",
370                 atoi(info[SVC_INPROGRESS]) ? "InProgress" : "Idle", name);
371         AppendToLog(buf);
372         sprintf(buf, MOD_FORMAT, info[SVC_MODBY], info[SVC_MODTIME],
373                 info[SVC_MODWITH]);
374         AppendToLog(buf);
375         break;
376     case MM_SHOW_ACE_USE:
377         sprintf(buf, "%s: %s", info[0], info[1]);
378         AppendToLog(buf);
379         break;
380     case MM_SHOW_FS_ALIAS:
381         sprintf(buf, "Alias: %s; Real name %s\n", info[0], info[2]);
382         AppendToLog(buf);
383         break;
384     default:
385         for (i = 0; i < argc; i++) {
386             if (i != 0) AppendToLog(", ");
387             AppendToLog(info[i]);
388         }
389     }
390     AppendToLog("\n");
391     return(MR_CONT);
392 }
393
394
395 /* Display info about filesystem, doing FS groups & type MUL as well.
396  * frees info before returning.
397  */
398
399 ShowFilsys(info)
400 char **info;
401 {
402     int stat, i;
403     char **argv, buf[256];
404     struct save_queue *sq;
405
406     if (!strcmp(info[FS_TYPE], "FSGROUP") ||
407         !strcmp(info[FS_TYPE], "MUL")) {
408         sprintf(buf,"%20s %s: %s\n", " ", strcmp(info[FS_TYPE], "MUL") ?
409                 "Filesystem Group" : "Multiple Filesystem",
410                 info[FS_NAME]);
411         AppendToLog(buf);
412
413         sprintf(buf,"Comments: %s\n",info[FS_COMMENTS]);
414         AppendToLog(buf);
415         sprintf(buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME], 
416                 info[FS_MODWITH]);
417         AppendToLog(buf);
418         AppendToLog("Containing the filesystems (in order):\n");
419
420         sq = sq_create();
421         if ((stat = MoiraQuery("get_fsgroup_members", 1, &info[FS_NAME],
422                                save_info, (char *)sq)) != 0) {
423             if (stat == MR_NO_MATCH)
424               AppendToLog("    [no members]");
425             else
426               com_err(program_name, stat, "");
427         } else {
428             while (sq_get_data(sq, &argv)) {
429                 sprintf(buf, "  Filesystem: %-32s (sort key: %s)\n",
430                         argv[0], argv[1]);
431                 AppendToLog(buf);
432                 free(argv[0]);
433                 free(argv[1]);
434                 free(argv);
435             }
436             sq_destroy(sq);
437         }
438     } else {
439         sprintf(buf,"Filesystem: %s\n", info[FS_NAME]);
440         AppendToLog(buf);
441         sprintf(buf,"Type: %-40s Machine: %-15s\n",
442                 info[FS_TYPE], info[FS_MACHINE]);
443         AppendToLog(buf);
444         sprintf(buf, "Packname: %s\n", info[FS_PACK]);
445         AppendToLog(buf);
446         sprintf(buf,"Default Access: %-29s Mountpoint %s\n",
447                 info[FS_ACCESS], info[FS_M_POINT]);
448         AppendToLog(buf);
449         sprintf(buf,"Comments: %s\n",info[FS_COMMENTS]);
450         AppendToLog(buf);
451         sprintf(buf, "User Ownership: %-30s Group Ownership: %s\n",
452                 info[FS_OWNER], info[FS_OWNERS]);
453         AppendToLog(buf);
454         sprintf(buf, "Update fileserver: %-27s Locker Type: %s\n",
455                 atoi(info[FS_CREATE]) ? "On" : "Off", 
456                 info[FS_L_TYPE]);
457         AppendToLog(buf);
458         sprintf(buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME], 
459                 info[FS_MODWITH]);
460         AppendToLog(buf);
461     }
462     for (i = 0; i < FS_MODWITH; i++)
463       free(info[i]);
464     free(info);
465     AppendToLog("\n");
466 }
This page took 0.349116 seconds and 5 git commands to generate.