]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
conf: non-functional changes lxc_fill_autodev()
authorChristian Brauner <christian.brauner@ubuntu.com>
Mon, 8 May 2017 17:38:59 +0000 (19:38 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Mon, 8 May 2017 22:23:51 +0000 (00:23 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/conf.c

index 8c10b9c4c1107f01f5a0a88d13827d1d69b756b5..9f8c90bc1fc6ba764184b017a1c9423c6b9f0d3a 100644 (file)
@@ -1172,25 +1172,24 @@ static const struct lxc_devs lxc_devs[] = {
        { "console",    S_IFCHR | S_IRUSR | S_IWUSR,           5, 1     },
 };
 
-static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
+static int lxc_fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
 {
        int ret;
        char path[MAXPATHLEN];
        int i;
        mode_t cmask;
 
-       INFO("Creating initial consoles under container /dev");
-
        ret = snprintf(path, MAXPATHLEN, "%s/dev", rootfs->path ? rootfs->mount : "");
        if (ret < 0 || ret >= MAXPATHLEN) {
                ERROR("Error calculating container /dev location");
                return -1;
        }
 
-       if (!dir_exists(path)) // ignore, just don't try to fill in
+       /* ignore, just don't try to fill in */
+       if (!dir_exists(path))
                return 0;
 
-       INFO("Populating container /dev");
+       INFO("populating container /dev");
        cmask = umask(S_IXUSR | S_IXGRP | S_IXOTH);
        for (i = 0; i < sizeof(lxc_devs) / sizeof(lxc_devs[0]); i++) {
                const struct lxc_devs *d = &lxc_devs[i];
@@ -1201,13 +1200,20 @@ static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
                ret = snprintf(path, MAXPATHLEN, "%s/dev/%s", rootfs->path ? rootfs->mount : "", d->name);
                if (ret < 0 || ret >= MAXPATHLEN)
                        return -1;
+
                ret = mknod(path, d->mode, makedev(d->maj, d->min));
-               if (ret && errno != EEXIST) {
+               if (ret < 0) {
                        char hostpath[MAXPATHLEN];
                        FILE *pathfile;
 
-                       // Unprivileged containers cannot create devices, so
-                       // bind mount the device from the host
+                       if (errno == EEXIST) {
+                               DEBUG("\"%s\" device already existed", path);
+                               continue;
+                       }
+
+                       /* Unprivileged containers cannot create devices, so
+                        * bind mount the device from the host.
+                        */
                        ret = snprintf(hostpath, MAXPATHLEN, "/dev/%s", d->name);
                        if (ret < 0 || ret >= MAXPATHLEN)
                                return -1;
@@ -1217,17 +1223,18 @@ static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
                                return -1;
                        }
                        fclose(pathfile);
-                       if (safe_mount(hostpath, path, 0, MS_BIND, NULL,
-                                               rootfs->path ? rootfs->mount : NULL) != 0) {
-                               SYSERROR("Failed bind mounting device %s from host into container",
-                                       d->name);
+                       if (safe_mount(hostpath, path, 0, MS_BIND, NULL, rootfs->path ? rootfs->mount : NULL) != 0) {
+                               SYSERROR("Failed bind mounting device %s from host into container", d->name);
                                return -1;
                        }
+                       DEBUG("bind mounted \"%s\" onto \"%s\"", hostpath, path);
+               } else {
+                       DEBUG("created device node \"%s\"", path);
                }
        }
        umask(cmask);
 
-       INFO("Populated container /dev");
+       INFO("populated container /dev");
        return 0;
 }
 
@@ -4047,7 +4054,7 @@ int lxc_setup(struct lxc_handler *handler)
                        ERROR("failed to run autodev hooks for container '%s'.", name);
                        return -1;
                }
-               if (fill_autodev(&lxc_conf->rootfs, mount_console)) {
+               if (lxc_fill_autodev(&lxc_conf->rootfs, mount_console)) {
                        ERROR("failed to populate /dev in the container");
                        return -1;
                }