diff options
Diffstat (limited to 'plugin/eurephia.c')
-rw-r--r-- | plugin/eurephia.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/plugin/eurephia.c b/plugin/eurephia.c index 8587e93..3451e8c 100644 --- a/plugin/eurephia.c +++ b/plugin/eurephia.c @@ -636,7 +636,7 @@ int eurephia_disconnect(eurephiaCTX *ctx, const char **env) { * * @return Returns 0 on failure and 1 on success. */ -int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macaddr, const char **env) { +int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *clientaddr, const char **env) { eurephiaSESSION *session = NULL; char *digest = NULL, *cname = NULL, *uname = NULL, *vpnipaddr = NULL, *vpnipmask = NULL, @@ -645,7 +645,7 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad int ret = 0, fw_enabled = 0; DEBUG(ctx, 10, "** Function call: eurephia_learn_address(ctx, '%.10s', '%.18s', ...)", - mode, macaddr); + mode, clientaddr); // Get firewall information fw_enabled = (eGet_value(ctx->dbc->config, "firewall_interface") != NULL); @@ -673,13 +673,17 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad } // Update openvpn_lastlog with the active MAC address, and save it as a session variable - ret = eDBregister_vpnmacaddr(ctx, session, macaddr); + ret = eDBregister_vpnmacaddr(ctx, session, clientaddr); if( (fw_enabled) && (fwdest != NULL) ) { fwprofile = eDBget_firewall_profile(ctx, session); if( fwprofile != NULL ) { eFWupdateRequest req = { .mode = fwADD, }; - strncpy(req.macaddress, macaddr, sizeof(req.macaddress)); + if( ctx->tuntype == tuntype_TAP ) { + strncpy(req.macaddress, clientaddr, sizeof(req.macaddress)); + } else { + strncpy(req.ipaddress, vpnipaddr, sizeof(req.ipaddress)); + } strncpy(req.rule_destination, fwdest, sizeof(req.rule_destination)); strncpy(req.goto_destination, fwprofile, sizeof(req.goto_destination)); eFW_UpdateFirewall(ctx, &req); @@ -690,11 +694,11 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad } else if( strncmp(mode, "delete", 6) == 0 ) { // Load the session, based on MAC address - session = eDBopen_session_macaddr(ctx, macaddr); + session = eDBopen_session_macaddr(ctx, clientaddr); if( session == NULL ) { eurephia_log(ctx, LOG_WARNING, 0, "Could not find any session connected to this MAC address: %.18s", - macaddr); + clientaddr); ret = 0; goto exit; } @@ -703,7 +707,11 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad fwprofile = eDBget_firewall_profile(ctx, session); if( fwprofile != NULL ) { eFWupdateRequest req = { .mode = fwDELETE, }; - strncpy(req.macaddress, macaddr, sizeof(req.macaddress)); + if( ctx->tuntype == tuntype_TAP) { + strncpy(req.macaddress, clientaddr, sizeof(req.macaddress)); + } else { + strncpy(req.ipaddress, clientaddr, sizeof(req.ipaddress)); + } strncpy(req.rule_destination, fwdest, sizeof(req.rule_destination)); strncpy(req.goto_destination, fwprofile, sizeof(req.goto_destination)); eFW_UpdateFirewall(ctx, &req); @@ -722,7 +730,7 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad free_nullsafe(ctx, cname); free_nullsafe(ctx, digest); DEBUG(ctx, 10, "** Function result: eurephia_learn_address(ctx, '%s', '%.18s', ...) = %i", - mode, macaddr, ret); + mode, clientaddr, ret); return ret; } |