diff options
author | NeilBrown <neilb@suse.de> | 2011-05-10 16:17:12 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-05-10 16:17:12 +1000 |
commit | 0f23aa88f81127eae744d60eedd4884f021562d0 (patch) | |
tree | ba1e8d2580b719277f0df8b98beea0a859b5dd08 | |
parent | 815c8a7e0b11b69331211b59b880ba50f3ed2b5e (diff) | |
download | mdadm-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.c | 9 | ||||
-rw-r--r-- | mdadm.c | 6 | ||||
-rw-r--r-- | mdadm.conf.5 | 11 | ||||
-rw-r--r-- | super0.c | 2 | ||||
-rw-r--r-- | super1.c | 2 |
5 files changed, 22 insertions, 8 deletions
@@ -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); } @@ -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 @@ -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; @@ -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, ':'); |