Browse code

fix bug in stdin scanning in clamdscan

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@647 77e5149b-7576-45b1-b177-96237e5ba77b

Tomasz Kojm authored on 2004/07/01 10:24:20
Showing 3 changed files
... ...
@@ -76,6 +76,7 @@ Jens Elkner <elkner*linofee.org>
76 76
 Jason Englander <jason*englanders.cc>
77 77
 Tony Finch <dot*dotat.at>
78 78
 David Ford <david+cert*blue-labs.org>
79
+Piotr Gackiewicz <gacek*intertele.pl>
79 80
 Dean Gaudet <dean-clamav*arctic.org>
80 81
 Michel Gaudet <Michel.Gaudet*ehess.fr>
81 82
 Philippe Gay <ph.gay*free.fr>
... ...
@@ -1,3 +1,8 @@
1
+Thu Jul  1 03:18:04 CEST 2004 (tk)
2
+----------------------------------
3
+  * clamdscan: fix bug (introduced in -20040622) in stream scanning in TCP
4
+	       mode. Patch by Piotr Gackiewicz <gacek*intertele.pl>.
5
+
1 6
 Wed Jun 30 20:49:46 BST 2004 (njh)
2 7
 ----------------------------------
3 8
   * libclamav/mbox.c:	Some TR.Happy99.SKA were getting through
... ...
@@ -95,6 +95,8 @@ int dsstream(int sockd)
95 95
 {
96 96
 	int wsockd, loopw = 60, bread, port, infected = 0;
97 97
 	struct sockaddr_in server;
98
+	struct sockaddr_in peer;
99
+	int peer_size;
98 100
 	char buff[4096], *pt;
99 101
 
100 102
     if(write(sockd, "STREAM", 6) <= 0) {
... ...
@@ -129,6 +131,15 @@ int dsstream(int sockd)
129 129
     server.sin_family = AF_INET;
130 130
     server.sin_port = htons(port);
131 131
 
132
+    peer_size = sizeof(peer);
133
+    if(getpeername(sockd, (struct sockaddr *) &peer, &peer_size) < 0) {
134
+	perror("getpeername()");
135
+	mprintf("@Can't get socket peer name.\n");
136
+	return -1;
137
+    }
138
+
139
+    server.sin_addr.s_addr = peer.sin_addr.s_addr;
140
+
132 141
     if(connect(wsockd, (struct sockaddr *) &server, sizeof(struct sockaddr_in)) < 0) {
133 142
 	close(wsockd);
134 143
 	perror("connect()");