- (stevesk) sshpty.c, cray.[ch]: whitespace, formatting and cleanup

for some #ifdef _CRAY code; ok wendyp@cray.com
This commit is contained in:
Kevin Steves 2001-08-14 20:31:49 +00:00
parent 56cb92968b
commit f744b512f3
3 changed files with 169 additions and 154 deletions

View File

@ -1,3 +1,7 @@
/*
* XXX: license?
*/
/* /*
* The modules contains code to support cray t3e and sv1 computers. * The modules contains code to support cray t3e and sv1 computers.
* It is here to minimize the modifcations to the openssh base code. * It is here to minimize the modifcations to the openssh base code.
@ -58,15 +62,18 @@ cray_setup(uid_t uid, char *username)
struct jtab jbuf; struct jtab jbuf;
int jid; int jid;
if ((jid = getjtab (&jbuf)) < 0) fatal("getjtab: no jid"); if ((jid = getjtab(&jbuf)) < 0)
fatal("getjtab: no jid");
err = setudb(); /* open and rewind the Cray User DataBase */ err = setudb(); /* open and rewind the Cray User DataBase */
if(err != 0) fatal("UDB open failure"); if (err != 0)
fatal("UDB open failure");
naccts = 0; naccts = 0;
p = getudbnam(username); p = getudbnam(username);
if (p == NULL) fatal("No UDB entry for %s", username); if (p == NULL)
fatal("No UDB entry for %.100s", username);
if (uid != p->ue_uid) if (uid != p->ue_uid)
fatal("UDB etnry %s uid(%d) does not match uid %d\n", fatal("UDB etnry %.100s uid(%d) does not match uid %d",
username, p->ue_uid, uid); username, p->ue_uid, uid);
for (j = 0; p->ue_acids[j] != -1 && j < MAXVIDS; j++) { for (j = 0; p->ue_acids[j] != -1 && j < MAXVIDS; j++) {
accts[naccts] = p->ue_acids[j]; accts[naccts] = p->ue_acids[j];
@ -88,14 +95,15 @@ cray_setup(uid_t uid, char *username)
pid = getpid(); pid = getpid();
sr = setlimits(username, C_PROC, pid, UDBRC_INTER); sr = setlimits(username, C_PROC, pid, UDBRC_INTER);
if (sr != NULL) fatal("%.200s", sr); if (sr != NULL)
fatal("%.200s", sr);
sr = setlimits(username, C_JOB, jid, UDBRC_INTER); sr = setlimits(username, C_JOB, jid, UDBRC_INTER);
if (sr != NULL) fatal("%.200s", sr); if (sr != NULL)
fatal("%.200s", sr);
} }
/* /*
* The rc.* and /etc/sdaemon methods of starting a program on unicos/unicosmk * The rc.* and /etc/sdaemon methods of starting a program on unicos/unicosmk
* can have pal privileges that sshd can inherit which * can have pal privileges that sshd can inherit which
@ -116,24 +124,29 @@ drop_cray_privs()
* If ether of theses two flags are not set * If ether of theses two flags are not set
* then don't allow this version of ssh to run. * then don't allow this version of ssh to run.
*/ */
if (!sysconf(_SC_CRAY_PRIV_SU)) fatal("Not PRIV_SU system."); if (!sysconf(_SC_CRAY_PRIV_SU))
if (!sysconf(_SC_CRAY_POSIX_PRIV)) fatal("Not POSIX_PRIV."); fatal("Not PRIV_SU system.");
if (!sysconf(_SC_CRAY_POSIX_PRIV))
fatal("Not POSIX_PRIV.");
debug("Dropping privileges."); debug("Dropping privileges.");
memset(&usrv, 0, sizeof(usrv)); memset(&usrv, 0, sizeof(usrv));
if (setusrv(&usrv) < 0) if (setusrv(&usrv) < 0)
fatal ("%s(%d): setusrv(): %s\n", __FILE__, __LINE__, strerror(errno)); fatal("%s(%d): setusrv(): %s\n", __FILE__, __LINE__,
strerror(errno));
if ((privstate = priv_init_proc()) != NULL) { if ((privstate = priv_init_proc()) != NULL) {
result = priv_set_proc(privstate); result = priv_set_proc(privstate);
if ( result != 0 ) fatal ("%s(%d): priv_set_proc(): %s\n", if (result != 0 )
fatal("%s(%d): priv_set_proc(): %s\n",
__FILE__, __LINE__, strerror(errno)); __FILE__, __LINE__, strerror(errno));
priv_free_proc(privstate); priv_free_proc(privstate);
} }
debug ("Privileges should be cleared..."); debug ("Privileges should be cleared...");
#else #else
Cray systems must be run with _SC_CRAY_PRIV_SU on! /* XXX: do this differently */
# error Cray systems must be run with _SC_CRAY_PRIV_SU on!
#endif #endif
} }
@ -147,7 +160,7 @@ cray_retain_utmp(struct utmp *ut, int pid)
int fd; int fd;
struct utmp utmp; struct utmp utmp;
if ((fd = open(UTMP_FILE, O_RDONLY)) >= 0) { if ((fd = open(UTMP_FILE, O_RDONLY)) != -1) {
while (read(fd, (char *)&utmp, sizeof(utmp)) == sizeof(utmp)) { while (read(fd, (char *)&utmp, sizeof(utmp)) == sizeof(utmp)) {
if (pid == utmp.ut_pid) { if (pid == utmp.ut_pid) {
ut->ut_jid = utmp.ut_jid; ut->ut_jid = utmp.ut_jid;
@ -159,6 +172,7 @@ cray_retain_utmp(struct utmp *ut, int pid)
} }
close(fd); close(fd);
} }
/* XXX: error message? */
} }
/* /*
@ -179,17 +193,20 @@ cray_delete_tmpdir(char *login, int jid, uid_t uid)
for (c = 'a'; c <= 'z'; c++) { for (c = 'a'; c <= 'z'; c++) {
snprintf(jtmp, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c); snprintf(jtmp, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c);
if (stat(jtmp, &statbuf) == 0 && statbuf.st_uid == uid) break; if (stat(jtmp, &statbuf) == 0 && statbuf.st_uid == uid)
break;
} }
if (c > 'z') return; if (c > 'z')
return;
if ((child = fork()) == 0) { if ((child = fork()) == 0) {
execl(CLEANTMPCMD, CLEANTMPCMD, login, jtmp, 0); execl(CLEANTMPCMD, CLEANTMPCMD, login, jtmp, 0);
fatal("ssh_cray_rmtmpdir: execl of CLEANTMPCMD failed"); fatal("cray_delete_tmpdir: execl of CLEANTMPCMD failed");
} }
while (waitpid (child, &wstat, 0) == -1 && errno == EINTR); while (waitpid(child, &wstat, 0) == -1 && errno == EINTR)
;
} }
/* /*
@ -205,12 +222,12 @@ cray_job_termination_handler (int sig)
debug("Received SIG JOB."); debug("Received SIG JOB.");
if ((jid = waitjob(&jtab)) == -1 || if ((jid = waitjob(&jtab)) == -1 ||
(login = uid2nam(jtab.j_uid)) == NULL) return; (login = uid2nam(jtab.j_uid)) == NULL)
return;
cray_delete_tmpdir(login, jid, jtab.j_uid); cray_delete_tmpdir(login, jid, jtab.j_uid);
} }
/* /*
* Set job id and create tmpdir directory. * Set job id and create tmpdir directory.
*/ */
@ -221,11 +238,13 @@ cray_init_job(struct passwd *pw)
int c; int c;
jid = setjob(pw->pw_uid, WJSIGNAL); jid = setjob(pw->pw_uid, WJSIGNAL);
if (jid < 0) fatal("System call setjob failure"); if (jid < 0)
fatal("System call setjob failure");
for (c = 'a'; c <= 'z'; c++) { for (c = 'a'; c <= 'z'; c++) {
snprintf(cray_tmpdir, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c); snprintf(cray_tmpdir, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c);
if (mkdir(cray_tmpdir, JTMPMODE) != 0) continue; if (mkdir(cray_tmpdir, JTMPMODE) != 0)
continue;
if (chown(cray_tmpdir, pw->pw_uid, pw->pw_gid) != 0) { if (chown(cray_tmpdir, pw->pw_uid, pw->pw_gid) != 0) {
rmdir(cray_tmpdir); rmdir(cray_tmpdir);
continue; continue;
@ -233,7 +252,8 @@ cray_init_job(struct passwd *pw)
break; break;
} }
if (c > 'z') cray_tmpdir[0] = '\0'; if (c > 'z')
cray_tmpdir[0] = '\0';
} }
void void
@ -242,7 +262,8 @@ cray_set_tmpdir(struct utmp *ut)
int jid; int jid;
struct jtab jbuf; struct jtab jbuf;
if ((jid = getjtab (&jbuf)) < 0) return; if ((jid = getjtab(&jbuf)) < 0)
return;
/* /*
* Set jid and tmpdir in utmp record. * Set jid and tmpdir in utmp record.
@ -250,5 +271,4 @@ cray_set_tmpdir(struct utmp *ut)
ut->ut_jid = jid; ut->ut_jid = jid;
strncpy(ut->ut_tpath, cray_tmpdir, TPATHSIZ); strncpy(ut->ut_tpath, cray_tmpdir, TPATHSIZ);
} }
#endif #endif

View File

@ -1,4 +1,3 @@
#ifndef _BSD_CRAY_H #ifndef _BSD_CRAY_H
#define _BSD_CRAY_H #define _BSD_CRAY_H
@ -9,5 +8,4 @@ void cray_setup(uid_t, char *); /* set cray limits */
extern char cray_tmpdir[]; /* cray tmpdir */ extern char cray_tmpdir[]; /* cray tmpdir */
#endif #endif
#endif /* _BSD_CRAY_H */ #endif /* _BSD_CRAY_H */

