diff options
Diffstat (limited to 'database/sqlite/eurephiadb-sqlite.c')
| -rw-r--r-- | database/sqlite/eurephiadb-sqlite.c | 63 |
1 files changed, 31 insertions, 32 deletions
diff --git a/database/sqlite/eurephiadb-sqlite.c b/database/sqlite/eurephiadb-sqlite.c index 3562452..512bd57 100644 --- a/database/sqlite/eurephiadb-sqlite.c +++ b/database/sqlite/eurephiadb-sqlite.c @@ -595,9 +595,10 @@ int eDBregister_logout(eurephiaCTX *ctx, eurephiaSESSION *skey, return 1; } + // Retrieve a session key from openvpn_sessionkeys if it is a current session. Session seed is used // as criteria -char *eDBget_sessionkey(eurephiaCTX *ctx, const char *sessionseed) { +char *eDBget_sessionkey_seed(eurephiaCTX *ctx, const char *sessionseed) { dbresult *res = NULL; char *skey = NULL; @@ -624,6 +625,26 @@ char *eDBget_sessionkey(eurephiaCTX *ctx, const char *sessionseed) { return skey; } +char *eDBget_sessionkey_macaddr(eurephiaCTX *ctx, const char *macaddr) { + dbresult *res = NULL; + char *skey = NULL; + + // Find sessionkey from MAC address + res = sqlite_query(ctx, + "SELECT sessionkey " + " FROM openvpn_sessions " + " WHERE datakey = 'macaddr' AND dataval = '%q'", macaddr); + if( res == NULL ) { + eurephia_log(ctx, LOG_CRITICAL, 0, + "Could not remove session from database (MAC addr: %s)", macaddr); + return 0; + } + skey = strdup_nullsafe(sqlite_get_value(res, 0, 0)); + sqlite_free_results(res); + + return skey; +} + // Function returns true(1) if session key is unique int eDBcheck_sessionkey_uniqueness(eurephiaCTX *ctx, const char *seskey) { @@ -783,30 +804,13 @@ int eDBstore_session_value(eurephiaCTX *ctx, eurephiaSESSION *session, int mode, // Delete session information from openvpn_sessions and update openvpn_lastlog with status -int eDBdestroy_session(eurephiaCTX *ctx, const char *macaddr) -{ +int eDBdestroy_session(eurephiaCTX *ctx, eurephiaSESSION *session) { dbresult *res = NULL; - char *skey = NULL; - eurephia_log(ctx, LOG_DEBUG, 10, "Function call: eDBdestroy_session(ctx, '%s')", macaddr); + eurephia_log(ctx, LOG_DEBUG, 10, "Function call: eDBdestroy_session(ctx, '%s')", session->sessionkey); - // Find sessionkey from MAC address - res = sqlite_query(ctx, - "SELECT sessionkey " - " FROM openvpn_sessions " - " WHERE datakey = 'macaddr' AND dataval = '%q'", macaddr); - if( res == NULL ) { - eurephia_log(ctx, LOG_CRITICAL, 0, - "Could not remove session from database (MAC addr: %s)", macaddr); - return 0; - } - - skey = strdup_nullsafe(sqlite_get_value(res, 0, 0)); - sqlite_free_results(res); - - if( skey == NULL ) { - eurephia_log(ctx, LOG_INFO, 0, - "Could not find any sessions connected to MAC addr '%s')", macaddr); + if( (session == NULL) || (session->sessionkey == NULL) ) { + eurephia_log(ctx, LOG_ERROR, 1, "No active session given to be destroyed"); return 1; } @@ -814,32 +818,27 @@ int eDBdestroy_session(eurephiaCTX *ctx, const char *macaddr) res = sqlite_query(ctx, "UPDATE openvpn_lastlog " " SET sessionstatus = 4, session_del = CURRENT_TIMESTAMP " - " WHERE sessionkey = '%q' AND sessionstatus = 3", skey); + " WHERE sessionkey = '%q' AND sessionstatus = 3", session->sessionkey); if( res == NULL ) { eurephia_log(ctx, LOG_CRITICAL, 0, - "Could not update session status in lastlog (%s/%s))", skey, macaddr); - free_nullsafe(skey); + "Could not update session status in lastlog (%s))", session->sessionkey); return 0; } sqlite_free_results(res); // Delete session variables - res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'", skey); + res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'", session->sessionkey); if( res == NULL ) { eurephia_log(ctx, LOG_CRITICAL, 0, - "Could not delete session variables (%s/%s))", skey, macaddr); - free_nullsafe(skey); + "Could not delete session variables (%s))", session->sessionkey); return 0; } sqlite_free_results(res); // Remove the sessionkey from openvpn_sessions - if( eDBremove_sessionkey(ctx, skey) == 0 ) { - free_nullsafe(skey); + if( eDBremove_sessionkey(ctx, session->sessionkey) == 0 ) { return 0; } - - free_nullsafe(skey); return 1; } |
