---
Hi,
On Tue, 2011-02-08 at 06:17 +0200, Denis Kenzior wrote:
Why don't we keep things simple. Modify is_valid_pin to take a pin and
> a min and max number of digits.
>
> gboolean is_valid_pin_with_limits(const char *pin, int min, int max)
> (feel free to pick some better name)
>
> Then just add two functions:
>
> __ofono_valid_net_pin(const char *pin)
> __ofono_valid_sim_pin(const char *pin, enum ofono_sim_password_type type)
>
> Stick both in ofono.h / sim.c somewhere
>
Right. Here it is.
Br,
Jussi
src/call-barring.c | 12 ++++----
src/call-meter.c | 4 +-
src/common.c | 37 -------------------------
src/common.h | 9 ------
src/ofono.h | 5 +++
src/sim.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++----
6 files changed, 83 insertions(+), 60 deletions(-)
diff --git a/src/call-barring.c b/src/call-barring.c
index 649826e..384eb43 100644
--- a/src/call-barring.c
+++ b/src/call-barring.c
@@ -402,7 +402,7 @@ static gboolean cb_ss_control(int type, const char *sc,
if (strlen(dn) > 0)
goto bad_format;
- if (type != SS_CONTROL_TYPE_QUERY && !is_valid_pin(sia, PIN_TYPE_NET))
+ if (type != SS_CONTROL_TYPE_QUERY && !__ofono_is_valid_net_pin(sia))
goto bad_format;
switch (type) {
@@ -524,7 +524,7 @@ static gboolean cb_ss_passwd(const char *sc,
if (fac == NULL)
return FALSE;
- if (!is_valid_pin(old, PIN_TYPE_NET) || !is_valid_pin(new,
PIN_TYPE_NET))
+ if (!__ofono_is_valid_net_pin(old) || !__ofono_is_valid_net_pin(new))
goto bad_format;
cb->pending = dbus_message_ref(msg);
@@ -862,7 +862,7 @@ static DBusMessage *cb_set_property(DBusConnection *conn,
DBusMessage *msg,
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&iter, &passwd);
- if (!is_valid_pin(passwd, PIN_TYPE_NET))
+ if (!__ofono_is_valid_net_pin(passwd))
return __ofono_error_invalid_format(msg);
}
@@ -909,7 +909,7 @@ static DBusMessage *cb_disable_all(DBusConnection *conn,
DBusMessage *msg,
DBUS_TYPE_INVALID) == FALSE)
return __ofono_error_invalid_args(msg);
- if (!is_valid_pin(passwd, PIN_TYPE_NET))
+ if (!__ofono_is_valid_net_pin(passwd))
return __ofono_error_invalid_format(msg);
cb_set_query_bounds(cb, fac, FALSE);
@@ -957,10 +957,10 @@ static DBusMessage *cb_set_passwd(DBusConnection *conn,
DBusMessage *msg,
DBUS_TYPE_INVALID) == FALSE)
return __ofono_error_invalid_args(msg);
- if (!is_valid_pin(old_passwd, PIN_TYPE_NET))
+ if (!__ofono_is_valid_net_pin(old_passwd))
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(new_passwd, PIN_TYPE_NET))
+ if (!__ofono_is_valid_net_pin(new_passwd))
return __ofono_error_invalid_format(msg);
cb->pending = dbus_message_ref(msg);
diff --git a/src/call-meter.c b/src/call-meter.c
index d483e2e..0789935 100644
--- a/src/call-meter.c
+++ b/src/call-meter.c
@@ -549,7 +549,7 @@ static DBusMessage *cm_set_property(DBusConnection *conn,
DBusMessage *msg,
dbus_message_iter_get_basic(&iter, &passwd);
- if (!is_valid_pin(passwd, PIN_TYPE_PIN))
+ if (!__ofono_is_valid_sim_pin(passwd, OFONO_SIM_PASSWORD_SIM_PIN2))
return __ofono_error_invalid_format(msg);
for (property = cm_properties; property->name; property++) {
@@ -621,7 +621,7 @@ static DBusMessage *cm_acm_reset(DBusConnection *conn,
DBusMessage *msg,
DBUS_TYPE_INVALID) == FALSE)
return __ofono_error_invalid_args(msg);
- if (!is_valid_pin(pin2, PIN_TYPE_PIN))
+ if (!__ofono_is_valid_sim_pin(pin2, OFONO_SIM_PASSWORD_SIM_PIN2))
return __ofono_error_invalid_format(msg);
cm->pending = dbus_message_ref(msg);
diff --git a/src/common.c b/src/common.c
index f25f105..247fff0 100644
--- a/src/common.c
+++ b/src/common.c
@@ -649,43 +649,6 @@ const char *bearer_class_to_string(enum bearer_class cls)
return NULL;
}
-gboolean is_valid_pin(const char *pin, enum pin_type type)
-{
- unsigned int i;
-
- /* Pin must not be empty */
- if (pin == NULL || pin[0] == '\0')
- return FALSE;
-
- i = strlen(pin);
- if (i != strspn(pin, "0123456789"))
- return FALSE;
-
- switch (type) {
- case PIN_TYPE_PIN:
- /* 11.11 Section 9.3 ("CHV"): 4..8 IA-5 digits */
- if (4 <= i && i <= 8)
- return TRUE;
- break;
- case PIN_TYPE_PUK:
- /* 11.11 Section 9.3 ("UNBLOCK CHV"), 8 IA-5 digits */
- if (i == 8)
- return TRUE;
- break;
- case PIN_TYPE_NET:
- /* 22.004 Section 5.2, 4 IA-5 digits */
- if (i == 4)
- return TRUE;
- break;
- case PIN_TYPE_NONE:
- if (i < 8)
- return TRUE;
- break;
- }
-
- return FALSE;
-}
-
const char *registration_status_to_string(int status)
{
switch (status) {
diff --git a/src/common.h b/src/common.h
index 09f2deb..6dc7bff 100644
--- a/src/common.h
+++ b/src/common.h
@@ -122,13 +122,6 @@ enum ss_cssu {
SS_MT_CALL_DEFLECTED = 9,
};
-enum pin_type {
- PIN_TYPE_NONE,
- PIN_TYPE_PIN,
- PIN_TYPE_PUK,
- PIN_TYPE_NET,
-};
-
/* 27.007 Section 10.1.10 */
enum context_status {
CONTEXT_STATUS_DEACTIVATED = 0,
@@ -162,8 +155,6 @@ const char *ss_control_type_to_string(enum ss_control_type
type);
const char *bearer_class_to_string(enum bearer_class cls);
-gboolean is_valid_pin(const char *pin, enum pin_type type);
-
const char *registration_status_to_string(int status);
const char *registration_tech_to_string(int tech);
const char *packet_bearer_to_string(int bearer);
diff --git a/src/ofono.h b/src/ofono.h
index 6ba0187..4f0b7c2 100644
--- a/src/ofono.h
+++ b/src/ofono.h
@@ -299,6 +299,11 @@ ofono_bool_t __ofono_sim_service_available(struct
ofono_sim *sim,
int ust_service,
int sst_service);
+ofono_bool_t __ofono_is_valid_sim_pin(const char *pin,
+ enum ofono_sim_password_type type);
+
+ofono_bool_t __ofono_is_valid_net_pin(const char *pin);
+
#include <ofono/stk.h>
typedef void (*__ofono_sms_sim_download_cb_t)(ofono_bool_t ok,
diff --git a/src/sim.c b/src/sim.c
index 3350166..3462608 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -676,7 +676,7 @@ static DBusMessage *sim_lock_or_unlock(struct ofono_sim
*sim, int lock,
type == OFONO_SIM_PASSWORD_SIM_PIN2)
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(pin, PIN_TYPE_PIN))
+ if (!__ofono_is_valid_sim_pin(pin, type))
return __ofono_error_invalid_format(msg);
sim->pending = dbus_message_ref(msg);
@@ -748,10 +748,10 @@ static DBusMessage *sim_change_pin(DBusConnection *conn,
DBusMessage *msg,
if (password_is_pin(type) == FALSE)
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(old, PIN_TYPE_PIN))
+ if (!__ofono_is_valid_sim_pin(old, type))
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(new, PIN_TYPE_PIN))
+ if (!__ofono_is_valid_sim_pin(new, type))
return __ofono_error_invalid_format(msg);
if (!strcmp(new, old))
@@ -803,7 +803,7 @@ static DBusMessage *sim_enter_pin(DBusConnection *conn,
DBusMessage *msg,
if (type == OFONO_SIM_PASSWORD_NONE || type != sim->pin_type)
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(pin, PIN_TYPE_PIN))
+ if (!__ofono_is_valid_sim_pin(pin, type))
return __ofono_error_invalid_format(msg);
sim->pending = dbus_message_ref(msg);
@@ -1013,10 +1013,12 @@ static DBusMessage *sim_reset_pin(DBusConnection *conn,
DBusMessage *msg,
if (type == OFONO_SIM_PASSWORD_NONE || type != sim->pin_type)
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(puk, PIN_TYPE_PUK))
+ if (!__ofono_is_valid_sim_pin(puk, type))
return __ofono_error_invalid_format(msg);
- if (!is_valid_pin(pin, PIN_TYPE_PIN))
+ type = puk2pin(type);
+
+ if (!__ofono_is_valid_sim_pin(pin, type))
return __ofono_error_invalid_format(msg);
sim->pending = dbus_message_ref(msg);
@@ -2378,3 +2380,65 @@ void *ofono_sim_get_data(struct ofono_sim *sim)
{
return sim->driver_data;
}
+
+ofono_bool_t is_valid_pin(const char *pin, int min, int max)
+{
+ unsigned int i;
+
+ /* Pin must not be empty */
+ if (pin == NULL || pin[0] == '\0')
+ return FALSE;
+
+ i = strlen(pin);
+ if (i != strspn(pin, "0123456789"))
+ return FALSE;
+
+ if (min <= i && i <= max)
+ return TRUE;
+
+ return FALSE;
+}
+
+ofono_bool_t __ofono_is_valid_sim_pin(const char *pin,
+ enum ofono_sim_password_type type)
+{
+ switch (type) {
+ case OFONO_SIM_PASSWORD_SIM_PIN:
+ case OFONO_SIM_PASSWORD_SIM_PIN2:
+ /* 11.11 Section 9.3 ("CHV"): 4..8 IA-5 digits */
+ return is_valid_pin(pin, 4, 8);
+ break;
+ case OFONO_SIM_PASSWORD_PHSIM_PIN:
+ case OFONO_SIM_PASSWORD_PHFSIM_PIN:
+ case OFONO_SIM_PASSWORD_PHNET_PIN:
+ case OFONO_SIM_PASSWORD_PHNETSUB_PIN:
+ case OFONO_SIM_PASSWORD_PHSP_PIN:
+ case OFONO_SIM_PASSWORD_PHCORP_PIN:
+ /* 22.022 Section 14 4..16 IA-5 digits */
+ return is_valid_pin(pin, 4, 16);
+ break;
+ case OFONO_SIM_PASSWORD_SIM_PUK:
+ case OFONO_SIM_PASSWORD_SIM_PUK2:
+ case OFONO_SIM_PASSWORD_PHFSIM_PUK:
+ case OFONO_SIM_PASSWORD_PHNET_PUK:
+ case OFONO_SIM_PASSWORD_PHNETSUB_PUK:
+ case OFONO_SIM_PASSWORD_PHSP_PUK:
+ case OFONO_SIM_PASSWORD_PHCORP_PUK:
+ /* 11.11 Section 9.3 ("UNBLOCK CHV"), 8 IA-5 digits */
+ return is_valid_pin(pin, 8, 8);
+ break;
+ case OFONO_SIM_PASSWORD_NONE:
+ return is_valid_pin(pin, 0, 8);
+ break;
+ case OFONO_SIM_PASSWORD_INVALID:
+ break;
+ }
+
+ return FALSE;
+}
+
+ofono_bool_t __ofono_is_valid_net_pin(const char *pin)
+{
+ return is_valid_pin(pin, 4, 4);
+}
+
--
1.7.1
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono