Merge lp:~lqb/update-notifier/kdeproxy+kwallet-support into lp:update-notifier/ubuntu
- kdeproxy+kwallet-support
- Merge into ubuntu
Status: | Work in progress |
---|---|
Proposed branch: | lp:~lqb/update-notifier/kdeproxy+kwallet-support |
Merge into: | lp:update-notifier/ubuntu |
Diff against target: |
597 lines (+457/-9) 7 files modified
TODO (+7/-1) data/kwalletdbuscli.py (+94/-0) data/org.freedesktop.policykit.pkexec.package-data-downloader.policy (+19/-0) data/package-data-downloader (+318/-6) debian/changelog (+11/-1) debian/control (+5/-1) debian/update-notifier-common.install (+3/-0) |
To merge this branch: | bzr merge lp:~lqb/update-notifier/kdeproxy+kwallet-support |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Sebastien Bacher | Needs Fixing | ||
Review via email: mp+153420@code.launchpad.net |
Commit message
Description of the change
- Added proxy support configured in kde
- Added kwallet support
- Added simple GUI Password dialog for proxy authentification
Lorenz (lqb) wrote : | # |
> thank you for your work, the current version of the merge request has
> conflicts (in data/package-
> resolve those and resubmit it?
My try to do that failed. I have to find out what I made wrong. Perhaps you might give me a hint.
Thanks
Sebastien Bacher (seb128) wrote : | # |
Not sure what happened, in case there were need commits in the vcs since you did the change you might want to "bzr merge lp:update-notifier" in your branch, then resolve the conflicts and use "bzr resolve <files_
Lorenz (lqb) wrote : | # |
> Not sure what happened, in case there were need commits in the vcs since you
> did the change you might want to "bzr merge lp:update-notifier" in your
> branch, then resolve the conflicts and use "bzr resolve
> <files_
That is not realy what I wanted but it works.
Thanks
Unmerged revisions
- 710. By Lorenz
-
bufix for password dialog problem
- 709. By Lorenz
-
merged with trunk
- 708. By Lorenz
-
merge with trunk
- 707. By Lorenz
-
merged data/package-
data-downloader - 706. By Lorenz
-
* resolved conflict debian/control
* resolved conflict data/package-data-downloader - 705. By Lorenz
-
* added policykit rule to allow pkexec to use the GUI
* Enhanced proxy support for kde with kwallet support
* added partial autoconfiguration support (if configured in kde)
* added gui prompt for proxy password
* added passwordcache - 704. By Lorenz
-
Merged from lp:~lqb/update-notifier/bug1152203
Preview Diff
1 | === modified file 'TODO' |
2 | --- TODO 2007-07-27 21:00:33 +0000 |
3 | +++ TODO 2013-04-11 13:43:22 +0000 |
4 | @@ -6,4 +6,10 @@ |
5 | * use a g_hash_table for hook_files |
6 | * remove hook-files that are no longer in the HOOK_DIR |
7 | from the hook_seen file (by discarding them when building |
8 | - the hook_files list) |
9 | \ No newline at end of file |
10 | + the hook_files list) |
11 | + |
12 | +get_kde_proxy_servers: |
13 | + get wpad autoconfiguration from DHCP |
14 | + |
15 | +get_gconf_proxy_servers: |
16 | + implement this function |
17 | |
18 | === added file 'data/kwalletdbuscli.py' |
19 | --- data/kwalletdbuscli.py 1970-01-01 00:00:00 +0000 |
20 | +++ data/kwalletdbuscli.py 2013-04-11 13:43:22 +0000 |
21 | @@ -0,0 +1,94 @@ |
22 | +#!/usr/bin/python |
23 | + |
24 | +import sys |
25 | +import os |
26 | +import subprocess |
27 | +import shlex |
28 | +import argparse |
29 | +import dbus |
30 | +from pprint import pprint |
31 | + |
32 | +appid='Python KWallet D-Bus CLI' |
33 | +wallet='kdewallet' |
34 | + |
35 | +sOK=0 |
36 | +sError=1 |
37 | +sCancel=10 |
38 | + |
39 | +def askpass(title="KWallet DBUS CLI",text="Enter username and password"): |
40 | + appid="test" |
41 | + description="desc" |
42 | + realm="re" |
43 | + cmd='zenity --title="'+title+'" --forms --text="'+text+'" --add-entry=username --add-password=password' |
44 | + p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) |
45 | + ret=p.wait() |
46 | + out,err=p.communicate() |
47 | + if ret != 0: |
48 | + return None |
49 | + user,password=out.split('|') |
50 | + return user+':'+password |
51 | + |
52 | + |
53 | +def main(): |
54 | + global appid |
55 | + STATUS=sOK |
56 | + parser=argparse.ArgumentParser() |
57 | + parser.add_argument('-a','--app',default=appid,dest='appid') |
58 | + |
59 | + subparsers=parser.add_subparsers(dest='parser_name') |
60 | + |
61 | + pclose=subparsers.add_parser('close') |
62 | + |
63 | + pget=subparsers.add_parser('get') |
64 | + pget.add_argument('-f','--folder', required=True) |
65 | + pget.add_argument('-e','--entry', required=True) |
66 | + |
67 | + pset=subparsers.add_parser('set') |
68 | + pset.add_argument('-f','--folder', required=True) |
69 | + pset.add_argument('-e','--entry', required=True) |
70 | + pset.add_argument('-p','--password', required=True) |
71 | + |
72 | + pset=subparsers.add_parser('ask') |
73 | + pset.add_argument('-f','--folder', required=True) |
74 | + pset.add_argument('-e','--entry', required=True) |
75 | + pset.add_argument('-t','--text',default='Enter username and password', required=False) |
76 | + |
77 | + args=parser.parse_args() |
78 | + |
79 | + appid=args.appid |
80 | + bus=dbus.SessionBus() |
81 | + remote_object = bus.get_object('org.kde.kwalletd', '/modules/kwalletd' ) |
82 | + iface = dbus.Interface(remote_object, 'org.kde.KWallet') |
83 | + |
84 | + if args.parser_name == 'close': |
85 | + iface.disconnectApplication(wallet, appid) |
86 | + if args.parser_name == 'get': |
87 | + wid=iface.open(wallet, 0, appid) |
88 | + password=iface.readPasswordList(wid, args.folder, args.entry, appid) |
89 | + if len(password.keys()) != 0: |
90 | + password=password[args.entry] |
91 | + print password |
92 | + else: |
93 | + STATUS=sError |
94 | + if args.parser_name == 'ask': |
95 | + password=askpass(appid,args.text) |
96 | + if password is None: |
97 | + print >> sys.stderr, "askpass canceled" |
98 | + STATUS=sCancel |
99 | + else: |
100 | + wid=iface.open(wallet, 0, appid) |
101 | + iface.writePassword(wid, args.folder, args.entry, password, appid) |
102 | + print password |
103 | + if args.parser_name == 'set': |
104 | + wid=iface.open(wallet, 0, appid) |
105 | + password=args.password |
106 | + iface.writePassword(wid, args.folder, args.entry, password, appid) |
107 | + print password |
108 | + sys.exit(STATUS) |
109 | + |
110 | + |
111 | +if __name__ == "__main__": |
112 | + main() |
113 | + |
114 | + |
115 | + |
116 | |
117 | === added file 'data/org.freedesktop.policykit.pkexec.package-data-downloader.policy' |
118 | --- data/org.freedesktop.policykit.pkexec.package-data-downloader.policy 1970-01-01 00:00:00 +0000 |
119 | +++ data/org.freedesktop.policykit.pkexec.package-data-downloader.policy 2013-04-11 13:43:22 +0000 |
120 | @@ -0,0 +1,19 @@ |
121 | +<?xml version="1.0" encoding="UTF-8"?> |
122 | +<!DOCTYPE policyconfig PUBLIC |
123 | + "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" |
124 | + "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> |
125 | +<policyconfig> |
126 | + |
127 | + <action id="org.freedesktop.policykit.pkexec.run-package-data-downloader"> |
128 | + <description>Run package-data-downloader</description> |
129 | + <message>Authentication is required to run package-data-downloader</message> |
130 | + <defaults> |
131 | + <allow_any>no</allow_any> |
132 | + <allow_inactive>no</allow_inactive> |
133 | + <allow_active>auth_admin_keep</allow_active> |
134 | + </defaults> |
135 | + <annotate key="org.freedesktop.policykit.exec.path">/usr/lib/update-notifier/package-data-downloader</annotate> |
136 | + <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate> |
137 | + </action> |
138 | + |
139 | +</policyconfig> |
140 | |
141 | === modified file 'data/package-data-downloader' |
142 | --- data/package-data-downloader 2012-08-25 14:18:38 +0000 |
143 | +++ data/package-data-downloader 2013-04-11 13:43:22 +0000 |
144 | @@ -27,7 +27,18 @@ |
145 | import string |
146 | import apt |
147 | import debconf |
148 | +import pacparser |
149 | +import pwd |
150 | +import shlex |
151 | +import getpass |
152 | +import tempfile |
153 | +import socket |
154 | from datetime import datetime |
155 | +try: |
156 | + import configparser as config_parser |
157 | +except: |
158 | + import ConfigParser as config_parser |
159 | + |
160 | |
161 | DATADIR = "/usr/share/package-data-downloads/" |
162 | STAMPDIR = "/var/lib/update-notifier/package-data-downloads/" |
163 | @@ -39,6 +50,274 @@ |
164 | failures = [] |
165 | permanent_failures = [] |
166 | |
167 | +PROGNAME="update-notifier-downloader" |
168 | + |
169 | +class PasswordCache(): |
170 | + __data={} |
171 | + def set(self, key, user, password): |
172 | + self.__data[key]={'user':user,'password':password} |
173 | + def get(self, key=None): |
174 | + if key is None: |
175 | + return self.__data |
176 | + else: |
177 | + if key in self.__data.keys(): |
178 | + return self.__data[key] |
179 | + else: |
180 | + return None |
181 | + |
182 | + |
183 | + |
184 | +class kwalletFancyURLopener(urllib.FancyURLopener): |
185 | + appid=PROGNAME |
186 | + """Inheriited from urllib.FancyURLopener to add kwallet communication. |
187 | + Communication with kwallet over dbus seems to work only if DISPLAY is set. |
188 | + If TERM is set, we can communicate with the user. |
189 | + If neither DISPLAY or TERM is set communication might not be possible. |
190 | + """ |
191 | + count=0 |
192 | + |
193 | + def prompt_user_passwd(self, realm, description): |
194 | + self.count+=1 |
195 | + if self.count > 20: |
196 | + sys.exit(1) |
197 | + appid=kwalletFancyURLopener.appid |
198 | + kwallet_bin='/usr/lib/update-notifier/kwalletdbuscli.py' |
199 | + key=realm + "-" + description |
200 | + TERM=os.getenv('TERM',None) |
201 | + DISPLAY=os.getenv('DISPLAY',None) |
202 | + user=None |
203 | + password=None |
204 | + pwcache=PasswordCache() |
205 | + |
206 | + uid=os.getenv('PKEXEC_UID',None) |
207 | + if uid==None: |
208 | + uid=os.getenv('SUDO_UID',None) |
209 | + if uid==None: |
210 | + if 'USER' in os.environ: |
211 | + uid=int(pwd.getpwnam(os.environ['USER']).pw_uid) |
212 | + if uid==None: |
213 | + uid=os.getuid() |
214 | + |
215 | + credentials=pwcache.get(key) |
216 | + #if credentials is not None: |
217 | + if credentials is not None and self.count < 2: |
218 | + return (credentials['user'], credentials['password']) |
219 | + else: |
220 | + if (TERM == None or DISPLAY == None): |
221 | + return ('','') |
222 | + else: |
223 | + out='' |
224 | + if DISPLAY != None: |
225 | + print "Accessing kwallet" |
226 | + cmd='sudo -u "#'+str(uid)+'" '+kwallet_bin+' -a "'+appid+'" get -f "'+appid+'" -e "'+key+'"' |
227 | + p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) |
228 | + ret=p.wait() |
229 | + out,err=p.communicate() |
230 | + out=out.strip() |
231 | + if ret != 0 or self.count > 2 or (out=="" or out==":"): # No entry in wallet or wrong credentials or empty credentials |
232 | + cmd='sudo -u "#'+str(uid)+'" '+kwallet_bin+' -a "'+appid+'" ask -f "'+appid+'" -e "'+key+'" -t "Enter credentials for '+description.replace('&','&')+' at '+realm+'"' |
233 | + p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) |
234 | + ret=p.wait() |
235 | + out,err=p.communicate() |
236 | + out=out.strip() |
237 | + if ret==10: |
238 | + return (None,None) # Don't ask again |
239 | + elif ret != 0: |
240 | + return ("\n","\n") # Force to ask again |
241 | + elif out=="" or out==":": |
242 | + return ("\n","\n") # Force to ask again. Treats empty credentials as error |
243 | + user,password=out.split(':') |
244 | + pwcache.set(key, user, password) |
245 | + credentials=pwcache.get(key) |
246 | + return (user, password) |
247 | + |
248 | + |
249 | +def get_gconf_proxy_servers(url,uid=None): |
250 | + """Get proxy server from (system) gconf settings.""" |
251 | + print "Not yet Implemented!" |
252 | + return {} |
253 | + |
254 | + |
255 | +def get_kde_proxy_servers(url,uid=None): |
256 | + """Get proxy server from kde settings""" |
257 | + proxies={} |
258 | + kioslave=config_parser.ConfigParser(allow_no_value=True) |
259 | + if uid is not None: |
260 | + home=pwd.getpwuid(int(uid)).pw_dir |
261 | + #print "HOME="+home |
262 | + config_files=['/etc/kde4/kioslaverc',home+'/.kde/share/config/kioslaverc'] |
263 | + else: |
264 | + config_files=['/etc/kde4/kioslaverc'] |
265 | + |
266 | + for config_file in config_files: |
267 | + try: |
268 | + fh=open(config_file) |
269 | + line=fh.readline() # discard first lines until line contains "[" |
270 | + while not '[' in line: |
271 | + line=fh.readline() |
272 | + if line=='': |
273 | + break |
274 | + fh.seek(-1 * len(line), 1) # rewind file pointer |
275 | + kioslave.readfp(fh) |
276 | + except: |
277 | + pass |
278 | + |
279 | + if not kioslave.has_section('Proxy Settings'): |
280 | + return proxies |
281 | + |
282 | + if (kioslave.get('Proxy Settings','ProxyType') == '0'): # No Proxy |
283 | + proxies={} |
284 | + |
285 | + if (kioslave.get('Proxy Settings','ProxyType') == '1'): # Use manually specified proxy configuration |
286 | + proxies['http']=kioslave.get('Proxy Settings','httpProxy').replace(' ',':') |
287 | + proxies['ftp']=kioslave.get('Proxy Settings','ftpProxy').replace(' ',':') |
288 | + proxies['socks']=kioslave.get('Proxy Settings','socksProxy').replace(' ',':') |
289 | + proxies['https']=kioslave.get('Proxy Settings','httpsProxy').replace(' ',':') |
290 | + proxies['no']=kioslave.get('Proxy Settings','NoProxyFor') # does this work? |
291 | + |
292 | + if (kioslave.get('Proxy Settings','ProxyType') == '2'): # Use proxy auto configuration URL |
293 | + pacurl=kioslave.get('Proxy Settings','Proxy Config Script') |
294 | + if pacurl is None: |
295 | + return {} |
296 | + tmpfn=tempfile.mkstemp(prefix="proxy_",suffix=".pac")[1] |
297 | + urlh=urllib.urlopen(pacurl,proxies={}) # Force direct download |
298 | + tmph=open(tmpfn,"w") |
299 | + for line in urlh: |
300 | + tmph.write(line) |
301 | + tmph.close() |
302 | + proxy_string=pacparser.just_find_proxy(tmpfn, url) |
303 | + os.remove(tmpfn) |
304 | + proxylist = proxy_string.split(";") |
305 | + proxies = None |
306 | + while proxylist: |
307 | + proxy = proxylist.pop(0).strip() |
308 | + if 'DIRECT' in proxy: |
309 | + proxies = {} |
310 | + break |
311 | + if proxy[0:5].upper() == 'PROXY': |
312 | + proxy = proxy[6:].strip() |
313 | + proxies = {'http': 'http://%s' % proxy} |
314 | + |
315 | + if (kioslave.get('Proxy Settings','ProxyType') == '3'): # Detect proxy configuration automatically |
316 | + # usually a DHCPINFORM shoud be used first to determine the proxy pac url but I currently can't test, so I don't implement that yet |
317 | + pacurl=None |
318 | + tmpfn=None |
319 | + fqdn=socket.getfqdn() |
320 | + domparts=fqdn.split('.') |
321 | + proxylist=None |
322 | + while len(domparts) > 2: |
323 | + domparts.remove(domparts[0]) |
324 | + pacurl="http://wpad."+string.join(domparts,".")+"/wpad.dat" |
325 | + tmpfn=tempfile.mkstemp(prefix="proxy_",suffix=".pac")[1] |
326 | + try: |
327 | + urlh=urllib.urlopen(pacurl,proxies={}) # Force direct download |
328 | + except: |
329 | + continue |
330 | + tmph=open(tmpfn,"w") |
331 | + if urlh.info().gettype() == 'application/x-ns-proxy-autoconfig': |
332 | + for line in urlh: |
333 | + tmph.write(line) |
334 | + tmph.close() |
335 | + proxy_string=pacparser.just_find_proxy(tmpfn, url) |
336 | + proxylist = proxy_string.split(";") |
337 | + os.remove(tmpfn) |
338 | + if proxylist==None: |
339 | + print "No WPAD configuration found. Using direct access" |
340 | + proxies = {} |
341 | + while proxylist: |
342 | + proxy = proxylist.pop(0).strip() |
343 | + if 'DIRECT' in proxy: |
344 | + proxies = {} |
345 | + break |
346 | + if proxy[0:5].upper() == 'PROXY': |
347 | + proxy = proxy[6:].strip() |
348 | + proxies = {'http': 'http://%s' % proxy} |
349 | + |
350 | + |
351 | + if (kioslave.get('Proxy Settings','ProxyType') == '4'): # Use system proxy configuration |
352 | + for varname in kioslave.get('Proxy Settings','httpProxy').split(','): |
353 | + try: |
354 | + proxies['http']=os.environ[varname] |
355 | + except: |
356 | + pass |
357 | + if 'http' in proxies.keys(): |
358 | + break |
359 | + for varname in kioslave.get('Proxy Settings','ftpProxy').split(','): |
360 | + try: |
361 | + proxies['ftp']=os.environ[varname] |
362 | + except: |
363 | + pass |
364 | + if 'ftp' in proxies.keys(): |
365 | + break |
366 | + for varname in kioslave.get('Proxy Settings','httpsProxy').split(','): |
367 | + try: |
368 | + proxies['https']=os.environ[varname] |
369 | + except: |
370 | + pass |
371 | + if 'https' in proxies.keys(): |
372 | + break |
373 | + for varname in kioslave.get('Proxy Settings','socksProxy').split(','): |
374 | + try: |
375 | + proxies['socks']=os.environ[varname] |
376 | + except: |
377 | + pass |
378 | + if 'socks' in proxies.keys(): |
379 | + break |
380 | + for varname in kioslave.get('Proxy Settings','NoProxyFor').split(','): # does this work? |
381 | + try: |
382 | + proxies['no']=os.environ[varname] |
383 | + except: |
384 | + pass |
385 | + if 'no' in proxies.keys(): |
386 | + break |
387 | + return proxies |
388 | + |
389 | + |
390 | +def get_env_proxy_servers(): |
391 | + """Get proxy server from environment settings""" |
392 | + # Get our proxy settings from the environment |
393 | + proxies = {} |
394 | + try: |
395 | + for proto in ('http','https','ftp','no'): |
396 | + try: |
397 | + proxies[proto] = os.environ[proto+"_proxy"] |
398 | + except KeyError: |
399 | + pass |
400 | + except Exception: |
401 | + pass |
402 | + return proxies |
403 | + |
404 | +def get_proxy_servers(url): |
405 | + """Get proxy settings dependent on environment and call |
406 | + |
407 | + This script could be called through different ways. |
408 | + It is not possible to fetch proxy setting e.g. from kde |
409 | + settings if this script was called from a cronjob |
410 | + """ |
411 | + |
412 | + UID=os.getuid() |
413 | + PKEXEC_UID=os.getenv('PKEXEC_UID',None) |
414 | + SUDO_UID=os.getenv('SUDO_UID',None) |
415 | + proxies={} |
416 | + |
417 | + if (PKEXEC_UID != None) and (PKEXEC_UID != 0): |
418 | + proxies=get_kde_proxy_servers(url,PKEXEC_UID) |
419 | + elif (SUDO_UID != None) and (SUDO_UID != 0): |
420 | + proxies=get_kde_proxy_servers(url,SUDO_UID) |
421 | + elif (UID != None) and (UID != 0): |
422 | + proxies=get_kde_proxy_servers(url,UID) |
423 | + else: |
424 | + proxies=get_kde_proxy_servers(url) |
425 | + |
426 | + if not proxies: |
427 | + proxies=get_gconf_proxy_servers(url) |
428 | + |
429 | + if not proxies: |
430 | + proxies=get_env_proxy_servers() |
431 | + |
432 | + return proxies |
433 | + |
434 | + |
435 | def create_or_update_stampfile(file): |
436 | """Create or update the indicated stampfile, and remove failure flags""" |
437 | |
438 | @@ -145,8 +424,9 @@ |
439 | sys.exit(1) |
440 | |
441 | packages = [os.path.basename(failure) for failure in failures] |
442 | + |
443 | output_file.write( |
444 | - string.Template(input).substitute( |
445 | + string.Template(input).safe_substitute( |
446 | {'packages' : ", ".join(packages)})) |
447 | output_file.close() |
448 | |
449 | @@ -160,6 +440,17 @@ |
450 | res.append(relfile) |
451 | return res |
452 | |
453 | +def mktmp4url(url): |
454 | + import tempfile |
455 | + garbage, path = urllib.splittype(url) |
456 | + garbage, path = urllib.splithost(path or "") |
457 | + path, garbage = urllib.splitquery(path or "") |
458 | + path, garbage = urllib.splitattr(path or "") |
459 | + suffix = os.path.splitext(path)[1] |
460 | + (fd, filename) = tempfile.mkstemp(suffix) |
461 | + return (fd, filename) |
462 | + |
463 | + |
464 | def process_download_requests(): |
465 | """Process requests to download package data files |
466 | |
467 | @@ -182,7 +473,6 @@ |
468 | proxies[proto] = os.environ[proto+"_proxy"] |
469 | except KeyError: |
470 | pass |
471 | - |
472 | if proxies: |
473 | urllib._urlopener = urllib.FancyURLopener(proxies) |
474 | except Exception: |
475 | @@ -214,6 +504,7 @@ |
476 | record_failure(relfile) |
477 | break |
478 | command = [para['script']] |
479 | + tmpfiles=[] |
480 | |
481 | if 'should-download' in para: |
482 | db = debconf.DebconfCommunicator('update-notifier') |
483 | @@ -231,7 +522,12 @@ |
484 | try: |
485 | for i in range(len(files)): |
486 | print "%s: downloading %s" % (relfile, files[i]) |
487 | - dest_file = urllib.urlretrieve(files[i])[0] |
488 | + proxies=get_proxy_servers(files[i]) # Get our proxy settings for each url |
489 | + if proxies: |
490 | + urllib._urlopener = kwalletFancyURLopener(proxies) |
491 | + (fd,filename)=mktmp4url(files[i]) |
492 | + tmpfiles.append(filename) |
493 | + dest_file = urllib.urlretrieve(files[i], filename)[0] |
494 | output = subprocess.check_output(["sha256sum", dest_file]) |
495 | output = output.split(' ')[0] |
496 | if output == sums[i]: |
497 | @@ -241,7 +537,6 @@ |
498 | break |
499 | if relfile in failures + permanent_failures: |
500 | break |
501 | - |
502 | sys.stdout.flush() |
503 | result = subprocess.call(command) |
504 | if result: |
505 | @@ -252,7 +547,6 @@ |
506 | break |
507 | except Exception: |
508 | traceback.print_exc(file=sys.stderr) |
509 | - |
510 | record_failure(relfile) |
511 | # The 'script' is always the last stanza |
512 | break |
513 | @@ -266,7 +560,11 @@ |
514 | traceback.print_exc(file=sys.stderr) |
515 | record_failure(relfile) |
516 | break |
517 | - |
518 | + for f in tmpfiles: |
519 | + try: |
520 | + os.remove(f) |
521 | + except: |
522 | + pass |
523 | previous_failures = existing_permanent_failures() |
524 | |
525 | # We only report about "permanent" failures when there are new ones, |
526 | @@ -294,3 +592,17 @@ |
527 | |
528 | if __name__ == "__main__": |
529 | process_download_requests() |
530 | + |
531 | + |
532 | + # close wallet |
533 | + uid=os.getenv('PKEXEC_UID',None) |
534 | + if uid==None: |
535 | + uid=os.getenv('SUDO_UID',None) |
536 | + if uid==None: |
537 | + uid=os.getuid() |
538 | + if uid!=0: |
539 | + cmd='sudo -u "#'+str(uid)+'" /usr/lib/update-notifier/kwalletdbuscli.py -a "'+PROGNAME+'" close' |
540 | + p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE) |
541 | + p.wait() |
542 | + |
543 | + print PROGNAME+" finished" |
544 | |
545 | === modified file 'debian/changelog' |
546 | --- debian/changelog 2013-04-09 10:31:08 +0000 |
547 | +++ debian/changelog 2013-04-11 13:43:22 +0000 |
548 | @@ -218,10 +218,20 @@ |
549 | |
550 | update-notifier (0.119ubuntu10) quantal; urgency=low |
551 | |
552 | + [ Steve Langasek ] |
553 | * Merge in changes from 0.119ubuntu8.1 which had been uploaded to |
554 | precise-proposed. |
555 | |
556 | - -- Steve Langasek <steve.langasek@ubuntu.com> Tue, 15 May 2012 16:20:43 -0700 |
557 | + [ Lorenz ] |
558 | + * Fix Translation error and use safe_substitute instead of substitute on |
559 | + template substitution. LP: #1152203 |
560 | + * added policykit rule to allow pkexec to use the GUI |
561 | + * Enhanced proxy support for kde with kwallet support |
562 | + * added partial autoconfiguration support (if configured in kde) |
563 | + * added gui prompt for proxy password |
564 | + * added passwordcache |
565 | + |
566 | + -- Lorenz <lqb@gmx.de> Tue, 12 Mar 2013 18:44:45 +0100 |
567 | |
568 | update-notifier (0.119ubuntu9) quantal; urgency=low |
569 | |
570 | |
571 | === modified file 'debian/control' |
572 | --- debian/control 2013-04-09 10:07:10 +0000 |
573 | +++ debian/control 2013-04-11 13:43:22 +0000 |
574 | @@ -47,7 +47,11 @@ |
575 | Depends: ${shlibs:Depends}, |
576 | ${misc:Depends}, |
577 | python, |
578 | - python-apt (>= 0.6.12), python-debian, debconf, patch |
579 | + python-apt (>= 0.6.12), |
580 | + python-debian, |
581 | + debconf, |
582 | + patch, |
583 | + python-pacparser |
584 | Recommends: libpam-modules (>= 1.0.1-9ubuntu3) |
585 | Suggests: policykit-1 |
586 | Description: Files shared between update-notifier and other packages |
587 | |
588 | === modified file 'debian/update-notifier-common.install' |
589 | --- debian/update-notifier-common.install 2013-02-01 15:13:06 +0000 |
590 | +++ debian/update-notifier-common.install 2013-04-11 13:43:22 +0000 |
591 | @@ -12,3 +12,6 @@ |
592 | usr/lib/update-notifier/ |
593 | usr/share/locale |
594 | debian/update-manager-downloader-fix2.diff usr/share/update-notifier/upgrader-patches |
595 | +data/org.freedesktop.policykit.pkexec.package-data-downloader.policy usr/share/polkit-1/actions/ |
596 | +data/kwalletdbuscli.py usr/lib/update-notifier |
597 | + |
thank you for your work, the current version of the merge request has conflicts (in data/package- data-downloader and debian/control), could you resolve those and resubmit it?