diff --git a/src/libcharon/plugins/osmo_epdg/Makefile.am b/src/libcharon/plugins/osmo_epdg/Makefile.am index 43907f14b..8ca5e00c6 100644 --- a/src/libcharon/plugins/osmo_epdg/Makefile.am +++ b/src/libcharon/plugins/osmo_epdg/Makefile.am @@ -22,4 +22,5 @@ libstrongswan_osmo_epdg_la_SOURCES = \ osmo_epdg_listener.h osmo_epdg_listener.c \ gsup_client.h gsup_client.c \ ipa_client.h ipa_client.c \ - osmo_epdg_utils.h osmo_epdg_utils.c + osmo_epdg_utils.h osmo_epdg_utils.c \ + osmo_epdg_db.h osmo_epdg_db.c diff --git a/src/libcharon/plugins/osmo_epdg/osmo_epdg_listener.c b/src/libcharon/plugins/osmo_epdg/osmo_epdg_listener.c index 566c825b3..906db838f 100644 --- a/src/libcharon/plugins/osmo_epdg/osmo_epdg_listener.c +++ b/src/libcharon/plugins/osmo_epdg/osmo_epdg_listener.c @@ -20,8 +20,11 @@ #include #include +#include #include +#include + #include "osmo_epdg_plugin.h" #include "osmo_epdg_listener.h" #include "osmo_epdg_utils.h" @@ -85,7 +88,9 @@ METHOD(listener_t, authorize, bool, bool final, bool *success) { int ret; + identification_t* imsi_id; char apn[APN_MAXLEN]; + char imsi[16] = {0}; DBG1(DBG_NET, "Authorized: uniq 0x%08x, name %s final: %d, eap: %d!", ike_sa->get_unique_id(ike_sa), ike_sa->get_name(ike_sa), @@ -97,8 +102,21 @@ METHOD(listener_t, authorize, bool, return TRUE; } + imsi_id = ike_sa->get_other_id(ike_sa); + if (!imsi_id) + { + DBG1(DBG_NET, "epdg: authorize: Can't get EAP identity."); + goto err; + } + + if (get_imsi(imsi_id, imsi, sizeof(imsi) - 1)) + { + DBG1(DBG_NET, "epdg: authorize: Can't find IMSI in EAP identity."); + goto err; + } + apn[0] = 0; - ret = get_apn(sa, apn, APN_MAXLEN); + ret = get_apn(ike_sa, apn, APN_MAXLEN); if (!ret && ret != -EINVAL) { DBG1(DBG_NET, "epdg_listener: Tunnel Request: Couldn't get APN!"); diff --git a/src/libcharon/plugins/osmo_epdg/osmo_epdg_utils.h b/src/libcharon/plugins/osmo_epdg/osmo_epdg_utils.h index b8e26653c..479c9e069 100644 --- a/src/libcharon/plugins/osmo_epdg/osmo_epdg_utils.h +++ b/src/libcharon/plugins/osmo_epdg/osmo_epdg_utils.h @@ -24,7 +24,7 @@ #define IPA_ALLOC_SIZE 1200 -enum ue_state state { +enum ue_state { /* Initial */ UE_UNAUTHENTICATED, /* Authenticated */