dyndnsd 1.0.0 → 1.1.0
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/README.md +3 -0
- data/dyndnsd.gemspec +1 -0
- data/lib/dyndnsd/updater/command_with_bind_zone.rb +2 -0
- data/lib/dyndnsd/version.rb +1 -1
- data/lib/dyndnsd.rb +27 -2
- metadata +25 -14
data/README.md
CHANGED
@@ -24,6 +24,9 @@ Create a configuration file in YAML format somewhere:
|
|
24
24
|
# listen address and port
|
25
25
|
host: "0.0.0.0"
|
26
26
|
port: "80"
|
27
|
+
# optional: drop priviliges in case you want to but you may need sudo for external commands
|
28
|
+
user: "nobody"
|
29
|
+
group: "nogroup"
|
27
30
|
# logfile is optional, logs to STDOUT else
|
28
31
|
logfile: "dyndnsd.log"
|
29
32
|
# interal database file
|
data/dyndnsd.gemspec
CHANGED
data/lib/dyndnsd/version.rb
CHANGED
data/lib/dyndnsd.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'etc'
|
3
4
|
require 'logger'
|
4
5
|
require 'ipaddr'
|
5
6
|
require 'json'
|
6
7
|
require 'yaml'
|
7
8
|
require 'rack'
|
9
|
+
require 'metriks'
|
8
10
|
|
9
11
|
require 'dyndnsd/generator/bind'
|
10
12
|
require 'dyndnsd/updater/command_with_bind_zone'
|
@@ -74,7 +76,7 @@ module Dyndnsd
|
|
74
76
|
hostnames.each do |hostname|
|
75
77
|
return @responder.response_for_error(:host_forbidden) if not @users[user]['hosts'].include? hostname
|
76
78
|
end
|
77
|
-
|
79
|
+
|
78
80
|
# no myip?
|
79
81
|
if not params["myip"]
|
80
82
|
params["myip"] = env["REMOTE_ADDR"]
|
@@ -89,6 +91,7 @@ module Dyndnsd
|
|
89
91
|
|
90
92
|
myip = params["myip"]
|
91
93
|
|
94
|
+
Metriks.meter('requests.valid').mark
|
92
95
|
Dyndnsd.logger.info "Request to update #{hostnames} to #{myip} for user #{user}"
|
93
96
|
|
94
97
|
changes = []
|
@@ -96,8 +99,10 @@ module Dyndnsd
|
|
96
99
|
if (not @db['hosts'].include? hostname) or (@db['hosts'][hostname] != myip)
|
97
100
|
changes << :good
|
98
101
|
@db['hosts'][hostname] = myip
|
102
|
+
Metriks.meter('requests.good').mark
|
99
103
|
else
|
100
104
|
changes << :nochg
|
105
|
+
Metriks.meter('requests.nochg').mark
|
101
106
|
end
|
102
107
|
end
|
103
108
|
|
@@ -106,6 +111,7 @@ module Dyndnsd
|
|
106
111
|
Dyndnsd.logger.info "Committing update ##{@db['serial']}"
|
107
112
|
@db.save
|
108
113
|
update
|
114
|
+
Metriks.meter('updates.committed').mark
|
109
115
|
end
|
110
116
|
|
111
117
|
@responder.response_for_changes(changes, myip)
|
@@ -139,15 +145,34 @@ module Dyndnsd
|
|
139
145
|
Dyndnsd.logger.formatter = LogFormatter.new
|
140
146
|
|
141
147
|
Dyndnsd.logger.info "Starting..."
|
148
|
+
|
149
|
+
# drop privs (first change group than user)
|
150
|
+
Process::Sys.setgid(Etc.getgrnam(config['group']).gid) if config['group']
|
151
|
+
Process::Sys.setuid(Etc.getpwnam(config['user']).uid) if config['user']
|
142
152
|
|
153
|
+
# configure metriks
|
154
|
+
reporter = Metriks::Reporter::ProcTitle.new
|
155
|
+
reporter.add 'good', 'sec' do
|
156
|
+
Metriks.meter('requests.good').mean_rate
|
157
|
+
end
|
158
|
+
reporter.add 'nochg', 'sec' do
|
159
|
+
Metriks.meter('requests.nochg').mean_rate
|
160
|
+
end
|
161
|
+
reporter.start
|
162
|
+
|
163
|
+
# configure daemon
|
143
164
|
db = Database.new(config['db'])
|
144
165
|
updater = Updater::CommandWithBindZone.new(config['domain'], config['updater']['params']) if config['updater']['name'] == 'command_with_bind_zone'
|
145
166
|
responder = Responder::DynDNSStyle.new
|
146
167
|
|
168
|
+
# configure rack
|
147
169
|
app = Daemon.new(config, db, updater, responder)
|
148
170
|
app = Rack::Auth::Basic.new(app, "DynDNS") do |user,pass|
|
149
171
|
allow = (config['users'].has_key? user) and (config['users'][user]['password'] == pass)
|
150
|
-
|
172
|
+
if not allow
|
173
|
+
Dyndnsd.logger.warn "Login failed for #{user}"
|
174
|
+
Metriks.meter('requests.auth_failed').mark
|
175
|
+
end
|
151
176
|
allow
|
152
177
|
end
|
153
178
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyndnsd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-30 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &76957690 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *76957690
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &76957480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,21 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *76957480
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: metriks
|
38
|
+
requirement: &76957270 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *76957270
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: bundler
|
38
|
-
requirement: &
|
49
|
+
requirement: &76957020 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ~>
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '1.3'
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *76957020
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: rake
|
49
|
-
requirement: &
|
60
|
+
requirement: &76956810 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *76956810
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: rspec
|
60
|
-
requirement: &
|
71
|
+
requirement: &76956580 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *76956580
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: rack-test
|
71
|
-
requirement: &
|
82
|
+
requirement: &76956370 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,7 +87,7 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *76956370
|
80
91
|
description: A small, lightweight and extensible DynDNS server written with Ruby and
|
81
92
|
Rack.
|
82
93
|
email: chrnicolai@gmail.com
|