summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdladm
diff options
context:
space:
mode:
authorAnurag S. Maskey <Anurag.Maskey@Sun.COM>2008-12-22 08:25:23 -0500
committerAnurag S. Maskey <Anurag.Maskey@Sun.COM>2008-12-22 08:25:23 -0500
commita9489f613f667faf21ee68381b627b28ddb22188 (patch)
tree0d3ce994a031c6abc30f4750a1d5d2507363699d /usr/src/lib/libdladm
parentb8ef3d63f88370c11b7163620bbc1206301d39d5 (diff)
downloadillumos-joyent-a9489f613f667faf21ee68381b627b28ddb22188.tar.gz
6766937 nwam fails to configure wpa secured wireless network (ath) automatically
Diffstat (limited to 'usr/src/lib/libdladm')
-rw-r--r--usr/src/lib/libdladm/common/libdllink.h1
-rw-r--r--usr/src/lib/libdladm/common/mapfile-vers1
-rw-r--r--usr/src/lib/libdladm/common/secobj.c25
3 files changed, 27 insertions, 0 deletions
diff --git a/usr/src/lib/libdladm/common/libdllink.h b/usr/src/lib/libdladm/common/libdllink.h
index 29d078470c..22f396c3a6 100644
--- a/usr/src/lib/libdladm/common/libdllink.h
+++ b/usr/src/lib/libdladm/common/libdllink.h
@@ -145,6 +145,7 @@ extern dladm_status_t dladm_str2secobjclass(const char *,
extern dladm_status_t dladm_init_linkprop(datalink_id_t, boolean_t);
extern dladm_status_t dladm_init_secobj(void);
+extern boolean_t dladm_valid_secobj_name(const char *);
extern dladm_status_t dladm_create_datalink_id(const char *, datalink_class_t,
uint_t, uint32_t, datalink_id_t *);
diff --git a/usr/src/lib/libdladm/common/mapfile-vers b/usr/src/lib/libdladm/common/mapfile-vers
index 4d6fdce190..fbdcb31521 100644
--- a/usr/src/lib/libdladm/common/mapfile-vers
+++ b/usr/src/lib/libdladm/common/mapfile-vers
@@ -38,6 +38,7 @@ SUNWprivate_1.1 {
dladm_get_linkprop;
dladm_set_linkprop;
dladm_walk_linkprop;
+ dladm_valid_secobj_name;
dladm_init_secobj;
dladm_get_secobj;
dladm_set_secobj;
diff --git a/usr/src/lib/libdladm/common/secobj.c b/usr/src/lib/libdladm/common/secobj.c
index 6199f32001..cf9b262a9b 100644
--- a/usr/src/lib/libdladm/common/secobj.c
+++ b/usr/src/lib/libdladm/common/secobj.c
@@ -130,6 +130,9 @@ dladm_set_secobj(const char *obj_name, dladm_secobj_class_t class,
dld_ioc_secobj_set_t secobj_set;
dld_secobj_t *objp;
+ if (!dladm_valid_secobj_name(obj_name))
+ return (DLADM_STATUS_BADARG);
+
if (!dladm_check_secobjclass(class) || flags == 0 ||
obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
obj_val == NULL || obj_len == 0 || obj_len > DLD_SECOBJ_VAL_MAX)
@@ -651,3 +654,25 @@ dladm_init_secobj(void)
return (SECOBJ_RW_DB(&state, B_FALSE));
}
+
+boolean_t
+dladm_valid_secobj_name(const char *secobj_name)
+{
+ size_t len = strlen(secobj_name);
+ const char *cp;
+
+ if (len + 1 > DLADM_SECOBJ_NAME_MAX)
+ return (B_FALSE);
+
+ /*
+ * The legal characters in a secobj name are:
+ * alphanumeric (a-z, A-Z, 0-9), '.', '_', '-'.
+ */
+ for (cp = secobj_name; *cp != '\0'; cp++) {
+ if (!isalnum(*cp) &&
+ (*cp != '.') && (*cp != '_') && (*cp != '-'))
+ return (B_FALSE);
+ }
+
+ return (B_TRUE);
+}