sparoid 1.0.10 → 1.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 864cabc794097c6a5f46cef69a72031f133d4bb1534193fce13319030ee09181
4
- data.tar.gz: c5c7a75a8eea8eca65e29cea1e82f82aa16643d36a42dcbbceb7cf061d9755c1
3
+ metadata.gz: 23058be45d03e24a374cdf7c2e1854f10c5c997eb8654a7af620a532a486cfd5
4
+ data.tar.gz: 38144ffb7b371f5c439efec31fd4c04323cf72ec4642f2b2b50da84dad7f7a25
5
5
  SHA512:
6
- metadata.gz: 6bfe6cfcd4dd1ad2b4577eda01b6972b7c36f8f418d64b5bbc2966e5cfc3538a1cf647ec8389108c5ecfc082cd420bb5d3483d4ae9f4d76e9b62709e865e4683
7
- data.tar.gz: 82e84fc4deb3251d6c6c270cf5404da15ab91746bfd9d8de3a7f62152e8cccffa30dd43da7a8157f2a10627cefae79cc4dea5160fabfec3c0005c46202568568
6
+ metadata.gz: '0860c3a2edea2a2f35628941f790846985683d6df89a66f6ac6a714af1e3eae1dd4618e6d58de620fc48d85c4da5bf35b6d9470597942b9fdb4f3382cbe1ff3c'
7
+ data.tar.gz: 22b61f2d97b87b3dbf2458df57177f0122ee9dd87c837c86da366a5bcf34d7c531cfa15fe60f2bb6959b9b939ca30175ae0b1f954ca0534512b821c11f20a578
data/CHANGELOG.md CHANGED
@@ -1,6 +1,23 @@
1
+ ## [1.0.14] - 2021-07-26
2
+
3
+ - Send UDP packets to all resolved IPs for a hostname
4
+
5
+ ## [1.0.13] - 2021-06-30
6
+
7
+ - Do not warn on empty public ip cache file
8
+ - The public ip cache file path can be controlled using the `SPAROID_CACHE_PATH` environment variable
9
+
10
+ ## [1.0.12] - 2021-06-14
11
+
12
+ - Use file locking to prevent multiple processes/threads to write to the public ip cache file
13
+
14
+ ## [1.0.11] - 2021-06-14
15
+
16
+ - Log hostname when reporting unhandled exceptions
17
+
1
18
  ## [1.0.10] - 2021-06-09
2
19
 
3
- - Cache public IP in /tmp/.sparoid_public_ip for 1 min
20
+ - Cache public IP in `/tmp/.sparoid_public_ip` for 1 min
4
21
 
5
22
  ## [1.0.9] - 2021-05-23
6
23
 
data/Gemfile CHANGED
@@ -5,12 +5,9 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in sparoid.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
9
-
10
8
  gem "minitest", "~> 5.0"
11
-
9
+ gem "minitest-stub-const"
10
+ gem "rake", "~> 13.0"
12
11
  gem "rubocop", "~> 1.7"
13
-
14
12
  gem "rubocop-minitest", require: false
15
-
16
13
  gem "rubocop-rake", require: false
data/lib/sparoid.rb CHANGED
@@ -9,6 +9,8 @@ require "resolv"
9
9
  module Sparoid
10
10
  extend self
11
11
 
12
+ SPAROID_CACHE_PATH = ENV.fetch("SPAROID_CACHE_PATH", "/tmp/.sparoid_public_ip")
13
+
12
14
  # Send an authorization packet
13
15
  def auth(key, hmac_key, host, port)
14
16
  msg = message(cached_public_ip)
@@ -40,10 +42,17 @@ module Sparoid
40
42
  private
41
43
 
42
44
  def sendmsg(host, port, data)
45
+ ok = false
43
46
  UDPSocket.open do |socket|
44
- socket.connect host, port
45
- socket.sendmsg data, 0
47
+ Resolv.each_address(host) do |ip|
48
+ ok = true
49
+ socket.connect ip, port
50
+ socket.sendmsg data, 0
51
+ rescue StandardError => e
52
+ warn "Sparoid error: #{e.message}"
53
+ end
46
54
  end
55
+ abort "Sparoid failed to resolv #{host}" unless ok
47
56
  end
48
57
 
49
58
  def encrypt(key, data)
@@ -76,23 +85,42 @@ module Sparoid
76
85
  end
77
86
 
78
87
  def cached_public_ip
79
- File.open("/tmp/.sparoid_public_ip", "a+") do |f|
80
- if f.size.zero? || (Time.now - f.mtime) > 60 # cache for 1min max
81
- update_cache(f)
82
- else
83
- Resolv::IPv4.create f.read
84
- end
88
+ if up_to_date_cache?
89
+ read_cache
90
+ else
91
+ write_cache
85
92
  end
86
93
  rescue StandardError => e
87
94
  warn "Sparoid: #{e.inspect}"
88
95
  public_ip
89
96
  end
90
97
 
91
- def update_cache(file)
92
- ip = public_ip
93
- file.truncate(0)
94
- file.write ip.to_s
95
- ip
98
+ def up_to_date_cache?
99
+ mtime = File.mtime(SPAROID_CACHE_PATH)
100
+ (Time.now - mtime) <= 60 # cache is valid for 1 min
101
+ rescue Errno::ENOENT
102
+ false
103
+ end
104
+
105
+ def read_cache
106
+ File.open(SPAROID_CACHE_PATH, "r") do |f|
107
+ f.flock(File::LOCK_SH)
108
+ Resolv::IPv4.create f.read
109
+ end
110
+ rescue ArgumentError => e
111
+ return write_cache if e.message =~ /cannot interpret as IPv4 address/
112
+
113
+ raise e
114
+ end
115
+
116
+ def write_cache
117
+ File.open(SPAROID_CACHE_PATH, File::WRONLY | File::CREAT, 0o0644) do |f|
118
+ f.flock(File::LOCK_EX)
119
+ ip = public_ip
120
+ f.truncate(0)
121
+ f.write ip.to_s
122
+ ip
123
+ end
96
124
  end
97
125
 
98
126
  def public_ip
data/lib/sparoid/cli.rb CHANGED
@@ -13,7 +13,7 @@ module Sparoid
13
13
  rescue Errno::ENOENT
14
14
  abort "Sparoid: Config not found"
15
15
  rescue StandardError => e
16
- abort "Sparoid: #{e.message}"
16
+ abort "Sparoid: #{e.message} (#{host})"
17
17
  end
18
18
 
19
19
  desc "connect HOST PORT [SPA-PORT]", "Send a SPA, TCP connect, and then pass the FD back to the parent"
@@ -26,7 +26,7 @@ module Sparoid
26
26
  end
27
27
  Sparoid.fdpass(host, port)
28
28
  rescue StandardError => e
29
- abort "Sparoid: #{e.message}"
29
+ abort "Sparoid: #{e.message} (#{host})"
30
30
  end
31
31
 
32
32
  desc "keygen", "Generate an encryption key and a HMAC key"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sparoid
4
- VERSION = "1.0.10"
4
+ VERSION = "1.0.14"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Hörberg
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-09 00:00:00.000000000 Z
11
+ date: 2021-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor