diff options
author | Håkon Nessjøen <haakon.nessjoen@gmail.com> | 2011-02-24 04:48:17 +0100 |
---|---|---|
committer | Håkon Nessjøen <haakon.nessjoen@gmail.com> | 2011-02-24 04:48:17 +0100 |
commit | f77147c698364fb38c226895556176abd61d3217 (patch) | |
tree | 3a1d70f87b760351b58fad2c639499a6436f48da | |
parent | 51073f378c05590539dabdbe61034ab548078e6e (diff) | |
download | MAC-Telnet-f77147c698364fb38c226895556176abd61d3217.tar.gz MAC-Telnet-f77147c698364fb38c226895556176abd61d3217.zip |
Fixed permissions of slave pts, so the connecting user has access to his own pts. Now applications like screen also works.
-rw-r--r-- | mactelnetd.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/mactelnetd.c b/mactelnetd.c index ef05bb7..c97d50a 100644 --- a/mactelnetd.c +++ b/mactelnetd.c @@ -433,6 +433,15 @@ static void user_login(struct mt_connection *curconn, struct mt_mactelnet_hdr *p if (slavename != NULL) { pid_t pid; struct stat sb; + struct passwd *user = (struct passwd *)getpwnam(curconn->username); + if (user == NULL) { + syslog(LOG_WARNING, "(%d) Login ok, but local user not accessible (%s).", curconn->seskey, curconn->username); + abort_connection(curconn, pkthdr, "Local user not accessible\r\n"); + return; + } + + /* Change the owner of the slave pts */ + chown(slavename, user->pw_uid, user->pw_gid); curconn->slavefd = open(slavename, O_RDWR); if (curconn->slavefd == -1) { @@ -444,12 +453,6 @@ static void user_login(struct mt_connection *curconn, struct mt_mactelnet_hdr *p if ((pid = fork()) == 0) { int i; - struct passwd *user = (struct passwd *)getpwnam(curconn->username); - if (user == NULL) { - syslog(LOG_WARNING, "(%d) Login ok, but local user not accessible (%s).", curconn->seskey, curconn->username); - abort_connection(curconn, pkthdr, "Local user not accessible\r\n"); - return; - } /* Add login information to utmp/wtmp */ uwtmp_login(curconn); |