Skip to content

Commit e9ffa18

Browse files
committed
Make GetSecrets do what the spec says
The spec says that if the parameter to GetSecrets is empty, NetworkManager returns all available secrets. Instead it throws an exception. I find the intended behaviour more useful, so let's make that happen.
1 parent c8e03c1 commit e9ffa18

File tree

3 files changed

+36
-10
lines changed

3 files changed

+36
-10
lines changed

NetworkManager.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,17 @@ def __getattr__(self, name):
8484
try:
8585
return super(NMDbusInterface, self).__getattribute__(name)
8686
except AttributeError:
87-
def proxy_call(*args, **kwargs):
88-
func = getattr(self.interface, name)
89-
args = self.wrap(args)
90-
kwargs = self.wrap(kwargs)
91-
args, kwargs = self.preprocess(name, args, kwargs)
92-
ret = self.unwrap(func(*args, **kwargs))
93-
return self.postprocess(name, ret)
94-
return proxy_call
87+
return self.make_proxy_call(name)
88+
89+
def make_proxy_call(self, name):
90+
def proxy_call(*args, **kwargs):
91+
func = getattr(self.interface, name)
92+
args = self.wrap(args)
93+
kwargs = self.wrap(kwargs)
94+
args, kwargs = self.preprocess(name, args, kwargs)
95+
ret = self.unwrap(func(*args, **kwargs))
96+
return self.postprocess(name, ret)
97+
return proxy_call
9598

9699
def connect_to_signal(self, signal, handler, *args, **kwargs):
97100
def helper(*args, **kwargs):
@@ -119,6 +122,19 @@ class Settings(NMDbusInterface):
119122

120123
class Connection(NMDbusInterface):
121124
interface_name = 'org.freedesktop.NetworkManager.Settings.Connection'
125+
has_secrets = ['802-1x', '802-11-wireless-security', 'cdma',
126+
'gsm', 'pppoe', 'vpn']
127+
128+
def GetSecrets(self, name=None):
129+
if name == None:
130+
settings = self.GetSettings()
131+
for key in self.has_secrets:
132+
if key in settings:
133+
name = key
134+
break
135+
else:
136+
return {}
137+
return self.make_proxy_call('GetSecrets')(name)
122138

123139
def postprocess(self, name, val):
124140
# SSID is sent as bytes, make it a string

examples/connection_detail.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@
77

88
for conn in NetworkManager.NetworkManager.ActiveConnections:
99
settings = conn.Connection.GetSettings()
10+
1011
for s in list(settings.keys()):
1112
if 'data' in settings[s]:
1213
settings[s + '-data'] = settings[s].pop('data')
1314

15+
secrets = conn.Connection.GetSecrets()
16+
for key in secrets:
17+
settings[key].update(secrets[key])
18+
1419
devices = ""
1520
if conn.Devices:
1621
devices = " (on %s)" % ", ".join([x.Interface for x in conn.Devices])

n-m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,13 @@ def info(names):
198198

199199
def dump(names):
200200
from pprint import pprint
201-
connections = [x.GetSettings() for x in NetworkManager.Settings.ListConnections()]
202-
connections = dict([(x['connection']['id'], x) for x in connections])
201+
connections = {}
202+
for conn in NetworkManager.Settings.ListConnections():
203+
settings = conn.GetSettings()
204+
secrets = conn.GetSecrets()
205+
for key in secrets:
206+
settings[key].update(secrets[key])
207+
connections[settings['connection']['id']] = settings
203208

204209
for n in names:
205210
if n not in connections:

0 commit comments

Comments
 (0)