ddnsupdate 0.1.0 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +4 -0
- data/bin/ddnsupdate +2 -2
- data/lib/ddnsupdate.rb +23 -7
- metadata +39 -21
data/HISTORY
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
DDNS Update History
|
2
2
|
===================
|
3
3
|
|
4
|
+
Version 0.1.5 (2011-09-08)
|
5
|
+
* Some DNS don't answer to SOA requests for hosts/subdomains (AEX I'm looking at you!) so we try domains recursively
|
6
|
+
Version 0.1.1 (2011-09-08)
|
7
|
+
* Don't output anything if nothing updated (will add a silent mode later)
|
4
8
|
Version 0.1.0 (2011-09-08)
|
5
9
|
* First release.
|
data/bin/ddnsupdate
CHANGED
@@ -40,8 +40,8 @@ EOS
|
|
40
40
|
Trollop::die "missing key" if cmd_opts[:key].nil?
|
41
41
|
|
42
42
|
ip = (cmd_opts[:remote] && determine_remote_ip) || determine_local_ip
|
43
|
-
|
44
|
-
puts "Host updated with ip #{ip}"
|
43
|
+
|
44
|
+
puts "Host updated with ip #{ip}" if update(cmd_opts[:host], ip, cmd_opts[:key], cmd_opts[:wild])
|
45
45
|
when "gen"
|
46
46
|
cmd_opts = Trollop::options do
|
47
47
|
banner <<-EOS
|
data/lib/ddnsupdate.rb
CHANGED
@@ -13,13 +13,25 @@ module DDNSUpdate
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.determine_soa(zone)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
current = zone.gsub(/\.$/, "")
|
17
|
+
soa = nil
|
18
|
+
while soa.nil? and !current.empty?
|
19
|
+
soa = %x{dig -t SOA #{current} +noquestion +nostats +nocmd +noqr +nocomments +noadditional +nottlid}
|
20
|
+
if not soa.nil?
|
21
|
+
#Split lines into an array, filtering out comments and blanks
|
22
|
+
soa = soa.split("\n").delete_if { |el| el.start_with?(";") || el.empty? }
|
23
|
+
#Split remaining line into whitespace delimited fields
|
24
|
+
if not soa.empty?
|
25
|
+
soa = soa[0].split(/\s/)
|
26
|
+
#Find the field we actually want, stripping the trailing dot
|
27
|
+
soa = soa[soa.index("SOA") + 1].gsub(/\.$/, "")
|
28
|
+
else
|
29
|
+
soa = nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
current.sub! /^.*?\./, ""
|
33
|
+
end
|
34
|
+
return soa
|
23
35
|
end
|
24
36
|
|
25
37
|
def self.determine_current_ip(zone, soa=nil)
|
@@ -44,6 +56,7 @@ module DDNSUpdate
|
|
44
56
|
|
45
57
|
def self.update(zone, ip, key, wild = false)
|
46
58
|
soa = determine_soa(zone)
|
59
|
+
raise UpdateError, "can't find SOA for #{zone}" if soa.nil?
|
47
60
|
curip = determine_current_ip(zone, soa)
|
48
61
|
|
49
62
|
if curip != ip
|
@@ -71,6 +84,9 @@ module DDNSUpdate
|
|
71
84
|
err = stderr.read
|
72
85
|
raise UpdateError, err unless err.empty?
|
73
86
|
end
|
87
|
+
true
|
88
|
+
else
|
89
|
+
false
|
74
90
|
end
|
75
91
|
end
|
76
92
|
end
|
metadata
CHANGED
@@ -1,50 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddnsupdate
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
6
10
|
platform: ruby
|
7
|
-
authors:
|
11
|
+
authors:
|
8
12
|
- Hugues Lismonde
|
9
13
|
autorequire:
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
|
-
|
16
|
+
|
17
|
+
date: 2011-09-08 00:00:00 +02:00
|
18
|
+
default_executable:
|
13
19
|
dependencies: []
|
20
|
+
|
14
21
|
description:
|
15
22
|
email: hugues@epic.net
|
16
|
-
executables:
|
23
|
+
executables:
|
17
24
|
- ddnsupdate
|
18
25
|
extensions: []
|
26
|
+
|
19
27
|
extra_rdoc_files: []
|
20
|
-
|
28
|
+
|
29
|
+
files:
|
21
30
|
- HISTORY
|
22
31
|
- LICENSE
|
23
32
|
- README.md
|
24
33
|
- bin/ddnsupdate
|
25
34
|
- lib/ddnsupdate.rb
|
35
|
+
has_rdoc: true
|
26
36
|
homepage: https://github.com/epicagency/ddnsupdate/
|
27
37
|
licenses: []
|
38
|
+
|
28
39
|
post_install_message:
|
29
40
|
rdoc_options: []
|
30
|
-
|
41
|
+
|
42
|
+
require_paths:
|
31
43
|
- lib
|
32
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 1
|
50
|
+
- 8
|
51
|
+
- 6
|
37
52
|
version: 1.8.6
|
38
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
44
60
|
requirements: []
|
61
|
+
|
45
62
|
rubyforge_project:
|
46
|
-
rubygems_version: 1.
|
63
|
+
rubygems_version: 1.3.6
|
47
64
|
signing_key:
|
48
65
|
specification_version: 3
|
49
66
|
summary: Performs dynamic dns updates
|
50
67
|
test_files: []
|
68
|
+
|