summaryrefslogtreecommitdiff
path: root/libexec/rexecd
diff options
context:
space:
mode:
authoritojun <itojun@NetBSD.org>2002-06-05 23:05:34 +0000
committeritojun <itojun@NetBSD.org>2002-06-05 23:05:34 +0000
commitabec56361f8f8200e58d2a6703c024bfa8038162 (patch)
treeb7dab506386cb3a36652c70a920cf19f0a9bae77 /libexec/rexecd
parent71f7cef9335d9aa22f0b2cccab472b2062f7ce6c (diff)
make it AF independent as much as possible
Diffstat (limited to 'libexec/rexecd')
-rw-r--r--libexec/rexecd/rexecd.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/libexec/rexecd/rexecd.c b/libexec/rexecd/rexecd.c
index 745ada9cbe0..ea551f41c90 100644
--- a/libexec/rexecd/rexecd.c
+++ b/libexec/rexecd/rexecd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rexecd.c,v 1.10 2002/05/26 00:02:08 wiz Exp $ */
+/* $NetBSD: rexecd.c,v 1.11 2002/06/05 23:05:34 itojun Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -40,7 +40,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
#if 0
static char sccsid[] = "from: @(#)rexecd.c 8.1 (Berkeley) 6/4/93";
#else
-__RCSID("$NetBSD: rexecd.c,v 1.10 2002/05/26 00:02:08 wiz Exp $");
+__RCSID("$NetBSD: rexecd.c,v 1.11 2002/06/05 23:05:34 itojun Exp $");
#endif
#endif /* not lint */
@@ -68,7 +68,7 @@ __RCSID("$NetBSD: rexecd.c,v 1.10 2002/05/26 00:02:08 wiz Exp $");
void error __P((const char *, ...))
__attribute__((__format__(__printf__, 1, 2)));
int main __P((int, char **));
-void doit __P((int, struct sockaddr_in *));
+void doit __P((int, struct sockaddr *));
void getstr __P((char *, int, char *));
char username[32 + 1] = "USER=";
@@ -78,7 +78,6 @@ char path[sizeof(_PATH_DEFPATH) + sizeof("PATH=")] = "PATH=";
char *envinit[] = { homedir, shell, path, username, 0 };
char **environ;
int log;
-struct sockaddr_in asin = { AF_INET };
/*
* remote execute server:
@@ -92,7 +91,7 @@ main(argc, argv)
int argc;
char **argv;
{
- struct sockaddr_in from;
+ struct sockaddr_storage from;
int fromlen, ch;
while ((ch = getopt(argc, argv, "l")) != -1)
@@ -109,14 +108,14 @@ main(argc, argv)
if (getpeername(0, (struct sockaddr *)&from, &fromlen) < 0)
err(1, "getpeername");
- doit(0, &from);
+ doit(0, (struct sockaddr *)&from);
exit(0);
}
void
doit(f, fromp)
int f;
- struct sockaddr_in *fromp;
+ struct sockaddr *fromp;
{
struct pollfd fds[2];
char cmdbuf[NCARGS+1], *namep;
@@ -151,20 +150,25 @@ doit(f, fromp)
}
(void)alarm(0);
if (port != 0) {
- s = socket(AF_INET, SOCK_STREAM, 0);
+ s = socket(fromp->sa_family, SOCK_STREAM, 0);
if (s < 0) {
if (log)
syslog(LOG_ERR, "socket: %m");
exit(1);
}
- if (bind(s, (struct sockaddr *)&asin, sizeof (asin)) < 0) {
- if (log)
- syslog(LOG_ERR, "bind: %m");
+ (void)alarm(60);
+ switch (fromp->sa_family) {
+ case AF_INET:
+ ((struct sockaddr_in *)fromp)->sin_port = htons(port);
+ break;
+ case AF_INET6:
+ ((struct sockaddr_in6 *)fromp)->sin6_port = htons(port);
+ break;
+ default:
+ syslog(LOG_ERR, "unsupported address family");
exit(1);
}
- (void)alarm(60);
- fromp->sin_port = htons(port);
- if (connect(s, (struct sockaddr *)fromp, sizeof (*fromp)) < 0) {
+ if (connect(s, (struct sockaddr *)fromp, fromp->sa_len) < 0) {
if (log)
syslog(LOG_ERR, "connect: %m");
exit(1);