Merge pull request #5255 from poettering/percent-escape

fstab-generator: Options= applies specifier expansion
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2017-02-09 09:18:41 -05:00
committed by GitHub
3 changed files with 69 additions and 41 deletions
+47 -14
View File
@@ -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);
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)