Class: Puppet::Provider::YumrepoMetadataKey::GpgKeyring

Inherits:
Puppet::Provider::YumrepoMetadataKey
  • Object
show all
Defined in:
lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb

Overview

Backend parent for providers that keep keys in a per-repo GnuPG homedir (yum and dnf4).

Class Method Summary collapse

Class Method Details

.export_key(home, fingerprint) ⇒ Object



17
18
19
20
21
# File 'lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb', line 17

def export_key(home, fingerprint)
  return unless home && File.directory?(home)

  gpg_export_armored(home, fingerprint)
end

.fingerprints_in(home) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb', line 8

def fingerprints_in(home)
  ret = parse_primary_fprs(gpg_at(home, '--with-colons', '--fingerprint', '--list-keys')).uniq
  debug("fingerprints_in(#{home.inspect}) -> #{ret.inspect}")
  ret
rescue Puppet::ExecutionFailure => e
  debug("fingerprints_in(#{home.inspect}) failed: #{e.message.lines.first.to_s.strip}")
  []
end

.remove_key(home, fingerprint) ⇒ Object

–expert bypasses gpg’s pre-delete check for a matching secret key. That check needs gpg-agent, but –no-autostart forbids starting one, so without –expert, –delete-keys fails with “no gpg-agent running”.



35
36
37
# File 'lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb', line 35

def remove_key(home, fingerprint)
  gpg_at(home, '--expert', '--yes', '--delete-keys', fingerprint)
end

.set_ultimate_trust(home, fingerprint) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb', line 51

def set_ultimate_trust(home, fingerprint)
  Tempfile.create(['metakey-ownertrust', '.txt']) do |f|
    f.write("#{fingerprint}:6:\n")
    f.flush
    gpg_at(home, '--import-ownertrust', f.path)
  end
end

.store_key(home, fingerprint, text) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb', line 23

def store_key(home, fingerprint, text)
  Tempfile.create(['metakey', '.asc']) do |f|
    f.write(text)
    f.flush
    gpg_at(home, '--import', f.path)
    set_ultimate_trust(home, fingerprint)
  end
end

.trusted?(home, fingerprint) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
43
44
45
46
47
48
49
# File 'lib/puppet/provider/yumrepo_metadata_key/gpg_keyring.rb', line 39

def trusted?(home, fingerprint)
  ret = gpg_at(home, '--export-ownertrust').each_line.any? do |line|
    fields = line.chomp.split(':')
    fields[0].to_s.upcase == fingerprint.to_s.upcase && fields[1] == '6'
  end
  debug("trusted?(#{home.inspect}, #{fingerprint.inspect}) -> #{ret.inspect}")
  ret
rescue Puppet::ExecutionFailure => e
  debug("trusted?(#{home.inspect}, #{fingerprint.inspect}) failed: #{e.message.lines.first.to_s.strip}")
  false
end