diff options
-rw-r--r-- | scripts/pacman-key.sh.in | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in index c200d8e4..8f108250 100644 --- a/scripts/pacman-key.sh.in +++ b/scripts/pacman-key.sh.in @@ -100,6 +100,25 @@ get_from() { return 1 } +generate_master_key() { + # Generate the master key, which will be in both pubring and secring + "${GPG_PACMAN[@]}" --gen-key --batch <<EOF +%echo Generating pacman keychain master key... +Key-Type: RSA +Key-Length: 2048 +Key-Usage: sign +Name-Real: Pacman Keychain Master Key +Name-Email: pacman@localhost +Expire-Date: 0 +%commit +%echo Done +EOF +} + +secret_keys_available() { + "${GPG_PACMAN[@]}" -K --with-colons | wc -l +} + # Adds the given gpg.conf option if it is not present in the file. # Note that if we find it commented out, we won't add the option. # args: $1 conffile, $2 option-name, $3 (optional) option-value @@ -135,6 +154,12 @@ initialize() { add_gpg_conf_option "$conffile" 'no-permission-warning' add_gpg_conf_option "$conffile" 'lock-never' add_gpg_conf_option "$conffile" 'keyserver' 'hkp://keys.gnupg.net' + + # set up a private signing key (if none available) + if [[ $(secret_keys_available) -lt 1 ]]; then + generate_master_key + UPDATEDB=1 + fi } check_keyring() { |