60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 48b404d546e6cb6d32d9cb346bbd43760311790b Mon Sep 17 00:00:00 2001
 | |
| From: Yu Watanabe <watanabe.yu+github@gmail.com>
 | |
| Date: Mon, 16 Dec 2024 12:37:17 +0900
 | |
| Subject: [PATCH] systemctl-edit: ignore ENOENT from unit_is_masked()
 | |
| 
 | |
| If a specified unit does not exist, then it is definitely not masked.
 | |
| 
 | |
| Fixes #35632.
 | |
| 
 | |
| (cherry picked from commit b58b00e4c33474505009c8118d6cfdf29a2c6cb1)
 | |
| ---
 | |
|  src/systemctl/systemctl-edit.c  |  4 ++--
 | |
|  test/units/TEST-26-SYSTEMCTL.sh | 11 +++++++++++
 | |
|  2 files changed, 13 insertions(+), 2 deletions(-)
 | |
| 
 | |
| diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
 | |
| index c42a31153d..7165fa1cf7 100644
 | |
| --- a/src/systemctl/systemctl-edit.c
 | |
| +++ b/src/systemctl/systemctl-edit.c
 | |
| @@ -349,8 +349,8 @@ int verb_edit(int argc, char *argv[], void *userdata) {
 | |
|  
 | |
|          STRV_FOREACH(tmp, names) {
 | |
|                  r = unit_is_masked(bus, *tmp);
 | |
| -                if (r < 0)
 | |
| -                        return r;
 | |
| +                if (r < 0 && r != -ENOENT)
 | |
| +                        return log_error_errno(r, "Failed to check if unit %s is masked: %m", *tmp);
 | |
|                  if (r > 0)
 | |
|                          return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit %s: unit is masked.", *tmp);
 | |
|          }
 | |
| diff --git a/test/units/TEST-26-SYSTEMCTL.sh b/test/units/TEST-26-SYSTEMCTL.sh
 | |
| index ed7b9f64bf..8e895aa9ae 100755
 | |
| --- a/test/units/TEST-26-SYSTEMCTL.sh
 | |
| +++ b/test/units/TEST-26-SYSTEMCTL.sh
 | |
| @@ -21,6 +21,7 @@ at_exit() {
 | |
|  #       the 'revert' verb as well
 | |
|  export UNIT_NAME="systemctl-test-$RANDOM.service"
 | |
|  export UNIT_NAME2="systemctl-test-$RANDOM.service"
 | |
| +export UNIT_NAME_TEMPLATE="systemctl-test-${RANDOM}@.service"
 | |
|  
 | |
|  cat >"/usr/lib/systemd/system/$UNIT_NAME" <<\EOF
 | |
|  [Unit]
 | |
| @@ -65,6 +66,16 @@ EOF
 | |
|  printf '%s\n' '[Unit]'   'Description=spectacular' '# this comment should remain' | \
 | |
|      cmp - "/etc/systemd/system/$UNIT_NAME.d/override2.conf"
 | |
|  
 | |
| +# Edit nonexistent template unit, see issue #35632.
 | |
| +systemctl edit "$UNIT_NAME_TEMPLATE" --stdin --runtime --force --full <<EOF
 | |
| +[Unit]
 | |
| +Description=template unit test
 | |
| +# this comment should remain
 | |
| +
 | |
| +EOF
 | |
| +printf '%s\n' '[Unit]' 'Description=template unit test' '# this comment should remain' | \
 | |
| +    cmp - "/run/systemd/system/$UNIT_NAME_TEMPLATE"
 | |
| +
 | |
|  # Test simultaneous editing of two units and creation of drop-in for a nonexistent unit
 | |
|  systemctl edit "$UNIT_NAME" "$UNIT_NAME2" --stdin --force --drop-in=override2.conf <<<'[X-Section]'
 | |
|  printf '%s\n' '[X-Section]' | cmp - "/etc/systemd/system/$UNIT_NAME.d/override2.conf"
 |