|
@@ -42,34 +42,12 @@
|
|
|
#include <string.h>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
#define SA_LEN(_x) __libc_sa_len((_x)->sa_family)
|
|
|
-extern int __libc_sa_len (sa_family_t __af) __THROW attribute_hidden;
|
|
|
+extern int __libc_sa_len(sa_family_t __af) __THROW attribute_hidden;
|
|
|
|
|
|
|
|
|
static char ahostbuf[NI_MAXHOST];
|
|
|
|
|
|
-
|
|
|
int
|
|
|
rexec_af(char **ahost, int rport, const char *name, const char *pass, const char *cmd, int *fd2p, sa_family_t af)
|
|
|
{
|
|
@@ -95,19 +73,19 @@ rexec_af(char **ahost, int rport, const char *name, const char *pass, const char
|
|
|
hints.ai_socktype = SOCK_STREAM;
|
|
|
hints.ai_flags = AI_CANONNAME;
|
|
|
gai = getaddrinfo(*ahost, servbuff, &hints, &res0);
|
|
|
- if (gai){
|
|
|
+ if (gai) {
|
|
|
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- if (res0->ai_canonname){
|
|
|
+ if (res0->ai_canonname) {
|
|
|
strncpy(ahostbuf, res0->ai_canonname, sizeof(ahostbuf));
|
|
|
ahostbuf[sizeof(ahostbuf)-1] = '\0';
|
|
|
*ahost = ahostbuf;
|
|
|
}
|
|
|
- else{
|
|
|
+ else {
|
|
|
*ahost = NULL;
|
|
|
- __set_errno (ENOENT);
|
|
|
+ __set_errno(ENOENT);
|
|
|
return -1;
|
|
|
}
|
|
|
ruserpass(res0->ai_canonname, &name, &pass);
|
|
@@ -115,7 +93,7 @@ retry:
|
|
|
s = socket(res0->ai_family, res0->ai_socktype, 0);
|
|
|
if (s < 0) {
|
|
|
perror("rexec: socket");
|
|
|
- return (-1);
|
|
|
+ return -1;
|
|
|
}
|
|
|
if (connect(s, res0->ai_addr, res0->ai_addrlen) < 0) {
|
|
|
if (errno == ECONNREFUSED && timo <= 16) {
|
|
@@ -125,7 +103,7 @@ retry:
|
|
|
goto retry;
|
|
|
}
|
|
|
perror(res0->ai_canonname);
|
|
|
- return (-1);
|
|
|
+ return -1;
|
|
|
}
|
|
|
if (fd2p == 0) {
|
|
|
(void) write(s, "", 1);
|
|
@@ -138,10 +116,10 @@ retry:
|
|
|
s2 = socket(res0->ai_family, res0->ai_socktype, 0);
|
|
|
if (s2 < 0) {
|
|
|
(void) close(s);
|
|
|
- return (-1);
|
|
|
+ return -1;
|
|
|
}
|
|
|
listen(s2, 1);
|
|
|
- sa2len = sizeof (sa2);
|
|
|
+ sa2len = sizeof(sa2);
|
|
|
if (getsockname(s2, (struct sockaddr *)&sa2, &sa2len) < 0) {
|
|
|
perror("getsockname");
|
|
|
(void) close(s2);
|
|
@@ -158,15 +136,16 @@ retry:
|
|
|
port = atoi(servbuff);
|
|
|
(void) sprintf(num, "%u", port);
|
|
|
(void) write(s, num, strlen(num)+1);
|
|
|
- { socklen_t len = sizeof (from);
|
|
|
- s3 = TEMP_FAILURE_RETRY (accept(s2, (struct sockaddr *)&from,
|
|
|
- &len));
|
|
|
- close(s2);
|
|
|
- if (s3 < 0) {
|
|
|
- perror("accept");
|
|
|
- port = 0;
|
|
|
- goto bad;
|
|
|
- }
|
|
|
+ {
|
|
|
+ socklen_t len = sizeof(from);
|
|
|
+ s3 = TEMP_FAILURE_RETRY(accept(s2,
|
|
|
+ (struct sockaddr *)&from, &len));
|
|
|
+ close(s2);
|
|
|
+ if (s3 < 0) {
|
|
|
+ perror("accept");
|
|
|
+ port = 0;
|
|
|
+ goto bad;
|
|
|
+ }
|
|
|
}
|
|
|
*fd2p = s3;
|
|
|
}
|
|
@@ -178,9 +157,9 @@ retry:
|
|
|
|
|
|
in ruserpass anymore. */
|
|
|
if (name != orig_name)
|
|
|
- free ((char *) name);
|
|
|
+ free((char *) name);
|
|
|
if (pass != orig_pass)
|
|
|
- free ((char *) pass);
|
|
|
+ free((char *) pass);
|
|
|
|
|
|
if (read(s, &c, 1) != 1) {
|
|
|
perror(*ahost);
|
|
@@ -195,13 +174,13 @@ retry:
|
|
|
goto bad;
|
|
|
}
|
|
|
freeaddrinfo(res0);
|
|
|
- return (s);
|
|
|
+ return s;
|
|
|
bad:
|
|
|
if (port)
|
|
|
(void) close(*fd2p);
|
|
|
(void) close(s);
|
|
|
freeaddrinfo(res0);
|
|
|
- return (-1);
|
|
|
+ return -1;
|
|
|
}
|
|
|
libc_hidden_def(rexec_af)
|
|
|
|