74 lines
2.2 KiB
Plaintext
74 lines
2.2 KiB
Plaintext
---
|
|
include/dmraid/misc.h | 1 +
|
|
lib/format/ataraid/isw.c | 7 ++++++-
|
|
lib/format/ddf/ddf1.c | 1 +
|
|
lib/misc/misc.c | 14 ++++++++++++++
|
|
4 files changed, 22 insertions(+), 1 deletion(-)
|
|
|
|
--- 1.0.0.rc16.orig/include/dmraid/misc.h
|
|
+++ 1.0.0.rc16/include/dmraid/misc.h
|
|
@@ -18,6 +18,7 @@ extern void libdmraid_exit(struct lib_co
|
|
|
|
extern void sysfs_workaround(struct lib_context *lc);
|
|
extern void mk_alpha(struct lib_context *lc, char *str, size_t len);
|
|
+extern void mk_alphanum(struct lib_context *lc, char *str, size_t len);
|
|
extern char *get_basename(struct lib_context *lc, char *str);
|
|
extern char *get_dirname(struct lib_context *lc, char *str);
|
|
extern char *remove_white_space(struct lib_context *lc, char *str, size_t len);
|
|
--- 1.0.0.rc16.orig/lib/format/ataraid/isw.c
|
|
+++ 1.0.0.rc16/lib/format/ataraid/isw.c
|
|
@@ -169,6 +169,7 @@ static size_t
|
|
_name(struct lib_context *lc, struct isw *isw, char *str, size_t len,
|
|
enum name_type nt, int num, struct isw_dev *dev, struct raid_dev *rd)
|
|
{
|
|
+ int n;
|
|
struct {
|
|
const char *fmt, *what;
|
|
} formats[] = {
|
|
@@ -189,7 +190,11 @@ _name(struct lib_context *lc, struct isw
|
|
f += (is_raid10(dev) ? 1 : 0);
|
|
}
|
|
|
|
- return snprintf(str, len, f->fmt, isw->family_num, f->what, num);
|
|
+ n = snprintf(str, len, f->fmt, isw->family_num, f->what, num);
|
|
+ /* As '->volume' could contain anything, we need to sanitise the name */
|
|
+ if (str)
|
|
+ mk_alphanum(lc, str, n);
|
|
+ return n;
|
|
}
|
|
|
|
static char *
|
|
--- 1.0.0.rc16.orig/lib/format/ddf/ddf1.c
|
|
+++ 1.0.0.rc16/lib/format/ddf/ddf1.c
|
|
@@ -689,6 +689,7 @@ name(struct lib_context *lc, struct ddf1
|
|
i = prefix + 16;
|
|
while (!isgraph(buf[--i]));
|
|
buf[i + 1] = 0;
|
|
+ mk_alphanum(lc, buf, i);
|
|
} else {
|
|
char *b;
|
|
|
|
--- 1.0.0.rc16.orig/lib/misc/misc.c
|
|
+++ 1.0.0.rc16/lib/misc/misc.c
|
|
@@ -66,6 +66,20 @@ mk_alpha(struct lib_context *lc, char *s
|
|
}
|
|
}
|
|
|
|
+/* Convert a string to only have alphanum or '-' or '_'.
|
|
+ * All others become '_'
|
|
+ */
|
|
+void
|
|
+mk_alphanum(struct lib_context *lc, char *str, size_t len)
|
|
+{
|
|
+ for (; len && *str; len--, str++) {
|
|
+ if (!isalnum(*str) &&
|
|
+ *str != '-' &&
|
|
+ *str != '_')
|
|
+ *str = '_';
|
|
+ }
|
|
+}
|
|
+
|
|
/* Remove any whitespace from a string. */
|
|
char *
|
|
remove_white_space(struct lib_context *lc, char *str, size_t size)
|