]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
EAP server: Simplify EAP method registration call
authorJouni Malinen <jouni@qca.qualcomm.com>
Wed, 13 Jan 2016 21:35:53 +0000 (23:35 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 13 Jan 2016 21:35:53 +0000 (23:35 +0200)
Free the allocated structure in error cases to remove need for each EAP
method to handle the error cases separately. Each registration function
can simply do "return eap_server_method_register(eap);" in the end of
the function.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
22 files changed:
src/eap_server/eap_methods.h
src/eap_server/eap_server_aka.c
src/eap_server/eap_server_eke.c
src/eap_server/eap_server_fast.c
src/eap_server/eap_server_gpsk.c
src/eap_server/eap_server_gtc.c
src/eap_server/eap_server_identity.c
src/eap_server/eap_server_ikev2.c
src/eap_server/eap_server_md5.c
src/eap_server/eap_server_methods.c
src/eap_server/eap_server_mschapv2.c
src/eap_server/eap_server_pax.c
src/eap_server/eap_server_peap.c
src/eap_server/eap_server_psk.c
src/eap_server/eap_server_pwd.c
src/eap_server/eap_server_sake.c
src/eap_server/eap_server_sim.c
src/eap_server/eap_server_tls.c
src/eap_server/eap_server_tnc.c
src/eap_server/eap_server_ttls.c
src/eap_server/eap_server_vendor_test.c
src/eap_server/eap_server_wsc.c

index 0baa3279086e488cd8cd15bf501dd3eaa7381430..3bf1495f76bf0e8566b104268991ed95fd835b33 100644 (file)
@@ -15,7 +15,6 @@ const struct eap_method * eap_server_get_eap_method(int vendor,
                                                    EapType method);
 struct eap_method * eap_server_method_alloc(int version, int vendor,
                                            EapType method, const char *name);
-void eap_server_method_free(struct eap_method *method);
 int eap_server_method_register(struct eap_method *method);
 
 EapType eap_server_get_type(const char *name, int *vendor);
index db9b6aa2db39a8bfa3d401c08daa9dd4d9e8f7a7..a8bb5eae6b56a519e56ad868d6cf2d4e5671fe73 100644 (file)
@@ -1319,7 +1319,6 @@ static u8 * eap_aka_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_aka_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_AKA, "AKA");
@@ -1337,10 +1336,7 @@ int eap_server_aka_register(void)
        eap->get_emsk = eap_aka_get_emsk;
        eap->getSessionId = eap_aka_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
 
 
@@ -1348,7 +1344,6 @@ int eap_server_aka_register(void)
 int eap_server_aka_prime_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_AKA_PRIME,
@@ -1367,10 +1362,6 @@ int eap_server_aka_prime_register(void)
        eap->get_emsk = eap_aka_get_emsk;
        eap->getSessionId = eap_aka_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-
-       return ret;
+       return eap_server_method_register(eap);
 }
 #endif /* EAP_SERVER_AKA_PRIME */
index ba82be9c3f3adcbb2cc97727e08db0592d177f98..1eba8f515648a2ae1055e2e89e14a17e0c711280 100644 (file)
@@ -792,7 +792,6 @@ static u8 * eap_eke_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_eke_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_EKE, "EKE");
@@ -810,8 +809,5 @@ int eap_server_eke_register(void)
        eap->get_emsk = eap_eke_get_emsk;
        eap->getSessionId = eap_eke_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 2e03f8840a0075fad978187ac29add6c8c9e54cc..6993159788d3a8c415ffebd0d68118e6323c6bbc 100644 (file)
@@ -1620,7 +1620,6 @@ static u8 * eap_fast_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_fast_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_FAST, "FAST");
@@ -1638,8 +1637,5 @@ int eap_server_fast_register(void)
        eap->isSuccess = eap_fast_isSuccess;
        eap->getSessionId = eap_fast_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 50f15c31d0dc024893b620e0ab78b85f823067d2..94e74ec9b2f7dbc989cafd059ae7e1b10db76c4e 100644 (file)
