git-svn: trunk@4789
Török Edvin authored on 2009/02/15 01:13:38... | ... |
@@ -1,3 +1,9 @@ |
1 |
+Sat Feb 14 18:43:10 EET 2009 (edwin) |
|
2 |
+------------------------------------ |
|
3 |
+ * clamd/session.c, contrib/clamdtop/Makefile, |
|
4 |
+ contrib/clamdtop/clamdtop.c: make clamdtop use IDSESSION, and enable |
|
5 |
+ VERSION/STATS inside IDSESSION. |
|
6 |
+ |
|
1 | 7 |
Sat Feb 14 18:04:55 EET 2009 (edwin) |
2 | 8 |
------------------------------------ |
3 | 9 |
* libclamav/scanners.c: fix type 7 signature matching (bb #1368). |
... | ... |
@@ -253,6 +253,8 @@ int command(client_conn_t *conn, int *virus) |
253 | 253 |
#endif |
254 | 254 |
case COMMAND_STATS: |
255 | 255 |
thrmgr_setactivetask(NULL, "STATS"); |
256 |
+ if (conn->group) |
|
257 |
+ mdprintf(desc, "%u: ", conn->id); |
|
256 | 258 |
thrmgr_printstats(desc); |
257 | 259 |
return 0; |
258 | 260 |
case COMMAND_STREAM: |
... | ... |
@@ -389,6 +391,8 @@ int execute_or_dispatch_command(client_conn_t *conn, enum commands cmd, const ch |
389 | 389 |
case COMMAND_END: |
390 | 390 |
case COMMAND_INSTREAM: |
391 | 391 |
case COMMAND_INSTREAMSCAN: |
392 |
+ case COMMAND_VERSION: |
|
393 |
+ case COMMAND_STATS: |
|
392 | 394 |
/* These commands are accepted inside IDSESSION */ |
393 | 395 |
break; |
394 | 396 |
default: |
... | ... |
@@ -421,6 +425,8 @@ int execute_or_dispatch_command(client_conn_t *conn, enum commands cmd, const ch |
421 | 421 |
{ |
422 | 422 |
uint32_t ver; |
423 | 423 |
cl_engine_get(engine, CL_ENGINE_DB_VERSION, &ver); |
424 |
+ if (conn->group) |
|
425 |
+ mdprintf(desc, "%u: ", conn->id); |
|
424 | 426 |
if(ver) { |
425 | 427 |
char timestr[32]; |
426 | 428 |
const char *tstr; |
... | ... |
@@ -433,17 +439,10 @@ int execute_or_dispatch_command(client_conn_t *conn, enum commands cmd, const ch |
433 | 433 |
} else { |
434 | 434 |
mdprintf(desc, "ClamAV %s%c", get_version(), conn->term); |
435 | 435 |
} |
436 |
- return 1; |
|
436 |
+ return conn->group ? 0 : 1; |
|
437 | 437 |
} |
438 | 438 |
case COMMAND_INSTREAM: |
439 | 439 |
{ |
440 |
-#if 0 |
|
441 |
- if (!conn->group) { |
|
442 |
- /* only valid inside IDSESSION */ |
|
443 |
- conn_reply_single(conn, NULL, "UNKNOWN COMMAND"); |
|
444 |
- return 1; |
|
445 |
- } |
|
446 |
-#endif |
|
447 | 440 |
int rc = cli_gentempfd(NULL, &conn->filename, &conn->scanfd); |
448 | 441 |
if (rc != CL_SUCCESS) |
449 | 442 |
return rc; |
... | ... |
@@ -388,7 +388,7 @@ static void cleanup(void) |
388 | 388 |
curses_inited = 0; |
389 | 389 |
for (i=0;i<global.num_clamd;i++) { |
390 | 390 |
if (global.conn[i].sd && global.conn[i].sd != -1) { |
391 |
- send_string_noreconn(&global.conn[i], "END\n"); |
|
391 |
+ send_string_noreconn(&global.conn[i], "nEND\n"); |
|
392 | 392 |
close(global.conn[i].sd); |
393 | 393 |
} |
394 | 394 |
free(global.conn[i].version); |
... | ... |
@@ -540,7 +540,7 @@ static int make_connection(const char *soname, conn_t *conn) |
540 | 540 |
tv.tv_sec = 4; |
541 | 541 |
tv.tv_usec = 0; |
542 | 542 |
setsockopt(conn->sd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); |
543 |
- send_string(conn, "SESSION\nVERSION\n"); |
|
543 |
+ send_string(conn, "nIDSESSION\nnVERSION\n"); |
|
544 | 544 |
free(conn->version); |
545 | 545 |
conn->version = NULL; |
546 | 546 |
read_version(conn); |
... | ... |
@@ -591,7 +591,7 @@ static int recv_line(conn_t *conn, char *buf, size_t len) |
591 | 591 |
if (nread <= 0) { |
592 | 592 |
print_con_info(conn, "%s: %s", conn->remote, strerror(errno)); |
593 | 593 |
/* it could be a timeout, be nice and send an END */ |
594 |
- send_string_noreconn(conn, "END\n"); |
|
594 |
+ send_string_noreconn(conn, "nEND\n"); |
|
595 | 595 |
close(conn->sd); |
596 | 596 |
conn->sd = -1; |
597 | 597 |
return 0; |
... | ... |
@@ -873,7 +873,7 @@ static void parse_stats(conn_t *conn, struct stats *stats, unsigned idx) |
873 | 873 |
struct timeval tv; |
874 | 874 |
unsigned conn_dt; |
875 | 875 |
int primary = 0; |
876 |
- const char *pstart, *p; |
|
876 |
+ const char *pstart, *p, *vstart; |
|
877 | 877 |
|
878 | 878 |
if (conn->tcp) |
879 | 879 |
stats->remote = conn->remote; |
... | ... |
@@ -884,7 +884,11 @@ static void parse_stats(conn_t *conn, struct stats *stats, unsigned idx) |
884 | 884 |
stats->engine_version = "???"; |
885 | 885 |
return; |
886 | 886 |
} |
887 |
- p = pstart = conn->version; |
|
887 |
+ p = pstart = vstart = strchr(conn->version, ' '); |
|
888 |
+ if (!vstart) { |
|
889 |
+ stats->engine_version = "???"; |
|
890 |
+ return; |
|
891 |
+ } |
|
888 | 892 |
/* find digit in version */ |
889 | 893 |
while (*p && !isdigit(*p)) |
890 | 894 |
p++; |
... | ... |
@@ -924,7 +928,7 @@ static void parse_stats(conn_t *conn, struct stats *stats, unsigned idx) |
924 | 924 |
stats->db_version[maxx-61] = '\0'; |
925 | 925 |
} |
926 | 926 |
|
927 |
- stats->version = conn->version; /* for details view */ |
|
927 |
+ stats->version = vstart; /* for details view */ |
|
928 | 928 |
gettimeofday(&tv, NULL); |
929 | 929 |
tv.tv_sec -= conn->tv_conn.tv_sec; |
930 | 930 |
tv.tv_usec -= conn->tv_conn.tv_usec; |
... | ... |
@@ -1184,7 +1188,7 @@ int main(int argc, char *argv[]) |
1184 | 1184 |
unsigned biggest_q; |
1185 | 1185 |
struct stats *stats = &global.all_stats[i]; |
1186 | 1186 |
if (global.conn[i].sd != -1) |
1187 |
- send_string(&global.conn[i], "STATS\n"); |
|
1187 |
+ send_string(&global.conn[i], "nSTATS\n"); |
|
1188 | 1188 |
biggest_q = stats->biggest_queue; |
1189 | 1189 |
memset(stats, 0, sizeof(*stats)); |
1190 | 1190 |
stats->biggest_queue = biggest_q; |