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

Proposed by Lorenz
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
Reviewer Review Type Date Requested Status
Sebastien Bacher Needs Fixing
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.
Revision history for this message
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

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

Revision history for this message
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

Revision history for this message
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

merged data/package-data-downloader

708. By Lorenz

merge with trunk

Revision history for this message
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

merged with trunk

710. By Lorenz

bufix for password dialog problem

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

[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: