diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-11-28 23:27:30 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-11-28 23:27:30 +0100 |
commit | 0c35035dc8ac5d099f53353938a66b33227d3342 (patch) | |
tree | fd33e6d285eef6b27fb29e4632d3fcd1d50f5594 /plugin | |
parent | 4dabdc0e154b3be0c9b64d97041502b01662ed43 (diff) | |
download | eurephia-0c35035dc8ac5d099f53353938a66b33227d3342.tar.gz eurephia-0c35035dc8ac5d099f53353938a66b33227d3342.tar.xz eurephia-0c35035dc8ac5d099f53353938a66b33227d3342.zip |
Splitted plugin/eurephiadb_session.[ch] into two parts
One part is a generic session handling part
(common/eurephiadb_session_common.[ch]) and the other part
is left in the old plugin/eurephiadb_session.[ch].
This splitting should make it easiser to reuse some of the session
handling functions for the admin utils.
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/CMakeLists.txt | 1 | ||||
-rw-r--r-- | plugin/eurephia.c | 1 | ||||
-rw-r--r-- | plugin/eurephiadb_session.c | 106 | ||||
-rw-r--r-- | plugin/eurephiadb_session.h | 16 |
4 files changed, 5 insertions, 119 deletions
diff --git a/plugin/CMakeLists.txt b/plugin/CMakeLists.txt index 60d221f..8a1b43f 100644 --- a/plugin/CMakeLists.txt +++ b/plugin/CMakeLists.txt @@ -11,6 +11,7 @@ SET(eurephia_auth_SRC ../common/eurephia_getsym.c ../common/eurephia_log.c ../common/eurephia_values.c + ../common/eurephiadb_session_common.c ../common/passwd.c ../common/sha512.c ) diff --git a/plugin/eurephia.c b/plugin/eurephia.c index 4853591..728ddd0 100644 --- a/plugin/eurephia.c +++ b/plugin/eurephia.c @@ -31,6 +31,7 @@ #include <eurephiafw.h> #include <eurephia_nullsafe.h> #include <eurephia_values.h> +#include <eurephiadb_session_common.h> #include <eurephiadb_session.h> #include <certinfo.h> diff --git a/plugin/eurephiadb_session.c b/plugin/eurephiadb_session.c index ab03e37..a9c886c 100644 --- a/plugin/eurephiadb_session.c +++ b/plugin/eurephiadb_session.c @@ -1,4 +1,4 @@ -/* eurephiadb_session.c -- Global API for handling eurephia sessions +/* eurephiadb_session.c -- Functions for handling sessions from eurephia-auth * * GPLv2 - Copyright (C) 2008 David Sommerseth <dazo@users.sourceforge.net> * @@ -22,10 +22,6 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <sys/types.h> -#include <sys/time.h> -#include <time.h> -#include <openssl/rand.h> #define EUREPHIA_FWINTF #include <eurephiafw_struct.h> @@ -33,7 +29,7 @@ #include "eurephia_nullsafe.h" #include "eurephia_log.h" #include "eurephiadb_session.h" -#include "eurephia_values.h" +#include <eurephiadb_session_common.h> #include "sha512.h" @@ -47,90 +43,6 @@ extern int (*eDBregister_sessionkey) (eurephiaCTX *ctx, const char *seed, const extern eurephiaVALUES *(*eDBload_sessiondata) (eurephiaCTX *ctx, const char *sesskey); -extern int eDBstore_session_value(eurephiaCTX *ctx, eurephiaSESSION *session, int mode, - const char *key, const char *val); - - -// Adds or updates a key in the eurephiaVALUES stack. Database is updated before the stack is updated. -// If database fails, the stack is not updated. -int eDBset_session_value(eurephiaCTX *ctx, eurephiaSESSION *session, const char *key, const char *val) { - eurephiaVALUES *svals = NULL; - - if( (session == NULL) || (key == NULL) ) { - return 0; - } - - DEBUG(ctx, 30, "Function call: eDBset_session_value(ctx, '%s','%s','%s')", - session->sessionkey, key, val); - - // Create a new session value buffer if it does not exist - if( session->sessvals == NULL ) { - session->sessvals = eCreate_value_space(ctx, 10); - if( session->sessvals == NULL ) { - eurephia_log(ctx, LOG_PANIC, 0, "Could not allocate memory for session values"); - return 0; - } - } - - // Check if the session value exists already. If it does update it, or else add it - svals = eGet_valuestruct(session->sessvals, key); - if( (svals == NULL) && (val != NULL) ) { - DEBUG(ctx, 32, "eDBset_session_value ... New session value: %s = '%s'", key, val); - // Add a new session value - if( eDBstore_session_value(ctx, session, SESSVAL_NEW, key, val) ) { - DEBUG(ctx, 32, "eDBset_session_value ... Adding value to value stack: %s = '%s'", - key, val); - // Add value to the stack - eAdd_value(ctx, session->sessvals, key, val); - - DEBUG(ctx, 32, "Registered session variable to session '%s': %s = %s", - session->sessionkey, key, val); - } - } else if( svals != NULL ) { - if( (val != NULL) && (strcmp(svals->val, val) == 0) ) { - DEBUG(ctx, 32, "Session value not changed('%s','%s','%s)", - session->sessionkey, key, val); - return 1; - } - // Update the value in the stack if database is updated without errors - if( eDBstore_session_value(ctx, session,(val != NULL ? SESSVAL_UPDATE : SESSVAL_DELETE), key,val)){ - free_nullsafe(svals->val); - svals->val = strdup_nullsafe(val); - DEBUG(ctx, 32, "Session variable updated in session '%s': %s = %s", - session->sessionkey, key, val); - } - } else if( (svals == NULL) && (val == NULL ) ) { - DEBUG(ctx, 32, "Ignoring saving new session value '%s' == NULL", key); - } - return 1; -} - - -// Generate some random data and return a string. -static int rand_init = 0; -int get_randstring(eurephiaCTX *ctx, char *rndstr, int len) { - int attempts = 0; - do { - if( !rand_init ) { - if( !RAND_load_file("/dev/urandom", 64) ) { - eurephia_log(ctx, LOG_FATAL, 0, "Could not load random data from /dev/urandom"); - return 0; - } - rand_init = 1; - } - - if( RAND_pseudo_bytes((unsigned char *) rndstr, len) ) { - return 1; - } - sleep(1); - rand_init = 0; - } while( attempts++ < 11 ); - eurephia_log(ctx, LOG_FATAL, 0, "RAND_pseudo_bytes() could not generate enough random data"); - return 0; -} - - - // Generates a new session structure. Session key will be created if session seed (input params) are not known. // If session seed is known, the already generated session key will be used. eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest, @@ -235,7 +147,7 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest, memset(rndstr, 0, (totlen * 2)); rndlen = ((totlen * 2) - strlen_nullsafe(seed) - 2); - if( !get_randstring(ctx, rndstr, rndlen) ) { + if( !eDBsessionGetRandString(ctx, rndstr, rndlen) ) { eurephia_log(ctx, LOG_PANIC, 0, "Could not generate enough random data for session key"); free_nullsafe(new_session->sessionkey); @@ -340,15 +252,3 @@ eurephiaSESSION *eDBopen_session_macaddr(eurephiaCTX *ctx, const char *macaddr) // Return struct which contains the current session return new_session; } - - -// Free up the memory used by a session structure -void eDBfree_session_func(eurephiaCTX *ctx, eurephiaSESSION *session) { - if( session == NULL ) { - return; - } - DEBUG(ctx, 12, "Function call: eDBfree_session(ctx, '%s')", session->sessionkey); - eFree_values(ctx, session->sessvals); - free_nullsafe(session->sessionkey); - free_nullsafe(session); -} diff --git a/plugin/eurephiadb_session.h b/plugin/eurephiadb_session.h index 17271be..b57e579 100644 --- a/plugin/eurephiadb_session.h +++ b/plugin/eurephiadb_session.h @@ -23,21 +23,8 @@ #include <eurephiadb_session_struct.h> -#define SESSION_NEW 1 -#define SESSION_EXISTING 2 -#define SESSION_REGISTERED 3 -#define SESSION_LOGGEDOUT 4 - -#define SESSVAL_NEW 10 -#define SESSVAL_UPDATE 11 -#define SESSVAL_DELETE 12 - -eurephiaVALUES *eDBfind_session_value(eurephiaCTX *ctx, eurephiaSESSION *seskey, const char *key); - int eDBset_session_value(eurephiaCTX *ctx, eurephiaSESSION *sesskey, const char *key, const char *val); -char *eDBget_session_value(eurephiaCTX *ctx, eurephiaSESSION *sesskey, const char *key); - eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest, const char *cname, const char *username, const char *vpnipaddr, const char *vpnipmask, @@ -45,7 +32,4 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest, eurephiaSESSION *eDBopen_session_macaddr(eurephiaCTX *ctx, const char *macaddr); -#define eDBfree_session(c, s) { eDBfree_session_func(c, s); s = NULL;} -void eDBfree_session_func(eurephiaCTX *ctx, eurephiaSESSION *sk); - #endif /* !EUREPHIADB_SESSION_H_ */ |