summaryrefslogtreecommitdiffstats
path: root/plugin/eurephia.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/eurephia.c')
-rw-r--r--plugin/eurephia.c24
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;
}