Re: ModemManager: [PATCH 1/2] Improvements to SIM PIN handling
- From: Aleksander Morgado <aleksander lanedo com>
- To: Eric Shienbrood <ers google com>
- Cc: networkmanager-list gnome org
- Subject: Re: ModemManager: [PATCH 1/2] Improvements to SIM PIN handling
- Date: Wed, 26 Oct 2011 18:02:55 +0200
On Wed, 2011-10-19 at 15:42 -0400, Eric Shienbrood wrote:
> From 7c718db20958c200bc9dcb086763bfe0ebb91399 Mon Sep 17 00:00:00 2001
> From: Eric Shienbrood <ers google com>
> Date: Thu, 14 Jul 2011 19:11:54 -0400
> Subject: [PATCH] Correctly track the number of SIM PIN retries left.
>
> There are other operations besides SendPin and SendPuk that
> can result in the retry count being decremented. An EnablePin
> or ChangePin in which an incorrect PIN is supplied will also
> decrement the retry count, and will put the SIM into blocked
> mode (requiring a PUK) if the retry count drops to zero. To
> correctly track this, the retry count needs to be fetched after
> each of these operations, and also initially when AT+CPIN? returns
> READY.
I didn't test this, but looks good to me.
> ---
> .../org.freedesktop.ModemManager.Modem.xml | 6 ++-
> src/mm-generic-gsm.c | 33
> +++++++++++++++++++-
> 2 files changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/introspection/org.freedesktop.ModemManager.Modem.xml
> b/introspection/org.freedesktop.ModemManager.Modem.xml
> index a71a634..3540dbe 100644
> --- a/introspection/org.freedesktop.ModemManager.Modem.xml
> +++ b/introspection/org.freedesktop.ModemManager.Modem.xml
> @@ -171,8 +171,10 @@
>
> <property name="UnlockRetries" type="u" access="read">
> <tp:docstring>
> - The number of unlock retries remaining for the unlock code
> given by the property UnlockRequired, or 999 if
> - the device does not support reporting unlock retries.
> + The number of unlock retries remaining for the unlock code
> given by the
> + property UnlockRequired, or 999 if the device does not
> support reporting
> + unlock retries. If UnlockRequired is blank, this property
> gives the
> + number of tries allowed for changing or disabling sim-pin.
> </tp:docstring>
> </property>
>
> diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
> index 82e51f6..82dcf00 100644
> --- a/src/mm-generic-gsm.c
> +++ b/src/mm-generic-gsm.c
> @@ -295,7 +295,10 @@ pin_check_done (MMAtSerialPort *port,
> if (g_str_has_prefix (str, "READY")) {
> mm_modem_base_set_unlock_required (MM_MODEM_BASE
> (info->modem), NULL);
> if (MM_MODEM_GSM_CARD_GET_INTERFACE
> (info->modem)->get_unlock_retries)
> - mm_modem_base_set_unlock_retries (MM_MODEM_BASE
> (info->modem), 0);
> + mm_modem_gsm_card_get_unlock_retries
> (MM_MODEM_GSM_CARD (info->modem),
> + "sim-pin",
> +
> get_unlock_retries_cb,
> + NULL);
> else
> mm_modem_base_set_unlock_retries (MM_MODEM_BASE
> (info->modem),
>
> MM_MODEM_GSM_CARD_UNLOCK_RETRIES_NOT_SUPPORTED);
> @@ -2219,6 +2222,32 @@ pin_puk_recheck_done (MMModem *modem, GError
> *error, gpointer user_data)
> mm_callback_info_schedule (info);
> }
>
> +/* Following an operation other than unlock that requires
> + * a pin, refetch the retry count, which may have changed
> + * if an incorrect PIN was supplied. Check also for a SIM_PUK
> + * error, which occurs if PIN retries has reached zero. */
> +static void
> +update_pin_puk_status(MMCallbackInfo *info, GError *error)
> +{
> + const char *pin_type = "sim-pin";
> +
> + if (error) {
> + if (error->domain != MM_MOBILE_ERROR)
> + return;
> + if (error->code == MM_MOBILE_ERROR_SIM_PUK) {
> + mm_modem_base_set_unlock_required (MM_MODEM_BASE
> (info->modem),
> + "sim-puk");
> + pin_type = "sim-puk";
> + } else if (error->code != MM_MOBILE_ERROR_WRONG_PASSWORD) {
> + return;
> + }
> + }
> + mm_modem_gsm_card_get_unlock_retries (MM_MODEM_GSM_CARD
> (info->modem),
> + pin_type,
> + get_unlock_retries_cb,
> + NULL);
> +}
> +
> static void
> send_puk_done (MMAtSerialPort *port,
> GString *response,
> @@ -2369,6 +2398,7 @@ enable_pin_done (MMAtSerialPort *port,
> if (mm_callback_info_check_modem_removed (info))
> return;
>
> + update_pin_puk_status(info, error);
> if (error)
> info->error = g_error_copy (error);
> mm_callback_info_schedule (info);
> @@ -2404,6 +2434,7 @@ change_pin_done (MMAtSerialPort *port,
> if (mm_callback_info_check_modem_removed (info))
> return;
>
> + update_pin_puk_status(info, error);
> if (error)
> info->error = g_error_copy (error);
> mm_callback_info_schedule (info);
> --
> 1.7.3.1
--
Aleksander
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]