D-Bus: Add support to set pkcs11_{engine,module}_path
Add SetPKCS11EngineAndModulePath D-Bus method. Add PKCS11EnginePath and PKCS11ModulePath D-Bus property getters. Signed-hostap: Michael Schaller <misch@google.com>
This commit is contained in:
parent
80ed037f00
commit
bdec7ee5c9
6 changed files with 240 additions and 0 deletions
|
@ -408,6 +408,25 @@ fi.w1.wpa_supplicant1.CreateInterface.
|
||||||
<h3>EAPLogon ( ) --> nothing</h3>
|
<h3>EAPLogon ( ) --> nothing</h3>
|
||||||
<p>IEEE 802.1X EAPOL state machine logon.</p>
|
<p>IEEE 802.1X EAPOL state machine logon.</p>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<h3>SetPKCS11EngineAndModulePath ( s : pkcs11_engine_path, s : pkcs11_module_path ) --> nothing</h3>
|
||||||
|
<p>Set PKCS #11 engine and module path.</p>
|
||||||
|
<h4>Arguments</h4>
|
||||||
|
<dl>
|
||||||
|
<dt>s : pkcs11_engine_path</dt>
|
||||||
|
<dd>PKCS #11 engine path.</dd>
|
||||||
|
<dt>s : pkcs11_module_path</dt>
|
||||||
|
<dd>PKCS #11 module path.</dd>
|
||||||
|
</dl>
|
||||||
|
<h4>Possible errors</h4>
|
||||||
|
<dl>
|
||||||
|
<dt>org.freedesktop.DBus.Error.Failed.InvalidArgs</dt>
|
||||||
|
<dd>Invalid PKCS #11 engine or module path.</dd>
|
||||||
|
<dt>org.freedesktop.DBus.Error.Failed</dt>
|
||||||
|
<dd>Reinit of the EAPOL state machine with the new PKCS #11 engine and module path failed.</dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\subsection dbus_interface_properties Properties
|
\subsection dbus_interface_properties Properties
|
||||||
|
@ -507,6 +526,16 @@ fi.w1.wpa_supplicant1.CreateInterface.
|
||||||
<h3>ScanInterval - i - (read/write)</h3>
|
<h3>ScanInterval - i - (read/write)</h3>
|
||||||
<p>Time (in seconds) between scans for a suitable AP. Must be >= 0.</p>
|
<p>Time (in seconds) between scans for a suitable AP. Must be >= 0.</p>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<h3>PKCS11EnginePath - s - (read)</h3>
|
||||||
|
<p>PKCS #11 engine path.</p>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<h3>PKCS11ModulePath - s - (read)</h3>
|
||||||
|
<p>PKCS #11 module path.</p>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\subsection dbus_interface_signals Signals
|
\subsection dbus_interface_signals Signals
|
||||||
|
|
|
@ -2516,6 +2516,15 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
#endif /* CONFIG_NO_CONFIG_BLOBS */
|
#endif /* CONFIG_NO_CONFIG_BLOBS */
|
||||||
|
{ "SetPKCS11EngineAndModulePath", WPAS_DBUS_NEW_IFACE_INTERFACE,
|
||||||
|
(WPADBusMethodHandler)
|
||||||
|
&wpas_dbus_handler_set_pkcs11_engine_and_module_path,
|
||||||
|
{
|
||||||
|
{ "pkcs11_engine_path", "s", ARG_IN },
|
||||||
|
{ "pkcs11_module_path", "s", ARG_IN },
|
||||||
|
END_ARGS
|
||||||
|
}
|
||||||
|
},
|
||||||
#ifdef CONFIG_WPS
|
#ifdef CONFIG_WPS
|
||||||
{ "Start", WPAS_DBUS_NEW_IFACE_WPS,
|
{ "Start", WPAS_DBUS_NEW_IFACE_WPS,
|
||||||
(WPADBusMethodHandler) &wpas_dbus_handler_wps_start,
|
(WPADBusMethodHandler) &wpas_dbus_handler_wps_start,
|
||||||
|
@ -2843,6 +2852,14 @@ static const struct wpa_dbus_property_desc wpas_dbus_interface_properties[] = {
|
||||||
wpas_dbus_getter_scan_interval,
|
wpas_dbus_getter_scan_interval,
|
||||||
wpas_dbus_setter_scan_interval
|
wpas_dbus_setter_scan_interval
|
||||||
},
|
},
|
||||||
|
{ "PKCS11EnginePath", WPAS_DBUS_NEW_IFACE_INTERFACE, "s",
|
||||||
|
wpas_dbus_getter_pkcs11_engine_path,
|
||||||
|
NULL
|
||||||
|
},
|
||||||
|
{ "PKCS11ModulePath", WPAS_DBUS_NEW_IFACE_INTERFACE, "s",
|
||||||
|
wpas_dbus_getter_pkcs11_module_path,
|
||||||
|
NULL
|
||||||
|
},
|
||||||
#ifdef CONFIG_WPS
|
#ifdef CONFIG_WPS
|
||||||
{ "ProcessCredentials", WPAS_DBUS_NEW_IFACE_WPS, "b",
|
{ "ProcessCredentials", WPAS_DBUS_NEW_IFACE_WPS, "b",
|
||||||
wpas_dbus_getter_process_credentials,
|
wpas_dbus_getter_process_credentials,
|
||||||
|
|
|
@ -2161,6 +2161,63 @@ DBusMessage * wpas_dbus_handler_tdls_teardown(DBusMessage *message,
|
||||||
#endif /* CONFIG_TDLS */
|
#endif /* CONFIG_TDLS */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpas_dbus_handler_set_pkcs11_engine_and_module_path - Set PKCS #11 engine and module path
|
||||||
|
* @message: Pointer to incoming dbus message
|
||||||
|
* @wpa_s: %wpa_supplicant data structure
|
||||||
|
* Returns: A dbus message containing an error on failure or NULL on success
|
||||||
|
*
|
||||||
|
* Sets the PKCS #11 engine and module path.
|
||||||
|
*/
|
||||||
|
DBusMessage * wpas_dbus_handler_set_pkcs11_engine_and_module_path(
|
||||||
|
DBusMessage *message, struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
DBusMessageIter iter;
|
||||||
|
char *value = NULL;
|
||||||
|
char *pkcs11_engine_path = NULL;
|
||||||
|
char *pkcs11_module_path = NULL;
|
||||||
|
|
||||||
|
dbus_message_iter_init(message, &iter);
|
||||||
|
dbus_message_iter_get_basic(&iter, &value);
|
||||||
|
if (value == NULL) {
|
||||||
|
return dbus_message_new_error(
|
||||||
|
message, DBUS_ERROR_INVALID_ARGS,
|
||||||
|
"Invalid pkcs11_engine_path argument");
|
||||||
|
}
|
||||||
|
/* Empty path defaults to NULL */
|
||||||
|
if (os_strlen(value))
|
||||||
|
pkcs11_engine_path = value;
|
||||||
|
|
||||||
|
dbus_message_iter_next(&iter);
|
||||||
|
dbus_message_iter_get_basic(&iter, &value);
|
||||||
|
if (value == NULL) {
|
||||||
|
os_free(pkcs11_engine_path);
|
||||||
|
return dbus_message_new_error(
|
||||||
|
message, DBUS_ERROR_INVALID_ARGS,
|
||||||
|
"Invalid pkcs11_module_path argument");
|
||||||
|
}
|
||||||
|
/* Empty path defaults to NULL */
|
||||||
|
if (os_strlen(value))
|
||||||
|
pkcs11_module_path = value;
|
||||||
|
|
||||||
|
if (wpas_set_pkcs11_engine_and_module_path(wpa_s, pkcs11_engine_path,
|
||||||
|
pkcs11_module_path))
|
||||||
|
return dbus_message_new_error(
|
||||||
|
message, DBUS_ERROR_FAILED,
|
||||||
|
"Reinit of the EAPOL state machine with the new PKCS "
|
||||||
|
"#11 engine and module path failed.");
|
||||||
|
|
||||||
|
wpa_dbus_mark_property_changed(
|
||||||
|
wpa_s->global->dbus, wpa_s->dbus_new_path,
|
||||||
|
WPAS_DBUS_NEW_IFACE_INTERFACE, "PKCS11EnginePath");
|
||||||
|
wpa_dbus_mark_property_changed(
|
||||||
|
wpa_s->global->dbus, wpa_s->dbus_new_path,
|
||||||
|
WPAS_DBUS_NEW_IFACE_INTERFACE, "PKCS11ModulePath");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpas_dbus_getter_capabilities - Return interface capabilities
|
* wpas_dbus_getter_capabilities - Return interface capabilities
|
||||||
* @iter: Pointer to incoming dbus message iter
|
* @iter: Pointer to incoming dbus message iter
|
||||||
|
@ -3176,6 +3233,76 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpas_dbus_getter_pkcs11_engine_path - Get PKCS #11 engine path
|
||||||
|
* @iter: Pointer to incoming dbus message iter
|
||||||
|
* @error: Location to store error on failure
|
||||||
|
* @user_data: Function specific data
|
||||||
|
* Returns: A dbus message containing the PKCS #11 engine path
|
||||||
|
*
|
||||||
|
* Getter for "PKCS11EnginePath" property.
|
||||||
|
*/
|
||||||
|
dbus_bool_t wpas_dbus_getter_pkcs11_engine_path(DBusMessageIter *iter,
|
||||||
|
DBusError *error,
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
struct wpa_supplicant *wpa_s = user_data;
|
||||||
|
const char *pkcs11_engine_path;
|
||||||
|
|
||||||
|
if (wpa_s->conf == NULL) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"wpas_dbus_getter_pkcs11_engine_path[dbus]: An "
|
||||||
|
"error occurred getting the PKCS #11 engine path.");
|
||||||
|
dbus_set_error_const(
|
||||||
|
error, DBUS_ERROR_FAILED,
|
||||||
|
"An error occured getting the PKCS #11 engine path.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wpa_s->conf->pkcs11_engine_path == NULL)
|
||||||
|
pkcs11_engine_path = "";
|
||||||
|
else
|
||||||
|
pkcs11_engine_path = wpa_s->conf->pkcs11_engine_path;
|
||||||
|
return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_STRING,
|
||||||
|
&pkcs11_engine_path, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpas_dbus_getter_pkcs11_module_path - Get PKCS #11 module path
|
||||||
|
* @iter: Pointer to incoming dbus message iter
|
||||||
|
* @error: Location to store error on failure
|
||||||
|
* @user_data: Function specific data
|
||||||
|
* Returns: A dbus message containing the PKCS #11 module path
|
||||||
|
*
|
||||||
|
* Getter for "PKCS11ModulePath" property.
|
||||||
|
*/
|
||||||
|
dbus_bool_t wpas_dbus_getter_pkcs11_module_path(DBusMessageIter *iter,
|
||||||
|
DBusError *error,
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
struct wpa_supplicant *wpa_s = user_data;
|
||||||
|
const char *pkcs11_module_path;
|
||||||
|
|
||||||
|
if (wpa_s->conf == NULL) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"wpas_dbus_getter_pkcs11_module_path[dbus]: An "
|
||||||
|
"error occurred getting the PKCS #11 module path.");
|
||||||
|
dbus_set_error_const(
|
||||||
|
error, DBUS_ERROR_FAILED,
|
||||||
|
"An error occured getting the PKCS #11 module path.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wpa_s->conf->pkcs11_module_path == NULL)
|
||||||
|
pkcs11_module_path = "";
|
||||||
|
else
|
||||||
|
pkcs11_module_path = wpa_s->conf->pkcs11_module_path;
|
||||||
|
return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_STRING,
|
||||||
|
&pkcs11_module_path, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpas_dbus_getter_blobs - Get all blobs defined for this interface
|
* wpas_dbus_getter_blobs - Get all blobs defined for this interface
|
||||||
* @iter: Pointer to incoming dbus message iter
|
* @iter: Pointer to incoming dbus message iter
|
||||||
|
|
|
@ -122,6 +122,9 @@ DBusMessage * wpas_dbus_handler_get_blob(DBusMessage *message,
|
||||||
DBusMessage * wpas_dbus_handler_remove_blob(DBusMessage *message,
|
DBusMessage * wpas_dbus_handler_remove_blob(DBusMessage *message,
|
||||||
struct wpa_supplicant *wpa_s);
|
struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
|
DBusMessage * wpas_dbus_handler_set_pkcs11_engine_and_module_path(
|
||||||
|
DBusMessage *message, struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message,
|
DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message,
|
||||||
struct wpa_supplicant *wpa_s);
|
struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
|
@ -218,6 +221,14 @@ dbus_bool_t wpas_dbus_getter_bsss(DBusMessageIter *iter, DBusError *error,
|
||||||
dbus_bool_t wpas_dbus_getter_networks(DBusMessageIter *iter, DBusError *error,
|
dbus_bool_t wpas_dbus_getter_networks(DBusMessageIter *iter, DBusError *error,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
|
dbus_bool_t wpas_dbus_getter_pkcs11_engine_path(DBusMessageIter *iter,
|
||||||
|
DBusError *error,
|
||||||
|
void *user_data);
|
||||||
|
|
||||||
|
dbus_bool_t wpas_dbus_getter_pkcs11_module_path(DBusMessageIter *iter,
|
||||||
|
DBusError *error,
|
||||||
|
void *user_data);
|
||||||
|
|
||||||
dbus_bool_t wpas_dbus_getter_blobs(DBusMessageIter *iter, DBusError *error,
|
dbus_bool_t wpas_dbus_getter_blobs(DBusMessageIter *iter, DBusError *error,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
|
|
|
@ -1957,6 +1957,59 @@ void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpas_set_pkcs11_engine_and_module_path - Set PKCS #11 engine and module path
|
||||||
|
* @wpa_s: wpa_supplicant structure for a network interface
|
||||||
|
* @pkcs11_engine_path: PKCS #11 engine path or NULL
|
||||||
|
* @pkcs11_module_path: PKCS #11 module path or NULL
|
||||||
|
* Returns: 0 on success; -1 on failure
|
||||||
|
*
|
||||||
|
* Sets the PKCS #11 engine and module path. Both have to be NULL or a valid
|
||||||
|
* path. If resetting the EAPOL state machine with the new PKCS #11 engine and
|
||||||
|
* module path fails the paths will be reset to the default value (NULL).
|
||||||
|
*/
|
||||||
|
int wpas_set_pkcs11_engine_and_module_path(struct wpa_supplicant *wpa_s,
|
||||||
|
const char *pkcs11_engine_path,
|
||||||
|
const char *pkcs11_module_path)
|
||||||
|
{
|
||||||
|
char *pkcs11_engine_path_copy = NULL;
|
||||||
|
char *pkcs11_module_path_copy = NULL;
|
||||||
|
|
||||||
|
if (pkcs11_engine_path != NULL) {
|
||||||
|
pkcs11_engine_path_copy = os_strdup(pkcs11_engine_path);
|
||||||
|
if (pkcs11_engine_path_copy == NULL)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (pkcs11_module_path != NULL) {
|
||||||
|
pkcs11_module_path_copy = os_strdup(pkcs11_module_path);
|
||||||
|
if (pkcs11_engine_path_copy == NULL) {
|
||||||
|
os_free(pkcs11_engine_path_copy);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
os_free(wpa_s->conf->pkcs11_engine_path);
|
||||||
|
os_free(wpa_s->conf->pkcs11_module_path);
|
||||||
|
wpa_s->conf->pkcs11_engine_path = pkcs11_engine_path_copy;
|
||||||
|
wpa_s->conf->pkcs11_module_path = pkcs11_module_path_copy;
|
||||||
|
|
||||||
|
wpa_sm_set_eapol(wpa_s->wpa, NULL);
|
||||||
|
eapol_sm_deinit(wpa_s->eapol);
|
||||||
|
wpa_s->eapol = NULL;
|
||||||
|
if (wpa_supplicant_init_eapol(wpa_s)) {
|
||||||
|
/* Error -> Reset paths to the default value (NULL) once. */
|
||||||
|
if (pkcs11_engine_path != NULL && pkcs11_module_path != NULL)
|
||||||
|
wpas_set_pkcs11_engine_and_module_path(wpa_s, NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
wpa_sm_set_eapol(wpa_s->wpa, wpa_s->eapol);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_supplicant_set_ap_scan - Set AP scan mode for interface
|
* wpa_supplicant_set_ap_scan - Set AP scan mode for interface
|
||||||
* @wpa_s: wpa_supplicant structure for a network interface
|
* @wpa_s: wpa_supplicant structure for a network interface
|
||||||
|
|
|
@ -772,6 +772,9 @@ void wpa_supplicant_disable_network(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid);
|
struct wpa_ssid *ssid);
|
||||||
void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
|
void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid);
|
struct wpa_ssid *ssid);
|
||||||
|
int wpas_set_pkcs11_engine_and_module_path(struct wpa_supplicant *wpa_s,
|
||||||
|
const char *pkcs11_engine_path,
|
||||||
|
const char *pkcs11_module_path);
|
||||||
int wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s,
|
int wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s,
|
||||||
int ap_scan);
|
int ap_scan);
|
||||||
int wpa_supplicant_set_bss_expiration_age(struct wpa_supplicant *wpa_s,
|
int wpa_supplicant_set_bss_expiration_age(struct wpa_supplicant *wpa_s,
|
||||||
|
|
Loading…
Reference in a new issue