mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-10 08:46:58 +08:00
fork moved to gdbm backend expiration
This commit is contained in:
@@ -32,7 +32,7 @@
|
||||
#include <limits.h>
|
||||
#include <gdbm.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "setproctitle.h"
|
||||
#include <main.h>
|
||||
#include <cookies.h>
|
||||
|
||||
@@ -115,36 +115,46 @@ datum data;
|
||||
int deleted = 0;
|
||||
struct stored_cookie_st sc;
|
||||
time_t now = time(0);
|
||||
pid_t pid;
|
||||
|
||||
dbf = gdbm_open((char*)s->config->cookie_db_name, 0, GDBM_WRITER, 0, NULL);
|
||||
if (dbf == NULL)
|
||||
return;
|
||||
pid = fork();
|
||||
if (pid == 0) { /* child */
|
||||
clear_lists(s);
|
||||
setproctitle(PACKAGE_NAME"-maint");
|
||||
|
||||
key = gdbm_firstkey(dbf);
|
||||
if (key.dptr == NULL)
|
||||
goto finish;
|
||||
dbf = gdbm_open((char*)s->config->cookie_db_name, 0, GDBM_WRITER, 0, NULL);
|
||||
if (dbf == NULL)
|
||||
exit(1);
|
||||
|
||||
while(key.dptr != NULL) {
|
||||
data = gdbm_fetch( dbf, key);
|
||||
if (data.dsize != sizeof(sc)) {
|
||||
gdbm_delete(dbf, key);
|
||||
deleted++;
|
||||
} else {
|
||||
memcpy(&sc, data.dptr, data.dsize);
|
||||
if (sc.expiration <= now) {
|
||||
key = gdbm_firstkey(dbf);
|
||||
if (key.dptr == NULL)
|
||||
goto finish;
|
||||
|
||||
while(key.dptr != NULL) {
|
||||
data = gdbm_fetch( dbf, key);
|
||||
if (data.dsize != sizeof(sc)) {
|
||||
gdbm_delete(dbf, key);
|
||||
deleted++;
|
||||
} else {
|
||||
memcpy(&sc, data.dptr, data.dsize);
|
||||
if (sc.expiration <= now) {
|
||||
gdbm_delete(dbf, key);
|
||||
deleted++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
key = gdbm_nextkey(dbf, key);
|
||||
}
|
||||
key = gdbm_nextkey(dbf, key);
|
||||
}
|
||||
|
||||
if (deleted > 0)
|
||||
gdbm_reorganize(dbf);
|
||||
if (deleted > 0)
|
||||
gdbm_reorganize(dbf);
|
||||
|
||||
finish:
|
||||
gdbm_close(dbf);
|
||||
gdbm_close(dbf);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static
|
||||
|
||||
14
src/main.c
14
src/main.c
@@ -691,18 +691,8 @@ fork_failed:
|
||||
need_maintainance = 0;
|
||||
mslog(&s, NULL, LOG_INFO, "Performing maintainance");
|
||||
expire_tls_sessions(&s);
|
||||
|
||||
if (s.config->cookie_db_name != NULL) { /* gdbm */
|
||||
pid = fork();
|
||||
if (pid == 0) { /* child */
|
||||
clear_lists(&s);
|
||||
setproctitle(PACKAGE_NAME"-maint");
|
||||
expire_cookies(&s);
|
||||
exit(0);
|
||||
}
|
||||
} else { /* hash */
|
||||
expire_cookies(&s);
|
||||
}
|
||||
expire_cookies(&s);
|
||||
|
||||
alarm(MAINTAINANCE_TIME);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user