]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - config.c
Default to --auto=yes
[thirdparty/mdadm.git] / config.c
index 20dc725849682ded3f51e010c5ced357e1428001..7101c3b0f14a4b29e112310e05b21cada9689978 100644 (file)
--- a/config.c
+++ b/config.c
@@ -242,7 +242,8 @@ mddev_dev_t load_partitions(void)
                minor = strtoul(mp, NULL, 10);
 
                name = map_dev(major, minor, 1);
-
+               if (!name)
+                       continue;
                d = malloc(sizeof(*d));
                d->devname = strdup(name);
                d->next = rv;
@@ -254,6 +255,8 @@ mddev_dev_t load_partitions(void)
 }
 
 struct createinfo createinfo = {
+       .autof = 2, /* by default, create devices with standard names */
+       .symlinks = 1,
 #ifdef DEBIAN
        .gid = 6, /* disk */
        .mode = 0660,
@@ -289,6 +292,8 @@ int parse_auto(char *str, char *msg, int config)
                len = e - str;
                if ((len == 2 && strncasecmp(str,"md",2)==0)) {
                        autof = config ? 5 : 3;
+               } else if ((len == 3 && strncasecmp(str,"yes",3)==0)) {
+                       autof = 2;
                } else if ((len == 3 && strncasecmp(str,"mdp",3)==0)) {
                        autof = config ? 6 : 4;
                } else if ((len == 1 && strncasecmp(str,"p",1)==0) ||
@@ -363,8 +368,11 @@ static void createline(char *line)
                        if (!createinfo.supertype)
                                fprintf(stderr, Name ": metadata format %s unknown, ignoring\n",
                                        w+9);
-
-               } else {
+               } else if (strncasecmp(w, "symlinks=yes", 12) == 0)
+                       createinfo.symlinks = 1;
+               else if  (strncasecmp(w, "symlinks=no", 11) == 0)
+                       createinfo.symlinks = 0;
+               else {
                        fprintf(stderr, Name ": unrecognised word on CREATE line: %s\n",
                                w);
                }
@@ -457,7 +465,7 @@ void arrayline(char *line)
                                fprintf(stderr, Name ": only specify bitmap file once. %s ignored\n",
                                        w);
                        else
-                               mis.bitmap_file = w+7;
+                               mis.bitmap_file = strdup(w+7);
 
                } else if (strncasecmp(w, "devices=", 8 ) == 0 ) {
                        if (mis.devices)
@@ -577,7 +585,13 @@ void homehostline(char *line)
 
 int loaded = 0;
 
-void load_conffile(char *conffile)
+static char *conffile = NULL;
+void set_conffile(char *file)
+{
+       conffile = file;
+}
+
+void load_conffile(void)
 {
        FILE *f;
        char *line;
@@ -649,47 +663,47 @@ void load_conffile(char *conffile)
 /*    printf("got file\n"); */
 }
 
-char *conf_get_mailaddr(char *conffile)
+char *conf_get_mailaddr(void)
 {
-       load_conffile(conffile);
+       load_conffile();
        return alert_email;
 }
 
-char *conf_get_mailfrom(char *conffile)
+char *conf_get_mailfrom(void)
 {
-       load_conffile(conffile);
+       load_conffile();
        return alert_mail_from;
 }
 
-char *conf_get_program(char *conffile)
+char *conf_get_program(void)
 {
-       load_conffile(conffile);
+       load_conffile();
        return alert_program;
 }
 
-char *conf_get_homehost(char *conffile)
+char *conf_get_homehost(void)
 {
-       load_conffile(conffile);
+       load_conffile();
        return home_host;
 }
 
-struct createinfo *conf_get_create_info(char *conffile)
+struct createinfo *conf_get_create_info(void)
 {
-       load_conffile(conffile);
+       load_conffile();
        return &createinfo;
 }
 
-mddev_ident_t conf_get_ident(char *conffile, char *dev)
+mddev_ident_t conf_get_ident(char *dev)
 {
        mddev_ident_t rv;
-       load_conffile(conffile);
+       load_conffile();
        rv = mddevlist;
        while (dev && rv && strcmp(dev, rv->devname)!=0)
                rv = rv->next;
        return rv;
 }
 
-mddev_dev_t conf_get_devs(char *conffile)
+mddev_dev_t conf_get_devs()
 {
        glob_t globbuf;
        struct conf_dev *cd;
@@ -704,7 +718,7 @@ mddev_dev_t conf_get_devs(char *conffile)
                free(t);
        }
     
-       load_conffile(conffile);
+       load_conffile();
 
        if (cdevlist == NULL)
                /* default to 'partitions */