git-svn: trunk@3879
Tomasz Kojm authored on 2008/06/03 02:17:16... | ... |
@@ -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; |