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
=== modified file 'TODO'
--- TODO 2007-07-27 21:00:33 +0000
+++ TODO 2013-04-11 13:43:22 +0000
@@ -6,4 +6,10 @@
6* use a g_hash_table for hook_files6* use a g_hash_table for hook_files
7* remove hook-files that are no longer in the HOOK_DIR7* remove hook-files that are no longer in the HOOK_DIR
8 from the hook_seen file (by discarding them when building 8 from the hook_seen file (by discarding them when building
9 the hook_files list)
10\ No newline at end of file9\ No newline at end of file
10 the hook_files list)
11
12get_kde_proxy_servers:
13 get wpad autoconfiguration from DHCP
14
15get_gconf_proxy_servers:
16 implement this function
1117
=== added file 'data/kwalletdbuscli.py'
--- data/kwalletdbuscli.py 1970-01-01 00:00:00 +0000
+++ data/kwalletdbuscli.py 2013-04-11 13:43:22 +0000
@@ -0,0 +1,94 @@
1#!/usr/bin/python
2
3import sys
4import os
5import subprocess
6import shlex
7import argparse
8import dbus
9from pprint import pprint
10
11appid='Python KWallet D-Bus CLI'
12wallet='kdewallet'
13
14sOK=0
15sError=1
16sCancel=10
17
18def askpass(title="KWallet DBUS CLI",text="Enter username and password"):
19 appid="test"
20 description="desc"
21 realm="re"
22 cmd='zenity --title="'+title+'" --forms --text="'+text+'" --add-entry=username --add-password=password'
23 p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
24 ret=p.wait()
25 out,err=p.communicate()
26 if ret != 0:
27 return None
28 user,password=out.split('|')
29 return user+':'+password
30
31
32def main():
33 global appid
34 STATUS=sOK
35 parser=argparse.ArgumentParser()
36 parser.add_argument('-a','--app',default=appid,dest='appid')
37
38 subparsers=parser.add_subparsers(dest='parser_name')
39
40 pclose=subparsers.add_parser('close')
41
42 pget=subparsers.add_parser('get')
43 pget.add_argument('-f','--folder', required=True)
44 pget.add_argument('-e','--entry', required=True)
45
46 pset=subparsers.add_parser('set')
47 pset.add_argument('-f','--folder', required=True)
48 pset.add_argument('-e','--entry', required=True)
49 pset.add_argument('-p','--password', required=True)
50
51 pset=subparsers.add_parser('ask')
52 pset.add_argument('-f','--folder', required=True)
53 pset.add_argument('-e','--entry', required=True)
54 pset.add_argument('-t','--text',default='Enter username and password', required=False)
55
56 args=parser.parse_args()
57
58 appid=args.appid
59 bus=dbus.SessionBus()
60 remote_object = bus.get_object('org.kde.kwalletd', '/modules/kwalletd' )
61 iface = dbus.Interface(remote_object, 'org.kde.KWallet')
62
63 if args.parser_name == 'close':
64 iface.disconnectApplication(wallet, appid)
65 if args.parser_name == 'get':
66 wid=iface.open(wallet, 0, appid)
67 password=iface.readPasswordList(wid, args.folder, args.entry, appid)
68 if len(password.keys()) != 0:
69 password=password[args.entry]
70 print password
71 else:
72 STATUS=sError
73 if args.parser_name == 'ask':
74 password=askpass(appid,args.text)
75 if password is None:
76 print >> sys.stderr, "askpass canceled"
77 STATUS=sCancel
78 else:
79 wid=iface.open(wallet, 0, appid)
80 iface.writePassword(wid, args.folder, args.entry, password, appid)
81 print password
82 if args.parser_name == 'set':
83 wid=iface.open(wallet, 0, appid)
84 password=args.password
85 iface.writePassword(wid, args.folder, args.entry, password, appid)
86 print password
87 sys.exit(STATUS)
88
89
90if __name__ == "__main__":
91 main()
92
93
94
095
=== added file 'data/org.freedesktop.policykit.pkexec.package-data-downloader.policy'
--- data/org.freedesktop.policykit.pkexec.package-data-downloader.policy 1970-01-01 00:00:00 +0000
+++ data/org.freedesktop.policykit.pkexec.package-data-downloader.policy 2013-04-11 13:43:22 +0000
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE policyconfig PUBLIC
3 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
4 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
5<policyconfig>
6
7 <action id="org.freedesktop.policykit.pkexec.run-package-data-downloader">
8 <description>Run package-data-downloader</description>
9 <message>Authentication is required to run package-data-downloader</message>
10 <defaults>
11 <allow_any>no</allow_any>
12 <allow_inactive>no</allow_inactive>
13 <allow_active>auth_admin_keep</allow_active>
14 </defaults>
15 <annotate key="org.freedesktop.policykit.exec.path">/usr/lib/update-notifier/package-data-downloader</annotate>
16 <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
17 </action>
18
19</policyconfig>
020
=== modified file 'data/package-data-downloader'
--- data/package-data-downloader 2012-08-25 14:18:38 +0000
+++ data/package-data-downloader 2013-04-11 13:43:22 +0000
@@ -27,7 +27,18 @@
27import string27import string
28import apt28import apt
29import debconf29import debconf
30import pacparser
31import pwd
32import shlex
33import getpass
34import tempfile
35import socket
30from datetime import datetime36from datetime import datetime
37try:
38 import configparser as config_parser
39except:
40 import ConfigParser as config_parser
41
3142
32DATADIR = "/usr/share/package-data-downloads/"43DATADIR = "/usr/share/package-data-downloads/"
33STAMPDIR = "/var/lib/update-notifier/package-data-downloads/"44STAMPDIR = "/var/lib/update-notifier/package-data-downloads/"
@@ -39,6 +50,274 @@
39failures = []50failures = []
40permanent_failures = []51permanent_failures = []
4152
53PROGNAME="update-notifier-downloader"
54
55class PasswordCache():
56 __data={}
57 def set(self, key, user, password):
58 self.__data[key]={'user':user,'password':password}
59 def get(self, key=None):
60 if key is None:
61 return self.__data
62 else:
63 if key in self.__data.keys():
64 return self.__data[key]
65 else:
66 return None
67
68
69
70class kwalletFancyURLopener(urllib.FancyURLopener):
71 appid=PROGNAME
72 """Inheriited from urllib.FancyURLopener to add kwallet communication.
73 Communication with kwallet over dbus seems to work only if DISPLAY is set.
74 If TERM is set, we can communicate with the user.
75 If neither DISPLAY or TERM is set communication might not be possible.
76 """
77 count=0
78
79 def prompt_user_passwd(self, realm, description):
80 self.count+=1
81 if self.count > 20:
82 sys.exit(1)
83 appid=kwalletFancyURLopener.appid
84 kwallet_bin='/usr/lib/update-notifier/kwalletdbuscli.py'
85 key=realm + "-" + description
86 TERM=os.getenv('TERM',None)
87 DISPLAY=os.getenv('DISPLAY',None)
88 user=None
89 password=None
90 pwcache=PasswordCache()
91
92 uid=os.getenv('PKEXEC_UID',None)
93 if uid==None:
94 uid=os.getenv('SUDO_UID',None)
95 if uid==None:
96 if 'USER' in os.environ:
97 uid=int(pwd.getpwnam(os.environ['USER']).pw_uid)
98 if uid==None:
99 uid=os.getuid()
100
101 credentials=pwcache.get(key)
102 #if credentials is not None:
103 if credentials is not None and self.count < 2:
104 return (credentials['user'], credentials['password'])
105 else:
106 if (TERM == None or DISPLAY == None):
107 return ('','')
108 else:
109 out=''
110 if DISPLAY != None:
111 print "Accessing kwallet"
112 cmd='sudo -u "#'+str(uid)+'" '+kwallet_bin+' -a "'+appid+'" get -f "'+appid+'" -e "'+key+'"'
113 p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
114 ret=p.wait()
115 out,err=p.communicate()
116 out=out.strip()
117 if ret != 0 or self.count > 2 or (out=="" or out==":"): # No entry in wallet or wrong credentials or empty credentials
118 cmd='sudo -u "#'+str(uid)+'" '+kwallet_bin+' -a "'+appid+'" ask -f "'+appid+'" -e "'+key+'" -t "Enter credentials for '+description.replace('&','&amp;')+' at '+realm+'"'
119 p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
120 ret=p.wait()
121 out,err=p.communicate()
122 out=out.strip()
123 if ret==10:
124 return (None,None) # Don't ask again
125 elif ret != 0:
126 return ("\n","\n") # Force to ask again
127 elif out=="" or out==":":
128 return ("\n","\n") # Force to ask again. Treats empty credentials as error
129 user,password=out.split(':')
130 pwcache.set(key, user, password)
131 credentials=pwcache.get(key)
132 return (user, password)
133
134
135def get_gconf_proxy_servers(url,uid=None):
136 """Get proxy server from (system) gconf settings."""
137 print "Not yet Implemented!"
138 return {}
139
140
141def get_kde_proxy_servers(url,uid=None):
142 """Get proxy server from kde settings"""
143 proxies={}
144 kioslave=config_parser.ConfigParser(allow_no_value=True)
145 if uid is not None:
146 home=pwd.getpwuid(int(uid)).pw_dir
147 #print "HOME="+home
148 config_files=['/etc/kde4/kioslaverc',home+'/.kde/share/config/kioslaverc']
149 else:
150 config_files=['/etc/kde4/kioslaverc']
151
152 for config_file in config_files:
153 try:
154 fh=open(config_file)
155 line=fh.readline() # discard first lines until line contains "["
156 while not '[' in line:
157 line=fh.readline()
158 if line=='':
159 break
160 fh.seek(-1 * len(line), 1) # rewind file pointer
161 kioslave.readfp(fh)
162 except:
163 pass
164
165 if not kioslave.has_section('Proxy Settings'):
166 return proxies
167
168 if (kioslave.get('Proxy Settings','ProxyType') == '0'): # No Proxy
169 proxies={}
170
171 if (kioslave.get('Proxy Settings','ProxyType') == '1'): # Use manually specified proxy configuration
172 proxies['http']=kioslave.get('Proxy Settings','httpProxy').replace(' ',':')
173 proxies['ftp']=kioslave.get('Proxy Settings','ftpProxy').replace(' ',':')
174 proxies['socks']=kioslave.get('Proxy Settings','socksProxy').replace(' ',':')
175 proxies['https']=kioslave.get('Proxy Settings','httpsProxy').replace(' ',':')
176 proxies['no']=kioslave.get('Proxy Settings','NoProxyFor') # does this work?
177
178 if (kioslave.get('Proxy Settings','ProxyType') == '2'): # Use proxy auto configuration URL
179 pacurl=kioslave.get('Proxy Settings','Proxy Config Script')
180 if pacurl is None:
181 return {}
182 tmpfn=tempfile.mkstemp(prefix="proxy_",suffix=".pac")[1]
183 urlh=urllib.urlopen(pacurl,proxies={}) # Force direct download
184 tmph=open(tmpfn,"w")
185 for line in urlh:
186 tmph.write(line)
187 tmph.close()
188 proxy_string=pacparser.just_find_proxy(tmpfn, url)
189 os.remove(tmpfn)
190 proxylist = proxy_string.split(";")
191 proxies = None
192 while proxylist:
193 proxy = proxylist.pop(0).strip()
194 if 'DIRECT' in proxy:
195 proxies = {}
196 break
197 if proxy[0:5].upper() == 'PROXY':
198 proxy = proxy[6:].strip()
199 proxies = {'http': 'http://%s' % proxy}
200
201 if (kioslave.get('Proxy Settings','ProxyType') == '3'): # Detect proxy configuration automatically
202 # 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
203 pacurl=None
204 tmpfn=None
205 fqdn=socket.getfqdn()
206 domparts=fqdn.split('.')
207 proxylist=None
208 while len(domparts) > 2:
209 domparts.remove(domparts[0])
210 pacurl="http://wpad."+string.join(domparts,".")+"/wpad.dat"
211 tmpfn=tempfile.mkstemp(prefix="proxy_",suffix=".pac")[1]
212 try:
213 urlh=urllib.urlopen(pacurl,proxies={}) # Force direct download
214 except:
215 continue
216 tmph=open(tmpfn,"w")
217 if urlh.info().gettype() == 'application/x-ns-proxy-autoconfig':
218 for line in urlh:
219 tmph.write(line)
220 tmph.close()
221 proxy_string=pacparser.just_find_proxy(tmpfn, url)
222 proxylist = proxy_string.split(";")
223 os.remove(tmpfn)
224 if proxylist==None:
225 print "No WPAD configuration found. Using direct access"
226 proxies = {}
227 while proxylist:
228 proxy = proxylist.pop(0).strip()
229 if 'DIRECT' in proxy:
230 proxies = {}
231 break
232 if proxy[0:5].upper() == 'PROXY':
233 proxy = proxy[6:].strip()
234 proxies = {'http': 'http://%s' % proxy}
235
236
237 if (kioslave.get('Proxy Settings','ProxyType') == '4'): # Use system proxy configuration
238 for varname in kioslave.get('Proxy Settings','httpProxy').split(','):
239 try:
240 proxies['http']=os.environ[varname]
241 except:
242 pass
243 if 'http' in proxies.keys():
244 break
245 for varname in kioslave.get('Proxy Settings','ftpProxy').split(','):
246 try:
247 proxies['ftp']=os.environ[varname]
248 except:
249 pass
250 if 'ftp' in proxies.keys():
251 break
252 for varname in kioslave.get('Proxy Settings','httpsProxy').split(','):
253 try:
254 proxies['https']=os.environ[varname]
255 except:
256 pass
257 if 'https' in proxies.keys():
258 break
259 for varname in kioslave.get('Proxy Settings','socksProxy').split(','):
260 try:
261 proxies['socks']=os.environ[varname]
262 except:
263 pass
264 if 'socks' in proxies.keys():
265 break
266 for varname in kioslave.get('Proxy Settings','NoProxyFor').split(','): # does this work?
267 try:
268 proxies['no']=os.environ[varname]
269 except:
270 pass
271 if 'no' in proxies.keys():
272 break
273 return proxies
274
275
276def get_env_proxy_servers():
277 """Get proxy server from environment settings"""
278 # Get our proxy settings from the environment
279 proxies = {}
280 try:
281 for proto in ('http','https','ftp','no'):
282 try:
283 proxies[proto] = os.environ[proto+"_proxy"]
284 except KeyError:
285 pass
286 except Exception:
287 pass
288 return proxies
289
290def get_proxy_servers(url):
291 """Get proxy settings dependent on environment and call
292
293 This script could be called through different ways.
294 It is not possible to fetch proxy setting e.g. from kde
295 settings if this script was called from a cronjob
296 """
297
298 UID=os.getuid()
299 PKEXEC_UID=os.getenv('PKEXEC_UID',None)
300 SUDO_UID=os.getenv('SUDO_UID',None)
301 proxies={}
302
303 if (PKEXEC_UID != None) and (PKEXEC_UID != 0):
304 proxies=get_kde_proxy_servers(url,PKEXEC_UID)
305 elif (SUDO_UID != None) and (SUDO_UID != 0):
306 proxies=get_kde_proxy_servers(url,SUDO_UID)
307 elif (UID != None) and (UID != 0):
308 proxies=get_kde_proxy_servers(url,UID)
309 else:
310 proxies=get_kde_proxy_servers(url)
311
312 if not proxies:
313 proxies=get_gconf_proxy_servers(url)
314
315 if not proxies:
316 proxies=get_env_proxy_servers()
317
318 return proxies
319
320
42def create_or_update_stampfile(file):321def create_or_update_stampfile(file):
43 """Create or update the indicated stampfile, and remove failure flags"""322 """Create or update the indicated stampfile, and remove failure flags"""
44323
@@ -145,8 +424,9 @@
145 sys.exit(1)424 sys.exit(1)
146425
147 packages = [os.path.basename(failure) for failure in failures]426 packages = [os.path.basename(failure) for failure in failures]
427
148 output_file.write(428 output_file.write(
149 string.Template(input).substitute(429 string.Template(input).safe_substitute(
150 {'packages' : ", ".join(packages)}))430 {'packages' : ", ".join(packages)}))
151 output_file.close()431 output_file.close()
152432
@@ -160,6 +440,17 @@
160 res.append(relfile)440 res.append(relfile)
161 return res441 return res
162442
443def mktmp4url(url):
444 import tempfile
445 garbage, path = urllib.splittype(url)
446 garbage, path = urllib.splithost(path or "")
447 path, garbage = urllib.splitquery(path or "")
448 path, garbage = urllib.splitattr(path or "")
449 suffix = os.path.splitext(path)[1]
450 (fd, filename) = tempfile.mkstemp(suffix)
451 return (fd, filename)
452
453
163def process_download_requests():454def process_download_requests():
164 """Process requests to download package data files455 """Process requests to download package data files
165456
@@ -182,7 +473,6 @@
182 proxies[proto] = os.environ[proto+"_proxy"]473 proxies[proto] = os.environ[proto+"_proxy"]
183 except KeyError:474 except KeyError:
184 pass475 pass
185
186 if proxies:476 if proxies:
187 urllib._urlopener = urllib.FancyURLopener(proxies)477 urllib._urlopener = urllib.FancyURLopener(proxies)
188 except Exception:478 except Exception:
@@ -214,6 +504,7 @@
214 record_failure(relfile)504 record_failure(relfile)
215 break505 break
216 command = [para['script']]506 command = [para['script']]
507 tmpfiles=[]
217508
218 if 'should-download' in para:509 if 'should-download' in para:
219 db = debconf.DebconfCommunicator('update-notifier')510 db = debconf.DebconfCommunicator('update-notifier')
@@ -231,7 +522,12 @@
231 try:522 try:
232 for i in range(len(files)):523 for i in range(len(files)):
233 print "%s: downloading %s" % (relfile, files[i])524 print "%s: downloading %s" % (relfile, files[i])
234 dest_file = urllib.urlretrieve(files[i])[0]525 proxies=get_proxy_servers(files[i]) # Get our proxy settings for each url
526 if proxies:
527 urllib._urlopener = kwalletFancyURLopener(proxies)
528 (fd,filename)=mktmp4url(files[i])
529 tmpfiles.append(filename)
530 dest_file = urllib.urlretrieve(files[i], filename)[0]
235 output = subprocess.check_output(["sha256sum", dest_file])531 output = subprocess.check_output(["sha256sum", dest_file])
236 output = output.split(' ')[0]532 output = output.split(' ')[0]
237 if output == sums[i]:533 if output == sums[i]:
@@ -241,7 +537,6 @@
241 break537 break
242 if relfile in failures + permanent_failures:538 if relfile in failures + permanent_failures:
243 break539 break
244
245 sys.stdout.flush()540 sys.stdout.flush()
246 result = subprocess.call(command)541 result = subprocess.call(command)
247 if result:542 if result:
@@ -252,7 +547,6 @@
252 break547 break
253 except Exception:548 except Exception:
254 traceback.print_exc(file=sys.stderr)549 traceback.print_exc(file=sys.stderr)
255
256 record_failure(relfile)550 record_failure(relfile)
257 # The 'script' is always the last stanza551 # The 'script' is always the last stanza
258 break552 break
@@ -266,7 +560,11 @@
266 traceback.print_exc(file=sys.stderr)560 traceback.print_exc(file=sys.stderr)
267 record_failure(relfile)561 record_failure(relfile)
268 break562 break
269563 for f in tmpfiles:
564 try:
565 os.remove(f)
566 except:
567 pass
270 previous_failures = existing_permanent_failures()568 previous_failures = existing_permanent_failures()
271569
272 # We only report about "permanent" failures when there are new ones,570 # We only report about "permanent" failures when there are new ones,
@@ -294,3 +592,17 @@
294592
295if __name__ == "__main__":593if __name__ == "__main__":
296 process_download_requests()594 process_download_requests()
595
596
597 # close wallet
598 uid=os.getenv('PKEXEC_UID',None)
599 if uid==None:
600 uid=os.getenv('SUDO_UID',None)
601 if uid==None:
602 uid=os.getuid()
603 if uid!=0:
604 cmd='sudo -u "#'+str(uid)+'" /usr/lib/update-notifier/kwalletdbuscli.py -a "'+PROGNAME+'" close'
605 p=subprocess.Popen(args=shlex.split(cmd),stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
606 p.wait()
607
608 print PROGNAME+" finished"
297609
=== modified file 'debian/changelog'
--- debian/changelog 2013-04-09 10:31:08 +0000
+++ debian/changelog 2013-04-11 13:43:22 +0000
@@ -218,10 +218,20 @@
218218
219update-notifier (0.119ubuntu10) quantal; urgency=low219update-notifier (0.119ubuntu10) quantal; urgency=low
220220
221 [ Steve Langasek ]
221 * Merge in changes from 0.119ubuntu8.1 which had been uploaded to222 * Merge in changes from 0.119ubuntu8.1 which had been uploaded to
222 precise-proposed.223 precise-proposed.
223224
224 -- Steve Langasek <steve.langasek@ubuntu.com> Tue, 15 May 2012 16:20:43 -0700225 [ Lorenz ]
226 * Fix Translation error and use safe_substitute instead of substitute on
227 template substitution. LP: #1152203
228 * added policykit rule to allow pkexec to use the GUI
229 * Enhanced proxy support for kde with kwallet support
230 * added partial autoconfiguration support (if configured in kde)
231 * added gui prompt for proxy password
232 * added passwordcache
233
234 -- Lorenz <lqb@gmx.de> Tue, 12 Mar 2013 18:44:45 +0100
225235
226update-notifier (0.119ubuntu9) quantal; urgency=low236update-notifier (0.119ubuntu9) quantal; urgency=low
227237
228238
=== modified file 'debian/control'
--- debian/control 2013-04-09 10:07:10 +0000
+++ debian/control 2013-04-11 13:43:22 +0000
@@ -47,7 +47,11 @@
47Depends: ${shlibs:Depends},47Depends: ${shlibs:Depends},
48 ${misc:Depends},48 ${misc:Depends},
49 python,49 python,
50 python-apt (>= 0.6.12), python-debian, debconf, patch50 python-apt (>= 0.6.12),
51 python-debian,
52 debconf,
53 patch,
54 python-pacparser
51Recommends: libpam-modules (>= 1.0.1-9ubuntu3)55Recommends: libpam-modules (>= 1.0.1-9ubuntu3)
52Suggests: policykit-156Suggests: policykit-1
53Description: Files shared between update-notifier and other packages57Description: Files shared between update-notifier and other packages
5458
=== modified file 'debian/update-notifier-common.install'
--- debian/update-notifier-common.install 2013-02-01 15:13:06 +0000
+++ debian/update-notifier-common.install 2013-04-11 13:43:22 +0000
@@ -12,3 +12,6 @@
12usr/lib/update-notifier/12usr/lib/update-notifier/
13usr/share/locale13usr/share/locale
14debian/update-manager-downloader-fix2.diff usr/share/update-notifier/upgrader-patches14debian/update-manager-downloader-fix2.diff usr/share/update-notifier/upgrader-patches
15data/org.freedesktop.policykit.pkexec.package-data-downloader.policy usr/share/polkit-1/actions/
16data/kwalletdbuscli.py usr/lib/update-notifier
17

Subscribers

People subscribed via source and target branches

to all changes: