diff options
author | Mark Eichin <eichin@mit.edu> | 1996-11-11 21:16:55 +0000 |
---|---|---|
committer | Mark Eichin <eichin@mit.edu> | 1996-11-11 21:16:55 +0000 |
commit | fc669be13321646e24944f233fd90f614d97480a (patch) | |
tree | c8a1bb374c673839d24a6b00e3ca4320293680d2 /src/appl/bsd/krshd.c | |
parent | d84d78771aef558c3bcff8dcb85c983a2a0e9735 (diff) | |
download | krb5-fc669be13321646e24944f233fd90f614d97480a.tar.gz krb5-fc669be13321646e24944f233fd90f614d97480a.tar.xz krb5-fc669be13321646e24944f233fd90f614d97480a.zip |
* Makefile.in, configure.in, krshd.c, v4rcp.M, v4rcp.c: added
kerberos V4 rcp -x support from Cygnus tree.
* Makefile.in, configure.in: added support for not building v4rcp
if --without-krb4 is used.
(original ChangeLogs copied as well.)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@9370 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/appl/bsd/krshd.c')
-rw-r--r-- | src/appl/bsd/krshd.c | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/src/appl/bsd/krshd.c b/src/appl/bsd/krshd.c index fdbaba8dc..156e8ffac 100644 --- a/src/appl/bsd/krshd.c +++ b/src/appl/bsd/krshd.c @@ -207,6 +207,7 @@ char *progname; /* Leave room for 4 environment variables to be passed */ #define MAXENV 4 +#define SAVEENVPAD 0,0,0,0 /* padding for envinit slots */ char *save_env[MAXENV]; int num_env = 0; @@ -444,25 +445,29 @@ char shell[64] = "SHELL="; char term[64] = "TERM=network"; char path_rest[] = RPATH; +char remote_addr[64]; /* = "KRB5REMOTEADDR=" */ +char local_addr[64]; /* = "KRB5LOCALADDR=" */ +#define ADDRPAD 0,0 /* remoteaddr, localaddr */ +#define KRBPAD 0 /* KRB5CCNAME, optional */ + /* The following include extra space for TZ and MAXENV pointers... */ +#define COMMONVARS homedir, shell, 0/*path*/, username, term #ifdef CRAY -char *envinit[] = -{homedir, shell, 0, username, "TZ=GMT0", tmpdir, term, 0, 0, 0, 0, 0, 0}; -#define TZENV 4 -#define TMPDIRENV 5 +char *envinit[] = +{COMMONVARS, "TZ=GMT0", tmpdir, SAVEENVPAD, KRBPAD, ADDRPAD, 0}; +#define TMPDIRENV 6 char *getenv(); #else /* CRAY */ #ifdef KERBEROS -char *envinit[] = -{homedir, shell, 0, username, term, 0, 0, 0, 0, 0, 0, 0}; -#define TZENV 5 +char *envinit[] = +{COMMONVARS, 0/*tz*/, SAVEENVPAD, KRBPAD, ADDRPAD, 0}; #else /* KERBEROS */ -char *envinit[] = -{homedir, shell, 0, username, term, 0, 0, 0, 0, 0, 0}; -#define TZENV 5 +char *envinit[] = +{COMMONVARS, 0/*tz*/, SAVEENVPAD, ADDRPAD, 0}; #endif /* KERBEROS */ #endif /* CRAY */ +#define TZENV 5 #define PATHENV 2 extern char **environ; @@ -541,6 +546,7 @@ void doit(f, fromp) char buf[RSHD_BUFSIZ], sig; krb5_sigtype cleanup(); struct sockaddr_in fromaddr; + struct sockaddr_in localaddr; int non_privileged = 0; #ifdef POSIX_SIGNALS struct sigaction sa; @@ -561,6 +567,13 @@ void doit(f, fromp) #endif #endif /* IP_TOS */ + { + int sin_len = sizeof (struct sockaddr_in); + if (getsockname(f, &localaddr, &sin_len) < 0) { + perror("getsockname"); + exit(1); + } + } fromaddr = *fromp; #ifdef POSIX_SIGNALS @@ -1279,6 +1292,18 @@ if(port) } } + { + int i; + /* these two are covered by ADDRPAD */ + sprintf(local_addr, "KRB5LOCALADDR=%s", inet_ntoa(localaddr.sin_addr)); + for (i = 0; envinit[i]; i++); + envinit[i] =local_addr; + + sprintf(remote_addr, "KRB5REMOTEADDR=%s", inet_ntoa(fromp->sin_addr)); + for (; envinit[i]; i++); + envinit[i] =remote_addr; + } + /* If we do anything else, make sure there is space in the array. */ for(cnt=0; cnt < num_env; cnt++) { @@ -1324,7 +1349,11 @@ if(port) strcpy((char *) cmdbuf + offst, kprogdir); cp = copy + 3 + offst; - strcat(cmdbuf, "/rcp"); + if (auth_sys == KRB5_RECVAUTH_V4) { + strcat(cmdbuf, "/v4rcp"); + } else { + strcat(cmdbuf, "/rcp"); + } if (stat((char *)cmdbuf + offst, &s) >= 0) strcat(cmdbuf, cp); else |