|
Yu Watanabe |
53cfde |
From 248b69d63068cabd7463c325d2ecc3db3239272e Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
From: Daan De Meyer <daan.j.demeyer@gmail.com>
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
Date: Tue, 23 Jul 2024 13:14:05 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
Subject: [PATCH] tmpfiles: make --purge hard to (mis-)use
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
Follow-up for https://github.com/systemd/systemd/pull/33383.
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
---
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
src/tmpfiles/tmpfiles.c | 17 +++++++++++++++++
|
|
Yu Watanabe |
53cfde |
test/units/TEST-22-TMPFILES.18.sh | 6 +++---
|
|
Yu Watanabe |
53cfde |
2 files changed, 20 insertions(+), 3 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
|
|
Yu Watanabe |
53cfde |
index 86bf16356d..539c18f5e0 100644
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
--- a/src/tmpfiles/tmpfiles.c
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+++ b/src/tmpfiles/tmpfiles.c
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
@@ -4213,6 +4213,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
ARG_IMAGE_POLICY,
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
ARG_REPLACE,
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
ARG_DRY_RUN,
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ ARG_DESTROY_DATA,
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
ARG_NO_PAGER,
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
};
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
@@ -4236,10 +4237,18 @@ static int parse_argv(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
{ "replace", required_argument, NULL, ARG_REPLACE },
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
{ "dry-run", no_argument, NULL, ARG_DRY_RUN },
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ /* This is not documented on purpose.
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ * If you think --purge should be allowed without jumping through hoops,
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ * consider opening a bug report with the description of the use case.
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ */
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ { "destroy-data", no_argument, NULL, ARG_DESTROY_DATA },
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
{}
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
};
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
int c, r;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ bool destroy_data = false;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
assert(argc >= 0);
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
assert(argv);
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
@@ -4346,6 +4355,10 @@ static int parse_argv(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
arg_dry_run = true;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ case ARG_DESTROY_DATA:
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ destroy_data = true;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ break;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
case ARG_NO_PAGER:
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
arg_pager_flags |= PAGER_DISABLE;
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
@@ -4365,6 +4378,10 @@ static int parse_argv(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
"Refusing --purge without specification of a configuration file.");
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ if (FLAGS_SET(arg_operation, OPERATION_PURGE) && !arg_dry_run && !destroy_data)
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+ "Refusing --purge without --destroy-data.");
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
if (arg_replace && arg_cat_flags != CAT_CONFIG_OFF)
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
|
Zbigniew Jędrzejewski-Szmek |
b3e1d5 |
"Option --replace= is not supported with --cat-config/--tldr.");
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
diff --git a/test/units/TEST-22-TMPFILES.18.sh b/test/units/TEST-22-TMPFILES.18.sh
|
|
Yu Watanabe |
53cfde |
index c81f6bd0ef..1eb264a279 100755
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
--- a/test/units/TEST-22-TMPFILES.18.sh
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
+++ b/test/units/TEST-22-TMPFILES.18.sh
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
@@ -24,7 +24,7 @@ test -f /tmp/somedir/somefile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
grep -q baz /tmp/somedir/somefile
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
grep -q qux /tmp/someotherfile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
-systemd-tmpfiles --purge - <<<"$c"
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
+systemd-tmpfiles --purge --destroy-data - <<<"$c"
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
test ! -f /tmp/somedir/somefile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
test ! -d /tmp/somedir/
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
grep -q qux /tmp/someotherfile
|
|
Yu Watanabe |
53cfde |
@@ -34,12 +34,12 @@ test ! -f /tmp/somedir/somefile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
test ! -d /tmp/somedir/
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
grep -q qux /tmp/someotherfile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
-systemd-tmpfiles --create --purge - <<<"$c"
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
+systemd-tmpfiles --create --destroy-data --purge - <<<"$c"
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
test -f /tmp/somedir/somefile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
grep -q baz /tmp/somedir/somefile
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
grep -q qux /tmp/someotherfile
|
|
Yu Watanabe |
53cfde |
|
|
Yu Watanabe |
53cfde |
-systemd-tmpfiles --purge - <<<"$c"
|
|
Yu Watanabe |
53cfde |
+systemd-tmpfiles --purge --destroy-data - <<<"$c"
|
|
Yu Watanabe |
53cfde |
test ! -f /tmp/somedir/somefile
|
|
Yu Watanabe |
53cfde |
test ! -d /tmp/somedir/
|
|
Yu Watanabe |
53cfde |
grep -q qux /tmp/someotherfile
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
--
|
|
Zbigniew Jędrzejewski-Szmek |
ea947c |
2.47.0
|
|
![](https://seccdn.libravatar.org/avatar/47dbcbae04c4f6edd99f423c08db902b456612be7a757594abb7295f957b1847?s=16&d=retro) |
1cdae0 |
|