xref: /titanic_41/usr/src/cmd/rexd/where_main.c (revision de5d74c22760a6d2cefd94d0e7f0fd87214fb71f)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  *
22  * Copyright 1992 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #pragma ident	"%Z%%M%	%I%	%E% SMI"
27 
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <unistd.h>
31 
32 #include <sys/param.h>
33 
34 static char **Argv;		/* saved argument vector (for ps) */
35 static char *LastArgv;		/* saved end-of-argument vector */
36 
37 int child = 0;			/* pid of the executed process */
38 int ChildDied = 0;		/* true when above is valid */
39 int HasHelper = 0;		/* must kill helpers (interactive mode) */
40 
41 
42 int	Debug = 0;
43 
44 
45 void
46 main(argc, argv)
47 	char **argv;
48 {
49 	char host[MAXPATHLEN];
50 	char fsname[MAXPATHLEN];
51 	char within[MAXPATHLEN];
52 	char *pn;
53 	int many;
54 
55 	/*
56 	 * argv start and extent for setproctitle()
57 	 */
58 	Argv = argv;
59 	if (argc > 0)
60 		LastArgv = argv[argc-1] + strlen(argv[argc-1]);
61 	else
62 		LastArgv = NULL;
63 
64 	many = argc > 2;
65 	while (--argc > 0) {
66 
67 		if ( strcmp( "-d", *argv ) == 0 )
68 		{
69 			Debug = 1;
70 			argv++;
71 			continue;
72 		}
73 		pn = *++argv;
74 		where(pn, host, fsname, within);
75 		if (many)
76 			printf("%s:\t", pn);
77 		printf("%s:%s%s\n", host, fsname, within);
78 	}
79 	exit(0);
80 	/* NOTREACHED */
81 }
82 
83 /*
84  *  SETPROCTITLE -- set the title of this process for "ps"
85  *
86  *	Does nothing if there were not enough arguments on the command
87  * 	line for the information.
88  *
89  *	Side Effects:
90  *		Clobbers argv[] of our main procedure.
91  */
92 void
93 setproctitle(user, host)
94 	char *user, *host;
95 {
96 	register char *tohere;
97 
98 	tohere = Argv[0];
99 	if (LastArgv == NULL ||
100 			strlen(user)+strlen(host)+3 > (LastArgv - tohere))
101 		return;
102 	*tohere++ = '-';		/* So ps prints (rpc.rexd)	*/
103 	sprintf(tohere, "%s@%s", user, host);
104 	while (*tohere++)		/* Skip to end of printf output	*/
105 		;
106 	while (tohere < LastArgv)	/* Avoid confusing ps		*/
107 		*tohere++ = ' ';
108 }
109