⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrl_iface.c

📁 WLAN无线网络管理的最新程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		}		if (capa.enc & WPA_DRIVER_CAPA_ENC_WEP40) {			ret = os_snprintf(pos, end - pos, "%sWEP40",					  first ? "" : " ");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;			first = 0;		}		return pos - buf;	}	if (os_strcmp(field, "key_mgmt") == 0) {		if (res < 0) {			if (strict)				return 0;			ret = os_snprintf(buf, buflen, "WPA-PSK WPA-EAP "					  "IEEE8021X WPA-NONE NONE");			if (ret < 0 || (size_t) ret >= buflen)				return -1;			return ret;		}		ret = os_snprintf(pos, end - pos, "NONE IEEE8021X");		if (ret < 0 || ret >= end - pos)			return pos - buf;		pos += ret;		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA2)) {			ret = os_snprintf(pos, end - pos, " WPA-EAP");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;		}		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK)) {			ret = os_snprintf(pos, end - pos, " WPA-PSK");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;		}		if (capa.key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE) {			ret = os_snprintf(pos, end - pos, " WPA-NONE");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;		}		return pos - buf;	}	if (os_strcmp(field, "proto") == 0) {		if (res < 0) {			if (strict)				return 0;			ret = os_snprintf(buf, buflen, "RSN WPA");			if (ret < 0 || (size_t) ret >= buflen)				return -1;			return ret;		}		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA2 |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK)) {			ret = os_snprintf(pos, end - pos, "%sRSN",					  first ? "" : " ");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;			first = 0;		}		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK)) {			ret = os_snprintf(pos, end - pos, "%sWPA",					  first ? "" : " ");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;			first = 0;		}		return pos - buf;	}	if (os_strcmp(field, "auth_alg") == 0) {		if (res < 0) {			if (strict)				return 0;			ret = os_snprintf(buf, buflen, "OPEN SHARED LEAP");			if (ret < 0 || (size_t) ret >= buflen)				return -1;			return ret;		}		if (capa.auth & (WPA_DRIVER_AUTH_OPEN)) {			ret = os_snprintf(pos, end - pos, "%sOPEN",					  first ? "" : " ");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;			first = 0;		}		if (capa.auth & (WPA_DRIVER_AUTH_SHARED)) {			ret = os_snprintf(pos, end - pos, "%sSHARED",					  first ? "" : " ");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;			first = 0;		}		if (capa.auth & (WPA_DRIVER_AUTH_LEAP)) {			ret = os_snprintf(pos, end - pos, "%sLEAP",					  first ? "" : " ");			if (ret < 0 || ret >= end - pos)				return pos - buf;			pos += ret;			first = 0;		}		return pos - buf;	}	wpa_printf(MSG_DEBUG, "CTRL_IFACE: Unknown GET_CAPABILITY field '%s'",		   field);	return -1;}static int wpa_supplicant_ctrl_iface_ap_scan(	struct wpa_supplicant *wpa_s, char *cmd){	int ap_scan = atoi(cmd);	if (ap_scan < 0 || ap_scan > 2)		return -1;	wpa_s->conf->ap_scan = ap_scan;	return 0;}char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,					 char *buf, size_t *resp_len){	char *reply;	const int reply_size = 2048;	int ctrl_rsp = 0;	int reply_len;	if (os_strncmp(buf, WPA_CTRL_RSP, os_strlen(WPA_CTRL_RSP)) == 0 ||	    os_strncmp(buf, "SET_NETWORK ", 12) == 0) {		wpa_hexdump_ascii_key(MSG_DEBUG, "RX ctrl_iface",				      (const u8 *) buf, os_strlen(buf));	} else {		wpa_hexdump_ascii(MSG_DEBUG, "RX ctrl_iface",				  (const u8 *) buf, os_strlen(buf));	}	reply = os_malloc(reply_size);	if (reply == NULL) {		*resp_len = 1;		return NULL;	}	os_memcpy(reply, "OK\n", 3);	reply_len = 3;	if (os_strcmp(buf, "PING") == 0) {		os_memcpy(reply, "PONG\n", 5);		reply_len = 5;	} else if (os_strcmp(buf, "MIB") == 0) {		reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);		if (reply_len >= 0) {			int res;			res = eapol_sm_get_mib(wpa_s->eapol, reply + reply_len,					       reply_size - reply_len);			if (res < 0)				reply_len = -1;			else				reply_len += res;		}	} else if (os_strncmp(buf, "STATUS", 6) == 0) {		reply_len = wpa_supplicant_ctrl_iface_status(			wpa_s, buf + 6, reply, reply_size);	} else if (os_strcmp(buf, "PMKSA") == 0) {		reply_len = pmksa_cache_list(wpa_s->wpa, reply, reply_size);	} else if (os_strncmp(buf, "SET ", 4) == 0) {		if (wpa_supplicant_ctrl_iface_set(wpa_s, buf + 4))			reply_len = -1;	} else if (os_strcmp(buf, "LOGON") == 0) {		eapol_sm_notify_logoff(wpa_s->eapol, FALSE);	} else if (os_strcmp(buf, "LOGOFF") == 0) {		eapol_sm_notify_logoff(wpa_s->eapol, TRUE);	} else if (os_strcmp(buf, "REASSOCIATE") == 0) {		wpa_s->disconnected = 0;		wpa_s->reassociate = 1;		wpa_supplicant_req_scan(wpa_s, 0, 0);	} else if (os_strcmp(buf, "RECONNECT") == 0) {		if (wpa_s->disconnected) {			wpa_s->disconnected = 0;			wpa_s->reassociate = 1;			wpa_supplicant_req_scan(wpa_s, 0, 0);		}	} else if (os_strncmp(buf, "PREAUTH ", 8) == 0) {		if (wpa_supplicant_ctrl_iface_preauth(wpa_s, buf + 8))			reply_len = -1;#ifdef CONFIG_PEERKEY	} else if (os_strncmp(buf, "STKSTART ", 9) == 0) {		if (wpa_supplicant_ctrl_iface_stkstart(wpa_s, buf + 9))			reply_len = -1;#endif /* CONFIG_PEERKEY */	} else if (os_strncmp(buf, WPA_CTRL_RSP, os_strlen(WPA_CTRL_RSP)) == 0)	{		if (wpa_supplicant_ctrl_iface_ctrl_rsp(			    wpa_s, buf + os_strlen(WPA_CTRL_RSP)))			reply_len = -1;		else			ctrl_rsp = 1;	} else if (os_strcmp(buf, "RECONFIGURE") == 0) {		if (wpa_supplicant_reload_configuration(wpa_s))			reply_len = -1;	} else if (os_strcmp(buf, "TERMINATE") == 0) {		eloop_terminate();	} else if (os_strncmp(buf, "BSSID ", 6) == 0) {		if (wpa_supplicant_ctrl_iface_bssid(wpa_s, buf + 6))			reply_len = -1;	} else if (os_strcmp(buf, "LIST_NETWORKS") == 0) {		reply_len = wpa_supplicant_ctrl_iface_list_networks(			wpa_s, reply, reply_size);	} else if (os_strcmp(buf, "DISCONNECT") == 0) {		wpa_s->reassociate = 0;		wpa_s->disconnected = 1;		wpa_supplicant_disassociate(wpa_s, REASON_DEAUTH_LEAVING);	} else if (os_strcmp(buf, "SCAN") == 0) {		wpa_s->scan_req = 2;		wpa_supplicant_req_scan(wpa_s, 0, 0);	} else if (os_strcmp(buf, "SCAN_RESULTS") == 0) {		reply_len = wpa_supplicant_ctrl_iface_scan_results(			wpa_s, reply, reply_size);	} else if (os_strncmp(buf, "SELECT_NETWORK ", 15) == 0) {		if (wpa_supplicant_ctrl_iface_select_network(wpa_s, buf + 15))			reply_len = -1;	} else if (os_strncmp(buf, "ENABLE_NETWORK ", 15) == 0) {		if (wpa_supplicant_ctrl_iface_enable_network(wpa_s, buf + 15))			reply_len = -1;	} else if (os_strncmp(buf, "DISABLE_NETWORK ", 16) == 0) {		if (wpa_supplicant_ctrl_iface_disable_network(wpa_s, buf + 16))			reply_len = -1;	} else if (os_strcmp(buf, "ADD_NETWORK") == 0) {		reply_len = wpa_supplicant_ctrl_iface_add_network(			wpa_s, reply, reply_size);	} else if (os_strncmp(buf, "REMOVE_NETWORK ", 15) == 0) {		if (wpa_supplicant_ctrl_iface_remove_network(wpa_s, buf + 15))			reply_len = -1;	} else if (os_strncmp(buf, "SET_NETWORK ", 12) == 0) {		if (wpa_supplicant_ctrl_iface_set_network(wpa_s, buf + 12))			reply_len = -1;	} else if (os_strncmp(buf, "GET_NETWORK ", 12) == 0) {		reply_len = wpa_supplicant_ctrl_iface_get_network(			wpa_s, buf + 12, reply, reply_size);	} else if (os_strcmp(buf, "SAVE_CONFIG") == 0) {		if (wpa_supplicant_ctrl_iface_save_config(wpa_s))			reply_len = -1;	} else if (os_strncmp(buf, "GET_CAPABILITY ", 15) == 0) {		reply_len = wpa_supplicant_ctrl_iface_get_capability(			wpa_s, buf + 15, reply, reply_size);	} else if (os_strncmp(buf, "AP_SCAN ", 8) == 0) {		if (wpa_supplicant_ctrl_iface_ap_scan(wpa_s, buf + 8))			reply_len = -1;	} else if (os_strcmp(buf, "INTERFACES") == 0) {		reply_len = wpa_supplicant_global_iface_interfaces(			wpa_s->global, reply, reply_size);	} else {		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);		reply_len = 16;	}	if (reply_len < 0) {		os_memcpy(reply, "FAIL\n", 5);		reply_len = 5;	}	if (ctrl_rsp)		eapol_sm_notify_ctrl_response(wpa_s->eapol);	*resp_len = reply_len;	return reply;}static int wpa_supplicant_global_iface_add(struct wpa_global *global,					   char *cmd){	struct wpa_interface iface;	char *pos;	/*	 * <ifname>TAB<confname>TAB<driver>TAB<ctrl_interface>TAB<driver_param>	 * TAB<bridge_ifname>	 */	wpa_printf(MSG_DEBUG, "CTRL_IFACE GLOBAL INTERFACE_ADD '%s'", cmd);	os_memset(&iface, 0, sizeof(iface));	do {		iface.ifname = pos = cmd;		pos = os_strchr(pos, '\t');		if (pos)			*pos++ = '\0';		if (iface.ifname[0] == '\0')			return -1;		if (pos == NULL)			break;		iface.confname = pos;		pos = os_strchr(pos, '\t');		if (pos)			*pos++ = '\0';		if (iface.confname[0] == '\0')			iface.confname = NULL;		if (pos == NULL)			break;		iface.driver = pos;		pos = os_strchr(pos, '\t');		if (pos)			*pos++ = '\0';		if (iface.driver[0] == '\0')			iface.driver = NULL;		if (pos == NULL)			break;		iface.ctrl_interface = pos;		pos = os_strchr(pos, '\t');		if (pos)			*pos++ = '\0';		if (iface.ctrl_interface[0] == '\0')			iface.ctrl_interface = NULL;		if (pos == NULL)			break;		iface.driver_param = pos;		pos = os_strchr(pos, '\t');		if (pos)			*pos++ = '\0';		if (iface.driver_param[0] == '\0')			iface.driver_param = NULL;		if (pos == NULL)			break;		iface.bridge_ifname = pos;		pos = os_strchr(pos, '\t');		if (pos)			*pos++ = '\0';		if (iface.bridge_ifname[0] == '\0')			iface.bridge_ifname = NULL;		if (pos == NULL)			break;	} while (0);	if (wpa_supplicant_get_iface(global, iface.ifname))		return -1;	return wpa_supplicant_add_iface(global, &iface) ? 0 : -1;}static int wpa_supplicant_global_iface_remove(struct wpa_global *global,					      char *cmd){	struct wpa_supplicant *wpa_s;	wpa_printf(MSG_DEBUG, "CTRL_IFACE GLOBAL INTERFACE_REMOVE '%s'", cmd);	wpa_s = wpa_supplicant_get_iface(global, cmd);	if (wpa_s == NULL)		return -1;	return wpa_supplicant_remove_iface(global, wpa_s);}static int wpa_supplicant_global_iface_interfaces(struct wpa_global *global,						  char *buf, int len){	int res;	char *pos, *end;	struct wpa_supplicant *wpa_s;	wpa_s = global->ifaces;	pos = buf;	end = buf + len;	while (wpa_s) {		res = os_snprintf(pos, end - pos, "%s\n", wpa_s->ifname);		if (res < 0 || res >= end - pos) {			*pos = '\0';			break;		}		pos += res;		wpa_s = wpa_s->next;	}	return pos - buf;}char * wpa_supplicant_global_ctrl_iface_process(struct wpa_global *global,						char *buf, size_t *resp_len){	char *reply;	const int reply_size = 2048;	int reply_len;	wpa_hexdump_ascii(MSG_DEBUG, "RX global ctrl_iface",			  (const u8 *) buf, os_strlen(buf));	reply = os_malloc(reply_size);	if (reply == NULL) {		*resp_len = 1;		return NULL;	}	os_memcpy(reply, "OK\n", 3);	reply_len = 3;	if (os_strcmp(buf, "PING") == 0) {		os_memcpy(reply, "PONG\n", 5);		reply_len = 5;	} else if (os_strncmp(buf, "INTERFACE_ADD ", 14) == 0) {		if (wpa_supplicant_global_iface_add(global, buf + 14))			reply_len = -1;	} else if (os_strncmp(buf, "INTERFACE_REMOVE ", 17) == 0) {		if (wpa_supplicant_global_iface_remove(global, buf + 17))			reply_len = -1;	} else if (os_strcmp(buf, "INTERFACES") == 0) {		reply_len = wpa_supplicant_global_iface_interfaces(			global, reply, reply_size);	} else if (os_strcmp(buf, "TERMINATE") == 0) {		eloop_terminate();	} else {		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);		reply_len = 16;	}	if (reply_len < 0) {		os_memcpy(reply, "FAIL\n", 5);		reply_len = 5;	}	*resp_len = reply_len;	return reply;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -