version 1.19, 2000/02/01 03:23:37 |
version 1.20, 2001/09/04 23:35:59 |
|
|
|
|
void usage __P((void)); |
void usage __P((void)); |
|
|
void talk __P((int, int, int, register int)); |
void talk __P((int, sigset_t *, int, register int)); |
|
|
/* |
/* |
* rsh - remote shell |
* rsh - remote shell |
|
|
extern int optind; |
extern int optind; |
struct passwd *pw; |
struct passwd *pw; |
struct servent *sp; |
struct servent *sp; |
int omask; |
sigset_t mask, omask; |
int argoff, asrsh, ch, dflag, nflag, one, pid = 0, rem, uid; |
int argoff, asrsh, ch, dflag, nflag, one, pid = 0, rem, uid; |
register char *p; |
register char *p; |
char *args, *host, *user, *copyargs(); |
char *args, *host, *user, *copyargs(); |
|
|
|
|
(void)seteuid(uid); |
(void)seteuid(uid); |
(void)setuid(uid); |
(void)setuid(uid); |
omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGTERM)); |
sigemptyset(&mask); |
|
sigaddset(&mask, SIGINT); |
|
sigaddset(&mask, SIGQUIT); |
|
sigaddset(&mask, SIGTERM); |
|
sigprocmask(SIG_BLOCK, &mask, &omask); |
if (signal(SIGINT, SIG_IGN) != SIG_IGN) |
if (signal(SIGINT, SIG_IGN) != SIG_IGN) |
(void)signal(SIGINT, sendsig); |
(void)signal(SIGINT, sendsig); |
if (signal(SIGQUIT, SIG_IGN) != SIG_IGN) |
if (signal(SIGQUIT, SIG_IGN) != SIG_IGN) |
|
|
(void)ioctl(rem, FIONBIO, &one); |
(void)ioctl(rem, FIONBIO, &one); |
} |
} |
|
|
talk(nflag, omask, pid, rem); |
talk(nflag, &omask, pid, rem); |
|
|
if (!nflag) |
if (!nflag) |
(void)kill(pid, SIGKILL); |
(void)kill(pid, SIGKILL); |
|
|
void |
void |
talk(nflag, omask, pid, rem) |
talk(nflag, omask, pid, rem) |
int nflag, pid; |
int nflag, pid; |
int omask; |
sigset_t *omask; |
register int rem; |
register int rem; |
{ |
{ |
register int cc, wc; |
register int cc, wc; |
|
|
exit(0); |
exit(0); |
} |
} |
|
|
(void)sigsetmask(omask); |
sigprocmask(SIG_SETMASK, &omask, NULL); |
FD_ZERO(&readfrom); |
FD_ZERO(&readfrom); |
FD_SET(rfd2, &readfrom); |
FD_SET(rfd2, &readfrom); |
FD_SET(rem, &readfrom); |
FD_SET(rem, &readfrom); |