Merge lp:~lqb/update-notifier/kdeproxy+kwallet-support into lp:update-notifier

Proposed by Lorenz on 2013-03-14
Status: Work in progress
Proposed branch: lp:~lqb/update-notifier/kdeproxy+kwallet-support
Merge into: lp:update-notifier
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
Reviewer Review Type Date Requested Status
Sebastien Bacher 2013-03-14 Needs Fixing on 2013-03-15
Review via email: mp+153420@code.launchpad.net

Description of the change

- Added proxy support configured in kde
- Added kwallet support
- Added simple GUI Password dialog for proxy authentification

To post a comment you must log in.
Sebastien Bacher (seb128) wrote :

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?

review: Needs Fixing
706. By Lorenz on 2013-03-15

  * resolved conflict debian/control
  * resolved conflict data/package-data-downloader

Lorenz (lqb) wrote :

> 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?

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_that_conflicted>"

707. By Lorenz on 2013-03-15

merged data/package-data-downloader

708. By Lorenz on 2013-03-18

merge with trunk

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_conflicted>"

That is not realy what I wanted but it works.
Thanks

709. By Lorenz on 2013-04-11

merged with trunk

710. By Lorenz on 2013-04-11

bufix for password dialog problem

Unmerged revisions

710. By Lorenz on 2013-04-11

bufix for password dialog problem

709. By Lorenz on 2013-04-11

merged with trunk

708. By Lorenz on 2013-03-18

merge with trunk

707. By Lorenz on 2013-03-15

merged data/package-data-downloader

706. By Lorenz on 2013-03-15

  * resolved conflict debian/control
  * resolved conflict data/package-data-downloader

705. By Lorenz on 2013-03-14

  * 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 on 2013-03-12

Merged from lp:~lqb/update-notifier/bug1152203

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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('&','&amp;')+' 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+

Subscribers

People subscribed via source and target branches

to all changes: