]> git.ipfire.org Git - people/ms/pakfire.git/blobdiff - src/libpakfire/mount.c
mount: Fix bind-mounting read-only shares
[people/ms/pakfire.git] / src / libpakfire / mount.c
index c00bc658f5b6cf748b4169fe242e707fecba1187..72ba4ac57fa97768e740799a6a7899c9ef4f6876 100644 (file)
@@ -421,6 +421,18 @@ int pakfire_bind(struct pakfire* pakfire, const char* src, const char* dst, int
                        return 1;
        }
 
+       // The Linux kernel seems to be quite funny when trying to bind-mount something
+       // as read-only and requires us to mount the source first, and then remount it
+       // again using MS_RDONLY.
+       if (flags & MS_RDONLY) {
+               r = pakfire_mount(pakfire, src, mountpoint, NULL, MS_BIND|MS_REC, NULL);
+               if (r)
+                       return r;
+
+               // Add the remount flag
+               flags |= MS_REMOUNT;
+       }
+
        // Perform mount
-       return pakfire_mount(pakfire, src, mountpoint, NULL, flags|MS_REC|MS_BIND, NULL);
+       return pakfire_mount(pakfire, src, mountpoint, NULL, flags|MS_BIND|MS_REC, NULL);
 }