mirror of
https://github.com/systemd/systemd
synced 2024-09-06 16:56:43 +00:00
Merge pull request #5255 from poettering/percent-escape
fstab-generator: Options= applies specifier expansion
This commit is contained in:
commit
bc7e815445
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
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"
|
||||
"What=%s\n",
|
||||
what);
|
||||
"[Swap]\n", f);
|
||||
|
||||
if (!isempty(me->mnt_opts) && !streq(me->mnt_opts, "defaults"))
|
||||
fprintf(f, "Options=%s\n", me->mnt_opts);
|
||||
r = write_what(f, what);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue