summaryrefslogtreecommitdiffstats
path: root/database/sqlite
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/sqlite
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/sqlite')
-rw-r--r--database/sqlite/edb-sqlite.c45
1 files changed, 42 insertions, 3 deletions
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;
}