From: Pavel Machek <pavel@ucw.cz>
To: ofono@ofono.org
Subject: Re: [PATCH] sim: Sim PIN1 cache upon modem reset/crash
Date: Wed, 12 Dec 2018 11:04:43 +0100 [thread overview]
Message-ID: <20181212100443.GB13437@amd> (raw)
In-Reply-To: <CAKSBH7H78T8yGOu5w1cch-iSt7J7f6cy28FTFdzOzngMJ3Ldvw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 8816 bytes --]
On Wed 2018-12-12 08:59:34, Giacinto Cifelli wrote:
> No, absolutely not!
> It is forbidden to do this by the 3GPP!
Checking if 3GPP is allowed to make laws in this country.... no.
:-)
I'm not sure if it makes sense by default, but... I don't think 3GPP
has or should have power over ofono project.
Pavel
> On Wed, Dec 12, 2018 at 7:46 AM Nandini Rebello
> <nandini.rebello@intel.com> wrote:
> >
> > Adding SIM PIN caching feature to oFono. oFono now caches the SIM PIN1 type
> > against the ICCID throughout its lifetime in a link list and enters
> > implicitly upon modem reset/crash.
> >
> > Handles cases of incorrect pin and sim pin changed externally.
> >
> > Adding to all modems by default.
> > ---
> > src/sim.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 114 insertions(+)
> >
> > diff --git a/src/sim.c b/src/sim.c
> > index 129ff5d..28d9a00 100644
> > --- a/src/sim.c
> > +++ b/src/sim.c
> > @@ -141,6 +141,11 @@ struct ofono_sim {
> > bool wait_initialized : 1;
> > };
> >
> > +struct cached_pin {
> > + char *id;
> > + char *pin;
> > +};
> > +
> > struct msisdn_set_request {
> > struct ofono_sim *sim;
> > int pending;
> > @@ -176,6 +181,8 @@ static void sim_own_numbers_update(struct ofono_sim *sim);
> >
> > static GSList *g_drivers = NULL;
> >
> > +static GSList *cached_pins = NULL;
> > +
> > static const char *sim_passwd_name(enum ofono_sim_password_type type)
> > {
> > return passwd_name[type];
> > @@ -473,6 +480,75 @@ done:
> > return reply;
> > }
> >
> > +static struct cached_pin *pin_cache_lookup(const char *iccid)
> > +{
> > + struct cached_pin *c;
> > + GSList *l;
> > +
> > + for (l = cached_pins; l; l = l->next) {
> > + c = l->data;
> > +
> > + if (g_strcmp0(iccid, c->id) == 0)
> > + return c;
> > + }
> > +
> > + return NULL;
> > +}
> > +
> > +static gboolean pin_cache_update(const char *iccid, const char *pin)
> > +{
> > + struct cached_pin *pin_cached = pin_cache_lookup(iccid);
> > + struct cached_pin *cpins;
> > +
> > + if (pin_cached != NULL) {
> > + g_free(pin_cached->pin);
> > + pin_cached->pin = g_strdup(pin);
> > + return TRUE;
> > + }
> > +
> > + cpins = g_new0(struct cached_pin, 1);
> > +
> > + if (cpins == NULL)
> > + return FALSE;
> > +
> > + cpins->id = g_strdup(iccid);
> > + cpins->pin = g_strdup(pin);
> > + cached_pins = g_slist_prepend(cached_pins, cpins);
> > +
> > + return TRUE;
> > +}
> > +
> > +static void pin_cache_remove(const char *iccid)
> > +{
> > + struct cached_pin *pin_cached = pin_cache_lookup(iccid);
> > +
> > + if (pin_cached == NULL)
> > + return;
> > +
> > + cached_pins = g_slist_remove(cached_pins, pin_cached);
> > +}
> > +
> > +static void pin_cache_enter_cb(const struct ofono_error *error, void *data)
> > +{
> > + struct ofono_sim *sim = data;
> > +
> > + /* If PIN entry fails, then remove cached PIN*/
> > + if (sim->initialized || error->type != OFONO_ERROR_TYPE_NO_ERROR) {
> > + pin_cache_remove(sim->iccid);
> > + goto recheck;
> > + }
> > +
> > + if (sim->pin_type == OFONO_SIM_PASSWORD_SIM_PIN ||
> > + sim->pin_type == OFONO_SIM_PASSWORD_SIM_PUK) {
> > + sim->wait_initialized = true;
> > + DBG("Waiting for ofono_sim_initialized_notify");
> > + return;
> > + }
> > +
> > +recheck:
> > + __ofono_sim_recheck_pin(sim);
> > +}
> > +
> > static void sim_pin_retries_query_cb(const struct ofono_error *error,
> > int retries[OFONO_SIM_PASSWORD_INVALID],
> > void *data)
> > @@ -681,6 +757,13 @@ static void sim_locked_cb(struct ofono_sim *sim, gboolean locked)
> > OFONO_SIM_MANAGER_INTERFACE,
> > "LockedPins", DBUS_TYPE_STRING,
> > &locked_pins);
> > +
> > + /*Cache pin only for SIM PIN type*/
> > + if (g_strcmp0(typestr, "pin") == 0) {
> > + if (!pin_cache_update(sim->iccid, pin))
> > + ofono_error("Failed to cache PIN.");
> > + }
> > +
> > g_strfreev(locked_pins);
> >
> > sim_pin_retries_check(sim);
> > @@ -776,6 +859,14 @@ static DBusMessage *sim_unlock_pin(DBusConnection *conn, DBusMessage *msg,
> > static void sim_change_pin_cb(const struct ofono_error *error, void *data)
> > {
> > struct ofono_sim *sim = data;
> > + const char *typestr;
> > + const char *old;
> > + const char *new;
> > +
> > + dbus_message_get_args(sim->pending, NULL, DBUS_TYPE_STRING, &typestr,
> > + DBUS_TYPE_STRING, &old,
> > + DBUS_TYPE_STRING, &new,
> > + DBUS_TYPE_INVALID);
> >
> > if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
> > __ofono_dbus_pending_reply(&sim->pending,
> > @@ -786,6 +877,12 @@ static void sim_change_pin_cb(const struct ofono_error *error, void *data)
> > return;
> > }
> >
> > + /*Cache pin only for SIM PIN type*/
> > + if (g_strcmp0(typestr, "pin") == 0) {
> > + if (!pin_cache_update(sim->iccid, new))
> > + ofono_error("Failed to cache PIN.");
> > + }
> > +
> > __ofono_dbus_pending_reply(&sim->pending,
> > dbus_message_new_method_return(sim->pending));
> >
> > @@ -837,8 +934,14 @@ static DBusMessage *sim_change_pin(DBusConnection *conn, DBusMessage *msg,
> > static void sim_enter_pin_cb(const struct ofono_error *error, void *data)
> > {
> > struct ofono_sim *sim = data;
> > + const char *typestr;
> > + const char *pin;
> > DBusMessage *reply;
> >
> > + dbus_message_get_args(sim->pending, NULL, DBUS_TYPE_STRING, &typestr,
> > + DBUS_TYPE_STRING, &pin,
> > + DBUS_TYPE_INVALID);
> > +
> > if (error->type != OFONO_ERROR_TYPE_NO_ERROR)
> > reply = __ofono_error_failed(sim->pending);
> > else
> > @@ -850,6 +953,12 @@ static void sim_enter_pin_cb(const struct ofono_error *error, void *data)
> > if (sim->initialized || error->type != OFONO_ERROR_TYPE_NO_ERROR)
> > goto recheck;
> >
> > + /*Cache pin only for SIM PIN type*/
> > + if (g_strcmp0(typestr, "pin") == 0) {
> > + if (!pin_cache_update(sim->iccid, pin))
> > + ofono_error("Failed to cache PIN.");
> > + }
> > +
> > if (sim->pin_type == OFONO_SIM_PASSWORD_SIM_PIN ||
> > sim->pin_type == OFONO_SIM_PASSWORD_SIM_PUK) {
> > sim->wait_initialized = true;
> > @@ -3023,6 +3132,7 @@ static void sim_pin_query_cb(const struct ofono_error *error,
> > struct ofono_sim *sim = data;
> > DBusConnection *conn = ofono_dbus_get_connection();
> > const char *path = __ofono_atom_get_path(sim->atom);
> > + struct cached_pin *cpins = pin_cache_lookup(sim->iccid);
> > const char *pin_name;
> > char **locked_pins;
> > gboolean lock_changed;
> > @@ -3067,6 +3177,10 @@ static void sim_pin_query_cb(const struct ofono_error *error,
> > &pin_name);
> > }
> >
> > + if (g_strcmp0(pin_name, "pin") == 0 && cpins != NULL)
> > + sim->driver->send_passwd(sim, cpins->pin,
> > + pin_cache_enter_cb, sim);
> > +
> > switch (pin_type) {
> > case OFONO_SIM_PASSWORD_NONE:
> > case OFONO_SIM_PASSWORD_SIM_PIN2:
> > --
> > 2.7.4
> >
> > _______________________________________________
> > ofono mailing list
> > ofono(a)ofono.org
> > https://lists.ofono.org/mailman/listinfo/ofono
> _______________________________________________
> ofono mailing list
> ofono(a)ofono.org
> https://lists.ofono.org/mailman/listinfo/ofono
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
next prev parent reply other threads:[~2018-12-12 10:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-12 6:49 [PATCH] sim: Sim PIN1 cache upon modem reset/crash Nandini Rebello
2018-12-12 7:59 ` Giacinto Cifelli
2018-12-12 10:04 ` Pavel Machek [this message]
2018-12-12 10:12 ` Giacinto Cifelli
2018-12-12 15:35 ` Denis Kenzior
2018-12-12 16:22 ` Giacinto Cifelli
2018-12-12 16:44 ` Denis Kenzior
2018-12-13 7:42 ` Giacinto Cifelli
2018-12-13 16:28 ` Denis Kenzior
2018-12-13 16:42 ` Giacinto Cifelli
2018-12-13 17:31 ` Denis Kenzior
2018-12-14 9:33 ` Giacinto Cifelli
2018-12-13 22:01 ` Pavel Machek
2018-12-13 22:06 ` Pavel Machek
2018-12-14 9:19 ` Christophe Ronco
2018-12-14 9:27 ` Giacinto Cifelli
-- strict thread matches above, loose matches on Subject: below --
2019-01-03 11:01 Nandini Rebello
2019-01-03 11:08 ` Giacinto Cifelli
2019-01-04 0:09 ` Denis Kenzior
2019-01-16 6:37 Nandini Rebello
2019-01-23 23:47 ` Denis Kenzior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181212100443.GB13437@amd \
--to=pavel@ucw.cz \
--cc=ofono@ofono.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.