summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-03 00:06:55 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-03 00:06:55 +0100
commit985c50e52b6fcdeb4e60e63e984243069ad79be4 (patch)
tree0bbf4d6fd521cc14fb7cc9552922d221fa8cd66b
parentf4040e08913d7ad586329cef926f287994f8ca0c (diff)
downloadeurephia-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.h2
-rw-r--r--database/sqlite/edb-sqlite.c10
-rw-r--r--eurephiadm/commands.h2
-rw-r--r--eurephiadm/eurephiadm.c17
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);
}
}