From 0f23aa88f81127eae744d60eedd4884f021562d0 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 10 May 2011 16:17:12 +1000 Subject: [PATCH] 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="". This allows the creation of v1.x arrays without a "hostname:" prefix in the name. Signed-off-by: NeilBrown --- config.c | 9 ++++++--- mdadm.c | 6 +++++- mdadm.conf.5 | 11 +++++++++-- super0.c | 2 +- super1.c | 2 +- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/config.c b/config.c index 0dbe61ed..ad75411c 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, "")==0) require_homehost = 0; - else if (home_host == NULL) - home_host = strdup(w); - else + else if (home_host == NULL) { + if (strcasecmp(w, "")==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 ec05e6e8..96d32b53 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, "")==0) { + if (homehost == NULL || strcasecmp(homehost, "")==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, "") == 0)) { + homehost = NULL; + require_homehost = 0; + } if ((mode != MISC || devmode != 'E') && geteuid() != 0) { diff --git a/mdadm.conf.5 b/mdadm.conf.5 index 65b00293..9f31c734 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 +.BR , +.B and .BR . If .B 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 @@ -362,6 +363,12 @@ more that one other word on the .B HOMEHOST line. +If +.B +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 3ae236a8..2c27e1e1 100644 --- a/super0.c +++ b/super0.c @@ -541,7 +541,7 @@ static int update_super0(struct supertype *st, struct mdinfo *info, sb->state &= ~(1<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 79bb4d0c..9ba1ded4 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, ':'); -- 2.39.2