diff options
| author | David Sommerseth <dazo@users.sourceforge.net> | 2008-11-30 20:35:56 +0100 |
|---|---|---|
| committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-11-30 20:35:56 +0100 |
| commit | d3dddc4b73351fe24abd6059b8fe38ebf97ae3e8 (patch) | |
| tree | c3d474316df83c9e1ef6ffc0526c5c327ac29b90 /database/sqlite | |
| parent | 3f1a2311fe8912659bc1c88fc586fc499955e479 (diff) | |
| download | eurephia-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.c | 45 |
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; } |
