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

📄 ctrl_iface_dbus_handlers.c

📁 WLAN无线网络管理的最新程序
💻 C
📖 第 1 页 / 共 3 页
字号:
error:	if (reply)		dbus_message_unref(reply);	return dbus_message_new_error(message, WPAS_ERROR_INTERNAL_ERROR,				      "an internal error occurred returning "				      "BSSID properties.");}/** * wpas_dbus_iface_capabilities - Return interface capabilities * @message: Pointer to incoming dbus message * @wpa_s: wpa_supplicant structure for a network interface * Returns: A dbus message containing a dict of strings * * Handler function for "capabilities" method call of an interface. */DBusMessage * wpas_dbus_iface_capabilities(DBusMessage *message,					   struct wpa_supplicant *wpa_s){	DBusMessage *reply = NULL;	struct wpa_driver_capa capa;	int res;	DBusMessageIter iter, iter_dict;	char **eap_methods;	size_t num_items;	dbus_bool_t strict = FALSE;	DBusMessageIter iter_dict_entry, iter_dict_val, iter_array;	if (!dbus_message_get_args(message, NULL,				   DBUS_TYPE_BOOLEAN, &strict,				   DBUS_TYPE_INVALID))		strict = FALSE;	reply = dbus_message_new_method_return(message);	dbus_message_iter_init_append(reply, &iter);	if (!wpa_dbus_dict_open_write(&iter, &iter_dict))		goto error;	/* EAP methods */	eap_methods = eap_get_names_as_string_array(&num_items);	if (eap_methods) {		dbus_bool_t success = FALSE;		size_t i = 0;		success = wpa_dbus_dict_append_string_array(			&iter_dict, "eap", (const char **) eap_methods,			num_items);		/* free returned method array */		while (eap_methods[i])			free(eap_methods[i++]);		free(eap_methods);		if (!success)			goto error;	}	res = wpa_drv_get_capa(wpa_s, &capa);	/***** pairwise cipher */	if (res < 0) {		if (!strict) {			const char *args[] = {"CCMP", "TKIP", "NONE"};			if (!wpa_dbus_dict_append_string_array(				    &iter_dict, "pairwise", args,				    sizeof(args) / sizeof(char*)))				goto error;		}	} else {		if (!wpa_dbus_dict_begin_string_array(&iter_dict, "pairwise",						      &iter_dict_entry,						      &iter_dict_val,						      &iter_array))			goto error;		if (capa.enc & WPA_DRIVER_CAPA_ENC_CCMP) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "CCMP"))				goto error;		}		if (capa.enc & WPA_DRIVER_CAPA_ENC_TKIP) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "TKIP"))				goto error;		}		if (capa.key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "NONE"))				goto error;		}		if (!wpa_dbus_dict_end_string_array(&iter_dict,						    &iter_dict_entry,						    &iter_dict_val,						    &iter_array))			goto error;	}	/***** group cipher */	if (res < 0) {		if (!strict) {			const char *args[] = {				"CCMP", "TKIP", "WEP104", "WEP40"			};			if (!wpa_dbus_dict_append_string_array(				    &iter_dict, "group", args,				    sizeof(args) / sizeof(char*)))				goto error;		}	} else {		if (!wpa_dbus_dict_begin_string_array(&iter_dict, "group",						      &iter_dict_entry,						      &iter_dict_val,						      &iter_array))			goto error;		if (capa.enc & WPA_DRIVER_CAPA_ENC_CCMP) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "CCMP"))				goto error;		}		if (capa.enc & WPA_DRIVER_CAPA_ENC_TKIP) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "TKIP"))				goto error;		}		if (capa.enc & WPA_DRIVER_CAPA_ENC_WEP104) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "WEP104"))				goto error;		}		if (capa.enc & WPA_DRIVER_CAPA_ENC_WEP40) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "WEP40"))				goto error;		}		if (!wpa_dbus_dict_end_string_array(&iter_dict,						    &iter_dict_entry,						    &iter_dict_val,						    &iter_array))			goto error;	}	/***** key management */	if (res < 0) {		if (!strict) {			const char *args[] = {				"WPA-PSK", "WPA-EAP", "IEEE8021X", "WPA-NONE",				"NONE"			};			if (!wpa_dbus_dict_append_string_array(				    &iter_dict, "key_mgmt", args,				    sizeof(args) / sizeof(char*)))				goto error;		}	} else {		if (!wpa_dbus_dict_begin_string_array(&iter_dict, "key_mgmt",						      &iter_dict_entry,						      &iter_dict_val,						      &iter_array))			goto error;		if (!wpa_dbus_dict_string_array_add_element(&iter_array,							    "NONE"))			goto error;		if (!wpa_dbus_dict_string_array_add_element(&iter_array,							    "IEEE8021X"))			goto error;		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA2)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "WPA-EAP"))				goto error;		}		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "WPA-PSK"))				goto error;		}		if (capa.key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "WPA-NONE"))				goto error;		}		if (!wpa_dbus_dict_end_string_array(&iter_dict,						    &iter_dict_entry,						    &iter_dict_val,						    &iter_array))			goto error;	}	/***** WPA protocol */	if (res < 0) {		if (!strict) {			const char *args[] = { "RSN", "WPA" };			if (!wpa_dbus_dict_append_string_array(				    &iter_dict, "proto", args,				    sizeof(args) / sizeof(char*)))				goto error;		}	} else {		if (!wpa_dbus_dict_begin_string_array(&iter_dict, "proto",						      &iter_dict_entry,						      &iter_dict_val,						      &iter_array))			goto error;		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA2 |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "RSN"))				goto error;		}		if (capa.key_mgmt & (WPA_DRIVER_CAPA_KEY_MGMT_WPA |				     WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "WPA"))				goto error;		}		if (!wpa_dbus_dict_end_string_array(&iter_dict,						    &iter_dict_entry,						    &iter_dict_val,						    &iter_array))			goto error;	}	/***** auth alg */	if (res < 0) {		if (!strict) {			const char *args[] = { "OPEN", "SHARED", "LEAP" };			if (!wpa_dbus_dict_append_string_array(				    &iter_dict, "auth_alg", args,				    sizeof(args) / sizeof(char*)))				goto error;		}	} else {		if (!wpa_dbus_dict_begin_string_array(&iter_dict, "auth_alg",						      &iter_dict_entry,						      &iter_dict_val,						      &iter_array))			goto error;		if (capa.auth & (WPA_DRIVER_AUTH_OPEN)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "OPEN"))				goto error;		}		if (capa.auth & (WPA_DRIVER_AUTH_SHARED)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "SHARED"))				goto error;		}		if (capa.auth & (WPA_DRIVER_AUTH_LEAP)) {			if (!wpa_dbus_dict_string_array_add_element(				    &iter_array, "LEAP"))				goto error;		}		if (!wpa_dbus_dict_end_string_array(&iter_dict,						    &iter_dict_entry,						    &iter_dict_val,						    &iter_array))			goto error;	}	if (!wpa_dbus_dict_close_write(&iter, &iter_dict))		goto error;	return reply;error:	if (reply)		dbus_message_unref(reply);	return dbus_message_new_error(message, WPAS_ERROR_INTERNAL_ERROR,				      "an internal error occurred returning "				      "interface capabilities.");}/** * wpas_dbus_iface_add_network - Add a new configured network * @message: Pointer to incoming dbus message * @wpa_s: wpa_supplicant structure for a network interface * Returns: A dbus message containing the object path of the new network * * Handler function for "addNetwork" method call of a network interface. */DBusMessage * wpas_dbus_iface_add_network(DBusMessage *message,					  struct wpa_supplicant *wpa_s){	DBusMessage *reply = NULL;	struct wpa_ssid *ssid;	char *path = NULL;	path = wpa_zalloc(WPAS_DBUS_OBJECT_PATH_MAX);	if (path == NULL) {		perror("wpas_dbus_iface_scan_results[dbus]: out of "		       "memory.");		wpa_printf(MSG_ERROR, "dbus control interface: not "			   "enough memory to send scan results "			   "signal.");		goto out;	}	ssid = wpa_config_add_network(wpa_s->conf);	if (ssid == NULL) {		reply = dbus_message_new_error(message,					       WPAS_ERROR_ADD_NETWORK_ERROR,					       "wpa_supplicant could not add "					       "a network on this interface.");		goto out;	}	ssid->disabled = 1;	wpa_config_set_network_defaults(ssid);	/* Construct the object path for this network. */	snprintf(path, WPAS_DBUS_OBJECT_PATH_MAX,		 "%s/" WPAS_DBUS_NETWORKS_PART "/%d",		 wpa_supplicant_get_dbus_path(wpa_s),		 ssid->id);	reply = dbus_message_new_method_return(message);	dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH,				 &path, DBUS_TYPE_INVALID);out:	free(path);	return reply;}/** * wpas_dbus_iface_remove_network - Remove a configured network * @message: Pointer to incoming dbus message * @wpa_s: wpa_supplicant structure for a network interface * Returns: A dbus message containing a UINT32 indicating success (1) or *          failure (0) * * Handler function for "removeNetwork" method call of a network interface. */DBusMessage * wpas_dbus_iface_remove_network(DBusMessage *message,					     struct wpa_supplicant *wpa_s){	DBusMessage *reply = NULL;	const char *op;	char *iface = NULL, *net_id = NULL;	int id;	struct wpa_ssid *ssid;	if (!dbus_message_get_args(message, NULL,	                           DBUS_TYPE_OBJECT_PATH, &op,	                           DBUS_TYPE_INVALID)) {		reply = wpas_dbus_new_invalid_opts_error(message, NULL);		goto out;	}	/* Extract the network ID */	iface = wpas_dbus_decompose_object_path(op, &net_id, NULL);	if (iface == NULL) {		reply = wpas_dbus_new_invalid_network_error(message);		goto out;	}	/* Ensure the network is actually a child of this interface */	if (strcmp(iface, wpa_supplicant_get_dbus_path(wpa_s)) != 0) {		reply = wpas_dbus_new_invalid_network_error(message);		goto out;	}	id = strtoul(net_id, NULL, 10);	ssid = wpa_config_get_network(wpa_s->conf, id);	if (ssid == NULL) {		reply = wpas_dbus_new_invalid_network_error(message);		goto out;	}	if (wpa_config_remove_network(wpa_s->conf, id) < 0) {		reply = dbus_message_new_error(message,					       WPAS_ERROR_REMOVE_NETWORK_ERROR,					       "error removing the specified "					       "on this interface.");		goto out;	}	if (ssid == wpa_s->current_ssid)		wpa_supplicant_disassociate(wpa_s, REASON_DEAUTH_LEAVING);	reply = wpas_dbus_new_success_reply(message);out:	free(iface);	free(net_id);	return reply;}static const char *dont_quote[] = {	"key_mgmt", "proto", "pairwise", "auth_alg", "group", "eap",	"opensc_engine_path", "pkcs11_engine_path", "pkcs11_module_path",	"bssid", NULL};static dbus_bool_t should_quote_opt(const char *key){	int i = 0;	while (dont_quote[i] != NULL) {		if (strcmp(key, dont_quote[i]) == 0)			return FALSE;		i++;	}	return TRUE;}/** * wpas_dbus_iface_set_network - Set options for a configured network * @message: Pointer to incoming dbus message * @wpa_s: wpa_supplicant structure for a network interface * @ssid: wpa_ssid structure for a configured network * Returns: a dbus message containing a UINT32 indicating success (1) or *          failure (0) * * Handler function for "set" method call of a configured network. */DBusMessage * wpas_dbus_iface_set_network(DBusMessage *message,					  struct wpa_supplicant *wpa_s,					  struct wpa_ssid *ssid){	DBusMessage *reply = NULL;

⌨️ 快捷键说明

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