diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-03 00:06:55 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-03 00:06:55 +0100 |
commit | 985c50e52b6fcdeb4e60e63e984243069ad79be4 (patch) | |
tree | 0bbf4d6fd521cc14fb7cc9552922d221fa8cd66b | |
parent | f4040e08913d7ad586329cef926f287994f8ca0c (diff) | |
download | eurephia-985c50e52b6fcdeb4e60e63e984243069ad79be4.tar.gz eurephia-985c50e52b6fcdeb4e60e63e984243069ad79be4.tar.xz eurephia-985c50e52b6fcdeb4e60e63e984243069ad79be4.zip |
Changed the logout behaviour to avoid login and/or access control check when user is about to logout
-rw-r--r-- | database/eurephiadb_driver.h | 2 | ||||
-rw-r--r-- | database/sqlite/edb-sqlite.c | 10 | ||||
-rw-r--r-- | eurephiadm/commands.h | 2 | ||||
-rw-r--r-- | eurephiadm/eurephiadm.c | 17 |
4 files changed, 17 insertions, 14 deletions
diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h index e59f2ba..ead72a5 100644 --- a/database/eurephiadb_driver.h +++ b/database/eurephiadb_driver.h @@ -89,7 +89,7 @@ int (*eDBstore_session_value) (eurephiaCTX *ctx, eurephiaSESSION *skey, int mode int (*eDBadminAuth) (eurephiaCTX *ctx, const char *req_acc, const char *uname, const char *pwd); int (*eDBadminValidateSession) (eurephiaCTX *ctx, const char *sesskey, const char *req_acc); int (*eDBadminRegisterLogin) (eurephiaCTX *ctx, eurephiaSESSION *session); -int (*eDBadminLogout) (eurephiaCTX *ctx, eurephiaSESSION *session); +int (*eDBadminLogout) (eurephiaCTX *ctx, const char *session); int (*eDBadminConfigSet) (eurephiaCTX *ctx, const char *key, const char *val); int (*eDBadminConfigDelete) (eurephiaCTX *ctx, const char *key); diff --git a/database/sqlite/edb-sqlite.c b/database/sqlite/edb-sqlite.c index 220d9f7..05e16f7 100644 --- a/database/sqlite/edb-sqlite.c +++ b/database/sqlite/edb-sqlite.c @@ -1153,17 +1153,17 @@ int eDBadminRegisterLogin(eurephiaCTX *ctx, eurephiaSESSION *session) { return 1; } -int eDBadminLogout(eurephiaCTX *ctx, eurephiaSESSION *session) { +int eDBadminLogout(eurephiaCTX *ctx, const char *sessionkey) { dbresult *res = NULL; - assert((ctx != NULL) && (session != NULL) && (session->sessionkey != NULL)); + assert((ctx != NULL) && (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); + sessionkey); if( !res ) { eurephia_log(ctx, LOG_FATAL, 0, "Could not manage to register the session as logged out"); return 0; @@ -1171,10 +1171,10 @@ int eDBadminLogout(eurephiaCTX *ctx, eurephiaSESSION *session) { sqlite_free_results(res); // Delete session variables - res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'", session->sessionkey); + res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'", sessionkey); if( res == NULL ) { eurephia_log(ctx, LOG_ERROR, 0, - "Could not delete session variables (%s))", session->sessionkey); + "Could not delete session variables (%s))", sessionkey); return 0; } sqlite_free_results(res); diff --git a/eurephiadm/commands.h b/eurephiadm/commands.h index 3b78710..a8bafe5 100644 --- a/eurephiadm/commands.h +++ b/eurephiadm/commands.h @@ -53,7 +53,7 @@ static const eurephiadm_functions cmdline_functions[] = { {"help", 0, NULL, NULL, "This help screen", NULL, cmd_Help}, - {"logout", 1, "login", NULL, + {"logout", 1, NULL, NULL, // Logout is specially handled - change with care "Logout from an open session", NULL, cmd_Logout}, {"listusers", 1, "useradmin", NULL, diff --git a/eurephiadm/eurephiadm.c b/eurephiadm/eurephiadm.c index 3d9d71c..929bb07 100644 --- a/eurephiadm/eurephiadm.c +++ b/eurephiadm/eurephiadm.c @@ -40,7 +40,7 @@ #include "get_console_input.h" #include "commands.h" -#define EUREPHIADMVERSION "1.0" +#define EUREPHIADMVERSION "0.9.2_beta" #define MAX_ARGUMENTS 64 @@ -88,7 +88,7 @@ int cmd_Help(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int a int cmd_Logout(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { int rc = 0; - rc = eDBadminLogout(ctx, sess); + rc = eDBadminLogout(ctx, argv[1]); fprintf(stdout, "%s\n", (rc == 1 ? "Logged out succesfully" : "Logout failed.")); return (rc == 0); } @@ -314,6 +314,14 @@ int main(int argc, char **argv) { } session = do_login(ctx, call_fnc->accesslvl); } else { + // If we are logging out, do so here - without checking the session + if( strcmp(call_fnc->command, "logout") == 0) { + char *logout_argv[] = { sesskey_file }; + rc = cmd_Logout(ctx, NULL, cfg, 0, logout_argv); + remove_session_file(ctx); + goto exit; + } + // Session file found, check if it still is a valid session if( eDBadminValidateSession(ctx, sesskey_file, call_fnc->accesslvl) ) {; // If valid, load this session @@ -321,11 +329,6 @@ int main(int argc, char **argv) { } else { // If not valid, remove session file and go to login remove_session_file(ctx); - if( strcmp(call_fnc->command, "logout") == 0) { - fprintf(stderr, "You are already logged out\n"); - rc = 0; - goto exit; - } session = do_login(ctx, call_fnc->accesslvl); } } |