summarylogtreecommitdiffstats
path: root/2238-eap-dynamic-auth.patch
blob: 17b954ea7d3852dd900d96c35d79d0edfa7acb62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
diff --git a/src/libcharon/plugins/eap_dynamic/eap_dynamic.c b/src/libcharon/plugins/eap_dynamic/eap_dynamic.c
index d0f0595de..83ccd3a8a 100644
--- a/src/libcharon/plugins/eap_dynamic/eap_dynamic.c
+++ b/src/libcharon/plugins/eap_dynamic/eap_dynamic.c
@@ -94,6 +94,13 @@ static eap_method_t *load_method(private_eap_dynamic_t *this,
        return method;
 }

+METHOD(eap_method_t, get_auth, auth_cfg_t*,
+       private_eap_dynamic_t *this)
+{
+       /* get_auth() is only registered if the EAP method supports it */
+       return this->method->get_auth(this->method);
+}
+
 /**
  * Select the first method we can instantiate and is supported by both peers.
  */
@@ -135,6 +142,10 @@ static void select_method(private_eap_dynamic_t *this)
                this->method = load_method(this, entry->type, entry->vendor);
                if (this->method)
                {
+                       if (this->method->get_auth)
+                       {
+                               this->public.interface.get_auth = _get_auth;
+                       }
                        if (entry->vendor)
                        {
                                DBG1(DBG_IKE, "vendor specific EAP method %d-%d selected",
@@ -211,6 +222,7 @@ METHOD(eap_method_t, process, status_t,
                /* restart with a different method */
                this->method->destroy(this->method);
                this->method = NULL;
+               this->public.interface.get_auth = NULL;
                return initiate(this, out);
        }
        if (!this->other_types)