View File

@ -178,7 +178,8 @@ pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, int namebuflen)
for (i = 0; i < highpty; i++) { for (i = 0; i < highpty; i++) {
snprintf(buf, sizeof(buf), "/dev/pty/%03d", i); snprintf(buf, sizeof(buf), "/dev/pty/%03d", i);
*ptyfd = open(buf, O_RDWR|O_NOCTTY); *ptyfd = open(buf, O_RDWR|O_NOCTTY);
if (*ptyfd < 0) continue; if (*ptyfd < 0)
continue;
snprintf(namebuf, namebuflen, "/dev/ttyp%03d", i); snprintf(namebuf, namebuflen, "/dev/ttyp%03d", i);
/* Open the slave side. */ /* Open the slave side. */
*ttyfd = open(namebuf, O_RDWR|O_NOCTTY); *ttyfd = open(namebuf, O_RDWR|O_NOCTTY);
@ -254,9 +255,9 @@ pty_make_controlling_tty(int *ttyfd, const char *ttyname)
error("setsid: %.100s", strerror(errno)); error("setsid: %.100s", strerror(errno));
fd = open(ttyname, O_RDWR|O_NOCTTY); fd = open(ttyname, O_RDWR|O_NOCTTY);
if (fd >= 0) { if (fd != -1) {
signal(SIGHUP, SIG_IGN); signal(SIGHUP, SIG_IGN);
ioctl(fd, TCVHUP, (char *)0); ioctl(fd, TCVHUP, (char *)NULL);
signal(SIGHUP, SIG_DFL); signal(SIGHUP, SIG_DFL);
setpgid(0, 0); setpgid(0, 0);
close(fd); close(fd);
@ -264,15 +265,11 @@ pty_make_controlling_tty(int *ttyfd, const char *ttyname)
error("Failed to disconnect from controlling tty."); error("Failed to disconnect from controlling tty.");
} }
debug("Setting controlling tty using TCSETCTTY.");
debug("Setting controlling tty using TCSETCTTY.\n");
ioctl(*ttyfd, TCSETCTTY, NULL); ioctl(*ttyfd, TCSETCTTY, NULL);
fd = open("/dev/tty", O_RDWR); fd = open("/dev/tty", O_RDWR);
if (fd < 0) if (fd < 0)
error("%.100s: %.100s", ttyname, strerror(errno)); error("%.100s: %.100s", ttyname, strerror(errno));
close(*ttyfd); close(*ttyfd);
*ttyfd = fd; *ttyfd = fd;
#else #else