Browse code

clamd/scanner.c: log IP addresses of remote clients (bb#966)

git-svn: trunk@3879

Tomasz Kojm authored on 2008/06/03 02:17:16
Showing 2 changed files
... ...
@@ -1,3 +1,8 @@
1
+Mon Jun  2 18:31:53 CEST 2008 (tk)
2
+----------------------------------
3
+  * clamd/scanner.c: log IP addresses of remote clients (bb#966)
4
+		     Patch from Jorge Valdes <jvaldes*intercom.com.sv>
5
+
1 6
 Mon Jun  2 17:49:50 CEST 2008 (tk)
2 7
 ----------------------------------
3 8
   * clamdscan/clamdscan.c: don't show scan summary when clamd cannot be
... ...
@@ -421,7 +421,10 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_engine *en
421 421
 	short bound = 0, rnd_port_first = 1;
422 422
 	const char *virname;
423 423
 	char buff[FILEBUFF];
424
+	char peer_addr[32];
424 425
 	struct sockaddr_in server;
426
+	struct sockaddr_in peer;
427
+	socklen_t addrlen;
425 428
 	struct hostent he;
426 429
 	const struct cfgstruct *cpt;
427 430
 	char *tmpname;
... ...
@@ -503,21 +506,23 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_engine *en
503 503
 	    return -1;
504 504
     }
505 505
 
506
-    if((acceptd = accept(sockfd, NULL, NULL)) == -1) {
506
+    addrlen = sizeof(peer);
507
+    if((acceptd = accept(sockfd, (struct sockaddr *) &peer, &addrlen)) == -1) {
507 508
 	closesocket(sockfd);
508 509
 	mdprintf(odesc, "accept() ERROR\n");
509 510
 	logg("!ScanStream %u: accept() failed.\n", port);
510 511
 	return -1;
511 512
     }
512 513
 
513
-    logg("*Accepted connection on port %u, fd %d\n", port, acceptd);
514
+    snprintf(peer_addr, sizeof(peer_addr), "%s", inet_ntoa(peer.sin_addr));
515
+    logg("*Accepted connection from %s on port %u, fd %d\n", peer_addr, port, acceptd);
514 516
 
515 517
     if(cli_gentempfd(NULL, &tmpname, &tmpd)) {
516 518
 	shutdown(sockfd, 2);
517 519
 	closesocket(sockfd);
518 520
 	closesocket(acceptd);
519 521
 	mdprintf(odesc, "cli_gentempfd() failed. ERROR\n");
520
-	logg("!ScanStream %u: Can't create temporary file.\n", port);
522
+	logg("!ScanStream(%s@%u): Can't create temporary file.\n", peer_addr, port);
521 523
 	return -1;
522 524
     }
523 525
 
... ...
@@ -536,7 +541,7 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_engine *en
536 536
 	    closesocket(sockfd);
537 537
 	    closesocket(acceptd);
538 538
 	    mdprintf(odesc, "Temporary file -> write ERROR\n");
539
-	    logg("!ScanStream %u: Can't write to temporary file.\n", port);
539
+	    logg("!ScanStream(%s@%u): Can't write to temporary file.\n", peer_addr, port);
540 540
 	    close(tmpd);
541 541
 	    if(!cfgopt(copt, "LeaveTemporaryFiles")->enabled)
542 542
 		unlink(tmpname);
... ...
@@ -548,7 +553,7 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_engine *en
548 548
 	    btread = (maxsize - size); /* only read up to max */
549 549
 
550 550
 	    if(btread <= 0) {
551
-		logg("^ScanStream %u: Size limit reached (max: %lu)\n", port, maxsize);
551
+		logg("^ScanStream(%s@%u): Size limit reached (max: %lu)\n", peer_addr, port, maxsize);
552 552
 	    	break; /* Scan what we have */
553 553
 	    }
554 554
 	}
... ...
@@ -557,11 +562,11 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_engine *en
557 557
     switch(retval) {
558 558
 	case 0: /* timeout */
559 559
 	    mdprintf(odesc, "read timeout ERROR\n");
560
-	    logg("!ScanStream %u: read timeout.\n", port);
560
+	    logg("!ScanStream(%s@%u): read timeout.\n", peer_addr, port);
561 561
 	    break;
562 562
 	case -1:
563 563
 	    mdprintf(odesc, "read poll ERROR\n");
564
-	    logg("!ScanStream %u: read poll failed.\n", port);
564
+	    logg("!ScanStream(%s@%u): read poll failed.\n", peer_addr, port);
565 565
 	    break;
566 566
     }
567 567
 
... ...
@@ -581,17 +586,17 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_engine *en
581 581
 
582 582
     if(ret == CL_VIRUS) {
583 583
 	mdprintf(odesc, "stream: %s FOUND\n", virname);
584
-	logg("stream %u: %s FOUND\n", port, virname);
584
+	logg("stream(%s@%u): %s FOUND\n", peer_addr, port, virname);
585 585
 	virusaction("stream", virname, copt);
586 586
     } else if(ret != CL_CLEAN) {
587 587
     	if(retval == 1) {
588 588
 	    mdprintf(odesc, "stream: %s ERROR\n", cl_strerror(ret));
589
-	    logg("stream %u: %s ERROR\n", port, cl_strerror(ret));
589
+	    logg("stream(%s@%u): %s ERROR\n", peer_addr, port, cl_strerror(ret));
590 590
 	}
591 591
     } else {
592 592
 	mdprintf(odesc, "stream: OK\n");
593 593
         if(logok)
594
-	    logg("stream %u: OK\n", port); 
594
+	    logg("stream(%s@%u): OK\n", peer_addr, port); 
595 595
     }
596 596
 
597 597
     return ret;