@@ -631,7 +631,6 @@ static u8 * eap_gpsk_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_gpsk_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_GPSK, "GPSK");
@@ -649,8 +648,5 @@ int eap_server_gpsk_register(void)
        eap->get_emsk = eap_gpsk_get_emsk;
        eap->getSessionId = eap_gpsk_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 98ac3c6ec49585043269283bfada465bd8cd82a8..193a8517ac086c76b373deab8de805431231a35a 100644 (file)
@@ -202,7 +202,6 @@ static Boolean eap_gtc_isSuccess(struct eap_sm *sm, void *priv)
 int eap_server_gtc_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_GTC, "GTC");
@@ -217,8 +216,5 @@ int eap_server_gtc_register(void)
        eap->isDone = eap_gtc_isDone;
        eap->isSuccess = eap_gtc_isSuccess;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 45015336b9079e61eda8b419c0bf81fd0b5f48cc..1b1db53f25b20a131aefd36caa74cac88bd1b65a 100644 (file)
@@ -157,7 +157,6 @@ static Boolean eap_identity_isSuccess(struct eap_sm *sm, void *priv)
 int eap_server_identity_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_IDENTITY,
@@ -174,8 +173,5 @@ int eap_server_identity_register(void)
        eap->isDone = eap_identity_isDone;
        eap->isSuccess = eap_identity_isSuccess;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 16e62764cc55a11a9132ff68cccaf17572bf86b2..3a249d141e0cfc8bfd3f3b863b577df51516dea2 100644 (file)
@@ -550,7 +550,6 @@ static u8 * eap_ikev2_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_ikev2_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_IKEV2,
@@ -569,8 +568,5 @@ int eap_server_ikev2_register(void)
        eap->get_emsk = eap_ikev2_get_emsk;
        eap->getSessionId = eap_ikev2_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 71e8d59e03960a1bec9f575b7406da3bd3e11930..cf5ceb1d15298f97c571842b10f03366f0f30dbb 100644 (file)
@@ -153,7 +153,6 @@ static Boolean eap_md5_isSuccess(struct eap_sm *sm, void *priv)
 int eap_server_md5_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_MD5, "MD5");
@@ -168,8 +167,5 @@ int eap_server_md5_register(void)
        eap->isDone = eap_md5_isDone;
        eap->isSuccess = eap_md5_isSuccess;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 9e9dc934eb776e389cd9ad3d119dad69aca6530b..79ed3447ac0a25fd18d41a63faddcfed8ec3eb91 100644 (file)
@@ -87,7 +87,7 @@ struct eap_method * eap_server_method_alloc(int version, int vendor,
  * eap_server_method_free - Free EAP server method structure
  * @method: Method structure allocated with eap_server_method_alloc()
  */
-void eap_server_method_free(struct eap_method *method)
+static void eap_server_method_free(struct eap_method *method)
 {
        os_free(method);
 }
@@ -95,26 +95,31 @@ void eap_server_method_free(struct eap_method *method)
 
 /**
  * eap_server_method_register - Register an EAP server method
- * @method: EAP method to register
+ * @method: EAP method to register from eap_server_method_alloc()
  * Returns: 0 on success, -1 on invalid method, or -2 if a matching EAP method
  * has already been registered
  *
  * Each EAP server method needs to call this function to register itself as a
- * supported EAP method.
+ * supported EAP method. The caller must not free the allocated method data
+ * regardless of the return value.
  */
 int eap_server_method_register(struct eap_method *method)
 {
        struct eap_method *m, *last = NULL;
 
        if (method == NULL || method->name == NULL ||
-           method->version != EAP_SERVER_METHOD_INTERFACE_VERSION)
+           method->version != EAP_SERVER_METHOD_INTERFACE_VERSION) {
+               eap_server_method_free(method);
                return -1;
+       }
 
        for (m = eap_methods; m; m = m->next) {
                if ((m->vendor == method->vendor &&
                     m->method == method->method) ||
-                   os_strcmp(m->name, method->name) == 0)
+                   os_strcmp(m->name, method->name) == 0) {
+                       eap_server_method_free(method);
                        return -2;
+               }
                last = m;
        }
 
