summaryrefslogtreecommitdiff
path: root/libexec/rexecd/rexecd.c
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/rexecd/rexecd.c')
-rw-r--r--libexec/rexecd/rexecd.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/libexec/rexecd/rexecd.c b/libexec/rexecd/rexecd.c
index 914e051ed916..ff2704bafe75 100644
--- a/libexec/rexecd/rexecd.c
+++ b/libexec/rexecd/rexecd.c
@@ -98,7 +98,13 @@ doit(f, fromp)
struct sockaddr_in *fromp;
{
char cmdbuf[NCARGS+1], *cp, *namep;
+#ifdef SKEY
+ char *skey_crypt();
+ int permit_passwd = authfile(inet_ntoa(fromp->sin_addr));
+ char user[16], pass[100];
+#else /* SKEY */
char user[16], pass[16];
+#endif /* SKEY */
struct passwd *pwd;
int s;
u_short port;
@@ -154,7 +160,11 @@ doit(f, fromp)
}
endpwent();
if (*pwd->pw_passwd != '\0') {
+#ifdef SKEY
+ namep = skey_crypt(pass, pwd->pw_passwd, pwd, permit_passwd);
+#else /* SKEY */
namep = crypt(pass, pwd->pw_passwd);
+#endif /* SKEY */
if (strcmp(namep, pwd->pw_passwd)) {
error("Password incorrect.\n");
exit(1);
@@ -208,6 +218,7 @@ doit(f, fromp)
pwd->pw_shell = _PATH_BSHELL;
if (f > 2)
(void) close(f);
+ (void) setlogin(pwd->pw_name);
(void) setgid((gid_t)pwd->pw_gid);
initgroups(pwd->pw_name, pwd->pw_gid);
(void) setuid((uid_t)pwd->pw_uid);