Provide automatic "/dev/fuse" mknod(2)ding for ENOENT entries.
authorlace <>
Mon, 26 Dec 2005 07:54:00 +0000 (07:54 +0000)
committerlace <>
Mon, 26 Dec 2005 07:54:00 +0000 (07:54 +0000)
src/client/fuse/fusermount.c

index d7dee7e..c7e45f9 100644 (file)
@@ -41,6 +41,9 @@
 
 /* Captive */
 #include <captive/client.h>
 
 /* Captive */
 #include <captive/client.h>
+#include <linux/kdev_t.h>
+#include <linux/major.h>
+#include <grp.h>
 
 #define FUSE_COMMFD_ENV         "_FUSE_COMMFD"
 
 
 #define FUSE_COMMFD_ENV         "_FUSE_COMMFD"
 
@@ -779,6 +782,15 @@ static int check_perm(const char **mntp, struct stat *stbuf, int *currdir_fd,
 static int try_open(const char *dev, char **devp, int silent)
 {
     int fd = open(dev, O_RDWR);
 static int try_open(const char *dev, char **devp, int silent)
 {
     int fd = open(dev, O_RDWR);
+    /* Captive */
+    if (fd == -1 && errno == ENOENT && !strcmp(dev, FUSE_DEV_NEW)
+        && !mknod(dev, 0660 | S_IFCHR, MKDEV(MISC_MAJOR, 229))) {
+        struct group *group;
+
+        fprintf(stderr, "%s: Notice: Created FUSE device: %s\n", progname, dev);
+        if ((group = getgrnam("fuse")) && !chown(dev, 0, group->gr_gid))
+            fd = open(dev, O_RDWR);
+    }
     if (fd != -1) {
         *devp = strdup(dev);
         if (*devp == NULL) {
     if (fd != -1) {
         *devp = strdup(dev);
         if (*devp == NULL) {