From 039c1b75276118560dae730b033261a1ae8df7fa Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 18 Jan 2003 10:12:37 +0000 Subject: 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. --- inet/rexec.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'inet/rexec.c') diff --git a/inet/rexec.c b/inet/rexec.c index c6b432a6f8..3c14836aa2 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. */ -- cgit v1.2.3