fixup SESSION mode.

git-svn: trunk@1281
remotes/push_mirror/metadata
Trog 21 years ago
parent 8589f1a076
commit 45905a4a46
  1. 4
      clamav-devel/ChangeLog
  2. 65
      clamav-devel/clamd/server-th.c
  3. 38
      clamav-devel/clamd/session.c
  4. 2
      clamav-devel/clamd/session.h

@ -1,3 +1,7 @@
Wed Jan 26 17:26:03 GMT 2005 (trog)
-----------------------------------
* clamd/server-th.c clamd/session.c clamd/session.h: fixup SESSION mode.
Wed Jan 26 17:40:56 CET 2005 (tk)
---------------------------------
* docs: update

@ -64,7 +64,7 @@ void scanner_thread(void *arg)
{
client_conn_t *conn = (client_conn_t *) arg;
sigset_t sigset;
int ret, timeout;
int ret, timeout, session=FALSE;
struct cfgstruct *cpt;
@ -81,23 +81,52 @@ void scanner_thread(void *arg)
if(!timeout)
timeout = -1;
ret = command(conn->sd, conn->root, conn->limits, conn->options, conn->copt, timeout);
switch(ret) {
case COMMAND_SHUTDOWN:
pthread_mutex_lock(&exit_mutex);
progexit = 1;
kill(conn->mainpid, SIGTERM);
pthread_mutex_unlock(&exit_mutex);
break;
case COMMAND_RELOAD:
pthread_mutex_lock(&reload_mutex);
reload = 1;
pthread_mutex_unlock(&reload_mutex);
break;
do {
ret = command(conn->sd, conn->root, conn->limits, conn->options, conn->copt, timeout);
if (ret == -1) {
break;
}
switch(ret) {
case COMMAND_SHUTDOWN:
pthread_mutex_lock(&exit_mutex);
progexit = 1;
kill(conn->mainpid, SIGTERM);
pthread_mutex_unlock(&exit_mutex);
break;
case COMMAND_RELOAD:
pthread_mutex_lock(&reload_mutex);
reload = 1;
pthread_mutex_unlock(&reload_mutex);
break;
case COMMAND_SESSION:
session = TRUE;
timeout = 5;
break;
case COMMAND_END:
session = FALSE;
break;
case COMMAND_TIMEOUT:
if (session) {
pthread_mutex_lock(&exit_mutex);
if(progexit) {
session = FALSE;
}
pthread_mutex_unlock(&exit_mutex);
pthread_mutex_lock(&reload_mutex);
if(reload) {
session = FALSE;
}
pthread_mutex_unlock(&reload_mutex);
}
break;
}
} while (session);
close(conn->sd);
free(conn);
return;
@ -525,7 +554,6 @@ int acceptloop_th(int socketd, struct cl_node *root, const struct cfgstruct *cop
pthread_mutex_lock(&reload_mutex);
if(reload) {
reload = 0;
pthread_mutex_unlock(&reload_mutex);
/* Destroy the thread manager.
* This waits for all current tasks to end
@ -537,6 +565,9 @@ int acceptloop_th(int socketd, struct cl_node *root, const struct cfgstruct *cop
pthread_mutex_unlock(&reload_mutex);
exit(-1);
}
pthread_mutex_lock(&reload_mutex);
reload = 0;
pthread_mutex_unlock(&reload_mutex);
#ifdef CLAMUKO
if(cfgopt(copt, "ClamukoScanOnLine") || cfgopt(copt, "ClamukoScanOnAccess")) {
logg("Stopping and restarting Clamuko.\n");

@ -56,9 +56,7 @@ int command(int desc, const struct cl_node *root, const struct cl_limits *limits
retval = poll_fd(desc, timeout);
switch (retval) {
case 0: /* timeout */
mdprintf(desc, "ERROR\n");
logg("!Command: command timeout.\n");
return -1;
return COMMAND_TIMEOUT;
case -1:
mdprintf(desc, "ERROR\n");
logg("!Command: poll_fd failed.\n");
@ -67,8 +65,10 @@ int command(int desc, const struct cl_node *root, const struct cl_limits *limits
while((bread = readsock(desc, buff, 1024)) == -1 && errno == EINTR);
if(!bread)
return 0;
if(bread == 0) {
/* Connection closed */
return -1;
}
if(bread < 0) {
logg("!Command parser: read() failed.\n");
@ -142,33 +142,7 @@ int command(int desc, const struct cl_node *root, const struct cl_limits *limits
return COMMAND_SHUTDOWN;
} else if(!strncmp(buff, CMD9, strlen(CMD9))) { /* SESSION */
do {
if(!is_fd_connected(desc)) {
logg("SESSION: Client disconnected without END\n");
return 0;
}
ret = command(desc, root, limits, options, copt, -1);
} while(!ret);
switch(ret) {
case COMMAND_SHUTDOWN:
mdprintf(desc, "SESSION TERMINATED (SHUTDOWN)\n");
break;
case COMMAND_RELOAD:
mdprintf(desc, "SESSION TERMINATED (DATABASE RELOADING)\n");
break;
case COMMAND_END:
mdprintf(desc, "BYE\n");
break;
default:
mdprintf(desc, "SESSION TERMINATED (INTERNAL ERROR)\n");
break;
}
return ret;
return COMMAND_SESSION;
} else if(!strncmp(buff, CMD10, strlen(CMD10))) { /* END */
return COMMAND_END;

@ -22,6 +22,8 @@
#define COMMAND_SHUTDOWN 1
#define COMMAND_RELOAD 2
#define COMMAND_END 3
#define COMMAND_SESSION 4
#define COMMAND_TIMEOUT 5
#define CMD1 "SCAN"
#define CMD2 "RAWSCAN"

Loading…
Cancel
Save