index 98d74e0d717e276e3d9c4070a51a78f8311a9ca6..460cd9c82ff567a739015ed936bc228eff91c979 100644 (file)
@@ -571,7 +571,6 @@ static Boolean eap_mschapv2_isSuccess(struct eap_sm *sm, void *priv)
 int eap_server_mschapv2_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_MSCHAPV2,
@@ -588,8 +587,5 @@ int eap_server_mschapv2_register(void)
        eap->getKey = eap_mschapv2_getKey;
        eap->isSuccess = eap_mschapv2_isSuccess;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 0e6b4a0698edc96b55fe04e5023451effdbc5598..782b8c316537ee95b2e082069fcc51dea707b8de 100644 (file)
@@ -565,7 +565,6 @@ static u8 * eap_pax_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_pax_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_PAX, "PAX");
@@ -583,8 +582,5 @@ int eap_server_pax_register(void)
        eap->get_emsk = eap_pax_get_emsk;
        eap->getSessionId = eap_pax_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index d424862ae2e1e80f602ea52337f30f3529568555..18d31b527fdd7c9db8f967b51e33c08ef1a0cf2f 100644 (file)
@@ -1363,7 +1363,6 @@ static u8 * eap_peap_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_peap_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_PEAP, "PEAP");
@@ -1380,8 +1379,5 @@ int eap_server_peap_register(void)
        eap->isSuccess = eap_peap_isSuccess;
        eap->getSessionId = eap_peap_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 12b5d25d67ffc9e44ebfaefbfb0edb08f80d3fbf..857d421393bc83ba383f6e4d75c44134ff2da8a5 100644 (file)
@@ -510,7 +510,6 @@ static u8 * eap_psk_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_psk_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_PSK, "PSK");
@@ -528,8 +527,5 @@ int eap_server_psk_register(void)
        eap->get_emsk = eap_psk_get_emsk;
        eap->getSessionId = eap_psk_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 9f787ab32592d840dd07c757285df6a2bd14f18d..36ac555fee7054a9cb357081d2873d242951a543 100644 (file)
@@ -1094,7 +1094,6 @@ static u8 * eap_pwd_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_pwd_register(void)
 {
        struct eap_method *eap;
-       int ret;
        struct timeval tp;
        struct timezone tz;
        u32 sr;
@@ -1121,9 +1120,6 @@ int eap_server_pwd_register(void)
        eap->isSuccess = eap_pwd_is_success;
        eap->getSessionId = eap_pwd_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
 
index de707773189913d7f5b1008b611eb352d57b2eae..84d0e0be4dd127d8a86d387f147b283a3a9c1947 100644 (file)
@@ -520,7 +520,6 @@ static u8 * eap_sake_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_sake_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_SAKE, "SAKE");
@@ -538,8 +537,5 @@ int eap_server_sake_register(void)
        eap->get_emsk = eap_sake_get_emsk;
        eap->getSessionId = eap_sake_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index ddfb71cf4e2ea64c9c9fa2ed8c9f72c393e13916..3a6ed795c768079ff3a7f5ad11d7e4def0e1a5be 100644 (file)
@@ -846,7 +846,6 @@ static u8 * eap_sim_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_sim_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_SIM, "SIM");
@@ -864,8 +863,5 @@ int eap_server_sim_register(void)
        eap->get_emsk = eap_sim_get_emsk;
        eap->getSessionId = eap_sim_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index bd18a4ba654ce528fdf135fc9a8aab2893fa8fae..7249858844ef2bf27ec5922f97bf2765b9a906a3 100644 (file)
