pangdudu-ruby-dbus 0.2.4.1 → 0.2.4.2

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.rdoc CHANGED
@@ -91,10 +91,32 @@ painful to use.
91
91
  The file content also get's updated every 5 minutes (when a client fails to auth etc.).
92
92
  Making copy and paste from one shell to another very frolic.
93
93
 
94
- To sum it up:
95
-
96
- Today it's acceptable to use it like this, but until next week we'll need an easy
97
- auth mechanism that works on the wire.
94
+ === Hackish solution from pangdudu/robots/lib/robots_agent.rb
95
+
96
+ #because dbus remote auth still betrays us, we need to hack it
97
+ def get_remote_cookie
98
+ if @config[:robots_socket_name].include? "tcp:"
99
+ af, port, daemon_name, daemon_addr = (Socket::getaddrinfo(@config[:daemonhost],@config[:daemonhost].to_i)).first
100
+ ilog "Trying to get/hack remote cookie from: #{daemon_name}."
101
+ begin
102
+ cookiepath = "#{ENV['HOME']}/.dbus-keyrings/org_freedesktop_general"
103
+ #oki, the scp magic only works, if you use sshkeys
104
+ `scp #{daemon_addr}:.dbus-keyrings/org_freedesktop_general #{cookiepath}`
105
+ if File.exist? cookiepath
106
+ cookie = File.open(cookiepath)
107
+ dlog "Got cookie: #{cookie.gets}"
108
+ end
109
+ rescue
110
+ elog "Oops, something is wrong."
111
+ end
112
+ else
113
+ dlog "Nothing to hack, boring."
114
+ end
115
+ end
116
+
117
+ in principle, this is ok. we can now do what we want and it is save to exchange cookies over
118
+ a ssh session. However I'm still not feeling comfortable doing this. I guess everything else
119
+ would mean touching the reference C dbus-daemon implementation.
98
120
 
99
121
 
100
122
  more infos:
data/lib/dbus/auth.rb CHANGED
@@ -6,7 +6,10 @@
6
6
  # License, version 2.1 as published by the Free Software Foundation.
7
7
  # See the file "COPYING" for the exact licensing terms.
8
8
 
9
+ $debug = false #it's all over the state machine
10
+
9
11
  module DBus
12
+
10
13
  # Exception raised when authentication fails somehow.
11
14
  class AuthenticationFailed < Exception
12
15
  end
@@ -39,10 +42,12 @@ module DBus
39
42
  # Class for 'CookieSHA1' type authentication.
40
43
  # Implements the AUTH DBUS_COOKIE_SHA1 mechanism.
41
44
  class DBusCookieSHA1 < Authenticator
42
-
45
+
43
46
  #the autenticate method (called in stage one of authentification)
44
47
  def authenticate
45
48
  require 'etc'
49
+ #number of retries we have for auth
50
+ @retries = 1
46
51
  return "#{hex_encode(Etc.getlogin)}" #server expects it to be binary
47
52
  end
48
53
 
@@ -61,12 +66,12 @@ module DBus
61
66
  c_challenge = Array.new(s_challenge.length/2).map{|obj|obj=rand(255).to_s}.join
62
67
  # Search cookie file for id
63
68
  path = File.join(ENV['HOME'], '.dbus-keyrings', context)
64
- dlog "path: #{path.inspect}"
69
+ dlog "path: #{path.inspect}" #if $debug
65
70
  File.foreach(path) do |line|
66
71
  if line.index(id) == 0
67
72
  # Right line of file, read cookie
68
73
  cookie = line.split(' ')[2].chomp
69
- dlog "cookie: #{cookie.inspect}"
74
+ dlog "cookie: #{cookie.inspect}" if $debug
70
75
  # Concatenate and encrypt
71
76
  to_encrypt = [s_challenge, c_challenge, cookie].join(':')
72
77
  sha = Digest::SHA1.hexdigest(to_encrypt)
@@ -77,7 +82,12 @@ module DBus
77
82
  return response
78
83
  end
79
84
  end
80
- elog "Unable to locate cookie"
85
+ #a little rescue magic
86
+ elog "Could not auth, will now exit." unless @retries <= 0
87
+ elog "Unable to locate cookie, retry in 1 second."
88
+ @retries -= 1
89
+ sleep 1
90
+ data(hexdata)
81
91
  end
82
92
 
83
93
  # encode plain to hex
@@ -132,7 +142,7 @@ module DBus
132
142
  raise AuthException if @auth_list.size == 0
133
143
  @authenticator = @auth_list.shift.new
134
144
  auth_msg = ["AUTH", @authenticator.name, @authenticator.authenticate]
135
- dlog "auth_msg: #{auth_msg.inspect}"
145
+ dlog "auth_msg: #{auth_msg.inspect}" if $debug
136
146
  send(auth_msg)
137
147
  rescue AuthException
138
148
  @socket.close
@@ -154,7 +164,7 @@ module DBus
154
164
  break if data.include? crlf #crlf means line finished, the TCP socket keeps on listening, so we break
155
165
  end
156
166
  readline = data.chomp.split(" ")
157
- dlog "readline: #{readline.inspect}"
167
+ dlog "readline: #{readline.inspect}" if $debug
158
168
  return readline
159
169
  end
160
170
 
@@ -162,7 +172,7 @@ module DBus
162
172
  def next_state
163
173
  msg = next_msg
