X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/a75f53605e3e5592c6c6a2c979a7a43db7db481d..HEAD:/sshpty.c diff --git a/sshpty.c b/sshpty.c index 6b0ad1f2..bbbc0fef 100644 --- a/sshpty.c +++ b/sshpty.c @@ -1,3 +1,4 @@ +/* $OpenBSD: sshpty.c,v 1.28 2007/09/11 23:49:09 stevesk Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -12,15 +13,26 @@ */ #include "includes.h" -RCSID("$OpenBSD: sshpty.c,v 1.14 2006/02/08 12:15:27 stevesk Exp $"); +#include +#include +#include +#include + +#include +#include +#include #ifdef HAVE_PATHS_H -# include +# include #endif +#include +#include +#include #include #ifdef HAVE_UTIL_H # include -#endif /* HAVE_UTIL_H */ +#endif +#include #include "sshpty.h" #include "log.h" @@ -34,6 +46,13 @@ RCSID("$OpenBSD: sshpty.c,v 1.14 2006/02/08 12:15:27 stevesk Exp $"); #define O_NOCTTY 0 #endif +#ifdef __APPLE__ +# include +# if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) +# define __APPLE_PRIVPTY__ +# endif +#endif + /* * Allocates and opens a pty. Returns 0 if no pty could be allocated, or * nonzero if a pty was successfully allocated. On success, open file @@ -42,7 +61,7 @@ RCSID("$OpenBSD: sshpty.c,v 1.14 2006/02/08 12:15:27 stevesk Exp $"); */ int -pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen) +pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, size_t namebuflen) { /* openpty(3) exists in OSF/1 and some other os'es */ char *name; @@ -66,10 +85,12 @@ pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen) void pty_release(const char *tty) { +#ifndef __APPLE_PRIVPTY__ if (chown(tty, (uid_t) 0, (gid_t) 0) < 0) error("chown %.100s 0 0 failed: %.100s", tty, strerror(errno)); if (chmod(tty, (mode_t) 0666) < 0) error("chmod %.100s 0666 failed: %.100s", tty, strerror(errno)); +#endif /* __APPLE_PRIVPTY__ */ } /* Makes the tty the process's controlling tty and sets it to sane modes. */ @@ -165,11 +186,12 @@ pty_make_controlling_tty(int *ttyfd, const char *tty) /* Changes the window size associated with the pty. */ void -pty_change_window_size(int ptyfd, int row, int col, - int xpixel, int ypixel) +pty_change_window_size(int ptyfd, u_int row, u_int col, + u_int xpixel, u_int ypixel) { struct winsize w; + /* may truncate u_int -> u_short */ w.ws_row = row; w.ws_col = col; w.ws_xpixel = xpixel; @@ -204,6 +226,10 @@ pty_setowner(struct passwd *pw, const char *tty) fatal("stat(%.100s) failed: %.100s", tty, strerror(errno)); +#ifdef WITH_SELINUX + ssh_selinux_setup_pty(pw->pw_name, tty); +#endif + if (st.st_uid != pw->pw_uid || st.st_gid != gid) { if (chown(tty, pw->pw_uid, gid) < 0) { if (errno == EROFS &&