@@ -375,7 +375,6 @@ static u8 * eap_tls_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_tls_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_TLS, "TLS");
@@ -393,10 +392,7 @@ int eap_server_tls_register(void)
        eap->get_emsk = eap_tls_get_emsk;
        eap->getSessionId = eap_tls_get_session_id;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
 
 
@@ -404,7 +400,6 @@ int eap_server_tls_register(void)
 int eap_server_unauth_tls_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_UNAUTH_TLS,
@@ -423,10 +418,7 @@ int eap_server_unauth_tls_register(void)
        eap->isSuccess = eap_tls_isSuccess;
        eap->get_emsk = eap_tls_get_emsk;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
 #endif /* EAP_SERVER_UNAUTH_TLS */
 
@@ -435,7 +427,6 @@ int eap_server_unauth_tls_register(void)
 int eap_server_wfa_unauth_tls_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_WFA_NEW,
@@ -454,9 +445,6 @@ int eap_server_wfa_unauth_tls_register(void)
        eap->isSuccess = eap_tls_isSuccess;
        eap->get_emsk = eap_tls_get_emsk;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
 #endif /* CONFIG_HS20 */
index 21bd26f8296ef4f08316768c00c11404e1ed4a5c..b568558fd42e19c974f9082caf6fa4b1277b030e 100644 (file)
@@ -554,7 +554,6 @@ static Boolean eap_tnc_isSuccess(struct eap_sm *sm, void *priv)
 int eap_server_tnc_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_TNC, "TNC");
@@ -569,8 +568,5 @@ int eap_server_tnc_register(void)
        eap->isDone = eap_tnc_isDone;
        eap->isSuccess = eap_tnc_isSuccess;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 53ffa1ec6785aec89c1cd316ba02ee1d3f2f55e3..a53633f8f1fe00387022dfda3d9915e7871ced65 100644 (file)
@@ -1335,7 +1335,6 @@ static u8 * eap_ttls_get_emsk(struct eap_sm *sm, void *priv, size_t *len)
 int eap_server_ttls_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_IETF, EAP_TYPE_TTLS, "TTLS");
@@ -1353,8 +1352,5 @@ int eap_server_ttls_register(void)
        eap->getSessionId = eap_ttls_get_session_id;
        eap->get_emsk = eap_ttls_get_emsk;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 30f600d3baf63bd59d2ea6daf665f27b56912e96..96399775945b85cbfc4890bc7426713e8ee72315 100644 (file)
@@ -168,7 +168,6 @@ static Boolean eap_vendor_test_isSuccess(struct eap_sm *sm, void *priv)
 int eap_server_vendor_test_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_ID, EAP_VENDOR_TYPE,
@@ -185,8 +184,5 @@ int eap_server_vendor_test_register(void)
        eap->getKey = eap_vendor_test_getKey;
        eap->isSuccess = eap_vendor_test_isSuccess;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }
index 9d9c28d704c10965ca7733242b40693abe3e8453..7d9d285c39d01bf55a484e5afea6382bdeb93a26 100644 (file)
@@ -488,7 +488,6 @@ static int eap_wsc_getTimeout(struct eap_sm *sm, void *priv)
 int eap_server_wsc_register(void)
 {
        struct eap_method *eap;
-       int ret;
 
        eap = eap_server_method_alloc(EAP_SERVER_METHOD_INTERFACE_VERSION,
                                      EAP_VENDOR_WFA, EAP_VENDOR_TYPE_WSC,
@@ -505,8 +504,5 @@ int eap_server_wsc_register(void)
        eap->isSuccess = eap_wsc_isSuccess;
        eap->getTimeout = eap_wsc_getTimeout;
 
-       ret = eap_server_method_register(eap);
-       if (ret)
-               eap_server_method_free(eap);
-       return ret;
+       return eap_server_method_register(eap);
 }