diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-02-09 09:18:41 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-09 09:18:41 -0500 |
commit | bc7e815445d84f26e81d3883c1b707fc0bf825ba (patch) | |
tree | ee5dd98503dd5410f47d9467c0b3c57ab816a43a | |
parent | 6f844e3a3f97d2b3fce9d37714575177b9ff3f4c (diff) | |
parent | 19d0833bead317dc099c10b472c23e665ff76cfd (diff) |
Merge pull request #5255 from poettering/percent-escape
fstab-generator: Options= applies specifier expansion
-rw-r--r-- | man/systemd.mount.xml | 20 | ||||
-rw-r--r-- | man/systemd.swap.xml | 29 | ||||
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 61 |
3 files changed, 69 insertions, 41 deletions
diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml index 2117433bf0..bb372d788a 100644 --- a/man/systemd.mount.xml +++ b/man/systemd.mount.xml @@ -337,14 +337,12 @@ <varlistentry> <term><varname>What=</varname></term> - <listitem><para>Takes an absolute path of a device node, file - or other resource to mount. See - <citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> - for details. If this refers to a device node, a dependency on - the respective device unit is automatically created. (See - <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> - for more information.) This option is - mandatory.</para></listitem> + <listitem><para>Takes an absolute path of a device node, file or other resource to mount. See <citerefentry + project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> for details. If + this refers to a device node, a dependency on the respective device unit is automatically created. (See + <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more + information.) This option is mandatory. Note that the usual specifier expansion is applied to this setting, + literal percent characters should hence be written as <literal>%%</literal>.</para></listitem> </varlistentry> <varlistentry> @@ -366,9 +364,9 @@ <varlistentry> <term><varname>Options=</varname></term> - <listitem><para>Mount options to use when mounting. This takes - a comma-separated list of options. This setting is - optional.</para></listitem> + <listitem><para>Mount options to use when mounting. This takes a comma-separated list of options. This setting + is optional. Note that the usual specifier expansion is applied to this setting, literal percent characters + should hence be written as <literal>%%</literal>.</para></listitem> </varlistentry> <varlistentry> diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml index 33349eb0b1..184abff260 100644 --- a/man/systemd.swap.xml +++ b/man/systemd.swap.xml @@ -170,17 +170,15 @@ <varlistentry> <term><varname>What=</varname></term> - <listitem><para>Takes an absolute path of a device node or - file to use for paging. See - <citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> - for details. If this refers to a device node, a dependency on - the respective device unit is automatically created. (See - <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> - for more information.) If this refers to a file, a dependency - on the respective mount unit is automatically created. (See - <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry> - for more information.) This option is - mandatory.</para></listitem> + <listitem><para>Takes an absolute path of a device node or file to use for paging. See <citerefentry + project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> for + details. If this refers to a device node, a dependency on the respective device unit is automatically + created. (See + <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more + information.) If this refers to a file, a dependency on the respective mount unit is automatically + created. (See <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry> + for more information.) This option is mandatory. Note that the usual specifier expansion is applied to this + setting, literal percent characters should hence be written as <literal>%%</literal>.</para></listitem> </varlistentry> <varlistentry> @@ -195,12 +193,11 @@ <varlistentry> <term><varname>Options=</varname></term> - <listitem><para>May contain an option string for the swap - device. This may be used for controlling discard options among - other functionality, if the swap backing device supports the - discard or trim operation. (See + <listitem><para>May contain an option string for the swap device. This may be used for controlling discard + options among other functionality, if the swap backing device supports the discard or trim operation. (See <citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> - for more information.) </para></listitem> + for more information.) Note that the usual specifier expansion is applied to this setting, literal percent + characters should hence be written as <literal>%%</literal>.</para></listitem> </varlistentry> <varlistentry> diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 3c601a63e2..d97bafd1fb 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -57,6 +57,34 @@ static char *arg_usr_fstype = NULL; static char *arg_usr_options = NULL; static VolatileMode arg_volatile_mode = _VOLATILE_MODE_INVALID; +static int write_options(FILE *f, const char *options) { + _cleanup_free_ char *o = NULL; + + if (isempty(options)) + return 0; + + if (streq(options, "defaults")) + return 0; + + o = strreplace(options, "%", "%%"); + if (!o) + return log_oom(); + + fprintf(f, "Options=%s\n", o); + return 1; +} + +static int write_what(FILE *f, const char *what) { + _cleanup_free_ char *w = NULL; + + w = strreplace(what, "%", "%%"); + if (!w) + return log_oom(); + + fprintf(f, "What=%s\n", w); + return 1; +} + static int add_swap( const char *what, struct mntent *me, @@ -96,17 +124,19 @@ static int add_swap( "Failed to create unit file %s: %m", unit); - fprintf(f, - "# Automatically generated by systemd-fstab-generator\n\n" - "[Unit]\n" - "SourcePath=/etc/fstab\n" - "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n\n" - "[Swap]\n" - "What=%s\n", - what); + fputs("# Automatically generated by systemd-fstab-generator\n\n" + "[Unit]\n" + "SourcePath=/etc/fstab\n" + "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n\n" + "[Swap]\n", f); + + r = write_what(f, what); + if (r < 0) + return r; - if (!isempty(me->mnt_opts) && !streq(me->mnt_opts, "defaults")) - fprintf(f, "Options=%s\n", me->mnt_opts); + r = write_options(f, me->mnt_opts); + if (r < 0) + return r; r = fflush_and_check(f); if (r < 0) @@ -331,11 +361,13 @@ static int add_mount( fprintf(f, "\n" "[Mount]\n" - "What=%s\n" "Where=%s\n", - what, where); + r = write_what(f, what); + if (r < 0) + return r; + if (!isempty(fstype) && !streq(fstype, "auto")) fprintf(f, "Type=%s\n", fstype); @@ -347,8 +379,9 @@ static int add_mount( if (r < 0) return r; - if (!isempty(filtered) && !streq(filtered, "defaults")) - fprintf(f, "Options=%s\n", filtered); + r = write_options(f, filtered); + if (r < 0) + return r; r = fflush_and_check(f); if (r < 0) |