]> andersk Git - moira.git/blame - clients/mmoira/display.c
ifdef on GDSS
[moira.git] / clients / mmoira / display.c
CommitLineData
83d3aa0c 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"
11a616d5 13#ifdef GDSS
14#include <des.h>
15#include <krb.h>
16#include <gdss.h>
17#endif /* GDSS */
83d3aa0c 18
19
11a616d5 20static 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
25char *atot(itime)
26char *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
40char *unparse_interval(i)
41int i;
42{
43 static char uibuf[32];
44
45 sprintf(uibuf, "%d hrs %d mins", i / 60, i % 60);
46 return(&uibuf[0]);
47}
83d3aa0c 48
49
b2d21e59 50static save_info(argc, argv, sq)
51int argc;
52char **argv;
53struct save_queue *sq;
54{
55 sq_save_args(argc, argv, sq);
11a616d5 56 return(MR_CONT);
b2d21e59 57}
58
83d3aa0c 59
60int DisplayCallback(argc, info, form)
61int argc;
62char **info;
63EntryForm *form;
64{
65 char buf[1024], name[128];
11a616d5 66#ifdef GDSS
67 SigInfo si;
68#endif
69 int i, status;
83d3aa0c 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);
11a616d5 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]);
83d3aa0c 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:
11a616d5 109 sprintf(buf, "Finger information for user: %s\n", info[F_NAME]);
83d3aa0c 110 AppendToLog(buf);
111 sprintf(buf, "Login name: %-27s In real life: %s\n", info[F_NAME],
112 info[F_FULLNAME]);
113 AppendToLog(buf);
b2d21e59 114 sprintf(buf, "Nickname: %-29s Department: %s\n", info[F_NICKNAME],
115 info[F_MIT_DEPT]);
116 AppendToLog(buf);
83d3aa0c 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:
11a616d5 128 sprintf(buf, "Post Office information for user: %s\n", info[PO_NAME]);
b2d21e59 129 AppendToLog(buf);
11a616d5 130 sprintf(buf, "Type: %-8s Box: %s\n", info[PO_TYPE], info[PO_BOX]);
83d3aa0c 131 AppendToLog(buf);
132 sprintf(buf, MOD_FORMAT, info[4], info[3], info[5]);
133 AppendToLog(buf);
134 break;
135 case MM_SHOW_KRBMAP:
a7f0ee07 136 sprintf(buf, "Kerberos mapping: User %-9s Principal %s",
83d3aa0c 137 info[KMAP_USER], info[KMAP_PRINCIPAL]);
138 AppendToLog(buf);
139 break;
140 case MM_SHOW_FILSYS:
141 case MM_SHOW_FSGROUP:
11a616d5 142 sq_save_args(argc, info, form->extrastuff);
28283b10 143 return(MR_CONT);
83d3aa0c 144 break;
72a39330 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;
83d3aa0c 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:
b2d21e59 174 (void) sprintf(buf, "List: %s\n", info[L_NAME]);
83d3aa0c 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:
a7f0ee07 220 sprintf(buf, "Cluster: %-20s Label: %-15s Data: %s",
83d3aa0c 221 info[CD_NAME], info[CD_LABEL], info[CD_DATA]);
222 AppendToLog(buf);
223 break;
b2d21e59 224 case MM_SHOW_MCMAP:
a7f0ee07 225 sprintf(buf, "Machine: %-20s Cluster: %s", info[0], info[1]);
b2d21e59 226 AppendToLog(buf);
227 break;
83d3aa0c 228 case MM_SHOW_MEMBERS:
229 if (argc == 2)
a7f0ee07 230 sprintf(buf, "%-9s %s", info[0], info[1]);
83d3aa0c 231 else
a7f0ee07 232 sprintf(buf, "%s", info[0]);
83d3aa0c 233 AppendToLog(buf);
234 break;
235 case MM_STATS:
f26455e2 236 sprintf(buf, "Table: %-20s Modified: %s\n", info[0], info[argc-1]);
83d3aa0c 237 AppendToLog(buf);
a7f0ee07 238 sprintf(buf, " %-8D appends, %-8d updates, %-8d deletes",
83d3aa0c 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);
a7f0ee07 258 sprintf(buf, " Connected at %s, client %s", info[3], info[4]);
83d3aa0c 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:
83d3aa0c 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");
28283b10 277 sprintf(buf, "%s:%s %s/%s/%s/%s/%s\n",
278 info[SH_MACHINE], info[SH_SERVICE],
83d3aa0c 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);
28283b10 284 AppendToLog("Last Try Last Success Value1 Value2 Value3\n");
83d3aa0c 285 strcpy(name, atot(info[SH_LASTTRY]));
28283b10 286 sprintf(buf, "%-20s %-20s %-9d %-9d %s\n", name,
83d3aa0c 287 atot(info[SH_LASTSUCCESS]), atoi(info[SH_VALUE1]),
288 atoi(info[SH_VALUE2]), info[SH_VALUE3]);
289 AppendToLog(buf);
28283b10 290 sprintf(buf, MOD_FORMAT, info[SH_MODBY], info[SH_MODTIME],
291 info[SH_MODWITH]);
292 AppendToLog(buf);
83d3aa0c 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;
b2d21e59 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;
11a616d5 350 case MM_SHOW_SERVICE:
11a616d5 351 sprintf(name, "%s:%s", info[SVC_ACE_TYPE], info[SVC_ACE_NAME]);
d322239a 352 sprintf(buf, "Service: %-10s Type: %-8s Owner: %-11s\n",
353 info[SVC_SERVICE], info[SVC_TYPE], name);
11a616d5 354 AppendToLog(buf);
d322239a 355 sprintf(buf, "Interval %s, Target:%s, Script:%s\n",
11a616d5 356 unparse_interval(atoi(info[SVC_INTERVAL])), info[SVC_TARGET],
357 info[SVC_SCRIPT]);
358 AppendToLog(buf);
359 strcpy(name, atot(info[SVC_DFGEN]));
d322239a 360 sprintf(buf, "Generated %s; Last Checked %s\n", name,
11a616d5 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");
d322239a 368 sprintf(buf, "%s/%s/%s\n",
11a616d5 369 atoi(info[SVC_ENABLE]) ? "Enabled" : "Disabled",
370 atoi(info[SVC_INPROGRESS]) ? "InProgress" : "Idle", name);
371 AppendToLog(buf);
d322239a 372 sprintf(buf, MOD_FORMAT, info[SVC_MODBY], info[SVC_MODTIME],
373 info[SVC_MODWITH]);
374 AppendToLog(buf);
11a616d5 375 break;
376 case MM_SHOW_ACE_USE:
a7f0ee07 377 sprintf(buf, "%s: %s", info[0], info[1]);
11a616d5 378 AppendToLog(buf);
379 break;
d322239a 380 case MM_SHOW_FS_ALIAS:
381 sprintf(buf, "Alias: %s; Real name %s\n", info[0], info[2]);
382 AppendToLog(buf);
383 break;
83d3aa0c 384 default:
385 for (i = 0; i < argc; i++) {
386 if (i != 0) AppendToLog(", ");
387 AppendToLog(info[i]);
388 }
83d3aa0c 389 }
28283b10 390 AppendToLog("\n");
83d3aa0c 391 return(MR_CONT);
392}
11a616d5 393
394
395/* Display info about filesystem, doing FS groups & type MUL as well.
396 * frees info before returning.
397 */
398
399ShowFilsys(info)
400char **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 }
28283b10 462 for (i = 0; i < FS_MODWITH; i++)
11a616d5 463 free(info[i]);
464 free(info);
28283b10 465 AppendToLog("\n");
11a616d5 466}
This page took 0.127541 seconds and 5 git commands to generate.