diff options
Diffstat (limited to 'cmdline')
-rw-r--r-- | cmdline/apt-key.in | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/cmdline/apt-key.in b/cmdline/apt-key.in index 0c10e5955..5e8332bcb 100644 --- a/cmdline/apt-key.in +++ b/cmdline/apt-key.in @@ -17,7 +17,7 @@ aptkey_echo() { echo "$@"; } requires_root() { if [ "$(id -u)" -ne 0 ]; then - echo >&2 "ERROR: This command can only be used by root." + apt_error "This command can only be used by root." exit 1 fi } @@ -61,11 +61,11 @@ add_keys_with_verify_against_master_keyring() { MASTER="$2" if [ ! -f "$ADD_KEYRING" ]; then - echo >&2 "ERROR: '$ADD_KEYRING' not found" + apt_error "Keyring '$ADD_KEYRING' to be added not found" return fi if [ ! -f "$MASTER" ]; then - echo >&2 "ERROR: '$MASTER' not found" + apt_error "Master-Keyring '$MASTER' not found" return fi @@ -127,13 +127,13 @@ net_update() { fi if [ -z "$ARCHIVE_KEYRING_URI" ]; then - echo >&2 "ERROR: Your distribution is not supported in net-update as no uri for the archive-keyring is set" + apt_error 'Your distribution is not supported in net-update as no uri for the archive-keyring is set' exit 1 fi # in theory we would need to depend on wget for this, but this feature # isn't useable in debian anyway as we have no keyring uri nor a master key if ! command_available 'wget'; then - echo >&2 "ERROR: an installed wget is required for a network-based update" + apt_error 'wget is required for a network-based update, but it is not installed' exit 1 fi if [ ! -d "${APT_DIR}/var/lib/apt/keyrings" ]; then @@ -164,8 +164,7 @@ update() { fi fi if [ ! -f "$ARCHIVE_KEYRING" ]; then - echo >&2 "ERROR: Can't find the archive-keyring" - echo >&2 "Is the &keyring-package; package installed?" + apt_error "Can't find the archive-keyring (Is the &keyring-package; package installed?)" exit 1 fi @@ -184,7 +183,7 @@ update() { foreach_keyring_do 'remove_key_from_keyring' "$key" done else - echo >&2 "Warning: removed keys keyring $REMOVED_KEYS missing or not readable" + apt_warn "Removed keys keyring '$REMOVED_KEYS' missing or not readable" fi } @@ -239,7 +238,7 @@ accessible_file_exists() { if test -r "$1"; then return 0 fi - warn "The key(s) in the keyring $1 are ignored as the file is not readable by user '$USER' executing apt-key." + apt_warn "The key(s) in the keyring $1 are ignored as the file is not readable by user '$USER' executing apt-key." return 1 } @@ -486,7 +485,7 @@ find_gpgv_status_fd() { } GPGSTATUSFD="$(find_gpgv_status_fd "$@")" -warn() { +apt_warn() { if [ -z "$GPGHOMEDIR" ]; then echo >&2 'W:' "$@" else @@ -496,6 +495,16 @@ warn() { echo >&${GPGSTATUSFD} '[APTKEY:] WARNING' "$@" fi } +apt_error() { + if [ -z "$GPGHOMEDIR" ]; then + echo >&2 'E:' "$@" + else + echo 'E:' "$@" > "${GPGHOMEDIR}/aptwarnings.log" + fi + if [ -n "$GPGSTATUSFD" ]; then + echo >&${GPGSTATUSFD} '[APTKEY:] ERROR' "$@" + fi +} cleanup_gpg_home() { if [ -z "$GPGHOMEDIR" ]; then return; fi @@ -522,7 +531,7 @@ create_gpg_home() { CURRENTTRAP="${CURRENTTRAP} cleanup_gpg_home;" trap "${CURRENTTRAP}" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM if [ -z "$GPGHOMEDIR" ]; then - echo "ERROR: Could not create temporary gpg home directory in apt-key ($TMPDIR)" + apt_error "Could not create temporary gpg home directory in $TMPDIR (wrong permissions?)" exit 28 fi chmod 700 "$GPGHOMEDIR" @@ -553,9 +562,7 @@ EOF elif command_available 'gpg1'; then GPG_EXE="gpg1" else - echo >&2 "Error: gnupg, gnupg2 and gnupg1 do not seem to be installed," - echo >&2 "Error: but apt-key requires gnupg, gnupg2 or gnupg1 for this operation." - echo >&2 + apt_error 'gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation' exit 255 fi @@ -663,7 +670,7 @@ case "$command" in elif command_available 'gpgv2'; then GPGV='gpgv2'; elif command_available 'gpgv1'; then GPGV='gpgv1'; else - echo >&2 'ERROR: gpgv, gpgv2 or gpgv1 required for verification' + apt_error 'gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed' exit 29 fi # for a forced keyid we need gpg --export, so full wrapping required |