]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - config.c
Default to --auto=yes
[thirdparty/mdadm.git] / config.c
index d753f54114e16b3bbee931854380d3700678f633..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) ||
@@ -320,14 +325,12 @@ static void createline(char *line)
                        }
                        createinfo.uid = strtoul(w+6, &ep, 10);
                        if (*ep != 0) {
-#ifndef STATIC
                                struct passwd *pw;
                                /* must be a name */
                                pw = getpwnam(w+6);
                                if (pw)
                                        createinfo.uid = pw->pw_uid;
                                else
-#endif /* STATIC */
                                        fprintf(stderr, Name ": CREATE user %s not found\n", w+6);
                        }
                } else if (strncasecmp(w, "group=", 6) == 0) {
@@ -337,14 +340,12 @@ static void createline(char *line)
                        }
                        createinfo.gid = strtoul(w+6, &ep, 10);
                        if (*ep != 0) {
-#ifndef STATIC
                                struct group *gr;
                                /* must be a name */
                                gr = getgrnam(w+6);
                                if (gr)
                                        createinfo.gid = gr->gr_gid;
                                else
-#endif /* STATIC */
                                        fprintf(stderr, Name ": CREATE group %s not found\n", w+6);
                        }
                } else if (strncasecmp(w, "mode=", 5) == 0) {
@@ -358,7 +359,20 @@ static void createline(char *line)
                                fprintf(stderr, Name ": unrecognised CREATE mode %s\n",
                                        w+5);
                        }
-               } else {
+               } else if (strncasecmp(w, "metadata=", 9) == 0) {
+                       /* style of metadata to use by default */
+                       int i;
+                       for (i=0; superlist[i] && !createinfo.supertype; i++)
+                               createinfo.supertype =
+                                       superlist[i]->match_metadata_desc(w+9);
+                       if (!createinfo.supertype)
+                               fprintf(stderr, Name ": metadata format %s unknown, ignoring\n",
+                                       w+9);
+               } 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);
                }
@@ -451,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)
@@ -571,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;
@@ -643,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;
@@ -698,7 +718,7 @@ mddev_dev_t conf_get_devs(char *conffile)
                free(t);
        }
     
-       load_conffile(conffile);
+       load_conffile();
 
        if (cdevlist == NULL)
                /* default to 'partitions */