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