diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2012-09-13 17:46:10 +0200 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2012-09-13 17:48:30 +0200 |
commit | ef50b1ba878472e82ab499d4066c5a4a2b757741 (patch) | |
tree | 0fa466611da4fa7698e442882219b2c879b12e29 /database | |
parent | ea92f408ee3d103c1668f36a7d4117a3fcebbf13 (diff) | |
download | eurephia-ef50b1ba878472e82ab499d4066c5a4a2b757741.tar.gz eurephia-ef50b1ba878472e82ab499d4066c5a4a2b757741.tar.xz eurephia-ef50b1ba878472e82ab499d4066c5a4a2b757741.zip |
Added a new database driver function: eDBregister_vpnclientaddr()
This function replaces eDBregister_vpnmacaddr(). This new function
will in addition to the MAC address (if OpenVPN is running in TAP mode)
also register the client's IPv4 VPN address. It's also prepared for
logging the client's IPv6 VPN address.
This function supports both TUN and TAP mode, while the old function
only handled TAP mode.
Signed-off-by: David Sommerseth <dazo@users.sourceforge.net>
Diffstat (limited to 'database')
-rw-r--r-- | database/eurephiadb.c | 19 | ||||
-rw-r--r-- | database/eurephiadb_driver.h | 21 |
2 files changed, 36 insertions, 4 deletions
diff --git a/database/eurephiadb.c b/database/eurephiadb.c index d4618d3..e53d67f 100644 --- a/database/eurephiadb.c +++ b/database/eurephiadb.c @@ -1,6 +1,6 @@ /* eurephiadb.c -- Loads and initialises the database driver * - * GPLv2 only - Copyright (C) 2008 - 2010 + * GPLv2 only - Copyright (C) 2008 - 2012 * David Sommerseth <dazo@users.sourceforge.net> * * This program is free software; you can redistribute it and/or @@ -70,6 +70,7 @@ int eDBlink_close(eurephiaCTX *ctx) */ int eDBlink_init(eurephiaCTX *ctx, const char *dbdriver, const int minver) { + int apiver = -1; if( dbdriver == NULL ) { eurephia_log(ctx, LOG_FATAL, 0, "No eurephia database driver configured. " "eurephia authentication will not be available"); @@ -101,11 +102,20 @@ int eDBlink_init(eurephiaCTX *ctx, const char *dbdriver, const int minver) } // Configure functions contained in the driver, defined by API version - switch( (eDB_DriverAPIVersion() > minver ? minver : eDB_DriverAPIVersion()) ) { + apiver = (eDB_DriverAPIVersion() > minver ? minver : eDB_DriverAPIVersion()); + switch( apiver ) { + case -1: + eurephia_log(ctx, LOG_FATAL, 0, "Something unexpected happened - apiver==-1"); + ctx->fatal_error = 1; + break; + default: eurephia_log(ctx, LOG_WARNING, 0, "eurephia database driver API is newer than the running eurephia version. Consider " "to upgrade eurephia to take advantage of newer features in the driver."); + case 3: + eDBregister_vpnclientaddr = eGetSym(ctx, ctx->eurephia_driver, "eDBregister_vpnclientaddr"); + case 2: #ifdef ENABLE_EUREPHIADM eDBadminAuthenticate = eGetSym(ctx, ctx->eurephia_driver, "eDBadminAuthenticate"); @@ -135,7 +145,10 @@ int eDBlink_init(eurephiaCTX *ctx, const char *dbdriver, const int minver) eDBregister_attempt = eGetSym(ctx, ctx->eurephia_driver, "eDBregister_attempt"); eDBregister_login = eGetSym(ctx, ctx->eurephia_driver, "eDBregister_login"); - eDBregister_vpnmacaddr = eGetSym(ctx, ctx->eurephia_driver, "eDBregister_vpnmacaddr"); + + // If api version is 3, this function is replaced by eDBregister_vpnclientaddr() + eDBregister_vpnmacaddr = (apiver < 3 ? + eGetSym(ctx, ctx->eurephia_driver, "eDBregister_vpnmacaddr") : NULL); eDBregister_logout = eGetSym(ctx, ctx->eurephia_driver, "eDBregister_logout"); eDBget_firewall_profile = eGetSym(ctx, ctx->eurephia_driver, "eDBget_firewall_profile"); diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h index c02d167..abdcd77 100644 --- a/database/eurephiadb_driver.h +++ b/database/eurephiadb_driver.h @@ -1,6 +1,6 @@ /* eurephiadb_driver.h -- API provided by the database driver * - * GPLv2 only - Copyright (C) 2008 - 2010 + * GPLv2 only - Copyright (C) 2008 - 2012 * David Sommerseth <dazo@users.sourceforge.net> * * This program is free software; you can redistribute it and/or @@ -213,6 +213,25 @@ int EUREPHIA_DRIVERAPI_FUNC(eDBregister_vpnmacaddr)(eurephiaCTX *ctx, eurephiaSE /** + * Registers the VPN clients address. This function is called when + * OpenVPN does the OPENVPN_PLUGIN_LEARN_ADDRESS call to the eurephia-auth plug-in. + * In TAP mode the clients VPN MAC and IP address are stored, in TUN mode the VPN IP + * address is stored. + * + * @version API version level 3 + * @param ctx eurephiaCTX + * @param session eurephiaSESSION of the user + * @param macaddr String (char *) containing the MAC address of the clients interface. + * @param vpnip4addr String (char *) containing the IPv4 address of the clients interface. + * @param vpnip6addr String (char *) containing the IPv6 address of the clients interface. + * + * @return Returns 1 on success, otherwise 0. + */ +int EUREPHIA_DRIVERAPI_FUNC(eDBregister_vpnclientaddr)(eurephiaCTX *ctx, eurephiaSESSION *session, + const char * macaddr, + const char * vpnip4addr, const char *vpnip6addr); + +/** * Registers when a user logged out. It will then add some information about the session to the * eurephia lastlog. * |