summaryrefslogtreecommitdiffstats
path: root/database
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-11-30 20:35:56 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-11-30 20:35:56 +0100
commitd3dddc4b73351fe24abd6059b8fe38ebf97ae3e8 (patch)
treec3d474316df83c9e1ef6ffc0526c5c327ac29b90 /database
parent3f1a2311fe8912659bc1c88fc586fc499955e479 (diff)
downloadeurephia-d3dddc4b73351fe24abd6059b8fe38ebf97ae3e8.tar.gz
eurephia-d3dddc4b73351fe24abd6059b8fe38ebf97ae3e8.tar.xz
eurephia-d3dddc4b73351fe24abd6059b8fe38ebf97ae3e8.zip
Added eDBadminLogout(...) function in database driver
Added one more status code, for active sessions. Auto-logout will now also delete session variables
Diffstat (limited to 'database')
-rw-r--r--database/eurephiadb.c1
-rw-r--r--database/eurephiadb_driver.h1
-rw-r--r--database/sqlite/edb-sqlite.c45
3 files changed, 44 insertions, 3 deletions
diff --git a/database/eurephiadb.c b/database/eurephiadb.c
index 3652f41..3d77ea7 100644
--- a/database/eurephiadb.c
+++ b/database/eurephiadb.c
@@ -95,6 +95,7 @@ int eDBlink_init(eurephiaCTX *ctx, const char *dbl, const int minver)
eDBadminAuth = eGetSym(ctx, ctx->eurephia_driver, "eDBadminAuth");
eDBadminValidateSession = eGetSym(ctx, ctx->eurephia_driver, "eDBadminValidateSession");
eDBadminRegisterLogin = eGetSym(ctx, ctx->eurephia_driver, "eDBadminRegisterLogin");
+ eDBadminLogout = eGetSym(ctx, ctx->eurephia_driver, "eDBadminLogout");
eDBgetUserList = eGetSym(ctx, ctx->eurephia_driver, "eDBgetUserList");
eDBgetUserInfo = eGetSym(ctx, ctx->eurephia_driver, "eDBgetUserInfo");
diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h
index e65f745..be0c4c8 100644
--- a/database/eurephiadb_driver.h
+++ b/database/eurephiadb_driver.h
@@ -89,6 +89,7 @@ int (*eDBstore_session_value) (eurephiaCTX *ctx, eurephiaSESSION *skey, int mode
int (*eDBadminAuth) (eurephiaCTX *ctx, const char *uname, const char *pwd);
int (*eDBadminValidateSession) (eurephiaCTX *ctx, const char *sesskey);
int (*eDBadminRegisterLogin) (eurephiaCTX *ctx, eurephiaSESSION *session);
+int (*eDBadminLogout) (eurephiaCTX *ctx, eurephiaSESSION *session);
eurephiaUSERLIST *(*eDBgetUserList) (eurephiaCTX *ctx, const int sortkey);
eurephiaUSERINFO *(*eDBgetUserInfo) (eurephiaCTX *ctx, eurephiaUSERINFO *searchkey);
diff --git a/database/sqlite/edb-sqlite.c b/database/sqlite/edb-sqlite.c
index 35c0460..2dd836b 100644
--- a/database/sqlite/edb-sqlite.c
+++ b/database/sqlite/edb-sqlite.c
@@ -1035,7 +1035,7 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
res = sqlite_query(ctx,
"SELECT (strftime('%%s',CURRENT_TIMESTAMP)-strftime('%%s',last_action)) > %i"
" FROM eurephia_adminlog"
- " WHERE status = 1"
+ " WHERE status IN (1,2)"
" AND sessionkey = '%q'",
(60 * atoi_nullsafe(defaultValue(eGet_value(ctx->dbc->config,
"eurephiadmin_autologout"),
@@ -1054,7 +1054,7 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
if( valid ) {
res = sqlite_query(ctx,
"UPDATE eurephia_adminlog"
- " SET last_action = CURRENT_TIMESTAMP"
+ " SET last_action = CURRENT_TIMESTAMP, status = 2"
" WHERE sessionkey = '%q'", sesskey);
if( res == NULL ) {
eurephia_log(ctx, LOG_ERROR, 0, "Could not register session activity");
@@ -1064,11 +1064,21 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
// If not valid, register session as auto-logged out
res = sqlite_query(ctx,
"UPDATE eurephia_adminlog"
- " SET logout = CURRENT_TIMESTAMP, status = 3"
+ " SET logout = CURRENT_TIMESTAMP, status = 4"
" WHERE sessionkey = '%q'", sesskey);
if( res == NULL ) {
eurephia_log(ctx, LOG_ERROR, 0, "Could not register old session as logged out");
}
+
+ // Delete session variables
+ res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'",
+ sesskey);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0,
+ "Could not delete session variables (%s))", sesskey);
+ return 0;
+ }
+ sqlite_free_results(res);
}
return valid;
@@ -1106,6 +1116,35 @@ int eDBadminRegisterLogin(eurephiaCTX *ctx, eurephiaSESSION *session) {
return 1;
}
+int eDBadminLogout(eurephiaCTX *ctx, eurephiaSESSION *session) {
+ dbresult *res = NULL;
+
+ assert((ctx != NULL) && (session != NULL) && (session->sessionkey != NULL));
+
+ // Update session as logged out
+ res = sqlite_query(ctx,
+ "UPDATE eurephia_adminlog "
+ " SET logout = CURRENT_TIMESTAMP, status = 3"
+ " WHERE sessionkey = '%q'",
+ session->sessionkey);
+ if( !res ) {
+ eurephia_log(ctx, LOG_FATAL, 0, "Could not manage to register the session as logged out");
+ return 0;
+ }
+ sqlite_free_results(res);
+
+ // Delete session variables
+ res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'", session->sessionkey);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0,
+ "Could not delete session variables (%s))", session->sessionkey);
+ return 0;
+ }
+ sqlite_free_results(res);
+
+ return 1;
+}
+
eurephiaUSERLIST *eDBgetUserList(eurephiaCTX *ctx, const int sortkey) {
return NULL;
}