]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: add support for x-* mount comments
authorKarel Zak <kzak@redhat.com>
Thu, 21 Apr 2011 12:53:23 +0000 (14:53 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 21 Apr 2011 12:53:23 +0000 (14:53 +0200)
The current way how add any comment or extra information to /etc/fstab
is to use comment="" mount option. This is not too elegant and readable
if you want to add more than one comment.

It seems better to add any generic prefix that will be used for all
3rd-party userspace mount options.

Expected syntax is:

  x-<application>-<options>[=<data>]

For example:

  x-systemd-bar=managed

All x-* options (as well as comment=) are ignored by libmount and not
stored to the mtab file.

Requested-by: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Karel Zak <kzak@redhat.com>
shlibs/mount/src/libmount.h.in
shlibs/mount/src/optmap.c
tests/expected/libmount/optstr-flags
tests/expected/libmount/optstr-split
tests/ts/libmount/optstr

index e168f28454baefd1529b88a265b2a95fe891bdc6..7d02ddcf0f4907b1cb0b951529ab36a5a95042d7 100644 (file)
@@ -73,6 +73,7 @@ struct libmnt_optmap
  */
 #define MNT_INVERT     (1 << 1) /* invert the mountflag */
 #define MNT_NOMTAB     (1 << 2) /* skip in the mtab option string */
+#define MNT_PREFIX     (1 << 3) /* prefix used for some options (e.g. "x-foo") */
 
 /**
  * libmnt_fs:
@@ -438,6 +439,7 @@ extern int mnt_context_set_syscall_status(struct libmnt_context *cxt, int status
 #define MNT_MS_NOFAIL   (1 << 10)
 #define MNT_MS_UHELPER  (1 << 11)
 #define MNT_MS_HELPER   (1 << 12)
+#define MNT_MS_XCOMMENT (1 << 13)
 
 /*
  * mount(2) MS_* masks (MNT_MAP_LINUX map)
index acd76173fde9ed60f4e49726bbe4bf97420f465f..7db6d031429ab9c94839b2dbad633fc0c0c58f71 100644 (file)
@@ -133,7 +133,7 @@ static const struct libmnt_optmap userspace_opts_map[] =
    { "auto",    MNT_MS_NOAUTO, MNT_INVERT | MNT_NOMTAB },  /* Can be mounted using -a */
    { "noauto",  MNT_MS_NOAUTO, MNT_NOMTAB },               /* Can  only be mounted explicitly */
 
-   { "user[=]", MNT_MS_USER },                           /* Allow ordinary user to mount (mtab) */
+   { "user[=]", MNT_MS_USER },                             /* Allow ordinary user to mount (mtab) */
    { "nouser",  MNT_MS_USER, MNT_INVERT | MNT_NOMTAB },    /* Forbid ordinary user to mount */
 
    { "users",   MNT_MS_USERS, MNT_NOMTAB },                /* Allow ordinary users to mount */
@@ -147,9 +147,10 @@ static const struct libmnt_optmap userspace_opts_map[] =
 
    { "_netdev", MNT_MS_NETDEV },                           /* Device requires network */
 
-   { "comment=", MNT_MS_COMMENT, MNT_NOMTAB },           /* fstab comment only */
+   { "comment=", MNT_MS_COMMENT, MNT_NOMTAB },             /* fstab comment only */
+   { "x-",      MNT_MS_XCOMMENT, MNT_NOMTAB | MNT_PREFIX }, /* x- options */
 
-   { "loop[=]", MNT_MS_LOOP },                           /* use the loop device */
+   { "loop[=]", MNT_MS_LOOP },                             /* use the loop device */
 
    { "nofail",  MNT_MS_NOFAIL, MNT_NOMTAB },               /* Do not fail if ENOENT on dev */
 
@@ -210,6 +211,14 @@ const struct libmnt_optmap *mnt_optmap_get_entry(
                const char *p;
 
                for (ent = map; ent && ent->name; ent++) {
+                       if (ent->mask & MNT_PREFIX) {
+                               if (startswith(name, ent->name)) {
+                                       if (mapent)
+                                               *mapent = ent;
+                                       return map;
+                               }
+                               continue;
+                       }
                        if (strncmp(ent->name, name, namelen))
                                continue;
                        p = ent->name + namelen;
index 5d138b510ec84f04995aa62fde02763afb5bdd50..17b4727458f5c042118bf06194acf5a926e1d126 100644 (file)
@@ -1,2 +1,2 @@
 mountflags:           0x0000000e
-userspace-mountflags: 0x00000208
+userspace-mountflags: 0x00002208
index bd2bc23749a9386d747b67666d706e90180bdc29..341a640355eb11415bebd62a729b322ebc922d06 100644 (file)
@@ -1,3 +1,3 @@
-user : user=kzak,loop=/dev/loop0
+user : x-bar,x-foo=foodata,user=kzak,loop=/dev/loop0
 vfs  : noexec,nosuid
 fs   : aaa,bbb=BBB,ccc
index fd6d47d710e841e0c3c77ad9fb806c6f566cdf60..8a6a897984ebd449de4813a78b99cc0928add884 100755 (executable)
@@ -69,11 +69,11 @@ $TESTPROG --remove "aaa,bbb=BBB,ccc" "bbb" &> $TS_OUTPUT
 ts_finalize_subtest
 
 ts_init_subtest "split"
-$TESTPROG --split "aaa,bbb=BBB,ccc,user=kzak,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
+$TESTPROG --split "aaa,bbb=BBB,ccc,x-bar,x-foo=foodata,user=kzak,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
 ts_finalize_subtest
 
 ts_init_subtest "flags"
-$TESTPROG --flags "aaa,bbb=BBB,ccc,user=kzak,nodev,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
+$TESTPROG --flags "aaa,bbb=BBB,x-foo,ccc,user=kzak,nodev,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
 ts_finalize_subtest
 
 ts_init_subtest "apply-linux"  # add noatime and remove noexec and nosuid