diff options
Diffstat (limited to 'package/hostapd/patches/003-use-nl80211-for-keys.patch')
-rw-r--r-- | package/hostapd/patches/003-use-nl80211-for-keys.patch | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/package/hostapd/patches/003-use-nl80211-for-keys.patch b/package/hostapd/patches/003-use-nl80211-for-keys.patch deleted file mode 100644 index 6b7fe80984..0000000000 --- a/package/hostapd/patches/003-use-nl80211-for-keys.patch +++ /dev/null @@ -1,112 +0,0 @@ ---- - hostapd/driver_devicescape.c | 93 ++++++++++++++++++++++++++++++------------- - 1 file changed, 67 insertions(+), 26 deletions(-) - ---- hostap.orig/hostapd/driver_devicescape.c 2007-11-09 13:41:12.000000000 +0100 -+++ hostap/hostapd/driver_devicescape.c 2007-11-09 13:41:13.000000000 +0100 -@@ -150,38 +150,79 @@ static int i802_set_encryption(const cha - size_t key_len, int txkey) - { - struct i802_driver_data *drv = priv; -- struct prism2_hostapd_param *param; -- u8 *buf; -- size_t blen; -- int ret = 0; -+ struct nl_msg *msg; -+ int ret = -1; -+ int err = 0; - -- blen = sizeof(*param) + key_len; -- buf = os_zalloc(blen); -- if (buf == NULL) -- return -1; -+ msg = nlmsg_alloc(); -+ if (!msg) -+ goto out; - -- param = (struct prism2_hostapd_param *) buf; -- param->cmd = PRISM2_SET_ENCRYPTION; -- if (addr == NULL) -- memset(param->sta_addr, 0xff, ETH_ALEN); -- else -- memcpy(param->sta_addr, addr, ETH_ALEN); -- os_strlcpy((char *) param->u.crypt.alg, alg, -- HOSTAP_CRYPT_ALG_NAME_LEN); -- param->u.crypt.flags = txkey ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0; -- param->u.crypt.idx = idx; -- param->u.crypt.key_len = key_len; -- memcpy(param->u.crypt.key, key, key_len); -+ if (strcmp(alg, "none") == 0) { -+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0, -+ 0, NL80211_CMD_DEL_KEY, 0); -+ } else { -+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0, -+ 0, NL80211_CMD_NEW_KEY, 0); -+ NLA_PUT(msg, NL80211_ATTR_KEY_DATA, key_len, key); -+ if (strcmp(alg, "WEP") == 0) { -+ if (key_len == 5) -+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, -+ 0x000FAC01); -+ else -+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, -+ 0x000FAC05); -+ } else if (strcmp(alg, "TKIP") == 0) -+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, 0x000FAC02); -+ else if (strcmp(alg, "CCMP") == 0) -+ NLA_PUT_U32(msg, NL80211_ATTR_KEY_CIPHER, 0x000FAC04); -+ else -+ goto out; -+ } - -- if (hostapd_ioctl_iface(iface, drv, param, blen) && errno != ENOENT) { -- printf("%s: Failed to set encryption to alg '%s' addr " MACSTR -- " errno=%d\n", -- iface, alg, MAC2STR(param->sta_addr), errno); -- ret = -1; -+ if (addr) -+ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr); -+ NLA_PUT_U8(msg, NL80211_ATTR_KEY_IDX, idx); -+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(iface)); -+ -+ if (nl_send_auto_complete(drv->nl_handle, msg) < 0 || -+ (err = nl_wait_for_ack(drv->nl_handle)) < 0) { -+ if (err != -ENOENT) { -+ err = 0; -+ goto out; -+ } - } - -- free(buf); -+ if (!txkey) { -+ ret = 0; -+ goto out; -+ } -+ -+ nlmsg_free(msg); -+ -+ msg = nlmsg_alloc(); -+ if (!msg) -+ goto out; - -+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0, -+ 0, NL80211_CMD_SET_KEY, 0); -+ NLA_PUT_U8(msg, NL80211_ATTR_KEY_IDX, idx); -+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(iface)); -+ NLA_PUT_FLAG(msg, NL80211_ATTR_KEY_DEFAULT); -+ -+ if (nl_send_auto_complete(drv->nl_handle, msg) < 0 || -+ (err = nl_wait_for_ack(drv->nl_handle)) < 0) { -+ if (err != -ENOENT) { -+ err = 0; -+ goto out; -+ } -+ } -+ -+ ret = 0; -+ -+ out: -+ nla_put_failure: -+ nlmsg_free(msg); - return ret; - } - |