teknoraver / rpms / systemd

Forked from rpms/systemd 5 months ago
Clone

Blame 0001-tmpfiles-make-purge-hard-to-mis-use.patch

Yu Watanabe 53cfde
From 248b69d63068cabd7463c325d2ecc3db3239272e Mon Sep 17 00:00:00 2001
1cdae0
From: Daan De Meyer <daan.j.demeyer@gmail.com>
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
---
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.");
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
1cdae0
--- a/test/units/TEST-22-TMPFILES.18.sh
1cdae0
+++ b/test/units/TEST-22-TMPFILES.18.sh
Zbigniew Jędrzejewski-Szmek ea947c
@@ -24,7 +24,7 @@ test -f /tmp/somedir/somefile
1cdae0
 grep -q baz /tmp/somedir/somefile
Zbigniew Jędrzejewski-Szmek ea947c
 grep -q qux /tmp/someotherfile
1cdae0
 
1cdae0
-systemd-tmpfiles --purge - <<<"$c"
1cdae0
+systemd-tmpfiles --purge --destroy-data - <<<"$c"
1cdae0
 test ! -f /tmp/somedir/somefile
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
1cdae0
 test ! -d /tmp/somedir/
Zbigniew Jędrzejewski-Szmek ea947c
 grep -q qux /tmp/someotherfile
1cdae0
 
1cdae0
-systemd-tmpfiles --create --purge - <<<"$c"
1cdae0
+systemd-tmpfiles --create --destroy-data --purge - <<<"$c"
1cdae0
 test -f /tmp/somedir/somefile
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
1cdae0
-- 
Zbigniew Jędrzejewski-Szmek ea947c
2.47.0
1cdae0