[PATCH] Fix bug in proxy_write()

Antonio Borneo borneo.antonio at gmail.com
Sat Feb 8 10:10:50 EST 2014


Bug introduced in commit 433132b90473538fa46fb6934ef8f7b7f36447b5:
"Use send() and recv() for proxy communication (for MinGW's benefit)".

Actually proxy_write() is used also for regular files
in run_csd_script():
	fd = mkstemp(fname);
	...
	ret = proxy_write(vpninfo, fd, (void *)buf, buflen);
so send() triggers error:
	Failed to write temporary CSD script file:
	Socket operation on non-socket

The fix forces write() for regular files, keeping send()
for sockets.

Signed-off-by: Antonio Borneo <borneo.antonio at gmail.com>
---
 http.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/http.c b/http.c
index 5d58846..6590977 100644
--- a/http.c
+++ b/http.c
@@ -1309,7 +1309,10 @@ static int proxy_write(struct openconnect_info *vpninfo, int fd,
 		       unsigned char *buf, size_t len)
 {
 	size_t count;
+	struct stat statbuf;
 
+	if (fstat(fd, &statbuf) < 0)
+		return -1;
 	for (count = 0; count < len; ) {
 		fd_set rd_set, wr_set;
 		int maxfd = fd;
@@ -1328,7 +1331,10 @@ static int proxy_write(struct openconnect_info *vpninfo, int fd,
 		if (!FD_ISSET(fd, &wr_set))
 			continue;
 
-		i = send(fd, (void *)&buf[count], len - count, 0);
+		if (S_ISREG(statbuf.st_mode))
+			i = write(fd, buf + count, len - count);
+		else
+			i = send(fd, (void *)&buf[count], len - count, 0);
 		if (i < 0)
 			return -errno;
 
-- 
1.7.3.4




More information about the openconnect-devel mailing list