core: refuse credentials with invalid names matching with glob
Even if the glob pattern is valid, the pattern may match credentials
with invalid names. So, we need to check the names of the found
credentials.
Follow-up for 947c4d3952.
This commit is contained in:
@@ -502,6 +502,11 @@ static int load_credential_glob(
|
||||
free_and_replace(fn, renamed);
|
||||
}
|
||||
|
||||
if (!credential_name_valid(fn)) {
|
||||
log_debug("Skipping credential with invalid name: %s", fn);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (faccessat(write_dfd, fn, F_OK, AT_SYMLINK_NOFOLLOW) >= 0) {
|
||||
log_debug("Skipping credential with duplicated ID %s at %s", fn, *p);
|
||||
continue;
|
||||
|
||||
@@ -279,6 +279,24 @@ echo -n ignored >/run/credstore/test.creds.second
|
||||
mkdir -p /etc/credstore
|
||||
echo -n b >/etc/credstore/test.creds.second
|
||||
echo -n c >/etc/credstore/test.creds.third
|
||||
# Credential name cannot contain ':'
|
||||
echo -n hoge >/etc/credstore/test.creds.hoge:invalid
|
||||
|
||||
# Check if credentials with invalid names are not imported.
|
||||
systemd-run -p "ImportCredential=test.creds.*" \
|
||||
--unit=test-54-ImportCredential.service \
|
||||
-p DynamicUser=1 \
|
||||
--wait \
|
||||
--pipe \
|
||||
test ! -e '${CREDENTIALS_DIRECTORY}/test.creds.hoge:invalid'
|
||||
|
||||
# Check if credentials with invalid names are not imported (with renaming).
|
||||
systemd-run -p "ImportCredentialEx=test.creds.*:renamed.creds." \
|
||||
--unit=test-54-ImportCredential.service \
|
||||
-p DynamicUser=1 \
|
||||
--wait \
|
||||
--pipe \
|
||||
test ! -e '${CREDENTIALS_DIRECTORY}/renamed.creds.hoge:invalid'
|
||||
|
||||
# Check that all valid credentials are imported.
|
||||
systemd-run -p "ImportCredential=test.creds.*" \
|
||||
|
||||
Reference in New Issue
Block a user