summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-05-10 16:17:12 +1000
committerNeilBrown <neilb@suse.de>2011-05-10 16:17:12 +1000
commit0f23aa88f81127eae744d60eedd4884f021562d0 (patch)
treeba1e8d2580b719277f0df8b98beea0a859b5dd08
parent815c8a7e0b11b69331211b59b880ba50f3ed2b5e (diff)
downloadmdadm-0f23aa88f81127eae744d60eedd4884f021562d0.tar.gz
config: restore the possibility of a NULL homehost
As homehost defaults to the system name it is not possible to specify a NULL homehost. This patch restored this ability with either --homehost="" or --homehost="<none>". This allows the creation of v1.x arrays without a "hostname:" prefix in the name. Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r--config.c9
-rw-r--r--mdadm.c6
-rw-r--r--mdadm.conf.511
-rw-r--r--super0.c2
-rw-r--r--super1.c2
5 files changed, 22 insertions, 8 deletions
diff --git a/config.c b/config.c
index 0dbe61e..ad75411 100644
--- a/config.c
+++ b/config.c
@@ -589,9 +589,12 @@ void homehostline(char *line)
for (w=dl_next(line); w != line ; w=dl_next(w)) {
if (strcasecmp(w, "<ignore>")==0)
require_homehost = 0;
- else if (home_host == NULL)
- home_host = strdup(w);
- else
+ else if (home_host == NULL) {
+ if (strcasecmp(w, "<none>")==0)
+ home_host = strdup("");
+ else
+ home_host = strdup(w);
+ }else
fprintf(stderr, Name ": excess host name on HOMEHOST line: %s - ignored\n",
w);
}
diff --git a/mdadm.c b/mdadm.c
index ec05e6e..96d32b5 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1167,12 +1167,16 @@ int main(int argc, char *argv[])
if (homehost == NULL)
homehost = conf_get_homehost(&require_homehost);
- if (homehost == NULL || strcmp(homehost, "<system>")==0) {
+ if (homehost == NULL || strcasecmp(homehost, "<system>")==0) {
if (gethostname(sys_hostname, sizeof(sys_hostname)) == 0) {
sys_hostname[sizeof(sys_hostname)-1] = 0;
homehost = sys_hostname;
}
}
+ if (homehost && (!homehost[0] || strcasecmp(homehost, "<none>") == 0)) {
+ homehost = NULL;
+ require_homehost = 0;
+ }
if ((mode != MISC || devmode != 'E') &&
geteuid() != 0) {
diff --git a/mdadm.conf.5 b/mdadm.conf.5
index 65b0029..9f31c73 100644
--- a/mdadm.conf.5
+++ b/mdadm.conf.5
@@ -339,14 +339,15 @@ line gives a default value for the
.B \-\-homehost=
option to mdadm. There should normally be only one other word on the line.
It should either be a host name, or one of the special words
-.B <system>
+.BR <system>,
+.B <none>
and
.BR <ignore> .
If
.B <system>
is given, then the
.BR gethostname ( 2 )
-systemcall is used to get the host name.
+systemcall is used to get the host name. This is the default.
If
.B <ignore>
@@ -362,6 +363,12 @@ more that one other word on the
.B HOMEHOST
line.
+If
+.B <none>
+is given, then the default of using
+.BR gethostname ( 2 )
+is over-ridden and no homehost name is assumed.
+
When arrays are created, this host name will be stored in the
metadata. When arrays are assembled using auto-assembly, arrays which
do not record the correct homehost name in their metadata will be
diff --git a/super0.c b/super0.c
index 3ae236a..2c27e1e 100644
--- a/super0.c
+++ b/super0.c
@@ -541,7 +541,7 @@ static int update_super0(struct supertype *st, struct mdinfo *info,
sb->state &= ~(1<<MD_SB_CLEAN);
sb->recovery_cp = 0;
} else if (strcmp(update, "homehost") == 0 &&
- homehost) {
+ homehost) {
uuid_set = 0;
update = "uuid";
info->uuid[0] = sb->set_uuid0;
diff --git a/super1.c b/super1.c
index 79bb4d0..9ba1ded 100644
--- a/super1.c
+++ b/super1.c
@@ -772,7 +772,7 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
} else if (strcmp(update, "no-bitmap") == 0) {
sb->feature_map &= ~__cpu_to_le32(MD_FEATURE_BITMAP_OFFSET);
} else if (strcmp(update, "homehost") == 0 &&
- homehost) {
+ homehost) {
char *c;
update = "name";
c = strchr(sb->set_name, ':');