Browse code

make clamdtop use IDSESSION, and enable VERSION/STATS inside IDSESSION.

git-svn: trunk@4789

Török Edvin authored on 2009/02/15 01:13:38
Showing 4 changed files
... ...
@@ -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;
... ...
@@ -1,4 +1,4 @@
1
-CFLAGS=-g -Wall -W -Wshadow -Wformat=2 -O2 
1
+CFLAGS=-g -Wall -W -Wshadow -Wformat=2 
2 2
 CC=gcc
3 3
 OBJS=clamdtop.o
4 4
 CPPFLAGS=-D_FORTIFY_SOURCE=2
... ...
@@ -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;