int eap_server_tls_process(struct eap_sm *sm, struct eap_ssl_data *data, struct wpabuf *respData, void *priv, int eap_type, int (*proc_version)(struct eap_sm *sm, void *priv, int peer_version), void (*proc_msg)(struct eap_sm *sm, void *priv, const struct wpabuf *respData)) { const u8 *pos; u8 flags; size_t left; int ret, res = 0; if (eap_type == EAP_UNAUTH_TLS_TYPE) pos = eap_hdr_validate(EAP_VENDOR_UNAUTH_TLS, EAP_VENDOR_TYPE_UNAUTH_TLS, respData, &left); else if (eap_type == EAP_WFA_UNAUTH_TLS_TYPE) pos = eap_hdr_validate(EAP_VENDOR_WFA_NEW, EAP_VENDOR_WFA_UNAUTH_TLS, respData, &left); else pos = eap_hdr_validate(EAP_VENDOR_IETF, eap_type, respData, &left); if (pos == NULL || left < 1) return 0; /* Should not happen - frame already validated */ flags = *pos++; left--; wpa_printf(MSG_DEBUG, "SSL: Received packet(len=%lu) - Flags 0x%02x", (unsigned long) wpabuf_len(respData), flags); if (proc_version && proc_version(sm, priv, flags & EAP_TLS_VERSION_MASK) < 0) return -1; ret = eap_server_tls_reassemble(data, flags, &pos, &left); if (ret < 0) { res = -1; goto done; } else if (ret == 1) return 0; if (proc_msg) proc_msg(sm, priv, respData); if (tls_connection_get_write_alerts(sm->ssl_ctx, data->conn) > 1) { wpa_printf(MSG_INFO, "SSL: Locally detected fatal error in " "TLS processing"); res = -1; } done: eap_server_tls_free_in_buf(data); return res; }
int ckparam(char *param, char *val) { char *value = strdup(val); int ret_val = 0; /* return value */ if (strcmp(param, "NAME") == 0) ret_val = proc_name(param, value); else if (strcmp(param, "ARCH") == 0) ret_val = proc_arch(param, value); else if (strcmp(param, "VERSION") == 0) ret_val = proc_version(param, value); else if (strcmp(param, "CATEGORY") == 0) ret_val = proc_category(param, value); /* param does not match existing parameters */ free(value); return (ret_val); }