summaryrefslogtreecommitdiff
path: root/sshpty.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2009-02-12 12:19:20 +1100
committerDamien Miller <djm@mindrot.org>2009-02-12 12:19:20 +1100
commit2de762456e8cdb92b85c1e573cbf2b4b70eee847 (patch)
tree3c24fb62c3391fdbdb684390b563d97426287e90 /sshpty.c
parent642ebe5b51112862f4c041abf6064fe711f56009 (diff)
- (djm) [sshpty.c] bz#1419: OSX uses cloning ptys that automagically
set ownership and modes, so avoid explicitly setting them
Diffstat (limited to 'sshpty.c')
-rw-r--r--sshpty.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sshpty.c b/sshpty.c
index 5a0d1a7ad..bbbc0fefe 100644
--- a/sshpty.c
+++ b/sshpty.c
@@ -46,6 +46,13 @@
46#define O_NOCTTY 0 46#define O_NOCTTY 0
47#endif 47#endif
48 48
49#ifdef __APPLE__
50# include <AvailabilityMacros.h>
51# if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
52# define __APPLE_PRIVPTY__
53# endif
54#endif
55
49/* 56/*
50 * Allocates and opens a pty. Returns 0 if no pty could be allocated, or 57 * Allocates and opens a pty. Returns 0 if no pty could be allocated, or
51 * nonzero if a pty was successfully allocated. On success, open file 58 * nonzero if a pty was successfully allocated. On success, open file
@@ -78,10 +85,12 @@ pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, size_t namebuflen)
78void 85void
79pty_release(const char *tty) 86pty_release(const char *tty)
80{ 87{
88#ifndef __APPLE_PRIVPTY__
81 if (chown(tty, (uid_t) 0, (gid_t) 0) < 0) 89 if (chown(tty, (uid_t) 0, (gid_t) 0) < 0)
82 error("chown %.100s 0 0 failed: %.100s", tty, strerror(errno)); 90 error("chown %.100s 0 0 failed: %.100s", tty, strerror(errno));
83 if (chmod(tty, (mode_t) 0666) < 0) 91 if (chmod(tty, (mode_t) 0666) < 0)
84 error("chmod %.100s 0666 failed: %.100s", tty, strerror(errno)); 92 error("chmod %.100s 0666 failed: %.100s", tty, strerror(errno));
93#endif /* __APPLE_PRIVPTY__ */
85} 94}
86 95
87/* Makes the tty the process's controlling tty and sets it to sane modes. */ 96/* Makes the tty the process's controlling tty and sets it to sane modes. */