From: Ulrich Drepper Date: Sat, 18 Jan 2003 10:12:37 +0000 (+0000) Subject: Update. X-Git-Tag: upstream/2.30~20224 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=039c1b75276118560dae730b033261a1ae8df7fa;p=external%2Fglibc.git Update. 2003-01-18 Ulrich Drepper * inet/rexec.c (rexec_af): Protect socket operations with TEMP_FAILURE_RETRY. Use writev instead of multiple write. * inet/rcmd.c (rcmd_af): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 2ed6d18..2048932 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-01-18 Ulrich Drepper + + * inet/rexec.c (rexec_af): Protect socket operations with + TEMP_FAILURE_RETRY. Use writev instead of multiple write. + * inet/rcmd.c (rcmd_af): Likewise. + 2003-01-17 Roland McGrath * math/libm-test.inc (sin_test, cos_test, sincos_test) [TEST_DOUBLE]: diff --git a/inet/rexec.c b/inet/rexec.c index c6b432a..3c14836 100644 --- a/inet/rexec.c +++ b/inet/rexec.c @@ -43,6 +43,7 @@ static char sccsid[] = "@(#)rexec.c 8.1 (Berkeley) 6/4/93"; #include #include #include +#include int rexecoptions; libc_freeres_ptr (static char *ahostbuf); @@ -136,7 +137,8 @@ retry: (void) sprintf(num, "%u", port); (void) __write(s, num, strlen(num)+1); { int len = sizeof (from); - s3 = accept(s2, (struct sockaddr *)&from, &len); + s3 = TEMP_FAILURE_RETRY (accept(s2, (struct sockaddr *)&from, + &len)); __close(s2); if (s3 < 0) { perror("accept"); @@ -146,10 +148,15 @@ retry: } *fd2p = s3; } - (void) __write(s, name, strlen(name) + 1); - /* should public key encypt the password here */ - (void) __write(s, pass, strlen(pass) + 1); - (void) __write(s, cmd, strlen(cmd) + 1); + + struct iovec iov[3] = + { + [0] = { .iov_base = (void *) name, .iov_len = strlen (name) + 1 }, + /* should public key encypt the password here */ + [1] = { .iov_base = (void *) pass, .iov_len = strlen (pass) + 1 }, + [2] = { .iov_base = (void *) cmd, .iov_len = strlen (cmd) + 1 } + }; + (void) TEMP_FAILURE_RETRY (__writev (s, iov, 3)); /* We don't need the memory allocated for the name and the password in ruserpass anymore. */