Merge lp:~jtaylor/ubuntu/oneiric/gajim/multiple-CVE into lp:ubuntu/oneiric/gajim
- Oneiric (11.10)
- multiple-CVE
- Merge into oneiric
Proposed by
Julian Taylor
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merge reported by: | Julian Taylor | ||||||||
Merged at revision: | not available | ||||||||
Proposed branch: | lp:~jtaylor/ubuntu/oneiric/gajim/multiple-CVE | ||||||||
Merge into: | lp:ubuntu/oneiric/gajim | ||||||||
Diff against target: |
373 lines (+343/-0) 5 files modified
debian/changelog (+19/-0) debian/patches/CVE-2012-2085.patch (+47/-0) debian/patches/CVE-2012-2086.patch (+167/-0) debian/patches/CVE-2012-2093.patch (+107/-0) debian/patches/series (+3/-0) |
||||||||
To merge this branch: | bzr merge lp:~jtaylor/ubuntu/oneiric/gajim/multiple-CVE | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu branches | Pending | ||
Review via email: mp+104266@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 55. By Julian Taylor
-
fix missing wait on process end
- 56. By Julian Taylor
-
change version to ubuntu2
Revision history for this message
Marc Deslauriers (mdeslaur) wrote : | # |
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'debian/changelog' | |||
2 | --- debian/changelog 2011-05-19 12:14:37 +0000 | |||
3 | +++ debian/changelog 2012-05-10 20:00:24 +0000 | |||
4 | @@ -1,3 +1,22 @@ | |||
5 | 1 | gajim (0.14.1-1ubuntu2) oneiric-security; urgency=low | ||
6 | 2 | |||
7 | 3 | * SECURITY UPDATE: assisted code execution (LP: #992618) | ||
8 | 4 | - debian/patches/CVE-2012-2085.dpatch: fix subprocess call to prevent | ||
9 | 5 | shell escape from via crafted messages | ||
10 | 6 | https://trac.gajim.org/changeset/bc296e96ac10 | ||
11 | 7 | - CVE-2012-2085 | ||
12 | 8 | * SECURITY UPDATE: sql injection in logging code (LP: #992618) | ||
13 | 9 | - debian/patches/CVE-2012-2086.dpatch: use a prepated statement | ||
14 | 10 | https://trac.gajim.org/changeset/bfd5f94489d8 | ||
15 | 11 | - CVE-2012-2086 | ||
16 | 12 | * SECURITY UPDATE: insecure tmpfile creation (LP: #992613) | ||
17 | 13 | - debian/patches/CVE-2012-2093.dpatch: use safe tmpfile functions | ||
18 | 14 | when convering LaTeX IM messages to png images | ||
19 | 15 | Thanks to Nico Golde | ||
20 | 16 | - CVE-2012-2093 | ||
21 | 17 | |||
22 | 18 | -- Julian Taylor <jtaylor@ubuntu.com> Tue, 01 May 2012 15:21:25 +0200 | ||
23 | 19 | |||
24 | 1 | gajim (0.14.1-1ubuntu1) oneiric; urgency=low | 20 | gajim (0.14.1-1ubuntu1) oneiric; urgency=low |
25 | 2 | 21 | ||
26 | 3 | * Merge from debian unstable(LP: #630876). Remaining changes: | 22 | * Merge from debian unstable(LP: #630876). Remaining changes: |
27 | 4 | 23 | ||
28 | === added file 'debian/patches/CVE-2012-2085.patch' | |||
29 | --- debian/patches/CVE-2012-2085.patch 1970-01-01 00:00:00 +0000 | |||
30 | +++ debian/patches/CVE-2012-2085.patch 2012-05-10 20:00:24 +0000 | |||
31 | @@ -0,0 +1,47 @@ | |||
32 | 1 | Description: prevent assisted code execution CVE-2012-2085 | ||
33 | 2 | Origin: https://trac.gajim.org/changeset/bc296e96ac10 | ||
34 | 3 | Bug: https://trac.gajim.org/ticket/7031 | ||
35 | 4 | Author: Yann Leboulange | ||
36 | 5 | |||
37 | 6 | --- a/src/common/helpers.py | ||
38 | 7 | +++ b/src/common/helpers.py | ||
39 | 8 | @@ -40,6 +40,7 @@ | ||
40 | 9 | import base64 | ||
41 | 10 | import hashlib | ||
42 | 11 | import caps_cache | ||
43 | 12 | +import shlex | ||
44 | 13 | |||
45 | 14 | from encodings.punycode import punycode_encode | ||
46 | 15 | from string import Template | ||
47 | 16 | @@ -372,8 +373,18 @@ | ||
48 | 17 | pass | ||
49 | 18 | return False | ||
50 | 19 | |||
51 | 20 | -def exec_command(command): | ||
52 | 21 | - subprocess.Popen('%s &' % command, shell=True).wait() | ||
53 | 22 | +def exec_command(command, use_shell=False): | ||
54 | 23 | + """ | ||
55 | 24 | + execute a command. if use_shell is True, we run the command as is it was | ||
56 | 25 | + typed in a console. So it may be dangerous if you are not sure about what | ||
57 | 26 | + is executed. | ||
58 | 27 | + """ | ||
59 | 28 | + if use_shell: | ||
60 | 29 | + subprocess.Popen('%s &' % command, shell=True).wait() | ||
61 | 30 | + else: | ||
62 | 31 | + args = shlex.split(command.encode('utf-8')) | ||
63 | 32 | + p = subprocess.Popen(args) | ||
64 | 33 | + gajim.thread_interface(p.wait) | ||
65 | 34 | |||
66 | 35 | def build_command(executable, parameter): | ||
67 | 36 | # we add to the parameter (can hold path with spaces) | ||
68 | 37 | --- a/src/notify.py | ||
69 | 38 | +++ b/src/notify.py | ||
70 | 39 | @@ -311,7 +311,7 @@ | ||
71 | 40 | command = gajim.config.get_per('notifications', str(advanced_notif_num), | ||
72 | 41 | 'command') | ||
73 | 42 | try: | ||
74 | 43 | - helpers.exec_command(command) | ||
75 | 44 | + helpers.exec_command(command, use_shell=True) | ||
76 | 45 | except Exception: | ||
77 | 46 | pass | ||
78 | 47 | |||
79 | 0 | 48 | ||
80 | === added file 'debian/patches/CVE-2012-2086.patch' | |||
81 | --- debian/patches/CVE-2012-2086.patch 1970-01-01 00:00:00 +0000 | |||
82 | +++ debian/patches/CVE-2012-2086.patch 2012-05-10 20:00:24 +0000 | |||
83 | @@ -0,0 +1,167 @@ | |||
84 | 1 | Description: prevent sql injections CVE-2012-2086 | ||
85 | 2 | Origin: https://trac.gajim.org/changeset/988e38ce0e0c | ||
86 | 3 | Bug: https://trac.gajim.org/ticket/7031 | ||
87 | 4 | Author: Yann Leboulanger | ||
88 | 5 | |||
89 | 6 | --- a/src/common/logger.py | ||
90 | 7 | +++ b/src/common/logger.py | ||
91 | 8 | @@ -563,7 +563,7 @@ | ||
92 | 9 | except exceptions.PysqliteOperationalError, e: | ||
93 | 10 | # Error trying to create a new jid_id. This means there is no log | ||
94 | 11 | return [] | ||
95 | 12 | - where_sql = self._build_contact_where(account, jid) | ||
96 | 13 | + where_sql, jid_tuple = self._build_contact_where(account, jid) | ||
97 | 14 | |||
98 | 15 | now = int(float(time.time())) | ||
99 | 16 | timed_out = now - (timeout * 60) # before that they are too old | ||
100 | 17 | @@ -571,14 +571,13 @@ | ||
101 | 18 | # 3 - 8 (we avoid the last 2 lines but we still return 5 asked) | ||
102 | 19 | try: | ||
103 | 20 | self.cur.execute(''' | ||
104 | 21 | - SELECT time, kind, message FROM logs | ||
105 | 22 | - WHERE (%s) AND kind IN (%d, %d, %d, %d, %d) AND time > %d | ||
106 | 23 | - ORDER BY time DESC LIMIT %d OFFSET %d | ||
107 | 24 | - ''' % (where_sql, constants.KIND_SINGLE_MSG_RECV, | ||
108 | 25 | - constants.KIND_CHAT_MSG_RECV, constants.KIND_SINGLE_MSG_SENT, | ||
109 | 26 | - constants.KIND_CHAT_MSG_SENT, constants.KIND_ERROR, | ||
110 | 27 | - timed_out, restore_how_many_rows, pending_how_many) | ||
111 | 28 | - ) | ||
112 | 29 | + SELECT time, kind, message FROM logs | ||
113 | 30 | + WHERE (%s) AND kind IN (%d, %d, %d, %d, %d) AND time > %d | ||
114 | 31 | + ORDER BY time DESC LIMIT %d OFFSET %d | ||
115 | 32 | + ''' % (where_sql, constants.KIND_SINGLE_MSG_RECV, | ||
116 | 33 | + constants.KIND_CHAT_MSG_RECV, constants.KIND_SINGLE_MSG_SENT, | ||
117 | 34 | + constants.KIND_CHAT_MSG_SENT, constants.KIND_ERROR, timed_out, | ||
118 | 35 | + restore_how_many_rows, pending_how_many), jid_tuple) | ||
119 | 36 | |||
120 | 37 | results = self.cur.fetchall() | ||
121 | 38 | except sqlite.DatabaseError: | ||
122 | 39 | @@ -608,18 +607,18 @@ | ||
123 | 40 | except exceptions.PysqliteOperationalError, e: | ||
124 | 41 | # Error trying to create a new jid_id. This means there is no log | ||
125 | 42 | return [] | ||
126 | 43 | - where_sql = self._build_contact_where(account, jid) | ||
127 | 44 | + where_sql, jid_tuple = self._build_contact_where(account, jid) | ||
128 | 45 | |||
129 | 46 | start_of_day = self.get_unix_time_from_date(year, month, day) | ||
130 | 47 | seconds_in_a_day = 86400 # 60 * 60 * 24 | ||
131 | 48 | last_second_of_day = start_of_day + seconds_in_a_day - 1 | ||
132 | 49 | |||
133 | 50 | self.cur.execute(''' | ||
134 | 51 | - SELECT contact_name, time, kind, show, message, subject FROM logs | ||
135 | 52 | - WHERE (%s) | ||
136 | 53 | - AND time BETWEEN %d AND %d | ||
137 | 54 | - ORDER BY time | ||
138 | 55 | - ''' % (where_sql, start_of_day, last_second_of_day)) | ||
139 | 56 | + SELECT contact_name, time, kind, show, message, subject FROM logs | ||
140 | 57 | + WHERE (%s) | ||
141 | 58 | + AND time BETWEEN %d AND %d | ||
142 | 59 | + ORDER BY time | ||
143 | 60 | + ''' % (where_sql, start_of_day, last_second_of_day), jid_tuple) | ||
144 | 61 | |||
145 | 62 | results = self.cur.fetchall() | ||
146 | 63 | return results | ||
147 | 64 | @@ -645,13 +644,13 @@ | ||
148 | 65 | return results | ||
149 | 66 | |||
150 | 67 | else: # user just typed something, we search in message column | ||
151 | 68 | - where_sql = self._build_contact_where(account, jid) | ||
152 | 69 | + where_sql, jid_tuple = self._build_contact_where(account, jid) | ||
153 | 70 | like_sql = '%' + query.replace("'", "''") + '%' | ||
154 | 71 | self.cur.execute(''' | ||
155 | 72 | - SELECT contact_name, time, kind, show, message, subject FROM logs | ||
156 | 73 | - WHERE (%s) AND message LIKE '%s' | ||
157 | 74 | - ORDER BY time | ||
158 | 75 | - ''' % (where_sql, like_sql)) | ||
159 | 76 | + SELECT contact_name, time, kind, show, message, subject FROM logs | ||
160 | 77 | + WHERE (%s) AND message LIKE '%s' | ||
161 | 78 | + ORDER BY time | ||
162 | 79 | + ''' % (where_sql, like_sql), jid_tuple) | ||
163 | 80 | |||
164 | 81 | results = self.cur.fetchall() | ||
165 | 82 | return results | ||
166 | 83 | @@ -666,7 +665,7 @@ | ||
167 | 84 | # Error trying to create a new jid_id. This means there is no log | ||
168 | 85 | return [] | ||
169 | 86 | days_with_logs = [] | ||
170 | 87 | - where_sql = self._build_contact_where(account, jid) | ||
171 | 88 | + where_sql, jid_tuple = self._build_contact_where(account, jid) | ||
172 | 89 | |||
173 | 90 | # First select all date of month whith logs we want | ||
174 | 91 | start_of_month = self.get_unix_time_from_date(year, month, 1) | ||
175 | 92 | @@ -678,13 +677,13 @@ | ||
176 | 93 | # and take only one of the same values (distinct) | ||
177 | 94 | # Now we have timestamps of time 0:00 of every day with logs | ||
178 | 95 | self.cur.execute(''' | ||
179 | 96 | - SELECT DISTINCT time/(86400)*86400 FROM logs | ||
180 | 97 | - WHERE (%s) | ||
181 | 98 | - AND time BETWEEN %d AND %d | ||
182 | 99 | - AND kind NOT IN (%d, %d) | ||
183 | 100 | - ORDER BY time | ||
184 | 101 | - ''' % (where_sql, start_of_month, last_second_of_month, | ||
185 | 102 | - constants.KIND_STATUS, constants.KIND_GCSTATUS)) | ||
186 | 103 | + SELECT DISTINCT time/(86400)*86400 FROM logs | ||
187 | 104 | + WHERE (%s) | ||
188 | 105 | + AND time BETWEEN %d AND %d | ||
189 | 106 | + AND kind NOT IN (%d, %d) | ||
190 | 107 | + ORDER BY time | ||
191 | 108 | + ''' % (where_sql, start_of_month, last_second_of_month, | ||
192 | 109 | + constants.KIND_STATUS, constants.KIND_GCSTATUS), jid_tuple) | ||
193 | 110 | result = self.cur.fetchall() | ||
194 | 111 | |||
195 | 112 | # convert timestamps to day of month | ||
196 | 113 | @@ -700,19 +699,21 @@ | ||
197 | 114 | """ | ||
198 | 115 | where_sql = '' | ||
199 | 116 | if not is_room: | ||
200 | 117 | - where_sql = self._build_contact_where(account, jid) | ||
201 | 118 | + where_sql, jid_tuple = self._build_contact_where(account, jid) | ||
202 | 119 | else: | ||
203 | 120 | try: | ||
204 | 121 | jid_id = self.get_jid_id(jid, 'ROOM') | ||
205 | 122 | except exceptions.PysqliteOperationalError, e: | ||
206 | 123 | # Error trying to create a new jid_id. This means there is no log | ||
207 | 124 | return None | ||
208 | 125 | - where_sql = 'jid_id = %s' % jid_id | ||
209 | 126 | + where_sql = 'jid_id = ?' | ||
210 | 127 | + jid_tuple = (jid_id,) | ||
211 | 128 | self.cur.execute(''' | ||
212 | 129 | - SELECT MAX(time) FROM logs | ||
213 | 130 | - WHERE (%s) | ||
214 | 131 | - AND kind NOT IN (%d, %d) | ||
215 | 132 | - ''' % (where_sql, constants.KIND_STATUS, constants.KIND_GCSTATUS)) | ||
216 | 133 | + SELECT MAX(time) FROM logs | ||
217 | 134 | + WHERE (%s) | ||
218 | 135 | + AND kind NOT IN (%d, %d) | ||
219 | 136 | + ''' % (where_sql, constants.KIND_STATUS, constants.KIND_GCSTATUS), | ||
220 | 137 | + jid_tuple) | ||
221 | 138 | |||
222 | 139 | results = self.cur.fetchone() | ||
223 | 140 | if results is not None: | ||
224 | 141 | @@ -760,6 +761,7 @@ | ||
225 | 142 | Build the where clause for a jid, including metacontacts jid(s) if any | ||
226 | 143 | """ | ||
227 | 144 | where_sql = '' | ||
228 | 145 | + jid_tuple = () | ||
229 | 146 | # will return empty list if jid is not associated with | ||
230 | 147 | # any metacontacts | ||
231 | 148 | family = gajim.contacts.get_metacontacts_family(account, jid) | ||
232 | 149 | @@ -769,13 +771,15 @@ | ||
233 | 150 | jid_id = self.get_jid_id(user['jid']) | ||
234 | 151 | except exceptions.PysqliteOperationalError, e: | ||
235 | 152 | continue | ||
236 | 153 | - where_sql += 'jid_id = %s' % jid_id | ||
237 | 154 | + where_sql += 'jid_id = ?' | ||
238 | 155 | + jid_tuple += (jid_id,) | ||
239 | 156 | if user != family[-1]: | ||
240 | 157 | where_sql += ' OR ' | ||
241 | 158 | else: # if jid was not associated with metacontacts | ||
242 | 159 | jid_id = self.get_jid_id(jid) | ||
243 | 160 | - where_sql = 'jid_id = %s' % jid_id | ||
244 | 161 | - return where_sql | ||
245 | 162 | + where_sql = 'jid_id = ?' | ||
246 | 163 | + jid_tuple += (jid_id,) | ||
247 | 164 | + return where_sql, jid_tuple | ||
248 | 165 | |||
249 | 166 | def save_transport_type(self, jid, type_): | ||
250 | 167 | """ | ||
251 | 0 | 168 | ||
252 | === added file 'debian/patches/CVE-2012-2093.patch' | |||
253 | --- debian/patches/CVE-2012-2093.patch 1970-01-01 00:00:00 +0000 | |||
254 | +++ debian/patches/CVE-2012-2093.patch 2012-05-10 20:00:24 +0000 | |||
255 | @@ -0,0 +1,107 @@ | |||
256 | 1 | Description: fix insecure tmpfile creation CVE-2012-2093 | ||
257 | 2 | Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668710 | ||
258 | 3 | Bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668710 | ||
259 | 4 | Author: Nico Golde <nion@debian.org>, Julian Taylor <jtaylor@ubuntu.com> | ||
260 | 5 | |||
261 | 6 | --- a/src/common/latex.py | ||
262 | 7 | +++ b/src/common/latex.py | ||
263 | 8 | @@ -29,7 +29,7 @@ | ||
264 | 9 | |||
265 | 10 | import os | ||
266 | 11 | import random | ||
267 | 12 | -from tempfile import gettempdir | ||
268 | 13 | +from tempfile import gettempdir,mkstemp,mkdtemp | ||
269 | 14 | from subprocess import Popen, PIPE | ||
270 | 15 | |||
271 | 16 | import logging | ||
272 | 17 | @@ -57,10 +57,10 @@ | ||
273 | 18 | return True | ||
274 | 19 | return False | ||
275 | 20 | |||
276 | 21 | -def get_tmpfile_name(): | ||
277 | 22 | +def get_tmpfile_name(tmpdir): | ||
278 | 23 | random.seed() | ||
279 | 24 | int_ = random.randint(0, 100) | ||
280 | 25 | - return os.path.join(gettempdir(), 'gajimtex_' + int_.__str__()) | ||
281 | 26 | + return os.path.join(tmpdir, 'gajimtex_' + int_.__str__()) | ||
282 | 27 | |||
283 | 28 | def write_latex(filename, str_): | ||
284 | 29 | texstr = '\\documentclass[12pt]{article}\\usepackage[dvips]{graphicx}' | ||
285 | 30 | @@ -78,12 +78,12 @@ | ||
286 | 31 | # a wrapper for Popen so that no window gets opened on Windows | ||
287 | 32 | # (i think this is the reason we're using Popen rather than just system()) | ||
288 | 33 | # stdout goes to a pipe so that it can be read | ||
289 | 34 | -def popen_nt_friendly(command): | ||
290 | 35 | +def popen_nt_friendly(command, directory): | ||
291 | 36 | if os.name == 'nt': | ||
292 | 37 | # CREATE_NO_WINDOW | ||
293 | 38 | - return Popen(command, creationflags=0x08000000, cwd=gettempdir(), stdout=PIPE) | ||
294 | 39 | + return Popen(command, creationflags=0x08000000, cwd=directory, stdout=PIPE) | ||
295 | 40 | else: | ||
296 | 41 | - return Popen(command, cwd=gettempdir(), stdout=PIPE) | ||
297 | 42 | + return Popen(command, cwd=directory, stdout=PIPE) | ||
298 | 43 | |||
299 | 44 | def check_for_latex_support(): | ||
300 | 45 | """ | ||
301 | 46 | @@ -99,9 +99,9 @@ | ||
302 | 47 | except LatexError: | ||
303 | 48 | return False | ||
304 | 49 | |||
305 | 50 | -def try_run(argv): | ||
306 | 51 | +def try_run(argv, directory): | ||
307 | 52 | try: | ||
308 | 53 | - p = popen_nt_friendly(argv) | ||
309 | 54 | + p = popen_nt_friendly(argv, directory) | ||
310 | 55 | out = p.communicate()[0] | ||
311 | 56 | log.info(out) | ||
312 | 57 | return p.wait() | ||
313 | 58 | @@ -126,21 +126,28 @@ | ||
314 | 59 | # we triggered the blacklist, immediately return None | ||
315 | 60 | return None | ||
316 | 61 | |||
317 | 62 | - tmpfile = get_tmpfile_name() | ||
318 | 63 | + tmpdir = "" | ||
319 | 64 | + tmppng = "" | ||
320 | 65 | + try: | ||
321 | 66 | + tmpdir = mkdtemp(prefix="gajim") | ||
322 | 67 | + tmppng = mkstemp(suffix=".png")[1] | ||
323 | 68 | + except Exception: | ||
324 | 69 | + raise LatexError("could not securely create one or more temporary files for LaTeX conversion") | ||
325 | 70 | |||
326 | 71 | + tmpfile = get_tmpfile_name(tmpdir) | ||
327 | 72 | # build latex string | ||
328 | 73 | write_latex(os.path.join(tmpfile + '.tex'), str_) | ||
329 | 74 | |||
330 | 75 | # convert TeX to dvi | ||
331 | 76 | exitcode = try_run(['latex', '--interaction=nonstopmode', | ||
332 | 77 | - tmpfile + '.tex']) | ||
333 | 78 | + tmpfile + '.tex'], tmpdir) | ||
334 | 79 | |||
335 | 80 | if exitcode == 0: | ||
336 | 81 | # convert dvi to png | ||
337 | 82 | latex_png_dpi = gajim.config.get('latex_png_dpi') | ||
338 | 83 | exitcode = try_run(['dvipng', '-bg', bg_str, '-fg', fg_str, '-T', | ||
339 | 84 | 'tight', '-D', latex_png_dpi, tmpfile + '.dvi', '-o', | ||
340 | 85 | - tmpfile + '.png']) | ||
341 | 86 | + tmpfile + '.png'], tmpdir) | ||
342 | 87 | |||
343 | 88 | # remove temp files created by us and TeX | ||
344 | 89 | extensions = ['.tex', '.log', '.aux', '.dvi'] | ||
345 | 90 | @@ -150,10 +157,16 @@ | ||
346 | 91 | except Exception: | ||
347 | 92 | pass | ||
348 | 93 | |||
349 | 94 | + if exitcode == 0: | ||
350 | 95 | + os.rename(tmpfile + '.png', tmppng) | ||
351 | 96 | + else: | ||
352 | 97 | + os.remove(tmppng) | ||
353 | 98 | + | ||
354 | 99 | + os.rmdir(tmpdir) | ||
355 | 100 | if isinstance(exitcode, (unicode, str)): | ||
356 | 101 | raise LatexError(exitcode) | ||
357 | 102 | |||
358 | 103 | if exitcode == 0: | ||
359 | 104 | - result = tmpfile + '.png' | ||
360 | 105 | + result = tmppng | ||
361 | 106 | |||
362 | 107 | return result | ||
363 | 0 | 108 | ||
364 | === modified file 'debian/patches/series' | |||
365 | --- debian/patches/series 2011-05-19 12:14:37 +0000 | |||
366 | +++ debian/patches/series 2012-05-10 20:00:24 +0000 | |||
367 | @@ -1,3 +1,6 @@ | |||
368 | 1 | 00_debian-copying.diff | 1 | 00_debian-copying.diff |
369 | 2 | 01_configure-ac.diff | 2 | 01_configure-ac.diff |
370 | 3 | debian-changes-0.14.1-1ubuntu1 | 3 | debian-changes-0.14.1-1ubuntu1 |
371 | 4 | CVE-2012-2085.patch | ||
372 | 5 | CVE-2012-2086.patch | ||
373 | 6 | CVE-2012-2093.patch |
Julian, could you please update the status of this merge request so it gets removed from the sponsors list? Thanks.