]> andersk Git - moira.git/blob - clients/mmoira/display.c
missed a shifted mouse translation
[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\n",
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         break;
144     case MM_SHOW_QUOTA:
145         if (!strcmp(info[Q_TYPE], "ANY"))
146           sprintf(buf, "Filesystem: %s\n", info[Q_FILESYS]);
147         else
148           sprintf(buf, "Filesystem: %-45s %s %s\n", info[Q_FILESYS],
149                   info[Q_TYPE], info[Q_NAME]);
150         AppendToLog(buf);
151         sprintf(buf, "Machine: %-20s Directory: %-15s\n",
152                 info[Q_MACHINE], info[Q_DIRECTORY]);
153         AppendToLog(buf);
154         sprintf(buf, "Quota: %s\n", info[Q_QUOTA]);
155         AppendToLog(buf);
156         sprintf(buf, MOD_FORMAT, info[Q_MODBY], info[Q_MODTIME], info[Q_MODWITH]);
157         AppendToLog(buf);
158         break;
159     case MM_SHOW_LIST:
160         (void) sprintf(buf, "List: %s\n", info[L_NAME]);
161         AppendToLog(buf);
162         (void) sprintf(buf, "Description: %s\n", info[L_DESC]);
163         AppendToLog(buf);
164         if ( atoi(info[L_MAILLIST]))
165           AppendToLog("This list is a mailing list.\n");
166         else
167           AppendToLog("This list is NOT a mailing list.\n");
168         if (atoi(info[L_GROUP])) {
169             (void) sprintf(buf,"This list is a Group and its ID number is %s\n",
170                            info[L_GID]);
171             AppendToLog(buf);
172         } else
173           AppendToLog("This list is NOT a Group.\n");
174         if (strcmp(info[L_ACE_TYPE],"NONE") == 0)
175           AppendToLog("This list has no Administrator, how strange?!\n");
176         else {
177             sprintf(buf, "The Administrator of this list is the %s: %s\n",
178                     info[L_ACE_TYPE], info[L_ACE_NAME]);
179             AppendToLog(buf);
180         }
181         (void) sprintf(buf, "This list is: %s, %s, and %s\n",
182                        atoi(info[L_ACTIVE]) ? "active" : "inactive",
183                        atoi(info[L_PUBLIC]) ? "public" : "private",
184                        atoi(info[L_HIDDEN]) ? "hidden" : "visible");
185         AppendToLog(buf);
186         sprintf(buf, MOD_FORMAT, info[L_MODBY], info[L_MODTIME], info[L_MODWITH]);
187         AppendToLog(buf);
188         break;
189     case MM_SHOW_MACH:
190         sprintf(buf, "Machine: %-30s Type: %s\n", info[M_NAME], info[M_TYPE]);
191         AppendToLog(buf);
192         sprintf(buf, MOD_FORMAT, info[M_MODBY], info[M_MODTIME], info[M_MODWITH]);
193         AppendToLog(buf);
194         break;
195     case MM_SHOW_CLUSTER:
196         sprintf(buf, "Cluster:     %s\n", info[C_NAME]);
197         AppendToLog(buf);
198         sprintf(buf, "Description: %s\n", info[C_DESCRIPT]);
199         AppendToLog(buf);
200         sprintf(buf, "Location:    %s\n", info[C_LOCATION]);
201         AppendToLog(buf);
202         sprintf(buf, MOD_FORMAT, info[C_MODBY], info[C_MODTIME], info[C_MODWITH]);
203         AppendToLog(buf);
204         break;
205     case MM_SHOW_CLDATA:
206         sprintf(buf, "Cluster: %-20s Label: %-15s Data: %s\n",
207                 info[CD_NAME], info[CD_LABEL], info[CD_DATA]);
208         AppendToLog(buf);
209         break;
210     case MM_SHOW_MCMAP:
211         sprintf(buf, "Machine: %-20s Cluster: %s\n", info[0], info[1]);
212         AppendToLog(buf);
213         break;
214     case MM_SHOW_MEMBERS:
215         if (argc == 2)
216           sprintf(buf, "%-9s %s\n", info[0], info[1]);
217         else
218           sprintf(buf, "%s\n", info[0]);
219         AppendToLog(buf);
220         break;
221     case MM_STATS:
222         sprintf(buf, "Table: %-20s Modified: %s\n", info[0], info[5]);
223         AppendToLog(buf);
224         sprintf(buf, "  %-8D appends, %-8d updates, %-8d deletes\n",
225                 info[2], info[3], info[4]);
226         AppendToLog(buf);
227         break;
228     case MM_CLIENTS:
229         {
230             unsigned long host_address;
231             struct hostent *host_entry;
232
233             host_address = inet_addr(info[1]);
234             if (host_address != NULL) {
235                 host_entry = gethostbyaddr((char *)&host_address, 4, AF_INET);
236                 if (host_entry != NULL) {
237                     free(info[1]);
238                     info[1] = strsave(host_entry->h_name);
239                 }
240             }
241         }
242         sprintf(buf, "Principal %s on %s (%s)\n", info[0], info[1], info[2]);
243         AppendToLog(buf);
244         sprintf(buf, "  Connected at %s, client %s\n", info[3], info[4]);
245         AppendToLog(buf);
246         break;
247     case MM_SHOW_VALUE:
248         sprintf(buf, "Variable: %-20s Value: %s\n", stringval(form, 0),
249                 info[0]);
250         AppendToLog(buf);
251         break;
252     case MM_SHOW_ALIAS:
253         sprintf(buf, "Alias: %-20s Type: %-8s Value: %s\n",
254                 info[0], info[1], info[2]);
255         AppendToLog(buf);
256         break;
257     case MM_SHOW_HOST:
258         sprintf(buf, "%s:%s  mod by %s on %s with %s\n", info[SH_MACHINE],
259                 info[SH_SERVICE], info[SH_MODBY], info[SH_MODTIME],
260                 info[SH_MODWITH]);
261         AppendToLog(buf);
262         if (atoi(info[SH_HOSTERROR]))
263           sprintf(name, "Error %d: %s", atoi(info[SH_HOSTERROR]),
264                   info[SH_ERRMSG]);
265         else
266           strcpy(name, "No error");
267         sprintf(buf, "  %s/%s/%s/%s/%s\n",
268                 atoi(info[SH_ENABLE]) ? "Enabled" : "Disabled",
269                 atoi(info[SH_SUCCESS]) ? "Success" : "Failure",
270                 atoi(info[SH_INPROGRESS]) ? "InProgress" : "Idle",
271                 atoi(info[SH_OVERRIDE]) ? "Override" : "Normal", name);
272         AppendToLog(buf);
273         AppendToLog("  Last Try             Last Success         Value1    Value2    Value3\n");
274         strcpy(name, atot(info[SH_LASTTRY]));
275         sprintf(buf, "  %-20s %-20s %-9d %-9d %s\n", name,
276                 atot(info[SH_LASTSUCCESS]), atoi(info[SH_VALUE1]),
277                 atoi(info[SH_VALUE2]), info[SH_VALUE3]);
278         AppendToLog(buf);
279         break;
280     case MM_SHOW_DQUOTA:
281         sprintf(buf, "The default quota is %s Kbytes.\n", info[0]);
282         AppendToLog(buf);
283         break;
284     case MM_SHOW_DCM:
285         if (argc == 2)
286           sprintf(buf, "%s:%s\n", info[0], info[1]);
287         else
288           sprintf(buf, "%s\n", info[0]);
289         AppendToLog(buf);
290         break;
291     case MM_SHOW_PCAP:
292         sprintf(buf, "Printer: %-35s Spool host: %s\n", info[PCAP_NAME],
293                 info[PCAP_SPOOL_HOST]);
294         AppendToLog(buf);
295         sprintf(buf, "Spool directory: %-27s Remote Printer Name: %s\n",
296                 info[PCAP_SPOOL_DIR], info[PCAP_RPRINTER]);
297         AppendToLog(buf);
298         sprintf(buf, "Authentication: %-3s Price/page: %-3s  Quota Server: %s\n",
299                 atoi(info[PCAP_AUTH]) ? "yes" : "no",
300                 info[PCAP_PRICE], info[PCAP_QSERVER]);
301         AppendToLog(buf);
302         sprintf(buf, "Comments: %s\n", info[PCAP_COMMENTS]);
303         AppendToLog(buf);
304         sprintf(buf, MOD_FORMAT, info[PCAP_MODBY], info[PCAP_MODTIME], 
305                 info[PCAP_MODWITH]);
306         AppendToLog(buf);
307         break;
308     case MM_SHOW_ZEPHYR:
309         sprintf(buf, "Zephyr class: %s\n", info[ZA_CLASS]);
310         AppendToLog(buf);
311         if (!strcmp("NONE", info[ZA_XMT_TYPE]))
312           name[0] = 0;
313         else
314           sprintf(name, "Name: %s", info[ZA_XMT_ID]);
315         sprintf(buf, "XMT ACL Type %s %s\n", info[ZA_XMT_TYPE], name);
316         AppendToLog(buf);
317         if (!strcmp("NONE", info[ZA_SUB_TYPE]))
318           name[0] = 0;
319         else
320           sprintf(name, "Name: %s", info[ZA_SUB_ID]);
321         sprintf(buf, "SUB ACL Type %s %s\n", info[ZA_SUB_TYPE], name);
322         AppendToLog(buf);
323         if (!strcmp("NONE", info[ZA_IWS_TYPE]))
324           name[0] = 0;
325         else
326           sprintf(name, "Name: %s", info[ZA_IWS_ID]);
327         sprintf(buf, "IWS ACL Type %s %s\n", info[ZA_IWS_TYPE], name);
328         AppendToLog(buf);
329         if (!strcmp("NONE", info[ZA_IUI_TYPE]))
330           name[0] = 0;
331         else
332           sprintf(name, "Name: %s", info[ZA_IUI_ID]);
333         sprintf(buf, "IUI ACL Type %s %s\n", info[ZA_IUI_TYPE], name);
334         AppendToLog(buf);
335         break;
336     case MM_SHOW_SERVICE:
337         AppendToLog("Name       Type     Owner       Modified\n");
338         sprintf(name, "%s:%s", info[SVC_ACE_TYPE], info[SVC_ACE_NAME]);
339         sprintf(buf, "%-10s %-8s %-11s by %s on %s with %s\n",
340                 info[SVC_SERVICE], info[SVC_TYPE], name, info[SVC_MODBY],
341                 info[SVC_MODTIME], info[SVC_MODWITH]);
342         AppendToLog(buf);
343         sprintf(buf, "  Interval %s, Target:%s, Script:%s\n",
344                 unparse_interval(atoi(info[SVC_INTERVAL])), info[SVC_TARGET],
345                 info[SVC_SCRIPT]);
346         AppendToLog(buf);
347         strcpy(name, atot(info[SVC_DFGEN]));
348         sprintf(buf, "  Generated %s; Last Checked %s\n", name,
349                 atot(info[SVC_DFCHECK]));
350         AppendToLog(buf);
351         if (atoi(info[SVC_HARDERROR]))
352           sprintf(name, "Error %d: %s", atoi(info[SVC_HARDERROR]),
353                   info[SVC_ERRMSG]);
354         else
355           strcpy(name, "No error");
356         sprintf(buf, "  %s/%s/%s\n",
357                 atoi(info[SVC_ENABLE]) ? "Enabled" : "Disabled",
358                 atoi(info[SVC_INPROGRESS]) ? "InProgress" : "Idle", name);
359         AppendToLog(buf);
360         break;
361     case MM_SHOW_ACE_USE:
362         sprintf(buf, "%s: %s\n", info[0], info[1]);
363         AppendToLog(buf);
364         break;
365     default:
366         for (i = 0; i < argc; i++) {
367             if (i != 0) AppendToLog(", ");
368             AppendToLog(info[i]);
369         }
370         AppendToLog("\n");
371     }
372     return(MR_CONT);
373 }
374
375
376 /* Display info about filesystem, doing FS groups & type MUL as well.
377  * frees info before returning.
378  */
379
380 ShowFilsys(info)
381 char **info;
382 {
383     int stat, i;
384     char **argv, buf[256];
385     struct save_queue *sq;
386
387     if (!strcmp(info[FS_TYPE], "FSGROUP") ||
388         !strcmp(info[FS_TYPE], "MUL")) {
389         sprintf(buf,"%20s %s: %s\n", " ", strcmp(info[FS_TYPE], "MUL") ?
390                 "Filesystem Group" : "Multiple Filesystem",
391                 info[FS_NAME]);
392         AppendToLog(buf);
393
394         sprintf(buf,"Comments: %s\n",info[FS_COMMENTS]);
395         AppendToLog(buf);
396         sprintf(buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME], 
397                 info[FS_MODWITH]);
398         AppendToLog(buf);
399         AppendToLog("Containing the filesystems (in order):\n");
400
401         sq = sq_create();
402         if ((stat = MoiraQuery("get_fsgroup_members", 1, &info[FS_NAME],
403                                save_info, (char *)sq)) != 0) {
404             if (stat == MR_NO_MATCH)
405               AppendToLog("    [no members]");
406             else
407               com_err(program_name, stat, "");
408         } else {
409             while (sq_get_data(sq, &argv)) {
410                 sprintf(buf, "  Filesystem: %-32s (sort key: %s)\n",
411                         argv[0], argv[1]);
412                 AppendToLog(buf);
413                 free(argv[0]);
414                 free(argv[1]);
415                 free(argv);
416             }
417             sq_destroy(sq);
418         }
419     } else {
420         sprintf(buf,"Filesystem: %s\n", info[FS_NAME]);
421         AppendToLog(buf);
422         sprintf(buf,"Type: %-40s Machine: %-15s\n",
423                 info[FS_TYPE], info[FS_MACHINE]);
424         AppendToLog(buf);
425         sprintf(buf, "Packname: %s\n", info[FS_PACK]);
426         AppendToLog(buf);
427         sprintf(buf,"Default Access: %-29s Mountpoint %s\n",
428                 info[FS_ACCESS], info[FS_M_POINT]);
429         AppendToLog(buf);
430         sprintf(buf,"Comments: %s\n",info[FS_COMMENTS]);
431         AppendToLog(buf);
432         sprintf(buf, "User Ownership: %-30s Group Ownership: %s\n",
433                 info[FS_OWNER], info[FS_OWNERS]);
434         AppendToLog(buf);
435         sprintf(buf, "Update fileserver: %-27s Locker Type: %s\n",
436                 atoi(info[FS_CREATE]) ? "On" : "Off", 
437                 info[FS_L_TYPE]);
438         AppendToLog(buf);
439         sprintf(buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME], 
440                 info[FS_MODWITH]);
441         AppendToLog(buf);
442     }
443     for (i = 0; info[i]; i++)
444       free(info[i]);
445     free(info);
446 }
This page took 0.071398 seconds and 5 git commands to generate.