You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.9 KiB
69 lines
1.9 KiB
From b9c9bd9bacaab701d5b3cb3e4b6cb02ea8d36e47 Mon Sep 17 00:00:00 2001 |
|
From: NeilBrown <neilb@suse.com> |
|
Date: Thu, 20 Apr 2017 12:40:06 +1000 |
|
Subject: [RHEL7.5 PATCH 089/169] Detail: ensure --export names are |
|
acceptable as shell variables. |
|
|
|
If an array contains a device which has a name that |
|
contains something other than alphnumerics and underscores, |
|
then some values reported by "mdadm --detail --export" will |
|
not be valid as variable assignment of the shell. |
|
This particularly affects dm devices. |
|
e.g. |
|
MD_DEVICE_dm-4_ROLE=1 |
|
MD_DEVICE_dm-4_DEV=/dev/dm-4 |
|
|
|
As it is particularly useful to be able to work with these |
|
in a shell script, and as the precise name is not important, |
|
change all non-alphanumerics to '_'. |
|
|
|
MD_DEVICE_dm_4_ROLE=1 |
|
MD_DEVICE_dm_4_DEV=/dev/dm-4 |
|
|
|
Signed-off-by: NeilBrown <neilb@suse.com> |
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com> |
|
--- |
|
Detail.c | 12 +++++++++--- |
|
1 file changed, 9 insertions(+), 3 deletions(-) |
|
|
|
diff --git a/Detail.c b/Detail.c |
|
index e40cd8f..91c5a98 100644 |
|
--- a/Detail.c |
|
+++ b/Detail.c |
|
@@ -25,6 +25,7 @@ |
|
#include "mdadm.h" |
|
#include "md_p.h" |
|
#include "md_u.h" |
|
+#include <ctype.h> |
|
#include <dirent.h> |
|
|
|
static int cmpstringp(const void *p1, const void *p2) |
|
@@ -276,17 +277,22 @@ int Detail(char *dev, struct context *c) |
|
char *path = |
|
map_dev(mdi->disk.major, |
|
mdi->disk.minor, 0); |
|
+ char *sysdev = xstrdup(mdi->sys_name + 1); |
|
+ char *cp; |
|
+ for (cp = sysdev; *cp; cp++) |
|
+ if (!isalnum(*cp)) |
|
+ *cp = '_'; |
|
|
|
if (mdi->disk.raid_disk >= 0) |
|
printf("MD_DEVICE_%s_ROLE=%d\n", |
|
- mdi->sys_name+4, |
|
+ sysdev, |
|
mdi->disk.raid_disk); |
|
else |
|
printf("MD_DEVICE_%s_ROLE=spare\n", |
|
- mdi->sys_name+4); |
|
+ sysdev); |
|
if (path) |
|
printf("MD_DEVICE_%s_DEV=%s\n", |
|
- mdi->sys_name+4, path); |
|
+ sysdev, path); |
|
} |
|
} |
|
goto out; |
|
-- |
|
2.7.4 |
|
|
|
|