Skip to content

Commit 72f7f68

Browse files
authored
Merge pull request #327 from n8henrie/leading-hyphen-filename
Separate flags from positional args with `--`
2 parents 96e078c + af991e8 commit 72f7f68

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

example/-leading-hyphen-filename.age

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
age-encryption.org/v1
2+
-> ssh-ed25519 V3XmEA zirqdzZZ1E+sedBn7fbEHq4ntLEkokZ4GctarBBOHXY
3+
Rvs5YHaAUeCZyNwPedubPcHClWYIuXXWA5zadXPWY6w
4+
-> ssh-ed25519 KLPP8w BVp4rDkOYSQyn8oVeHFeinSqW+pdVtxBF9+5VM1yORY
5+
bMwppAi8Nhz0328taU4AzUkTVyWtSLvFZG6c5W/Fs78
6+
--- xCbqLhXAcOziO2wmbjTiSQfZvt5Rlsc4SCvF+iEzpQA
7+
�KB��/�Z��r�%��4���Mq5��_��ݒ����11 ܨqM;& ��Lr���f���]>N

example/secrets.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ in {
55
"secret1.age".publicKeys = [user1 system1];
66
"secret2.age".publicKeys = [user1];
77
"passwordfile-user1.age".publicKeys = [user1 system1];
8+
"-leading-hyphen-filename.age".publicKeys = [user1 system1];
89
}

pkgs/agenix.sh

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ RULES=${RULES:-./secrets.nix}
105105
function cleanup {
106106
if [ -n "${CLEARTEXT_DIR+x}" ]
107107
then
108-
rm -rf "$CLEARTEXT_DIR"
108+
rm -rf -- "$CLEARTEXT_DIR"
109109
fi
110110
if [ -n "${REENCRYPTED_DIR+x}" ]
111111
then
112-
rm -rf "$REENCRYPTED_DIR"
112+
rm -rf -- "$REENCRYPTED_DIR"
113113
fi
114114
}
115115
trap "cleanup" 0 2 3 15
@@ -141,7 +141,7 @@ function decrypt {
141141
err "No identity found to decrypt $FILE. Try adding an SSH key at $HOME/.ssh/id_rsa or $HOME/.ssh/id_ed25519 or using the --identity flag to specify a file."
142142
fi
143143

144-
@ageBin@ "${DECRYPT[@]}" "$FILE" || exit 1
144+
@ageBin@ "${DECRYPT[@]}" -- "$FILE" || exit 1
145145
fi
146146
}
147147

@@ -150,14 +150,14 @@ function edit {
150150
KEYS=$(keys "$FILE") || exit 1
151151

152152
CLEARTEXT_DIR=$(@mktempBin@ -d)
153-
CLEARTEXT_FILE="$CLEARTEXT_DIR/$(basename "$FILE")"
153+
CLEARTEXT_FILE="$CLEARTEXT_DIR/$(basename -- "$FILE")"
154154
DEFAULT_DECRYPT+=(-o "$CLEARTEXT_FILE")
155155

156156
decrypt "$FILE" "$KEYS" || exit 1
157157

158-
[ ! -f "$CLEARTEXT_FILE" ] || cp "$CLEARTEXT_FILE" "$CLEARTEXT_FILE.before"
158+
[ ! -f "$CLEARTEXT_FILE" ] || cp -- "$CLEARTEXT_FILE" "$CLEARTEXT_FILE.before"
159159

160-
[ -t 0 ] || EDITOR='cp /dev/stdin'
160+
[ -t 0 ] || EDITOR='cp -- /dev/stdin'
161161

162162
$EDITOR "$CLEARTEXT_FILE"
163163

@@ -166,7 +166,7 @@ function edit {
166166
warn "$FILE wasn't created."
167167
return
168168
fi
169-
[ -f "$FILE" ] && [ "$EDITOR" != ":" ] && @diffBin@ -q "$CLEARTEXT_FILE.before" "$CLEARTEXT_FILE" && warn "$FILE wasn't changed, skipping re-encryption." && return
169+
[ -f "$FILE" ] && [ "$EDITOR" != ":" ] && @diffBin@ -q -- "$CLEARTEXT_FILE.before" "$CLEARTEXT_FILE" && warn "$FILE wasn't changed, skipping re-encryption." && return
170170

171171
ENCRYPT=()
172172
while IFS= read -r key
@@ -177,15 +177,15 @@ function edit {
177177
done <<< "$KEYS"
178178

179179
REENCRYPTED_DIR=$(@mktempBin@ -d)
180-
REENCRYPTED_FILE="$REENCRYPTED_DIR/$(basename "$FILE")"
180+
REENCRYPTED_FILE="$REENCRYPTED_DIR/$(basename -- "$FILE")"
181181

182182
ENCRYPT+=(-o "$REENCRYPTED_FILE")
183183

184184
@ageBin@ "${ENCRYPT[@]}" <"$CLEARTEXT_FILE" || exit 1
185185

186-
mkdir -p "$(dirname "$FILE")"
186+
mkdir -p -- "$(dirname -- "$FILE")"
187187

188-
mv -f "$REENCRYPTED_FILE" "$FILE"
188+
mv -f -- "$REENCRYPTED_FILE" "$FILE"
189189
}
190190

191191
function rekey {

test/integration.nix

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ pkgs.nixosTest {
2424

2525
services.openssh.enable = true;
2626

27-
age.secrets.passwordfile-user1 = {
28-
file = ../example/passwordfile-user1.age;
27+
age.secrets = {
28+
passwordfile-user1.file = ../example/passwordfile-user1.age;
29+
leading-hyphen.file = ../example/-leading-hyphen-filename.age;
2930
};
3031

3132
age.identityPaths = options.age.identityPaths.default ++ ["/etc/ssh/this_key_wont_exist"];
@@ -71,6 +72,7 @@ pkgs.nixosTest {
7172
user = "user1";
7273
password = "password1234";
7374
secret2 = "world!";
75+
hyphen-secret = "filename started with hyphen";
7476
in ''
7577
system1.wait_for_unit("multi-user.target")
7678
system1.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
@@ -92,6 +94,8 @@ pkgs.nixosTest {
9294
system1.wait_for_file("/tmp/2")
9395
assert "${secret2}" in system1.succeed("cat /tmp/2")
9496
97+
assert "${hyphen-secret}" in system1.succeed("cat /run/agenix/leading-hyphen")
98+
9599
userDo = lambda input : f"sudo -u user1 -- bash -c 'set -eou pipefail; cd /tmp/secrets; {input}'"
96100
97101
before_hash = system1.succeed(userDo('sha256sum passwordfile-user1.age')).split()

0 commit comments

Comments
 (0)