summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHåkon Nessjøen <haakon.nessjoen@gmail.com>2011-02-24 04:48:17 +0100
committerHåkon Nessjøen <haakon.nessjoen@gmail.com>2011-02-24 04:48:17 +0100
commitf77147c698364fb38c226895556176abd61d3217 (patch)
tree3a1d70f87b760351b58fad2c639499a6436f48da
parent51073f378c05590539dabdbe61034ab548078e6e (diff)
downloadMAC-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.c15
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);