164
174
  if @state == :Starting
165
- dlog ":Starting msg: #{msg[0].inspect}"
175
+ dlog ":Starting msg: #{msg[0].inspect}" if $debug
166
176
  case msg[0]
167
177
  when "OK"
168
178
  @state = :WaitingForOk
@@ -172,15 +182,15 @@ module DBus
172
182
  @state = :WaitingForData
173
183
  end
174
184
  end
175
- dlog "state: #{@state}"
185
+ dlog "state: #{@state}" if $debug
176
186
  case @state
177
187
  when :WaitingForData
178
- dlog ":WaitingForData msg: #{msg[0].inspect}"
188
+ dlog ":WaitingForData msg: #{msg[0].inspect}" if $debug
179
189
  case msg[0]
180
190
  when "DATA"
181
191
  chall = msg[1]
182
192
  resp, chall = @authenticator.data(chall)
183
- dlog ":WaitingForData/DATA resp: #{resp.inspect}"
193
+ dlog ":WaitingForData/DATA resp: #{resp.inspect}" if $debug
184
194
  case resp
185
195
  when :AuthContinue
186
196
  send("DATA", chall)
@@ -206,7 +216,7 @@ module DBus
206
216
  @state = :WaitingForData
207
217
  end
208
218
  when :WaitingForOk
209
- dlog ":WaitingForOk msg: #{msg[0].inspect}"
219
+ dlog ":WaitingForOk msg: #{msg[0].inspect}" if $debug
210
220
  case msg[0]
211
221
  when "OK"
212
222
  send("BEGIN")
@@ -222,7 +232,7 @@ module DBus
222
232
  @state = :WaitingForOk
223
233
  end
224
234
  when :WaitingForReject
225
- dlog ":WaitingForReject msg: #{msg[0].inspect}"
235
+ dlog ":WaitingForReject msg: #{msg[0].inspect}" if $debug
226
236
  case msg[0]
227
237
  when "REJECT"
228
238
  next_authenticator
data/lib/dbus/bus.rb CHANGED
@@ -176,6 +176,7 @@ module DBus
176
176
  # "transport1:key1=value1,key2=value2;transport2:key1=value1,key2=value2"
177
177
  # e.g. "unix:path=/tmp/dbus-test" or "tcp:host=localhost,port=2687"
178
178
  def initialize(path)
179
+ dlog "path: #{path}"
179
180
  @path = path
180
181
  @unique_name = nil
181
182
  @buffer = ""
@@ -184,6 +185,7 @@ module DBus
184
185
  @signal_matchrules = Array.new
185
186
  @proxy = nil
186
187
  @object_root = Node.new("/")
188
+ @is_tcp = false
187
189
  end
188
190
 
189
191
  # Connect to the bus and initialize the connection.
@@ -203,11 +205,12 @@ module DBus
203
205
  port = para.sub("port=","").to_i if para.include? "port="
204
206
  family = para.sub("family=","") if para.include? "family="
205
207
  end
206
- dlog "host,port,family : #{host},#{port},#{family}"
208
+ #dlog "host,port,family : #{host},#{port},#{family}"
207
209
  begin
208
210
  #initialize the tcp socket
209
211
  @socket = TCPSocket.new(host,port)
210
212
  init_connection
213
+ @is_tcp = true
211
214
  rescue
212
215
  elog "Could not establish connection to: #{@path}, will now exit."
213
216
  exit(0) #a little harsh
@@ -446,7 +449,15 @@ module DBus
446
449
  # Fill (append) the buffer from data that might be available on the
447
450
  # socket.
448
451
  def update_buffer
449
- @buffer += @socket.read_nonblock(MSG_BUF_SIZE) unless @socket.nil?
452
+ @buffer += @socket.read_nonblock(MSG_BUF_SIZE) if @is_tcp
453
+ unless @is_tcp
454
+ begin
455
+ @buffer += @socket.read_nonblock(MSG_BUF_SIZE)
456
+ rescue
457
+ wlog ".read_nonblock failed, falling back to .recv"
458
+ @buffer += @socket.recv(MSG_BUF_SIZE)
459
+ end
460
+ end
450
461
  end
451
462
 
452
463
  # Get one message from the bus and remove it from the buffer.
@@ -470,6 +470,8 @@ module DBus
470
470
  if @default_iface and has_iface?(@default_iface)
471
471
  @interfaces[@default_iface].method(name).call(*args)
472
472
  else
473
+ dlog "interfaces: #{@interfaces.keys.inspect}"
474
+ dlog "default_iface: #{@default_iface}"
473
475
  raise NoMethodError
474
476
  end
475
477
  end
data/lib/dbus.rb CHANGED
@@ -9,9 +9,6 @@
9
9
  # See the file "COPYING" for the exact licensing terms.
10
10
  require 'rubygems'
11
11
  require 'rofl' #http://github.com/pangdudu/rofl/tree/master makes the debug/tracing easy
12
- #comes from the Rofl logger/tracer module
13
- @logger.level = Logger::DEBUG
14
-
15
12
  require 'dbus/type'
16
13
  require 'dbus/introspect'
17
14
  require 'dbus/export'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pangdudu-ruby-dbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4.1
4
+ version: 0.2.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruby DBUS Team, pangdudu
@@ -9,7 +9,7 @@ autorequire: dbus
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-27 00:00:00 -07:00
12
+ date: 2009-07-31 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency