[PATCH] qmicli: exit on --wds-start-network parse errors
Aleksander Morgado
aleksander at aleksander.es
Tue Jan 23 14:00:55 UTC 2018
On 22/01/18 22:21, Dan Williams wrote:
> Previously the error was printed but the connection attempt
> proceeded because NULL is a valid input for
> qmi_client_wds_start_network()
Nice catch! pushed to git master, qmi-1-20 and qmi-1-18
> ---
> src/qmicli/qmicli-wds.c | 61 ++++++++++++++++++++++++++++++++-----------------
> 1 file changed, 40 insertions(+), 21 deletions(-)
>
> diff --git a/src/qmicli/qmicli-wds.c b/src/qmicli/qmicli-wds.c
> index e434630..ecc1e83 100644
> --- a/src/qmicli/qmicli-wds.c
> +++ b/src/qmicli/qmicli-wds.c
> @@ -478,32 +478,40 @@ start_network_properties_handle (const gchar *key,
> return FALSE;
> }
>
> -static QmiMessageWdsStartNetworkInput *
> -start_network_input_create (const gchar *str)
> +static gboolean
> +start_network_input_create (const gchar *str,
> + QmiMessageWdsStartNetworkInput **input,
> + GError **error)
> {
> gchar *aux_auth_str = NULL;
> gchar *ip_type_str = NULL;
> gchar **split = NULL;
> - QmiMessageWdsStartNetworkInput *input = NULL;
> StartNetworkProperties props = {
> .auth = QMI_WDS_AUTHENTICATION_NONE,
> .ip_type = QMI_WDS_IP_FAMILY_UNSPECIFIED,
> };
> + gboolean success = FALSE;
> +
> + g_assert (input && !*input);
>
> /* An empty string is totally valid (i.e. no TLVs) */
> if (!str[0])
> - return NULL;
> + return TRUE;
>
> /* New key=value format */
> if (strchr (str, '=')) {
> - GError *error = NULL;
> + GError *parse_error = NULL;
>
> if (!qmicli_parse_key_value_string (str,
> - &error,
> + &parse_error,
> start_network_properties_handle,
> &props)) {
> - g_printerr ("error: couldn't parse input string: %s\n", error->message);
> - g_error_free (error);
> + g_set_error (error,
> + QMI_CORE_ERROR,
> + QMI_CORE_ERROR_FAILED,
> + "couldn't parse input string: %s",
> + parse_error->message);
> + g_error_free (parse_error);
> goto out;
> }
> }
> @@ -518,7 +526,11 @@ start_network_input_create (const gchar *str)
>
> if (props.apn && split[1]) {
> if (!qmicli_read_authentication_from_string (split[1], &(props.auth))) {
> - g_printerr ("error: unknown auth protocol '%s'\n", split[1]);
> + g_set_error (error,
> + QMI_CORE_ERROR,
> + QMI_CORE_ERROR_FAILED,
> + "unknown auth protocol '%s'",
> + split[1]);
> goto out;
> }
> props.auth_set = TRUE;
> @@ -529,23 +541,23 @@ start_network_input_create (const gchar *str)
> }
>
> /* Create input bundle */
> - input = qmi_message_wds_start_network_input_new ();
> + *input = qmi_message_wds_start_network_input_new ();
>
> /* Set APN */
> if (props.apn)
> - qmi_message_wds_start_network_input_set_apn (input, props.apn, NULL);
> + qmi_message_wds_start_network_input_set_apn (*input, props.apn, NULL);
>
> /* Set 3GPP profile */
> if (props.profile_index_3gpp > 0)
> - qmi_message_wds_start_network_input_set_profile_index_3gpp (input, props.profile_index_3gpp, NULL);
> + qmi_message_wds_start_network_input_set_profile_index_3gpp (*input, props.profile_index_3gpp, NULL);
>
> /* Set 3GPP2 profile */
> if (props.profile_index_3gpp2 > 0)
> - qmi_message_wds_start_network_input_set_profile_index_3gpp2 (input, props.profile_index_3gpp2, NULL);
> + qmi_message_wds_start_network_input_set_profile_index_3gpp2 (*input, props.profile_index_3gpp2, NULL);
>
> /* Set IP Type */
> if (props.ip_type != 0) {
> - qmi_message_wds_start_network_input_set_ip_family_preference (input, props.ip_type, NULL);
> + qmi_message_wds_start_network_input_set_ip_family_preference (*input, props.ip_type, NULL);
> if (props.ip_type == QMI_WDS_IP_FAMILY_IPV4)
> ip_type_str = "4";
> else if (props.ip_type == QMI_WDS_IP_FAMILY_IPV6)
> @@ -555,20 +567,22 @@ start_network_input_create (const gchar *str)
> /* Set authentication method */
> if (props.auth_set) {
> aux_auth_str = qmi_wds_authentication_build_string_from_mask (props.auth);
> - qmi_message_wds_start_network_input_set_authentication_preference (input, props.auth, NULL);
> + qmi_message_wds_start_network_input_set_authentication_preference (*input, props.auth, NULL);
> }
>
> /* Set username, avoid empty strings */
> if (props.username && props.username[0])
> - qmi_message_wds_start_network_input_set_username (input, props.username, NULL);
> + qmi_message_wds_start_network_input_set_username (*input, props.username, NULL);
>
> /* Set password, avoid empty strings */
> if (props.password && props.password[0])
> - qmi_message_wds_start_network_input_set_password (input, props.password, NULL);
> + qmi_message_wds_start_network_input_set_password (*input, props.password, NULL);
>
> /* Set autoconnect */
> if (props.autoconnect_set)
> - qmi_message_wds_start_network_input_set_enable_autoconnect (input, props.autoconnect, NULL);
> + qmi_message_wds_start_network_input_set_enable_autoconnect (*input, props.autoconnect, NULL);
> +
> + success = TRUE;
>
> g_debug ("Network start parameters set (apn: '%s', 3gpp_profile: '%u', 3gpp2_profile: '%u', auth: '%s', ip-type: '%s', username: '%s', password: '%s', autoconnect: '%s')",
> props.apn ? props.apn : "unspecified",
> @@ -587,7 +601,7 @@ out:
> g_free (props.password);
> g_free (aux_auth_str);
>
> - return input;
> + return success;
> }
>
> static void
> @@ -1787,9 +1801,14 @@ qmicli_wds_run (QmiDevice *device,
>
> /* Request to start network? */
> if (start_network_str) {
> - QmiMessageWdsStartNetworkInput *input;
> + QmiMessageWdsStartNetworkInput *input = NULL;
> + GError *error = NULL;
>
> - input = start_network_input_create (start_network_str);
> + if (!start_network_input_create (start_network_str, &input, &error)) {
> + g_printerr ("error: %s\n", error->message);
> + g_error_free (error);
> + return;
> + }
>
> g_debug ("Asynchronously starting network...");
> qmi_client_wds_start_network (ctx->client,
>
--
Aleksander
https://aleksander.es
More information about the libqmi-devel
mailing list