version 1.28, 2014/07/05 06:45:00 |
version 1.29, 2014/07/05 07:22:18 |
|
|
remotecmd(char *rhost, char *luser, char *ruser, char *cmd) |
remotecmd(char *rhost, char *luser, char *ruser, char *cmd) |
{ |
{ |
int desc; |
int desc; |
#if defined(DIRECT_RCMD) |
|
static int port = -1; |
|
#endif /* DIRECT_RCMD */ |
|
|
|
debugmsg(DM_MISC, "local user = %s remote user = %s\n", luser, ruser); |
debugmsg(DM_MISC, "local user = %s remote user = %s\n", luser, ruser); |
debugmsg(DM_MISC, "Remote command = '%s'\n", cmd); |
debugmsg(DM_MISC, "Remote command = '%s'\n", cmd); |
|
|
(void) signal(SIGALRM, sighandler); |
(void) signal(SIGALRM, sighandler); |
(void) alarm(RTIMEOUT); |
(void) alarm(RTIMEOUT); |
|
|
#if defined(DIRECT_RCMD) |
|
(void) signal(SIGPIPE, sighandler); |
|
|
|
if (port < 0) { |
|
struct servent *sp; |
|
|
|
if ((sp = getservbyname("shell", "tcp")) == NULL) |
|
fatalerr("shell/tcp: unknown service"); |
|
port = sp->s_port; |
|
} |
|
|
|
if (becomeroot() != 0) |
|
exit(1); |
|
desc = rcmd(&rhost, port, luser, ruser, cmd, 0); |
|
if (becomeuser() != 0) |
|
exit(1); |
|
#else /* !DIRECT_RCMD */ |
|
debugmsg(DM_MISC, "Remote shell command = '%s'\n", |
debugmsg(DM_MISC, "Remote shell command = '%s'\n", |
path_remsh ? path_remsh : "default"); |
path_remsh ? path_remsh : "default"); |
(void) signal(SIGPIPE, SIG_IGN); |
(void) signal(SIGPIPE, SIG_IGN); |
desc = rcmdsh(&rhost, -1, luser, ruser, cmd, path_remsh); |
desc = rcmdsh(&rhost, -1, luser, ruser, cmd, path_remsh); |
if (desc > 0) |
if (desc > 0) |
(void) signal(SIGPIPE, sighandler); |
(void) signal(SIGPIPE, sighandler); |
#endif /* DIRECT_RCMD */ |
|
|
|
(void) alarm(0); |
(void) alarm(0); |
|
|