Merge lp:~noskcaj/ubuntu/vivid/gnome-keyring/3.15.90 into lp:ubuntu/vivid/gnome-keyring

Proposed by Jackson Doak
Status: Rejected
Rejected by: Iain Lane
Proposed branch: lp:~noskcaj/ubuntu/vivid/gnome-keyring/3.15.90
Merge into: lp:ubuntu/vivid/gnome-keyring
Diff against target: 5857 lines (+2330/-1579)
53 files modified
.pc/bgz_exit_on_bus_close.patch/daemon/dbus/gkd-dbus.c (+5/-2)
ChangeLog (+914/-0)
Makefile.in (+4/-48)
NEWS (+6/-0)
configure (+10/-10)
configure.ac (+1/-1)
daemon/dbus/gkd-dbus.c (+5/-2)
daemon/dbus/gkd-secret-service.c (+3/-0)
daemon/dbus/test-dbus-items.c (+3/-1)
daemon/gpg-agent/Makefile.am (+0/-15)
daemon/gpg-agent/gkd-gpg-agent-ops.c (+21/-248)
daemon/gpg-agent/gkd-gpg-agent-standalone.c (+0/-123)
daemon/gpg-agent/gkd-gpg-agent.c (+1/-0)
daemon/login/Makefile.am (+1/-0)
daemon/login/gkd-login.c (+300/-0)
daemon/login/gkd-login.h (+20/-0)
daemon/ssh-agent/gkd-ssh-agent-ops.c (+13/-8)
daemon/test-startup.c (+2/-2)
debian/changelog (+6/-0)
egg/egg-asn1x.c (+8/-7)
egg/egg-cleanup.c (+1/-0)
egg/egg-hkdf.c (+1/-0)
egg/test-asn1.c (+1/-0)
egg/test-dn.c (+1/-0)
egg/test-padding.c (+1/-0)
egg/test-spawn.c (+6/-0)
pam/test-pam.c (+1/-0)
pkcs11/gkm/gkm-attributes.c (+1/-0)
pkcs11/gkm/gkm-credential.c (+4/-0)
pkcs11/gkm/gkm-data-asn1.c (+1/-0)
pkcs11/gkm/gkm-mock.c (+29/-3)
pkcs11/gkm/test-data-asn1.c (+3/-0)
pkcs11/gkm/test-data-der.c (+13/-0)
pkcs11/gkm/test-secret.c (+3/-0)
pkcs11/gkm/test-sexp.c (+2/-0)
pkcs11/gnome2-store/gkm-gnome2-file.c (+7/-13)
pkcs11/gnome2-store/gkm-gnome2-storage.c (+4/-0)
pkcs11/gnome2-store/test-import.c (+1/-0)
pkcs11/secret-store/gkm-secret-item.c (+3/-0)
pkcs11/secret-store/gkm-secret-search.c (+1/-0)
pkcs11/secret-store/gkm-secret-textual.c (+1/-0)
pkcs11/secret-store/test-secret-binary.c (+1/-0)
pkcs11/secret-store/test-secret-textual.c (+1/-0)
pkcs11/wrap-layer/gkm-wrap-prompt.c (+51/-21)
pkcs11/wrap-layer/mock-secret-store.c (+1/-1)
pkcs11/xdg-store/gkm-xdg-assertion.c (+2/-0)
pkcs11/xdg-store/gkm-xdg-trust.c (+6/-2)
pkcs11/xdg-store/test-xdg-module.c (+1/-0)
pkcs11/xdg-store/test-xdg-trust.c (+1/-0)
po/LINGUAS (+1/-0)
po/kk.po (+572/-0)
po/tr.po (+127/-128)
po/vi.po (+158/-944)
To merge this branch: bzr merge lp:~noskcaj/ubuntu/vivid/gnome-keyring/3.15.90
Reviewer Review Type Date Requested Status
Ubuntu branches Pending
Review via email: mp+251325@code.launchpad.net

Description of the change

New upstream bugfix release

 * Fix leaks [#738508]
 * Refactoring
 * Build fixes [#740190]
 * Updated translations

To post a comment you must log in.
Revision history for this message
Iain Lane (laney) wrote :

Thanks.

Could you propose merges against the Vcs-Bzr in future when working on desktop packages?

I'll copy your changes manually this time. (and take the revert for bgo #744280)

Revision history for this message
Iain Lane (laney) wrote :

Actually it looks in this case like the branch got out of date.

I'm going to bring it in sync with reality.

Unmerged revisions

173. By Jackson Doak

New upstream bugfix release.

172. By Dimitri John Ledkov

Fix the gpg/ssh agent check syntax. Thanks to Sergey Romanov (LP:
#1400662)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.pc/bgz_exit_on_bus_close.patch/daemon/dbus/gkd-dbus.c'
2--- .pc/bgz_exit_on_bus_close.patch/daemon/dbus/gkd-dbus.c 2014-12-06 18:47:09 +0000
3+++ .pc/bgz_exit_on_bus_close.patch/daemon/dbus/gkd-dbus.c 2015-02-27 19:55:06 +0000
4@@ -103,7 +103,6 @@
5
6 const gchar **env;
7 DBusMessageIter items, entry;
8- gchar **parts;
9
10 env = gkd_util_get_environment ();
11 g_return_val_if_fail (env, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
12@@ -114,13 +113,17 @@
13 if (!dbus_message_iter_open_container (&args, DBUS_TYPE_ARRAY, "{ss}", &items))
14 g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY);
15 while (*env) {
16+ gchar **parts;
17 parts = g_strsplit (*env, "=", 2);
18 g_return_val_if_fail (parts && parts[0] && parts[1], DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
19 if (!dbus_message_iter_open_container (&items, DBUS_TYPE_DICT_ENTRY, NULL, &entry) ||
20 !dbus_message_iter_append_basic (&entry, DBUS_TYPE_STRING, &parts[0]) ||
21 !dbus_message_iter_append_basic (&entry, DBUS_TYPE_STRING, &parts[1]) ||
22- !dbus_message_iter_close_container (&items, &entry))
23+ !dbus_message_iter_close_container (&items, &entry)) {
24+ g_strfreev (parts);
25 g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY);
26+ }
27+ g_strfreev (parts);
28 ++env;
29 }
30 if (!dbus_message_iter_close_container (&args, &items))
31
32=== modified file 'ChangeLog'
33--- ChangeLog 2014-12-06 18:47:09 +0000
34+++ ChangeLog 2015-02-27 19:55:06 +0000
35@@ -1,5 +1,919 @@
36 # Generate automatically. Do not edit.
37
38+commit bf38a2eca54dc8360bce074887a2abd4f63eaeb9
39+Author: Stef Walter <stefw@gnome.org>
40+Date: 2015-02-25
41+
42+ Release version 3.15.90
43+
44+ NEWS | 6 ++++++
45+ configure.ac | 2 +-
46+ 2 files changed, 7 insertions(+), 1 deletion(-)
47+
48+commit a3a45e283275887947182177deb4185304593fbc
49+Author: Muhammet Kara <muhammetk@gmail.com>
50+Date: 2014-12-06
51+
52+ Updated Turkish translation
53+
54+ po/tr.po | 255 +++++++++++++++++++++++++++++++--------------------------------
55+ 1 file changed, 127 insertions(+), 128 deletions(-)
56+
57+commit 3eb2019cfd558f3f6a4b1d3fe6c0f9dc60c6457f
58+Author: Trần Ngọc Quân <vnwildman@gmail.com>
59+Date: 2014-11-21
60+
61+ Updated Vietnamese translation
62+
63+ Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
64+
65+ po/vi.po | 1102 +++++++++-----------------------------------------------------
66+ 1 file changed, 158 insertions(+), 944 deletions(-)
67+
68+commit f59fb0646dedd4e730c9e8e3c090d7cd52ac5278
69+Author: Ting-Wei Lan <lantw@src.gnome.org>
70+Date: 2014-11-16
71+
72+ Fix "void function should not return a value" error for clang
73+
74+ https://bugzilla.gnome.org/show_bug.cgi?id=740190
75+
76+ daemon/login/gkd-login.c | 2 +-
77+ 1 file changed, 1 insertion(+), 1 deletion(-)
78+
79+commit 28f04eb2bcff369ab13f3c98c00b7bcbf91594d3
80+Author: Christophe Fergeau <cfergeau@redhat.com>
81+Date: 2014-09-15
82+
83+ asn1x: Sanitize use of asn1_set_value/asn1_take_value
84+
85+ Most callers of asn1_set_value() seems to assume this function will take
86+ ownership of the passed in GBytes, while it actually takes an additional
87+ reference.
88+
89+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
90+
91+ egg/egg-asn1x.c | 14 +++++++-------
92+ 1 file changed, 7 insertions(+), 7 deletions(-)
93+
94+commit 6da13bb815c3893ab305316ca3f08faaf0093953
95+Author: Christophe Fergeau <cfergeau@redhat.com>
96+Date: 2014-10-15
97+
98+ daemon: Fix GStrv leak in DBus message handler
99+
100+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
101+
102+ daemon/dbus/gkd-dbus.c | 7 +++++--
103+ 1 file changed, 5 insertions(+), 2 deletions(-)
104+
105+commit b087539a6cdd624fc4e0d6ae7de2811ab96864e6
106+Author: Christophe Fergeau <cfergeau@redhat.com>
107+Date: 2014-09-21
108+
109+ Don't leak password data in gkm_wrap_prompt_do_credential
110+
111+ Memory returned by auto_unlock_lookup_object() must be freed
112+ while memory returned by gkm_wrap_prompt_request_password() must
113+ not be freed. Depending on the situation, CredentialPrompt::password
114+ will contain one or the other, and currently this field is never
115+ freed, causing leaks when the password comes from
116+ auto_unlock_lookup_object().
117+
118+ This commit will always free CredentialPrompt::password when it's
119+ no longer needed, and will create a copy of the returned string
120+ when gkm_wrap_prompt_request_password() is called.
121+
122+ This fixes (line numbers from 3.13.91-2-g45bb5be):
123+
124+ ==2190== 8 bytes in 1 blocks are definitely lost in loss record 58 of 1,294
125+ ==2190== at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
126+ ==2190== by 0x5DE6DE6: g_malloc (gmem.c:97)
127+ ==2190== by 0x5E024B5: g_memdup (gstrfuncs.c:384)
128+ ==2190== by 0x41296C: gkm_template_set (gkm-attributes.c:600)
129+ ==2190== by 0x4129F0: gkm_template_set_value (gkm-attributes.c:614)
130+ ==2190== by 0x419BCD: mock_secret_C_CreateObject (mock-secret-store.c:174)
131+ ==2190== by 0x40646E: wrap_C_CreateObject (gkm-wrap-layer.c:741)
132+ ==2190== by 0x418985: find_login_keyring_item (gkm-wrap-login.c:254)
133+ ==2190== by 0x4190AF: gkm_wrap_login_lookup_secret (gkm-wrap-login.c:396)
134+ ==2190== by 0x407E8D: auto_unlock_lookup_object (gkm-wrap-prompt.c:198)
135+ ==2190== by 0x40B9B0: login_prompt_do_specific (gkm-wrap-prompt.c:1453)
136+ ==2190== by 0x40C13A: gkm_wrap_prompt_do_login (gkm-wrap-prompt.c:1591)
137+ ==2190== by 0x406384: auth_C_Login (gkm-wrap-layer.c:706)
138+ ==2190== by 0x40472A: test_specific (test-login-auto.c:156)
139+ ==2190== by 0x5E0A27A: test_case_run (gtestutils.c:2059)
140+ ==2190== by 0x5E0A602: g_test_run_suite_internal (gtestutils.c:2120)
141+ ==2190== by 0x5E0A6C4: g_test_run_suite_internal (gtestutils.c:2131)
142+ ==2190== by 0x5E0A6C4: g_test_run_suite_internal (gtestutils.c:2131)
143+ ==2190== by 0x5E0A847: g_test_run_suite (gtestutils.c:2184)
144+ ==2190== by 0x5E09551: g_test_run (gtestutils.c:1488)
145+ ==2190== by 0x410851: testing_thread (egg-testing.c:142)
146+ ==2190== by 0x5E0D2F4: g_thread_proxy (gthread.c:764)
147+ ==2190== by 0x3B7AE07F34: start_thread (pthread_create.c:309)
148+ ==2190== by 0x3B7AAF4C3C: clone (clone.S:111)
149+
150+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
151+
152+ pkcs11/wrap-layer/gkm-wrap-prompt.c | 10 +++++++---
153+ 1 file changed, 7 insertions(+), 3 deletions(-)
154+
155+commit dc5a7dc4e5690e258a90d8ddfc39e17c1f8d4938
156+Author: Christophe Fergeau <cfergeau@redhat.com>
157+Date: 2014-09-21
158+
159+ Don't leak password in login_prompt_do_{specific, user)
160+
161+ login_prompt_do_specific() and login_prompt_do_user() both
162+ set GkmWrapPrompt::prompt_data to either memory which must be freed
163+ with egg_secure_memory_strfree (through a call to
164+ auto_unlock_lookup_*) or to const memory which must not be freed
165+ (through a call to gkm_wrap_prompt_request_password).
166+
167+ These methods currently assume the password memory does not need
168+ to be freed, which leads to this leak in test-login-auto (line numbers
169+ from 3.13.91-2-g45bb5be):
170+
171+ ==2190== 5 bytes in 1 blocks are definitely lost in loss record 17 of 1,294
172+ ==2190== at 0x40F8E4: egg_secure_alloc_full (egg-secure-memory.c:1056)
173+ ==2190== by 0x417F5E: egg_secure_alloc (gkm-wrap-login.c:42)
174+ ==2190== by 0x419157: gkm_wrap_login_lookup_secret (gkm-wrap-login.c:409)
175+ ==2190== by 0x407E8D: auto_unlock_lookup_object (gkm-wrap-prompt.c:198)
176+ ==2190== by 0x40B9B0: login_prompt_do_specific (gkm-wrap-prompt.c:1453)
177+ ==2190== by 0x40C13A: gkm_wrap_prompt_do_login (gkm-wrap-prompt.c:1591)
178+ ==2190== by 0x406384: auth_C_Login (gkm-wrap-layer.c:706)
179+ ==2190== by 0x40472A: test_specific (test-login-auto.c:156)
180+ ==2190== by 0x5E0A27A: test_case_run (gtestutils.c:2059)
181+ ==2190== by 0x5E0A602: g_test_run_suite_internal (gtestutils.c:2120)
182+ ==2190== by 0x5E0A6C4: g_test_run_suite_internal (gtestutils.c:2131)
183+ ==2190== by 0x5E0A6C4: g_test_run_suite_internal (gtestutils.c:2131)
184+ ==2190== by 0x5E0A847: g_test_run_suite (gtestutils.c:2184)
185+ ==2190== by 0x5E09551: g_test_run (gtestutils.c:1488)
186+ ==2190== by 0x410851: testing_thread (egg-testing.c:142)
187+ ==2190== by 0x5E0D2F4: g_thread_proxy (gthread.c:764)
188+ ==2190== by 0x3B7AE07F34: start_thread (pthread_create.c:309)
189+ ==2190== by 0x3B7AAF4C3C: clone (clone.S:111)
190+
191+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
192+
193+ pkcs11/wrap-layer/gkm-wrap-prompt.c | 62 ++++++++++++++++++++++++++-----------
194+ 1 file changed, 44 insertions(+), 18 deletions(-)
195+
196+commit abf3473a9a14784a76911ef35c0916d462d55402
197+Author: Stef Walter <stefw@redhat.com>
198+Date: 2014-10-26
199+
200+ gpg-agent: Use common code for storing/retrieving passwords
201+
202+ daemon/gpg-agent/gkd-gpg-agent-ops.c | 269 +++--------------------------------
203+ 1 file changed, 21 insertions(+), 248 deletions(-)
204+
205+commit 354f9887eef1c2c6144b904739ca0230bc2f2a4e
206+Author: Stef Walter <stefw@redhat.com>
207+Date: 2014-10-26
208+
209+ login: Factor out the code for storing/retrieving login keyring passwords
210+
211+ This was in the gpg-agent, and want to use it in our ssh-agent wrapper
212+
213+ daemon/login/Makefile.am | 1 +
214+ daemon/login/gkd-login.c | 300 +++++++++++++++++++++++++++++++++++++++++++++++
215+ daemon/login/gkd-login.h | 20 ++++
216+ 3 files changed, 321 insertions(+)
217+
218+commit d9df0a179fbfae82f8cec20cf46e8b9f03c044ba
219+Author: Stef Walter <stefw@redhat.com>
220+Date: 2014-10-26
221+
222+ gpg-agent: No longer build the testing standalone agent
223+
224+ This just caused more unneccessary code that we'd never use.
225+
226+ daemon/gpg-agent/Makefile.am | 15 ---------------
227+ 1 file changed, 15 deletions(-)
228+
229+commit ea36fd9182c143348851be2053bce9b6da052bc8
230+Author: Baurzhan Muftakhidinov <baurthefirst@gmail.com>
231+Date: 2014-10-28
232+
233+ Added Kazakh translation
234+
235+ po/LINGUAS | 1 +
236+ po/kk.po | 572 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
237+ 2 files changed, 573 insertions(+)
238+
239+commit 082a2fe3278c37b9899c23ebac003791a8999ea5
240+Author: Stef Walter <stefw@redhat.com>
241+Date: 2014-10-25
242+
243+ Ignore vim swp temporary files
244+
245+ .gitignore | 1 +
246+ 1 file changed, 1 insertion(+)
247+
248+commit 39aeef6f368e4d8517f19b83c33d55b9cc87f44f
249+Author: Christophe Fergeau <cfergeau@redhat.com>
250+Date: 2014-10-14
251+
252+ GkdGpgAgent: Unref GIOChannel when no longer needed
253+
254+ This fixes a memory leak reported by valgrind on daemon shutdown
255+ (tested by starting a new daemon instance with --replace).
256+
257+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
258+
259+ daemon/gpg-agent/gkd-gpg-agent.c | 1 +
260+ 1 file changed, 1 insertion(+)
261+
262+commit 3db6f3bbbd13d6eec29cf96f103975f793b24e4e
263+Author: Christophe Fergeau <cfergeau@redhat.com>
264+Date: 2014-10-14
265+
266+ Free GkdSecretService::alias_directory in finalize()
267+
268+ This fixes a memory leak reported by valgrind on daemon shutdown
269+ (tested by starting a new daemon instance with --replace).
270+
271+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
272+
273+ daemon/dbus/gkd-secret-service.c | 3 +++
274+ 1 file changed, 3 insertions(+)
275+
276+commit ddcdccbf98ba71547c6494db07b3ece505ec769b
277+Author: Christophe Fergeau <cfergeau@redhat.com>
278+Date: 2014-10-13
279+
280+ GkmMock: Fix handling of CKA_G_CREDENTIAL_TEMPLATE attributes
281+
282+ These are special as their value is an array of CK_ATTRIBUTE pointing to
283+ allocated memory. Moreover, when gkm_mock_C_SetAttributeValue() is
284+ called, this memory is owned by the caller, so it needs to be duplicated
285+ as the caller may free it before GkmMock no longer needs it.
286+
287+ We also need to make sure this memory we just duplicated is correctly
288+ freed when no longer needed.
289+
290+ This is achieved by introducing an additional global variable,
291+ the_credential_template. This is similar to how this type of attributes
292+ is handled in GkmSecretCollection.
293+
294+ Without this, running test-login-auto in valgrind causes invalid reads:
295+
296+ ==5954== Invalid read of size 1
297+ ==5954== at 0x4123D4: gkm_attributes_find_boolean (gkm-attributes.c:503)
298+ ==5954== by 0x408C00: set_unlock_options_on_prompt (gkm-wrap-prompt.c:520)
299+ ==5954== by 0x40A3E8: gkm_wrap_prompt_do_credential (gkm-wrap-prompt.c:1055)
300+ ==5954== by 0x40641C: auth_C_CreateObject (gkm-wrap-layer.c:764)
301+ ==5954== by 0x404D7B: test_unlock_keyring (test-login-auto.c:243)
302+ ==5954== by 0x5E04A8B: test_case_run (gtestutils.c:2059)
303+ ==5954== by 0x5E04E2D: g_test_run_suite_internal (gtestutils.c:2120)
304+ ==5954== by 0x5E04EEF: g_test_run_suite_internal (gtestutils.c:2131)
305+ ==5954== by 0x5E04EEF: g_test_run_suite_internal (gtestutils.c:2131)
306+ ==5954== by 0x5E0506F: g_test_run_suite (gtestutils.c:2184)
307+ ==5954== by 0x5E03D5C: g_test_run (gtestutils.c:1488)
308+ ==5954== by 0x410725: testing_thread (egg-testing.c:142)
309+ ==5954== by 0x5E07B29: g_thread_proxy (gthread.c:764)
310+ ==5954== by 0x3899207529: start_thread (pthread_create.c:310)
311+ ==5954== by 0x3898F0077C: clone (clone.S:109)
312+ ==5954== Address 0x85bad90 is 0 bytes inside a block of size 1 free'd
313+ ==5954== at 0x4A07CE9: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
314+ ==5954== by 0x5DE1A0D: g_free (gmem.c:190)
315+ ==5954== by 0x409E54: gkm_wrap_prompt_finalize (gkm-wrap-prompt.c:933)
316+ ==5954== by 0x590293A: g_object_unref (gobject.c:3170)
317+ ==5954== by 0x40644A: auth_C_CreateObject (gkm-wrap-layer.c:771)
318+ ==5954== by 0x404CD5: test_unlock_keyring (test-login-auto.c:234)
319+ ==5954== by 0x5E04A8B: test_case_run (gtestutils.c:2059)
320+ ==5954== by 0x5E04E2D: g_test_run_suite_internal (gtestutils.c:2120)
321+ ==5954== by 0x5E04EEF: g_test_run_suite_internal (gtestutils.c:2131)
322+ ==5954== by 0x5E04EEF: g_test_run_suite_internal (gtestutils.c:2131)
323+ ==5954== by 0x5E0506F: g_test_run_suite (gtestutils.c:2184)
324+ ==5954== by 0x5E03D5C: g_test_run (gtestutils.c:1488)
325+ ==5954== by 0x410725: testing_thread (egg-testing.c:142)
326+ ==5954== by 0x5E07B29: g_thread_proxy (gthread.c:764)
327+ ==5954== by 0x3899207529: start_thread (pthread_create.c:310)
328+ ==5954== by 0x3898F0077C: clone (clone.S:109)
329+
330+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
331+
332+ pkcs11/gkm/gkm-mock.c | 27 +++++++++++++++++++++++++--
333+ 1 file changed, 25 insertions(+), 2 deletions(-)
334+
335+commit 87f82c227694279d7e6ad26ca90112835a69c7c5
336+Author: Christophe Fergeau <cfergeau@redhat.com>
337+Date: 2014-10-01
338+
339+ test-spawn: Fix leaks of EchoData content
340+
341+ EchoData::error and EchoData::output must be freed after
342+ use.
343+
344+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
345+
346+ egg/test-spawn.c | 6 ++++++
347+ 1 file changed, 6 insertions(+)
348+
349+commit 0db2253d64b5607bf20e4e17060de81450e91797
350+Author: Christophe Fergeau <cfergeau@redhat.com>
351+Date: 2014-09-22
352+
353+ xdg: Fix ref leak in remove_assertion_from_trust()
354+
355+ When a transaction is used, remove_assertion_from_trust() will
356+ steal the assertion and its key from the 'assertions' hash table.
357+ The stolen assertion will then be added to the transaction and be
358+ unreferenced later, but the key must be unref'ed as the hash table
359+ owned a reference on it.
360+
361+ This fixes:
362+
363+ ==9337== 104 (40 direct, 64 indirect) bytes in 1 blocks are definitely lost in loss record 614 of 678
364+ ==9337== at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
365+ ==9337== by 0x4EEADE6: g_malloc (gmem.c:97)
366+ ==9337== by 0x4F03A22: g_slice_alloc (gslice.c:1007)
367+ ==9337== by 0x4EB6954: g_bytes_new_with_free_func (gbytes.c:183)
368+ ==9337== by 0x4EB68D5: g_bytes_new_take (gbytes.c:126)
369+ ==9337== by 0x4116D4: create_assertion_key (gkm-xdg-trust.c:355)
370+ ==9337== by 0x411755: lookup_or_create_assertion_key (gkm-xdg-trust.c:371)
371+ ==9337== by 0x41312C: gkm_xdg_trust_replace_assertion (gkm-xdg-trust.c:874)
372+ ==9337== by 0x413B62: factory_create_assertion (gkm-xdg-assertion.c:181)
373+ ==9337== by 0x4338A3: gkm_session_create_object_for_factory (gkm-session.c:778)
374+ ==9337== by 0x433A5B: gkm_session_create_object_for_attributes (gkm-session.c:820)
375+ ==9337== by 0x434222: gkm_session_C_CreateObject (gkm-session.c:954)
376+ ==9337== by 0x40A1D0: test_create_assertion_twice (test-xdg-trust.c:497)
377+ ==9337== by 0x4F0E27A: test_case_run (gtestutils.c:2059)
378+ ==9337== by 0x4F0E602: g_test_run_suite_internal (gtestutils.c:2120)
379+ ==9337== by 0x4F0E6C4: g_test_run_suite_internal (gtestutils.c:2131)
380+ ==9337== by 0x4F0E6C4: g_test_run_suite_internal (gtestutils.c:2131)
381+ ==9337== by 0x4F0E847: g_test_run_suite (gtestutils.c:2184)
382+ ==9337== by 0x4F0D551: g_test_run (gtestutils.c:1488)
383+ ==9337== by 0x4516AD: testing_thread (egg-testing.c:142)
384+ ==9337== by 0x4F112F4: g_thread_proxy (gthread.c:764)
385+ ==9337== by 0x3B7AE07F34: start_thread (pthread_create.c:309)
386+ ==9337== by 0x3B7AAF4C3C: clone (clone.S:111)
387+
388+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
389+
390+ pkcs11/xdg-store/gkm-xdg-trust.c | 1 +
391+ 1 file changed, 1 insertion(+)
392+
393+commit 37c493c086f1721d6dea77bac462e60dc23096df
394+Author: Christophe Fergeau <cfergeau@redhat.com>
395+Date: 2014-09-22
396+
397+ xdg: Remove wrong unref in gkm_xdg_trust_replace_assertion
398+
399+ Callers of lookup_or_create_assertion_key() don't own a reference
400+ on the returned GBytes so it should not be unref'fed before exiting
401+ gkm_xdg_trust_replace_assertion.
402+ This solves the following errors from valgrind when running test-xdg-trust
403+
404+ ==15477==
405+ ==15477== Thread 2 testing:
406+ ==15477== Invalid read of size 4
407+ ==15477== at 0x4EB6B75: g_bytes_unref (gbytes.c:306)
408+ ==15477== by 0x4EC2692: g_datalist_clear (gdataset.c:273)
409+ ==15477== by 0x4C284A3: g_object_finalize (gobject.c:1033)
410+ ==15477== by 0x42B35E: gkm_object_finalize (gkm-object.c:448)
411+ ==15477== by 0x414134: gkm_assertion_finalize (gkm-assertion.c:134)
412+ ==15477== by 0x4C2D256: g_object_unref (gobject.c:3170)
413+ ==15477== by 0x43B9C7: gkm_util_dispose_unref (gkm-util.c:137)
414+ ==15477== by 0x4ECEBD1: g_hash_table_remove_all_nodes (ghash.c:503)
415+ ==15477== by 0x4ECFC02: g_hash_table_remove_all (ghash.c:1371)
416+ ==15477== by 0x431DBB: gkm_session_dispose (gkm-session.c:409)
417+ ==15477== by 0x4C2D131: g_object_unref (gobject.c:3133)
418+ ==15477== by 0x425391: apartment_free (gkm-module.c:241)
419+ ==15477== by 0x4ECEBD1: g_hash_table_remove_all_nodes (ghash.c:503)
420+ ==15477== by 0x4ECFC02: g_hash_table_remove_all (ghash.c:1371)
421+ ==15477== by 0x4267F9: gkm_module_dispose (gkm-module.c:633)
422+ ==15477== by 0x4107D3: gkm_xdg_module_dispose (gkm-xdg-module.c:553)
423+ ==15477== by 0x4C28648: g_object_run_dispose (gobject.c:1076)
424+ ==15477== by 0x40CCDD: gkm_C_Finalize (gkm-module-ep.h:102)
425+ ==15477== by 0x40C7F0: mock_xdg_module_leave_and_finalize (mock-xdg-module.c:151)
426+ ==15477== by 0x408585: teardown (test-xdg-trust.c:138)
427+ ==15477== by 0x4F0E2FE: test_case_run (gtestutils.c:2069)
428+ ==15477== by 0x4F0E602: g_test_run_suite_internal (gtestutils.c:2120)
429+ ==15477== by 0x4F0E6C4: g_test_run_suite_internal (gtestutils.c:2131)
430+ ==15477== by 0x4F0E6C4: g_test_run_suite_internal (gtestutils.c:2131)
431+ ==15477== by 0x4F0E847: g_test_run_suite (gtestutils.c:2184)
432+ ==15477== by 0x4F0D551: g_test_run (gtestutils.c:1488)
433+ ==15477== by 0x4516B9: testing_thread (egg-testing.c:142)
434+ ==15477== by 0x4F112F4: g_thread_proxy (gthread.c:764)
435+ ==15477== by 0x3B7AE07F34: start_thread (pthread_create.c:309)
436+ ==15477== by 0x3B7AAF4C3C: clone (clone.S:111)
437+ ==15477== Address 0x52b6100 is 16 bytes inside a block of size 40 free'd
438+ ==15477== at 0x4A07577: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
439+ ==15477== by 0x4EEAF5F: g_free (gmem.c:190)
440+ ==15477== by 0x4F03C59: g_slice_free1 (gslice.c:1112)
441+ ==15477== by 0x4EB6BB8: g_bytes_unref (gbytes.c:310)
442+ ==15477== by 0x4ECEBB3: g_hash_table_remove_all_nodes (ghash.c:500)
443+ ==15477== by 0x4ECFC02: g_hash_table_remove_all (ghash.c:1371)
444+ ==15477== by 0x4ECF7C4: g_hash_table_destroy (ghash.c:1067)
445+ ==15477== by 0x4127E9: gkm_xdg_trust_finalize (gkm-xdg-trust.c:706)
446+ ==15477== by 0x4C2D256: g_object_unref (gobject.c:3170)
447+ ==15477== by 0x43B9C7: gkm_util_dispose_unref (gkm-util.c:137)
448+ ==15477== by 0x4ECEBD1: g_hash_table_remove_all_nodes (ghash.c:503)
449+ ==15477== by 0x4ECFC02: g_hash_table_remove_all (ghash.c:1371)
450+ ==15477== by 0x431DBB: gkm_session_dispose (gkm-session.c:409)
451+ ==15477== by 0x4C2D131: g_object_unref (gobject.c:3133)
452+ ==15477== by 0x425391: apartment_free (gkm-module.c:241)
453+ ==15477== by 0x4ECEBD1: g_hash_table_remove_all_nodes (ghash.c:503)
454+ ==15477== by 0x4ECFC02: g_hash_table_remove_all (ghash.c:1371)
455+ ==15477== by 0x4267F9: gkm_module_dispose (gkm-module.c:633)
456+ ==15477== by 0x4107D3: gkm_xdg_module_dispose (gkm-xdg-module.c:553)
457+ ==15477== by 0x4C28648: g_object_run_dispose (gobject.c:1076)
458+ ==15477== by 0x40CCDD: gkm_C_Finalize (gkm-module-ep.h:102)
459+ ==15477== by 0x40C7F0: mock_xdg_module_leave_and_finalize (mock-xdg-module.c:151)
460+ ==15477== by 0x408585: teardown (test-xdg-trust.c:138)
461+ ==15477== by 0x4F0E2FE: test_case_run (gtestutils.c:2069)
462+ ==15477== by 0x4F0E602: g_test_run_suite_internal (gtestutils.c:2120)
463+ ==15477== by 0x4F0E6C4: g_test_run_suite_internal (gtestutils.c:2131)
464+ ==15477== by 0x4F0E6C4: g_test_run_suite_internal (gtestutils.c:2131)
465+ ==15477== by 0x4F0E847: g_test_run_suite (gtestutils.c:2184)
466+ ==15477== by 0x4F0D551: g_test_run (gtestutils.c:1488)
467+ ==15477== by 0x4516B9: testing_thread (egg-testing.c:142)
468+ ==15477== by 0x4F112F4: g_thread_proxy (gthread.c:764)
469+ ==15477== by 0x3B7AE07F34: start_thread (pthread_create.c:309)
470+ ==15477== by 0x3B7AAF4C3C: clone (clone.S:111)
471+
472+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
473+
474+ pkcs11/xdg-store/gkm-xdg-trust.c | 1 -
475+ 1 file changed, 1 deletion(-)
476+
477+commit f2e759970c1a3a42378528a15166221715493288
478+Author: Christophe Fergeau <cfergeau@redhat.com>
479+Date: 2014-09-21
480+
481+ test-xdg-trust: Fix GChecksum leaks
482+
483+ 'md' is created using g_checksum_new() so it must be destroyed
484+ with g_checksum_free() after use.
485+
486+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
487+
488+ pkcs11/gkm/gkm-attributes.c | 1 +
489+ pkcs11/xdg-store/test-xdg-trust.c | 1 +
490+ 2 files changed, 2 insertions(+)
491+
492+commit a88f4fcf255495ee575b4b7b94574c3ca0b66ca1
493+Author: Christophe Fergeau <cfergeau@redhat.com>
494+Date: 2014-09-21
495+
496+ Unref GkmXdgTrust::bytes in finalize()
497+
498+ This will cause leaks otherwise, for example in test-xdg-module.
499+
500+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
501+
502+ pkcs11/xdg-store/gkm-xdg-trust.c | 4 ++++
503+ 1 file changed, 4 insertions(+)
504+
505+commit 621a86e8b1b14a387cf1dd895005007570c3d2c3
506+Author: Christophe Fergeau <cfergeau@redhat.com>
507+Date: 2014-09-21
508+
509+ test-xdg-module: Fix memory leak
510+
511+ Memory from g_file_get_contents() was never freed.
512+
513+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
514+
515+ pkcs11/xdg-store/test-xdg-module.c | 1 +
516+ 1 file changed, 1 insertion(+)
517+
518+commit bbb96835cc4120d6c9f0d7bf272f6eb386a07468
519+Author: Christophe Fergeau <cfergeau@redhat.com>
520+Date: 2014-09-21
521+
522+ xdg: Don't leak ref in lookup_or_create_assertion_key()
523+
524+ When lookup_or_create_assertion_key() creates a new assertion key,
525+ it own a reference on the GBytes created by create_assertion_key()
526+ and it will then take an extra ref on it when associating it with a
527+ GkmAssertion instance.
528+
529+ This will cause a leak of the memory returned by create_assertion_key()
530+ as one of these references will never be dropped.
531+
532+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
533+
534+ pkcs11/xdg-store/gkm-xdg-trust.c | 2 +-
535+ 1 file changed, 1 insertion(+), 1 deletion(-)
536+
537+commit bc17247fdd1fa843560ecebb4f20a10460df0d63
538+Author: Christophe Fergeau <cfergeau@redhat.com>
539+Date: 2014-09-21
540+
541+ Fix leak in gkm_mock_C_SetPIN()
542+
543+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
544+
545+ pkcs11/gkm/gkm-mock.c | 5 ++++-
546+ 1 file changed, 4 insertions(+), 1 deletion(-)
547+
548+commit 670fe30c2dfe7accc738c8def6c1ccf047c944b6
549+Author: Christophe Fergeau <cfergeau@redhat.com>
550+Date: 2014-10-01
551+
552+ gkm-xdg-assertion: Fix leak in factory_create_assertion()
553+
554+ 'purpose' and 'peer' were allocated through gkm_attributes_find_string()
555+ and must thus be freed after use.
556+
557+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
558+
559+ pkcs11/xdg-store/gkm-xdg-assertion.c | 2 ++
560+ 1 file changed, 2 insertions(+)
561+
562+commit ca2b73954d497ea36b94b547649a08dd85ec38e1
563+Author: Christophe Fergeau <cfergeau@redhat.com>
564+Date: 2014-10-01
565+
566+ Fix leak in mock_secret_C_CreateObject
567+
568+ 'template' is created with gkm_template_new() so it must be freed
569+ using gkm_template_free().
570+
571+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
572+
573+ pkcs11/wrap-layer/mock-secret-store.c | 2 +-
574+ 1 file changed, 1 insertion(+), 1 deletion(-)
575+
576+commit 165f0e3210e32538c847be91896736c17a1f6ad6
577+Author: Christophe Fergeau <cfergeau@redhat.com>
578+Date: 2014-10-01
579+
580+ gkm-secret-textual: Fix leak in generate_attribute()
581+
582+ The GList returned by gkm_secret_fields_get_names() must be
583+ freed with g_list_free after use as this is created using
584+ g_hash_table_get_keys().
585+
586+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
587+
588+ pkcs11/secret-store/gkm-secret-textual.c | 1 +
589+ 1 file changed, 1 insertion(+)
590+
591+commit 750047bc77edc730e76fc536ce17151b52ae22da
592+Author: Christophe Fergeau <cfergeau@redhat.com>
593+Date: 2014-10-01
594+
595+ gkm-secret-search: Fix leak in factory_create_search()
596+
597+ gkm_attribute_get_string() returns a newly allocated string which must
598+ be freed when no longer useful.
599+
600+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
601+
602+ pkcs11/secret-store/gkm-secret-search.c | 1 +
603+ 1 file changed, 1 insertion(+)
604+
605+commit a1984261cb2aabf20d2014a987e2adfbfbae7fc1
606+Author: Christophe Fergeau <cfergeau@redhat.com>
607+Date: 2014-10-01
608+
609+ gkm-gnome2-storage: Unref GkmGnome2Storage::login in dispose()
610+
611+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
612+
613+ pkcs11/gnome2-store/gkm-gnome2-storage.c | 4 ++++
614+ 1 file changed, 4 insertions(+)
615+
616+commit bf96feaff541668ead5438ee074c4318165a3962
617+Author: Christophe Fergeau <cfergeau@redhat.com>
618+Date: 2014-10-01
619+
620+ secret-store/test*: Don't leak secret data memory
621+
622+ Both test-secret-binary and test-secret-textual call
623+ g_file_get_contents() but never free the returned data, causing a memory
624+ leak.
625+
626+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
627+
628+ pkcs11/secret-store/test-secret-binary.c | 1 +
629+ pkcs11/secret-store/test-secret-textual.c | 1 +
630+ 2 files changed, 2 insertions(+)
631+
632+commit 9421bf589095380286bed90bca67f6ae2746ce0b
633+Author: Christophe Fergeau <cfergeau@redhat.com>
634+Date: 2014-10-01
635+
636+ test-import: Don't leak args.pReserved
637+
638+ It's allocated with g_strdup_printf and must thus be freed after use.
639+
640+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
641+
642+ pkcs11/gnome2-store/test-import.c | 1 +
643+ 1 file changed, 1 insertion(+)
644+
645+commit c2870de15ba639b6a02916a89be07274c2b5895b
646+Author: Christophe Fergeau <cfergeau@redhat.com>
647+Date: 2014-10-01
648+
649+ egg-hkdf: Fix gcry_md_ht_t leak in egg_hkdf_perform
650+
651+ The 'md2' gcry_md_ht_t variable is opened with gcry_md_open() in that
652+ method but is never closed, which causes a leak.
653+
654+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
655+
656+ egg/egg-hkdf.c | 1 +
657+ 1 file changed, 1 insertion(+)
658+
659+commit 1581f4a33e350de62cf98bec0530934dcf2a0272
660+Author: Christophe Fergeau <cfergeau@redhat.com>
661+Date: 2014-10-01
662+
663+ egg-asn1x: Fix memory leak in egg_asn1x_set_any_raw()
664+
665+ In error cases, the Atlv variable 'tlv' which was created in this
666+ function is not going to be used, so we must free it before returning.
667+
668+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
669+
670+ egg/egg-asn1x.c | 1 +
671+ 1 file changed, 1 insertion(+)
672+
673+commit 17b429de6d2d911fcfac3fbc042aa5579a3a4535
674+Author: Christophe Fergeau <cfergeau@redhat.com>
675+Date: 2014-10-01
676+
677+ test-sexp: Fix 2 leaks
678+
679+ gcry_sexp_t objects created with gkm_sexp_parse_key() must be freed with
680+ gcry_sexp_release(), and gcry_mpi_t objects created with
681+ gkm_sexp_extract_mpi() must be freed with gcry_mpi_release() when no
682+ longer used.
683+
684+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
685+
686+ pkcs11/gkm/test-sexp.c | 2 ++
687+ 1 file changed, 2 insertions(+)
688+
689+commit 33793e57c557830cda36af68376f5dfd2130c073
690+Author: Christophe Fergeau <cfergeau@redhat.com>
691+Date: 2014-10-01
692+
693+ test-secret: Don't leak new secrets in test_equal()
694+
695+ Secrets created with gkm_secret_new* must be unref'fed when no longer
696+ used.
697+
698+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
699+
700+ pkcs11/gkm/test-secret.c | 3 +++
701+ 1 file changed, 3 insertions(+)
702+
703+commit 75c1fb8b8e3eb0df794bd80ed883fdc16a865664
704+Author: Christophe Fergeau <cfergeau@redhat.com>
705+Date: 2014-10-01
706+
707+ test-pam: Fix GError leak in error case
708+
709+ When g_file_get_contents() fails and sets an error, it must be freed.
710+
711+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
712+
713+ pam/test-pam.c | 1 +
714+ 1 file changed, 1 insertion(+)
715+
716+commit dbc6af0ea986a4840e6a8a06d632435332c6d2a4
717+Author: Christophe Fergeau <cfergeau@redhat.com>
718+Date: 2014-10-01
719+
720+ test-padding: Don't leak egg_padding_pkcs1_pad_02 return value
721+
722+ egg_padding_pkcs1_pad_02 returns newly allocated data which must be
723+ g_free'ed after use.
724+
725+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
726+
727+ egg/test-padding.c | 1 +
728+ 1 file changed, 1 insertion(+)
729+
730+commit 610a177931675a08a13681d6741a1d18baaa92ee
731+Author: Christophe Fergeau <cfergeau@redhat.com>
732+Date: 2014-10-01
733+
734+ test-asn1: Don't leak 'asn' in test_create_quark()
735+
736+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
737+
738+ egg/test-asn1.c | 1 +
739+ 1 file changed, 1 insertion(+)
740+
741+commit 1e18f347a1a3444b3fc7126af087d0c90a791e57
742+Author: Christophe Fergeau <cfergeau@redhat.com>
743+Date: 2014-10-01
744+
745+ test-startup: Use g_strfreev to free GStrv variable
746+
747+ gkd_test_launch_daemon returns a "transfer full" GStrv, so it must be
748+ freed with g_strfreev after use.
749+
750+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
751+
752+ daemon/test-startup.c | 4 ++--
753+ 1 file changed, 2 insertions(+), 2 deletions(-)
754+
755+commit 6c2d07a4faea639ed2b2bcf1815fdb5cbfa4945e
756+Author: Christophe Fergeau <cfergeau@redhat.com>
757+Date: 2014-09-17
758+
759+ gkm-gnome2-file: Free keys to 'entries' hash tables
760+
761+ The keys to the 'publics' and 'privates' hash tables are strdup'ed
762+ strings, but these strings are never freed. This commit adds a free
763+ function for hash table keys to the g_hash_table_new_full call.
764+
765+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
766+
767+ pkcs11/gnome2-store/gkm-gnome2-file.c | 2 +-
768+ 1 file changed, 1 insertion(+), 1 deletion(-)
769+
770+commit 0fc832aa65e2d125459c9fb43c4d3ba4697270d6
771+Author: Christophe Fergeau <cfergeau@redhat.com>
772+Date: 2014-09-17
773+
774+ test-data-der: Fix various memory leaks
775+
776+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
777+
778+ pkcs11/gkm/test-data-der.c | 13 +++++++++++++
779+ 1 file changed, 13 insertions(+)
780+
781+commit 298d910cfe2e468ad0005646e8a00b5fc8116e10
782+Author: Christophe Fergeau <cfergeau@redhat.com>
783+Date: 2014-09-17
784+
785+ test-data-asn1: Fix memory leaks in test_asn1_integers
786+
787+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
788+
789+ pkcs11/gkm/test-data-asn1.c | 3 +++
790+ 1 file changed, 3 insertions(+)
791+
792+commit c5083ba0216b15e8f9ed842b7097e7fa6c60c25b
793+Author: Christophe Fergeau <cfergeau@redhat.com>
794+Date: 2014-09-17
795+
796+ gkm-data-asn1: Unref buffer we got from egg_asn1x_get_integer_as_raw()
797+
798+ Otherwise we will be leaking a reference to that buffer, and it will
799+ never get destroyed. This showed up as a memory leaked in test-data-der.
800+
801+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
802+
803+ pkcs11/gkm/gkm-data-asn1.c | 1 +
804+ 1 file changed, 1 insertion(+)
805+
806+commit 326a94543c5cc6c44d3fd9e1b7fd6eb11a2ea998
807+Author: Christophe Fergeau <cfergeau@redhat.com>
808+Date: 2014-09-17
809+
810+ egg/test-dn: Don't leak GBytes created in test_dn_value()
811+
812+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
813+
814+ egg/test-dn.c | 1 +
815+ 1 file changed, 1 insertion(+)
816+
817+commit 8ea8329cc09e263d9628e791e0f5a464bde63413
818+Author: Christophe Fergeau <cfergeau@redhat.com>
819+Date: 2014-09-17
820+
821+ egg-cleanup: Don't leak 'cleanup' on unregister
822+
823+ When unregistering a cleanup instance, the memory allocated for the cleanup
824+ was not freed causing a memory leak.
825+
826+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
827+
828+ egg/egg-cleanup.c | 1 +
829+ 1 file changed, 1 insertion(+)
830+
831+commit 9af2db3f41e713c02e36dc71f0d6295db7d9e408
832+Author: Christophe Fergeau <cfergeau@redhat.com>
833+Date: 2014-09-17
834+
835+ test-dbus-items: Fix memory leak
836+
837+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
838+
839+ daemon/dbus/test-dbus-items.c | 4 +++-
840+ 1 file changed, 3 insertions(+), 1 deletion(-)
841+
842+commit 0c9c4a549e770e89e51d5f39995fdfc8c1af71ec
843+Author: Christophe Fergeau <cfergeau@redhat.com>
844+Date: 2014-09-15
845+
846+ Free GkmSecretItem::schema in ::finalize()
847+
848+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
849+
850+ pkcs11/secret-store/gkm-secret-item.c | 3 +++
851+ 1 file changed, 3 insertions(+)
852+
853+commit 04129e8d2c1cb8a0f5d6944d4bb7fa45f7171a2a
854+Author: Christophe Fergeau <cfergeau@redhat.com>
855+Date: 2014-09-15
856+
857+ gkm-gnome2-file: Fix leaks in create_cipher()
858+
859+ 'key' and 'iv' were allocated before calling
860+ egg_symkey_generate_simple() but this function allocates the memory
861+ needed for the 'key' and 'iv' return value, so the memory which was
862+ allocated in create_cipher() is lost and leaked.
863+ This also uses egg_secure_memory_free() to free 'key' memory as
864+ egg_symkey_generate_simple() allocates it with egg_secure_alloc().
865+
866+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
867+
868+ pkcs11/gnome2-store/gkm-gnome2-file.c | 11 ++---------
869+ 1 file changed, 2 insertions(+), 9 deletions(-)
870+
871+commit 5a98866f4b7c89451c95e8d559e8f2021c5e1456
872+Author: Christophe Fergeau <cfergeau@redhat.com>
873+Date: 2014-09-15
874+
875+ gkm-gnome2-file: Fix leak in validate_buffer()
876+
877+ 'check' is allocated in this function but never freed.
878+
879+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
880+
881+ pkcs11/gnome2-store/gkm-gnome2-file.c | 7 ++++---
882+ 1 file changed, 4 insertions(+), 3 deletions(-)
883+
884+commit 24ff22e04c86885aa4f7f877d612c94e2e2d8f6d
885+Author: Christophe Fergeau <cfergeau@redhat.com>
886+Date: 2014-09-15
887+
888+ Unref GkmCredential::secret in ::dispose
889+
890+ This fixes a memory leak.
891+
892+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
893+
894+ pkcs11/gkm/gkm-credential.c | 4 ++++
895+ 1 file changed, 4 insertions(+)
896+
897+commit 9bfe73731316389a9975fd440992afa914070467
898+Author: Christophe Fergeau <cfergeau@redhat.com>
899+Date: 2014-10-14
900+
901+ ssh-agent: Fix leak in op_request_identities
902+
903+ The object returned by gck_enumerator_next() must be unref'ed.
904+
905+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
906+
907+ daemon/ssh-agent/gkd-ssh-agent-ops.c | 7 ++++---
908+ 1 file changed, 4 insertions(+), 3 deletions(-)
909+
910+commit f81fa15dcbbc3a7ce3e8be9a229e13a0678a606b
911+Author: Christophe Fergeau <cfergeau@redhat.com>
912+Date: 2014-10-01
913+
914+ ssh-agent: Fix leak in op_v1_request_identities
915+
916+ The object returned by gck_enumerator_next() must be unref'ed
917+ as this method is "transfer full".
918+
919+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
920+
921+ daemon/ssh-agent/gkd-ssh-agent-ops.c | 8 ++++----
922+ 1 file changed, 4 insertions(+), 4 deletions(-)
923+
924+commit d177a8b5353f3156ab504f39c20753d6786e5e4d
925+Author: Christophe Fergeau <cfergeau@redhat.com>
926+Date: 2014-09-15
927+
928+ ssh-agent: Fix leak in search_keys_like_attributes()
929+
930+ gck_enumerator_next() return value must be unref'fed as it's transfer
931+ full.
932+
933+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
934+
935+ daemon/ssh-agent/gkd-ssh-agent-ops.c | 5 ++++-
936+ 1 file changed, 4 insertions(+), 1 deletion(-)
937+
938+commit 04b9de9fd806598bb49e6b9d49d2697156f6f39d
939+Author: Christophe Fergeau <cfergeau@redhat.com>
940+Date: 2014-10-01
941+
942+ ssh-agent: Fix leak in remove_by_public_key()
943+
944+ gck_attributes_find_string() returns a newly allocated string, so it
945+ must be g_free'ed after use.
946+
947+ https://bugzilla.gnome.org/show_bug.cgi?id=738508
948+
949+ daemon/ssh-agent/gkd-ssh-agent-ops.c | 1 +
950+ 1 file changed, 1 insertion(+)
951+
952 commit 32900996ac1d913bbae6e378a0a974d207d81c8e
953 Author: Stef Walter <stefw@gnome.org>
954 Date: 2014-09-23
955
956=== modified file 'Makefile.in'
957--- Makefile.in 2014-12-06 18:47:09 +0000
958+++ Makefile.in 2015-02-27 19:55:06 +0000
959@@ -116,9 +116,8 @@
960 $(am__EXEEXT_10) $(am__EXEEXT_12)
961 noinst_PROGRAMS = $(check_PROGRAMS) frob-control-change$(EXEEXT) \
962 frob-control-init$(EXEEXT) frob-control-unlock$(EXEEXT) \
963- frob-control-quit$(EXEEXT) gkd-gpg-agent-standalone$(EXEEXT) \
964- gkd-ssh-agent-standalone$(EXEEXT) frob-gnome2-file$(EXEEXT) \
965- gkm-rpc-daemon-standalone$(EXEEXT) \
966+ frob-control-quit$(EXEEXT) gkd-ssh-agent-standalone$(EXEEXT) \
967+ frob-gnome2-file$(EXEEXT) gkm-rpc-daemon-standalone$(EXEEXT) \
968 dump-keyring0-format$(EXEEXT) frob-trust-file$(EXEEXT) \
969 dump-trust-file$(EXEEXT)
970 TESTS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
971@@ -659,15 +658,6 @@
972 pkcs11/xdg-store/frob-trust-file.$(OBJEXT)
973 frob_trust_file_OBJECTS = $(am_frob_trust_file_OBJECTS)
974 frob_trust_file_DEPENDENCIES = $(am__DEPENDENCIES_3)
975-am_gkd_gpg_agent_standalone_OBJECTS = daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.$(OBJEXT)
976-gkd_gpg_agent_standalone_OBJECTS = \
977- $(am_gkd_gpg_agent_standalone_OBJECTS)
978-gkd_gpg_agent_standalone_DEPENDENCIES = libgkd-gpg-agent.la libegg.la \
979- $(am__DEPENDENCIES_1)
980-gkd_gpg_agent_standalone_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
981- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
982- $(gkd_gpg_agent_standalone_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
983- $(LDFLAGS) -o $@
984 am_gkd_ssh_agent_standalone_OBJECTS = daemon/ssh-agent/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.$(OBJEXT)
985 gkd_ssh_agent_standalone_OBJECTS = \
986 $(am_gkd_ssh_agent_standalone_OBJECTS)
987@@ -1052,8 +1042,7 @@
988 $(dump_trust_file_SOURCES) $(frob_control_change_SOURCES) \
989 $(frob_control_init_SOURCES) $(frob_control_quit_SOURCES) \
990 $(frob_control_unlock_SOURCES) $(frob_gnome2_file_SOURCES) \
991- $(frob_trust_file_SOURCES) $(gkd_gpg_agent_standalone_SOURCES) \
992- $(gkd_ssh_agent_standalone_SOURCES) \
993+ $(frob_trust_file_SOURCES) $(gkd_ssh_agent_standalone_SOURCES) \
994 $(gkm_rpc_daemon_standalone_SOURCES) \
995 $(gnome_keyring_@GKR_MAJOR@_SOURCES) \
996 $(gnome_keyring_daemon_SOURCES) $(test_armor_SOURCES) \
997@@ -1118,7 +1107,6 @@
998 $(frob_control_change_SOURCES) $(frob_control_init_SOURCES) \
999 $(frob_control_quit_SOURCES) $(frob_control_unlock_SOURCES) \
1000 $(frob_gnome2_file_SOURCES) $(frob_trust_file_SOURCES) \
1001- $(gkd_gpg_agent_standalone_SOURCES) \
1002 $(gkd_ssh_agent_standalone_SOURCES) \
1003 $(gkm_rpc_daemon_standalone_SOURCES) \
1004 $(gnome_keyring_@GKR_MAJOR@_SOURCES) \
1005@@ -2095,17 +2083,6 @@
1006 $(GCK_CFLAGS) \
1007 $(GCR_CFLAGS)
1008
1009-gkd_gpg_agent_standalone_SOURCES = \
1010- daemon/gpg-agent/gkd-gpg-agent-standalone.c
1011-
1012-gkd_gpg_agent_standalone_CFLAGS = \
1013- $(GCK_CFLAGS)
1014-
1015-gkd_gpg_agent_standalone_LDADD = \
1016- libgkd-gpg-agent.la \
1017- libegg.la \
1018- $(DAEMON_LIBS)
1019-
1020 libgkd_login_la_SOURCES = \
1021 daemon/login/gkd-login.c \
1022 daemon/login/gkd-login.h \
1023@@ -2113,6 +2090,7 @@
1024
1025 libgkd_login_la_CFLAGS = \
1026 $(GCK_CFLAGS) \
1027+ $(GCR_CFLAGS) \
1028 $(GOBJECT_CFLAGS)
1029
1030 libgkd_login_la_LIBADD = \
1031@@ -3735,13 +3713,6 @@
1032 frob-trust-file$(EXEEXT): $(frob_trust_file_OBJECTS) $(frob_trust_file_DEPENDENCIES) $(EXTRA_frob_trust_file_DEPENDENCIES)
1033 @rm -f frob-trust-file$(EXEEXT)
1034 $(AM_V_CCLD)$(LINK) $(frob_trust_file_OBJECTS) $(frob_trust_file_LDADD) $(LIBS)
1035-daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.$(OBJEXT): \
1036- daemon/gpg-agent/$(am__dirstamp) \
1037- daemon/gpg-agent/$(DEPDIR)/$(am__dirstamp)
1038-
1039-gkd-gpg-agent-standalone$(EXEEXT): $(gkd_gpg_agent_standalone_OBJECTS) $(gkd_gpg_agent_standalone_DEPENDENCIES) $(EXTRA_gkd_gpg_agent_standalone_DEPENDENCIES)
1040- @rm -f gkd-gpg-agent-standalone$(EXEEXT)
1041- $(AM_V_CCLD)$(gkd_gpg_agent_standalone_LINK) $(gkd_gpg_agent_standalone_OBJECTS) $(gkd_gpg_agent_standalone_LDADD) $(LIBS)
1042 daemon/ssh-agent/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.$(OBJEXT): \
1043 daemon/ssh-agent/$(am__dirstamp) \
1044 daemon/ssh-agent/$(DEPDIR)/$(am__dirstamp)
1045@@ -4271,7 +4242,6 @@
1046 @AMDEP_TRUE@@am__include@ @am__quote@daemon/dbus/$(DEPDIR)/test-service.Plo@am__quote@
1047 @AMDEP_TRUE@@am__include@ @am__quote@daemon/dbus/$(DEPDIR)/test_dbus_signals-test-dbus-signals.Po@am__quote@
1048 @AMDEP_TRUE@@am__include@ @am__quote@daemon/dbus/$(DEPDIR)/test_dbus_util-test-dbus-util.Po@am__quote@
1049-@AMDEP_TRUE@@am__include@ @am__quote@daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Po@am__quote@
1050 @AMDEP_TRUE@@am__include@ @am__quote@daemon/gpg-agent/$(DEPDIR)/libgkd_gpg_agent_la-gkd-gpg-agent-ops.Plo@am__quote@
1051 @AMDEP_TRUE@@am__include@ @am__quote@daemon/gpg-agent/$(DEPDIR)/libgkd_gpg_agent_la-gkd-gpg-agent.Plo@am__quote@
1052 @AMDEP_TRUE@@am__include@ @am__quote@daemon/login/$(DEPDIR)/libgkd_login_la-gkd-login.Plo@am__quote@
1053@@ -5340,20 +5310,6 @@
1054 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1055 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_gnome_keyring_la_CFLAGS) $(CFLAGS) -c -o pam/pam_gnome_keyring_la-gkr-pam-stubs.lo `test -f 'pam/gkr-pam-stubs.c' || echo '$(srcdir)/'`pam/gkr-pam-stubs.c
1056
1057-daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.o: daemon/gpg-agent/gkd-gpg-agent-standalone.c
1058-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gkd_gpg_agent_standalone_CFLAGS) $(CFLAGS) -MT daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.o -MD -MP -MF daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Tpo -c -o daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.o `test -f 'daemon/gpg-agent/gkd-gpg-agent-standalone.c' || echo '$(srcdir)/'`daemon/gpg-agent/gkd-gpg-agent-standalone.c
1059-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Tpo daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Po
1060-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='daemon/gpg-agent/gkd-gpg-agent-standalone.c' object='daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.o' libtool=no @AMDEPBACKSLASH@
1061-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1062-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gkd_gpg_agent_standalone_CFLAGS) $(CFLAGS) -c -o daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.o `test -f 'daemon/gpg-agent/gkd-gpg-agent-standalone.c' || echo '$(srcdir)/'`daemon/gpg-agent/gkd-gpg-agent-standalone.c
1063-
1064-daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.obj: daemon/gpg-agent/gkd-gpg-agent-standalone.c
1065-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gkd_gpg_agent_standalone_CFLAGS) $(CFLAGS) -MT daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.obj -MD -MP -MF daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Tpo -c -o daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.obj `if test -f 'daemon/gpg-agent/gkd-gpg-agent-standalone.c'; then $(CYGPATH_W) 'daemon/gpg-agent/gkd-gpg-agent-standalone.c'; else $(CYGPATH_W) '$(srcdir)/daemon/gpg-agent/gkd-gpg-agent-standalone.c'; fi`
1066-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Tpo daemon/gpg-agent/$(DEPDIR)/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.Po
1067-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='daemon/gpg-agent/gkd-gpg-agent-standalone.c' object='daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.obj' libtool=no @AMDEPBACKSLASH@
1068-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1069-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gkd_gpg_agent_standalone_CFLAGS) $(CFLAGS) -c -o daemon/gpg-agent/gkd_gpg_agent_standalone-gkd-gpg-agent-standalone.obj `if test -f 'daemon/gpg-agent/gkd-gpg-agent-standalone.c'; then $(CYGPATH_W) 'daemon/gpg-agent/gkd-gpg-agent-standalone.c'; else $(CYGPATH_W) '$(srcdir)/daemon/gpg-agent/gkd-gpg-agent-standalone.c'; fi`
1070-
1071 daemon/ssh-agent/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.o: daemon/ssh-agent/gkd-ssh-agent-standalone.c
1072 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gkd_ssh_agent_standalone_CFLAGS) $(CFLAGS) -MT daemon/ssh-agent/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.o -MD -MP -MF daemon/ssh-agent/$(DEPDIR)/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.Tpo -c -o daemon/ssh-agent/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.o `test -f 'daemon/ssh-agent/gkd-ssh-agent-standalone.c' || echo '$(srcdir)/'`daemon/ssh-agent/gkd-ssh-agent-standalone.c
1073 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) daemon/ssh-agent/$(DEPDIR)/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.Tpo daemon/ssh-agent/$(DEPDIR)/gkd_ssh_agent_standalone-gkd-ssh-agent-standalone.Po
1074
1075=== modified file 'NEWS'
1076--- NEWS 2014-12-06 18:47:09 +0000
1077+++ NEWS 2015-02-27 19:55:06 +0000
1078@@ -1,3 +1,9 @@
1079+Changes in version 3.15.90 are:
1080+ * Fix leaks [#738508]
1081+ * Refactoring
1082+ * Build fixes [#740190]
1083+ * Updated translations
1084+
1085 Changes in version 3.14.0 are:
1086 * Remove residual GTK+ usage
1087 * Updated translations
1088
1089=== modified file 'configure'
1090--- configure 2014-12-06 18:47:09 +0000
1091+++ configure 2015-02-27 19:55:06 +0000
1092@@ -1,6 +1,6 @@
1093 #! /bin/sh
1094 # Guess values for system-dependent variables and create Makefiles.
1095-# Generated by GNU Autoconf 2.69 for gnome-keyring 3.14.0.
1096+# Generated by GNU Autoconf 2.69 for gnome-keyring 3.15.90.
1097 #
1098 # Report bugs to <gnome-keyring-list@gnome.org>.
1099 #
1100@@ -590,8 +590,8 @@
1101 # Identity of this package.
1102 PACKAGE_NAME='gnome-keyring'
1103 PACKAGE_TARNAME='gnome-keyring'
1104-PACKAGE_VERSION='3.14.0'
1105-PACKAGE_STRING='gnome-keyring 3.14.0'
1106+PACKAGE_VERSION='3.15.90'
1107+PACKAGE_STRING='gnome-keyring 3.15.90'
1108 PACKAGE_BUGREPORT='gnome-keyring-list@gnome.org'
1109 PACKAGE_URL='https://wiki.gnome.org/Projects/GnomeKeyring'
1110
1111@@ -1465,7 +1465,7 @@
1112 # Omit some internal or obsolete options to make the list less imposing.
1113 # This message is too long to be a string in the A/UX 3.1 sh.
1114 cat <<_ACEOF
1115-\`configure' configures gnome-keyring 3.14.0 to adapt to many kinds of systems.
1116+\`configure' configures gnome-keyring 3.15.90 to adapt to many kinds of systems.
1117
1118 Usage: $0 [OPTION]... [VAR=VALUE]...
1119
1120@@ -1535,7 +1535,7 @@
1121
1122 if test -n "$ac_init_help"; then
1123 case $ac_init_help in
1124- short | recursive ) echo "Configuration of gnome-keyring 3.14.0:";;
1125+ short | recursive ) echo "Configuration of gnome-keyring 3.15.90:";;
1126 esac
1127 cat <<\_ACEOF
1128
1129@@ -1707,7 +1707,7 @@
1130 test -n "$ac_init_help" && exit $ac_status
1131 if $ac_init_version; then
1132 cat <<\_ACEOF
1133-gnome-keyring configure 3.14.0
1134+gnome-keyring configure 3.15.90
1135 generated by GNU Autoconf 2.69
1136
1137 Copyright (C) 2012 Free Software Foundation, Inc.
1138@@ -2130,7 +2130,7 @@
1139 This file contains any messages produced by compilers while
1140 running configure, to aid debugging if configure makes a mistake.
1141
1142-It was created by gnome-keyring $as_me 3.14.0, which was
1143+It was created by gnome-keyring $as_me 3.15.90, which was
1144 generated by GNU Autoconf 2.69. Invocation command line was
1145
1146 $ $0 $@
1147@@ -3022,7 +3022,7 @@
1148
1149 # Define the identity of the package.
1150 PACKAGE='gnome-keyring'
1151- VERSION='3.14.0'
1152+ VERSION='3.15.90'
1153
1154
1155 cat >>confdefs.h <<_ACEOF
1156@@ -17777,7 +17777,7 @@
1157 # report actual input values of CONFIG_FILES etc. instead of their
1158 # values after options handling.
1159 ac_log="
1160-This file was extended by gnome-keyring $as_me 3.14.0, which was
1161+This file was extended by gnome-keyring $as_me 3.15.90, which was
1162 generated by GNU Autoconf 2.69. Invocation command line was
1163
1164 CONFIG_FILES = $CONFIG_FILES
1165@@ -17844,7 +17844,7 @@
1166 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1167 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1168 ac_cs_version="\\
1169-gnome-keyring config.status 3.14.0
1170+gnome-keyring config.status 3.15.90
1171 configured by $0, generated by GNU Autoconf 2.69,
1172 with options \\"\$ac_cs_config\\"
1173
1174
1175=== modified file 'configure.ac'
1176--- configure.ac 2014-12-06 18:47:09 +0000
1177+++ configure.ac 2015-02-27 19:55:06 +0000
1178@@ -1,5 +1,5 @@
1179 AC_INIT(gnome-keyring,
1180- 3.14.0,
1181+ 3.15.90,
1182 [gnome-keyring-list@gnome.org],
1183 [gnome-keyring],
1184 [https://wiki.gnome.org/Projects/GnomeKeyring])
1185
1186=== modified file 'daemon/dbus/gkd-dbus.c'
1187--- daemon/dbus/gkd-dbus.c 2014-12-06 18:47:09 +0000
1188+++ daemon/dbus/gkd-dbus.c 2015-02-27 19:55:06 +0000
1189@@ -102,7 +102,6 @@
1190
1191 const gchar **env;
1192 DBusMessageIter items, entry;
1193- gchar **parts;
1194
1195 env = gkd_util_get_environment ();
1196 g_return_val_if_fail (env, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
1197@@ -113,13 +112,17 @@
1198 if (!dbus_message_iter_open_container (&args, DBUS_TYPE_ARRAY, "{ss}", &items))
1199 g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY);
1200 while (*env) {
1201+ gchar **parts;
1202 parts = g_strsplit (*env, "=", 2);
1203 g_return_val_if_fail (parts && parts[0] && parts[1], DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
1204 if (!dbus_message_iter_open_container (&items, DBUS_TYPE_DICT_ENTRY, NULL, &entry) ||
1205 !dbus_message_iter_append_basic (&entry, DBUS_TYPE_STRING, &parts[0]) ||
1206 !dbus_message_iter_append_basic (&entry, DBUS_TYPE_STRING, &parts[1]) ||
1207- !dbus_message_iter_close_container (&items, &entry))
1208+ !dbus_message_iter_close_container (&items, &entry)) {
1209+ g_strfreev (parts);
1210 g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY);
1211+ }
1212+ g_strfreev (parts);
1213 ++env;
1214 }
1215 if (!dbus_message_iter_close_container (&args, &items))
1216
1217=== modified file 'daemon/dbus/gkd-secret-service.c'
1218--- daemon/dbus/gkd-secret-service.c 2014-12-06 18:47:09 +0000
1219+++ daemon/dbus/gkd-secret-service.c 2015-02-27 19:55:06 +0000
1220@@ -1245,6 +1245,9 @@
1221 g_hash_table_destroy (self->aliases);
1222 self->aliases = NULL;
1223
1224+ g_free (self->alias_directory);
1225+ self->alias_directory = NULL;
1226+
1227 G_OBJECT_CLASS (gkd_secret_service_parent_class)->finalize (obj);
1228 }
1229
1230
1231=== modified file 'daemon/dbus/test-dbus-items.c'
1232--- daemon/dbus/test-dbus-items.c 2014-04-06 23:26:34 +0000
1233+++ daemon/dbus/test-dbus-items.c 2015-02-27 19:55:06 +0000
1234@@ -159,8 +159,10 @@
1235 g_assert_cmpuint (modified, >, (g_get_real_time () / G_TIME_SPAN_SECOND) - 10);
1236 g_assert_cmpuint (created, ==, modified);
1237
1238- if (!g_test_thorough ())
1239+ if (!g_test_thorough ()) {
1240+ g_free (item);
1241 return;
1242+ }
1243
1244 /* Unfortunately have to wait 1.25 seconds here */
1245 g_usleep (G_TIME_SPAN_SECOND + (G_TIME_SPAN_SECOND / 4));
1246
1247=== modified file 'daemon/gpg-agent/Makefile.am'
1248--- daemon/gpg-agent/Makefile.am 2014-12-06 18:47:09 +0000
1249+++ daemon/gpg-agent/Makefile.am 2015-02-27 19:55:06 +0000
1250@@ -13,18 +13,3 @@
1251 libgkd_gpg_agent_la_CFLAGS = \
1252 $(GCK_CFLAGS) \
1253 $(GCR_CFLAGS)
1254-
1255-# ------------------------------------------------------------------------------
1256-# Standalone binary
1257-
1258-noinst_PROGRAMS += \
1259- gkd-gpg-agent-standalone
1260-
1261-gkd_gpg_agent_standalone_SOURCES = \
1262- daemon/gpg-agent/gkd-gpg-agent-standalone.c
1263-gkd_gpg_agent_standalone_CFLAGS = \
1264- $(GCK_CFLAGS)
1265-gkd_gpg_agent_standalone_LDADD = \
1266- libgkd-gpg-agent.la \
1267- libegg.la \
1268- $(DAEMON_LIBS)
1269
1270=== modified file 'daemon/gpg-agent/gkd-gpg-agent-ops.c'
1271--- daemon/gpg-agent/gkd-gpg-agent-ops.c 2014-12-06 18:47:09 +0000
1272+++ daemon/gpg-agent/gkd-gpg-agent-ops.c 2015-02-27 19:55:06 +0000
1273@@ -23,6 +23,8 @@
1274 #include "gkd-gpg-agent.h"
1275 #include "gkd-gpg-agent-private.h"
1276
1277+#include "daemon/login/gkd-login.h"
1278+
1279 #include "egg/egg-error.h"
1280 #include "egg/egg-secure-memory.h"
1281
1282@@ -48,31 +50,6 @@
1283 * PASSWORD STUFF
1284 */
1285
1286-static void
1287-keyid_to_field_attribute (const gchar *keyid,
1288- GckBuilder *attrs)
1289-{
1290- GString *fields = g_string_sized_new (128);
1291-
1292- g_assert (keyid);
1293- g_assert (attrs);
1294-
1295- /* Remember that attribute names are sorted */
1296-
1297- g_string_append (fields, "keyid");
1298- g_string_append_c (fields, '\0');
1299- g_string_append (fields, keyid);
1300- g_string_append_c (fields, '\0');
1301-
1302- g_string_append (fields, "source");
1303- g_string_append_c (fields, '\0');
1304- g_string_append (fields, "gnome-keyring:gpg-agent");
1305- g_string_append_c (fields, '\0');
1306-
1307- gck_builder_add_data (attrs, CKA_G_FIELDS, (const guchar *)fields->str, fields->len);
1308- g_string_free (fields, TRUE);
1309-}
1310-
1311 static gchar*
1312 calculate_label_for_key (const gchar *keyid, const gchar *description)
1313 {
1314@@ -107,191 +84,11 @@
1315 return label;
1316 }
1317
1318-static GList*
1319-find_saved_items (GckSession *session, GckAttributes *attrs)
1320-{
1321- GckBuilder builder = GCK_BUILDER_INIT;
1322- GError *error = NULL;
1323- const GckAttribute *attr;
1324- GckObject *search;
1325- GList *results;
1326- gpointer data;
1327- gsize n_data;
1328-
1329- gck_builder_add_ulong (&builder, CKA_CLASS, CKO_G_SEARCH);
1330- gck_builder_add_boolean (&builder, CKA_TOKEN, FALSE);
1331-
1332- attr = gck_attributes_find (attrs, CKA_G_COLLECTION);
1333- if (attr != NULL)
1334- gck_builder_add_attribute (&builder, attr);
1335-
1336- attr = gck_attributes_find (attrs, CKA_G_FIELDS);
1337- g_return_val_if_fail (attr != NULL, NULL);
1338- gck_builder_add_attribute (&builder, attr);
1339-
1340- search = gck_session_create_object (session, gck_builder_end (&builder), NULL, &error);
1341- if (search == NULL) {
1342- g_warning ("couldn't perform search for gpg agent stored passphrases: %s",
1343- egg_error_message (error));
1344- g_clear_error (&error);
1345- return NULL;
1346- }
1347-
1348- data = gck_object_get_data (search, CKA_G_MATCHED, NULL, &n_data, &error);
1349- gck_object_destroy (search, NULL, NULL);
1350- g_object_unref (search);
1351-
1352- if (data == NULL) {
1353- g_warning ("couldn't retrieve list of gpg agent stored passphrases: %s",
1354- egg_error_message (error));
1355- g_clear_error (&error);
1356- return NULL;
1357- }
1358-
1359- results = gck_objects_from_handle_array (session, data, n_data / sizeof (CK_ULONG));
1360-
1361- g_free (data);
1362- return results;
1363-}
1364-
1365 static void
1366-do_save_password (GckSession *session, const gchar *keyid, const gchar *description,
1367- const gchar *password, GckAttributes *options)
1368-{
1369- GckBuilder builder;
1370- GckAttributes *attrs;
1371- gpointer identifier;
1372- gsize n_identifier;
1373- GList *previous;
1374- GError *error = NULL;
1375- GckObject *item;
1376- gchar *text;
1377- gchar *label;
1378- gint i;
1379-
1380- g_assert (password);
1381-
1382- /* Can't save anything if there was no keyid */
1383- if (keyid == NULL)
1384- return;
1385-
1386- /* Sending a password, needs to be secure */
1387- gck_builder_init_full (&builder, GCK_BUILDER_SECURE_MEMORY);
1388-
1389- /* Build up basic set of attributes */
1390- gck_builder_add_boolean (&builder, CKA_TOKEN, TRUE);
1391- gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
1392- keyid_to_field_attribute (keyid, &builder);
1393-
1394- /* Bring in all the unlock options */
1395- for (i = 0; options && i < gck_attributes_count (options); ++i)
1396- gck_builder_add_attribute (&builder, gck_attributes_at (options, i));
1397-
1398- /* Find a previously stored object like this, and replace if so */
1399- attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
1400- previous = find_saved_items (session, attrs);
1401- if (previous) {
1402- identifier = gck_object_get_data (previous->data, CKA_ID, NULL, &n_identifier, NULL);
1403- if (identifier != NULL)
1404- gck_builder_add_data (&builder, CKA_ID, identifier, n_identifier);
1405- g_free (identifier);
1406- gck_list_unref_free (previous);
1407- }
1408-
1409- text = calculate_label_for_key (keyid, description);
1410- label = g_strdup_printf (_("PGP Key: %s"), text);
1411- g_free (text);
1412-
1413- /* Put in the remainder of the attributes */
1414- gck_builder_add_all (&builder, attrs);
1415- gck_builder_add_string (&builder, CKA_VALUE, password);
1416- gck_builder_add_string (&builder, CKA_LABEL, label);
1417- gck_attributes_unref (attrs);
1418- g_free (label);
1419-
1420- item = gck_session_create_object (session, gck_builder_end (&builder), NULL, &error);
1421- if (item == NULL) {
1422- g_warning ("couldn't store gpg agent password: %s", egg_error_message (error));
1423- g_clear_error (&error);
1424- }
1425-
1426- if (item != NULL)
1427- g_object_unref (item);
1428-}
1429-
1430-static gboolean
1431 do_clear_password (GckSession *session, const gchar *keyid)
1432 {
1433- GckBuilder builder = GCK_BUILDER_INIT;
1434- GckAttributes *attrs;
1435- GList *objects, *l;
1436- GError *error = NULL;
1437-
1438- gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
1439- keyid_to_field_attribute (keyid, &builder);
1440-
1441- attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
1442- objects = find_saved_items (session, attrs);
1443- gck_attributes_unref (attrs);
1444-
1445- if (!objects)
1446- return TRUE;
1447-
1448- /* Delete first item */
1449- for (l = objects; l; l = g_list_next (l)) {
1450- if (gck_object_destroy (l->data, NULL, &error)) {
1451- break; /* Only delete the first item */
1452- } else {
1453- g_warning ("couldn't clear gpg agent password: %s",
1454- egg_error_message (error));
1455- g_clear_error (&error);
1456- }
1457- }
1458-
1459- gck_list_unref_free (objects);
1460- return TRUE;
1461-}
1462-
1463-static gchar*
1464-do_lookup_password (GckSession *session, const gchar *keyid)
1465-{
1466- GckBuilder builder = GCK_BUILDER_INIT;
1467- GckAttributes *attrs;
1468- GList *objects, *l;
1469- GError *error = NULL;
1470- gpointer data = NULL;
1471- gsize n_data;
1472-
1473- if (keyid == NULL)
1474- return NULL;
1475-
1476- gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
1477- keyid_to_field_attribute (keyid, &builder);
1478-
1479- attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
1480- objects = find_saved_items (session, attrs);
1481- gck_attributes_unref (attrs);
1482-
1483- if (!objects)
1484- return NULL;
1485-
1486- /* Return first password */
1487- for (l = objects; l; l = g_list_next (l)) {
1488- data = gck_object_get_data_full (l->data, CKA_VALUE, egg_secure_realloc, NULL, &n_data, &error);
1489- if (error) {
1490- if (!g_error_matches (error, GCK_ERROR, CKR_USER_NOT_LOGGED_IN))
1491- g_warning ("couldn't lookup gpg agent password: %s", egg_error_message (error));
1492- g_clear_error (&error);
1493- data = NULL;
1494- } else {
1495- break;
1496- }
1497- }
1498-
1499- gck_list_unref_free (objects);
1500-
1501- /* Data is null terminated */
1502- return data;
1503+ gkd_login_clear_password (session, "keyid", keyid,
1504+ "source", "gnome-keyring:gpg-agent", NULL);
1505 }
1506
1507 static void
1508@@ -330,11 +127,9 @@
1509 const gchar *description,
1510 gboolean confirm)
1511 {
1512- GckBuilder builder = GCK_BUILDER_INIT;
1513 GcrPrompt *prompt;
1514 GError *error = NULL;
1515 gboolean auto_unlock;
1516- GList *objects;
1517 const gchar *choice;
1518
1519 g_assert (GCK_IS_SESSION (session));
1520@@ -360,23 +155,7 @@
1521 gcr_prompt_set_choice_label (prompt, NULL);
1522
1523 } else {
1524- auto_unlock = FALSE;
1525-
1526- gck_builder_add_ulong (&builder, CKA_CLASS, CKO_G_COLLECTION);
1527- gck_builder_add_string (&builder, CKA_ID, "login");
1528- gck_builder_add_boolean (&builder, CKA_G_LOCKED, FALSE);
1529-
1530- /* Check if the login keyring is usable */
1531- objects = gck_session_find_objects (session, gck_builder_end (&builder), NULL, &error);
1532-
1533- if (error) {
1534- g_warning ("gpg agent couldn't lookup for login keyring: %s", egg_error_message (error));
1535- g_clear_error (&error);
1536- } else if (objects) {
1537- auto_unlock = TRUE;
1538- }
1539-
1540- gck_list_unref_free (objects);
1541+ auto_unlock = gkd_login_available (session);
1542
1543 choice = NULL;
1544 if (auto_unlock)
1545@@ -393,20 +172,21 @@
1546 do_get_password (GckSession *session, const gchar *keyid, const gchar *errmsg,
1547 const gchar *prompt_text, const gchar *description, gboolean confirm)
1548 {
1549- GckBuilder builder = GCK_BUILDER_INIT;
1550 GSettings *settings;
1551- GckAttributes *attrs;
1552 gchar *password = NULL;
1553 GcrPrompt *prompt;
1554 gboolean chosen;
1555 GError *error = NULL;
1556 gint lifetime;
1557 gchar *method;
1558+ gchar *label;
1559+ gchar *text;
1560
1561 g_assert (GCK_IS_SESSION (session));
1562
1563 /* Do we have the keyid? */
1564- password = do_lookup_password (session, keyid);
1565+ password = gkd_login_lookup_password (session, "keyid", keyid,
1566+ "source", "gnome-keyring:gpg-agent", NULL);
1567 if (password != NULL)
1568 return password;
1569
1570@@ -428,33 +208,26 @@
1571 chosen = gcr_prompt_get_choice_chosen (prompt);
1572
1573 if (chosen) {
1574- g_settings_set_string (settings, "gpg-cache-method", GCR_UNLOCK_OPTION_ALWAYS);
1575- gck_builder_add_string (&builder, CKA_G_COLLECTION, "login");
1576+ method = g_strdup (GCR_UNLOCK_OPTION_ALWAYS);
1577+ lifetime = -1;
1578
1579 } else {
1580 method = g_settings_get_string (settings, "gpg-cache-method");
1581 lifetime = g_settings_get_int (settings, "gpg-cache-ttl");
1582-
1583- if (g_strcmp0 (method, GCR_UNLOCK_OPTION_IDLE) == 0) {
1584- gck_builder_add_boolean (&builder, CKA_GNOME_TRANSIENT, TRUE);
1585- gck_builder_add_ulong (&builder, CKA_G_DESTRUCT_IDLE, lifetime);
1586-
1587- } else if (g_strcmp0 (method, GCR_UNLOCK_OPTION_TIMEOUT) == 0) {
1588- gck_builder_add_boolean (&builder, CKA_GNOME_TRANSIENT, TRUE);
1589- gck_builder_add_ulong (&builder, CKA_G_DESTRUCT_AFTER, lifetime);
1590-
1591- } else if (g_strcmp0 (method, GCR_UNLOCK_OPTION_SESSION)){
1592- g_message ("Unsupported gpg-cache-method setting: %s", method);
1593+ if (g_str_equal (method, GCR_UNLOCK_OPTION_ALWAYS)) {
1594+ g_free (method);
1595+ method = NULL;
1596 }
1597-
1598- gck_builder_add_string (&builder, CKA_G_COLLECTION, "session");
1599- g_free (method);
1600 }
1601
1602 /* Now actually save the password */
1603- attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
1604- do_save_password (session, keyid, description, password, attrs);
1605- gck_attributes_unref (attrs);
1606+ text = calculate_label_for_key (keyid, description);
1607+ label = g_strdup_printf (_("PGP Key: %s"), text);
1608+ gkd_login_store_password (session, password, label, method, lifetime,
1609+ "keyid", keyid, "source", "gnome-keyring:gpg-agent", NULL);
1610+ g_free (label);
1611+ g_free (method);
1612+ g_free (text);
1613 }
1614
1615 g_clear_object (&prompt);
1616
1617=== removed file 'daemon/gpg-agent/gkd-gpg-agent-standalone.c'
1618--- daemon/gpg-agent/gkd-gpg-agent-standalone.c 2014-12-06 18:47:09 +0000
1619+++ daemon/gpg-agent/gkd-gpg-agent-standalone.c 1970-01-01 00:00:00 +0000
1620@@ -1,123 +0,0 @@
1621-/*
1622- * gnome-keyring
1623- *
1624- * Copyright (C) 2010 Stefan Walter
1625- *
1626- * This program is free software; you can redistribute it and/or modify
1627- * it under the terms of the GNU Lesser General Public License as
1628- * published by the Free Software Foundation; either version 2.1 of
1629- * the License, or (at your option) any later version.
1630- *
1631- * This program is distributed in the hope that it will be useful, but
1632- * WITHOUT ANY WARRANTY; without even the implied warranty of
1633- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1634- * Lesser General Public License for more details.
1635- *
1636- * You should have received a copy of the GNU Lesser General Public
1637- * License along with this program; if not, see
1638- * <http://www.gnu.org/licenses/>.
1639- */
1640-
1641-#include "config.h"
1642-
1643-#include "gkd-gpg-agent.h"
1644-#include "gkd-gpg-agent-private.h"
1645-
1646-#include "egg/egg-error.h"
1647-#include "egg/egg-secure-memory.h"
1648-
1649-#include <gck/gck.h>
1650-
1651-#include <glib.h>
1652-#include <glib-object.h>
1653-
1654-#include <pwd.h>
1655-#include <string.h>
1656-#include <unistd.h>
1657-
1658-EGG_SECURE_DEFINE_GLIB_GLOBALS ();
1659-
1660-static gboolean
1661-accept_client (GIOChannel *channel, GIOCondition cond, gpointer unused)
1662-{
1663- gkd_gpg_agent_accept ();
1664- return TRUE;
1665-}
1666-
1667-static gboolean
1668-authenticate_slot (GckModule *module, GckSlot *slot, gchar *label, gchar **password, gpointer unused)
1669-{
1670- gchar *prompt = g_strdup_printf ("Enter token password (%s): ", label);
1671- char *result = getpass (prompt);
1672- g_free (prompt);
1673- *password = g_strdup (result);
1674- memset (result, 0, strlen (result));
1675- return TRUE;
1676-}
1677-
1678-static gboolean
1679-authenticate_object (GckModule *module, GckObject *object, gchar *label, gchar **password)
1680-{
1681- gchar *prompt = g_strdup_printf ("Enter object password (%s): ", label);
1682- char *result = getpass (prompt);
1683- g_free (prompt);
1684- *password = g_strdup (result);
1685- memset (result, 0, strlen (result));
1686- return TRUE;
1687-}
1688-
1689-int
1690-main(int argc, char *argv[])
1691-{
1692- GckModule *module;
1693- GError *error = NULL;
1694- GIOChannel *channel;
1695- GMainLoop *loop;
1696- gboolean ret;
1697- int sock;
1698-
1699-#if !GLIB_CHECK_VERSION(2,35,0)
1700- g_type_init ();
1701-#endif
1702-
1703- if (argc <= 1) {
1704- g_message ("specify pkcs11 module on the command line");
1705- return 1;
1706- }
1707-
1708- module = gck_module_initialize (argv[1], NULL, &error);
1709- if (!module) {
1710- g_message ("couldn't load pkcs11 module: %s", egg_error_message (error));
1711- g_clear_error (&error);
1712- return 1;
1713- }
1714-
1715- g_signal_connect (module, "authenticate-slot", G_CALLBACK (authenticate_slot), NULL);
1716- g_signal_connect (module, "authenticate-object", G_CALLBACK (authenticate_object), NULL);
1717-
1718- ret = gkd_gpg_agent_initialize_with_module (module);
1719- g_object_unref (module);
1720-
1721- if (ret == FALSE)
1722- return 1;
1723-
1724- sock = gkd_gpg_agent_startup ("/tmp");
1725- if (sock == -1)
1726- return 1;
1727-
1728- channel = g_io_channel_unix_new (sock);
1729- g_io_add_watch (channel, G_IO_IN | G_IO_HUP, accept_client, NULL);
1730- g_io_channel_unref (channel);
1731-
1732- g_print ("GPG_AGENT_INFO=%s\n", g_getenv ("GPG_AGENT_INFO"));
1733-
1734- /* Run a main loop */
1735- loop = g_main_loop_new (NULL, FALSE);
1736- g_main_loop_run (loop);
1737- g_main_loop_unref (loop);
1738-
1739- gkd_gpg_agent_shutdown ();
1740- gkd_gpg_agent_uninitialize ();
1741-
1742- return 0;
1743-}
1744
1745=== modified file 'daemon/gpg-agent/gkd-gpg-agent.c'
1746--- daemon/gpg-agent/gkd-gpg-agent.c 2014-12-06 18:47:09 +0000
1747+++ daemon/gpg-agent/gkd-gpg-agent.c 2015-02-27 19:55:06 +0000
1748@@ -207,6 +207,7 @@
1749 }
1750
1751 g_io_channel_shutdown (call.channel, FALSE, NULL);
1752+ g_io_channel_unref (call.channel);
1753 g_object_unref (call.module);
1754
1755 close (call.sock);
1756
1757=== modified file 'daemon/login/Makefile.am'
1758--- daemon/login/Makefile.am 2014-12-06 18:47:09 +0000
1759+++ daemon/login/Makefile.am 2015-02-27 19:55:06 +0000
1760@@ -10,6 +10,7 @@
1761 $(NULL)
1762 libgkd_login_la_CFLAGS = \
1763 $(GCK_CFLAGS) \
1764+ $(GCR_CFLAGS) \
1765 $(GOBJECT_CFLAGS)
1766 libgkd_login_la_LIBADD = \
1767 $(GCK_LIBS) \
1768
1769=== modified file 'daemon/login/gkd-login.c'
1770--- daemon/login/gkd-login.c 2014-12-06 18:47:09 +0000
1771+++ daemon/login/gkd-login.c 2015-02-27 19:55:06 +0000
1772@@ -31,11 +31,14 @@
1773 #include "pkcs11/wrap-layer/gkm-wrap-layer.h"
1774
1775 #include <gck/gck.h>
1776+#include <gcr/gcr-unlock-options.h>
1777
1778 #include <glib/gi18n.h>
1779
1780 #include <string.h>
1781
1782+EGG_SECURE_DECLARE (gkd_login);
1783+
1784 static GList*
1785 module_instances (void)
1786 {
1787@@ -82,6 +85,10 @@
1788 GckSlot *slot = NULL;
1789 GError *error = NULL;
1790 GckSession *session;
1791+ GList *owned = NULL;
1792+
1793+ if (modules == NULL)
1794+ modules = owned = module_instances ();
1795
1796 slot = gck_modules_token_for_uri (modules, "pkcs11:token=Secret%20Store", &error);
1797 if (!slot) {
1798@@ -96,6 +103,7 @@
1799 }
1800
1801 g_object_unref (slot);
1802+ g_list_free_full (owned, g_object_unref);
1803
1804 return session;
1805 }
1806@@ -415,3 +423,295 @@
1807 gck_list_unref_free (modules);
1808 return result;
1809 }
1810+
1811+gboolean
1812+gkd_login_available (GckSession *session)
1813+{
1814+ GckBuilder builder = GCK_BUILDER_INIT;
1815+ gboolean available = FALSE;
1816+ GError *error = NULL;
1817+ GList *objects;
1818+
1819+ if (!session)
1820+ session = lookup_login_session (NULL);
1821+ else
1822+ g_object_ref (session);
1823+
1824+ if (session) {
1825+ gck_builder_add_ulong (&builder, CKA_CLASS, CKO_G_COLLECTION);
1826+ gck_builder_add_string (&builder, CKA_ID, "login");
1827+ gck_builder_add_boolean (&builder, CKA_G_LOCKED, FALSE);
1828+
1829+ /* Check if the login keyring is usable */
1830+ objects = gck_session_find_objects (session, gck_builder_end (&builder), NULL, &error);
1831+ if (error) {
1832+ g_warning ("couldn't lookup login keyring: %s", error->message);
1833+ g_clear_error (&error);
1834+ } else if (objects) {
1835+ available = TRUE;
1836+ }
1837+ g_list_free_full (objects, g_object_unref);
1838+ }
1839+
1840+ g_object_unref (session);
1841+ return available;
1842+}
1843+
1844+static GList *
1845+find_saved_items (GckSession *session,
1846+ GckAttributes *attrs)
1847+{
1848+ GckBuilder builder = GCK_BUILDER_INIT;
1849+ GError *error = NULL;
1850+ const GckAttribute *attr;
1851+ GckObject *search;
1852+ GList *results;
1853+ gpointer data;
1854+ gsize n_data;
1855+
1856+ gck_builder_add_ulong (&builder, CKA_CLASS, CKO_G_SEARCH);
1857+ gck_builder_add_boolean (&builder, CKA_TOKEN, FALSE);
1858+
1859+ attr = gck_attributes_find (attrs, CKA_G_COLLECTION);
1860+ if (attr != NULL)
1861+ gck_builder_add_attribute (&builder, attr);
1862+
1863+ attr = gck_attributes_find (attrs, CKA_G_FIELDS);
1864+ g_return_val_if_fail (attr != NULL, NULL);
1865+ gck_builder_add_attribute (&builder, attr);
1866+
1867+ search = gck_session_create_object (session, gck_builder_end (&builder), NULL, &error);
1868+ if (search == NULL) {
1869+ g_warning ("couldn't perform search for gpg agent stored passphrases: %s",
1870+ egg_error_message (error));
1871+ g_clear_error (&error);
1872+ return NULL;
1873+ }
1874+
1875+ data = gck_object_get_data (search, CKA_G_MATCHED, NULL, &n_data, &error);
1876+ gck_object_destroy (search, NULL, NULL);
1877+ g_object_unref (search);
1878+
1879+ if (data == NULL) {
1880+ g_warning ("couldn't retrieve list of gpg agent stored passphrases: %s",
1881+ egg_error_message (error));
1882+ g_clear_error (&error);
1883+ return NULL;
1884+ }
1885+
1886+ results = gck_objects_from_handle_array (session, data, n_data / sizeof (CK_ULONG));
1887+
1888+ g_free (data);
1889+ return results;
1890+}
1891+
1892+static gboolean
1893+fields_to_attribute (GckBuilder *builder,
1894+ const gchar *field,
1895+ va_list va)
1896+{
1897+ GString *fields = g_string_sized_new (128);
1898+ const gchar *last = NULL;
1899+ const gchar *value;
1900+
1901+ while (field) {
1902+ if (g_strcmp0 (last, field) >= 0) {
1903+ g_critical ("lookup fields must be sorted '%s' >= '%s'", last, field);
1904+ return FALSE;
1905+ }
1906+
1907+ last = field;
1908+ value = va_arg (va, const gchar *);
1909+ g_return_val_if_fail (value != NULL, FALSE);
1910+
1911+ g_string_append (fields, field);
1912+ g_string_append_c (fields, '\0');
1913+ g_string_append (fields, value);
1914+ g_string_append_c (fields, '\0');
1915+
1916+ field = va_arg (va, const gchar *);
1917+ }
1918+
1919+ gck_builder_add_data (builder, CKA_G_FIELDS, (const guchar *)fields->str, fields->len);
1920+ g_string_free (fields, TRUE);
1921+ return TRUE;
1922+}
1923+
1924+gchar *
1925+gkd_login_lookup_password (GckSession *session,
1926+ const gchar *field,
1927+ ...)
1928+{
1929+ GckBuilder builder = GCK_BUILDER_INIT;
1930+ GckAttributes *attrs;
1931+ GList *objects, *l;
1932+ GError *error = NULL;
1933+ gpointer data = NULL;
1934+ gsize length;
1935+ va_list va;
1936+
1937+ if (!session)
1938+ session = lookup_login_session (NULL);
1939+ else
1940+ session = g_object_ref (session);
1941+ if (!session)
1942+ return NULL;
1943+
1944+ gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
1945+
1946+ va_start (va, field);
1947+ if (!fields_to_attribute (&builder, field, va))
1948+ g_return_val_if_reached (FALSE);
1949+ va_end (va);
1950+
1951+ attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
1952+ objects = find_saved_items (session, attrs);
1953+ gck_attributes_unref (attrs);
1954+
1955+ /* Return first password */
1956+ data = NULL;
1957+ for (l = objects; l; l = g_list_next (l)) {
1958+ data = gck_object_get_data_full (l->data, CKA_VALUE, egg_secure_realloc, NULL, &length, &error);
1959+ if (error) {
1960+ if (!g_error_matches (error, GCK_ERROR, CKR_USER_NOT_LOGGED_IN))
1961+ g_warning ("couldn't lookup gpg agent password: %s", egg_error_message (error));
1962+ g_clear_error (&error);
1963+ data = NULL;
1964+ } else {
1965+ break;
1966+ }
1967+ }
1968+
1969+ g_list_free_full (objects, g_object_unref);
1970+ g_object_unref (session);
1971+
1972+ /* Data is null terminated */
1973+ return data;
1974+}
1975+
1976+void
1977+gkd_login_clear_password (GckSession *session,
1978+ const gchar *field,
1979+ ...)
1980+{
1981+ GckBuilder builder = GCK_BUILDER_INIT;
1982+ GckAttributes *attrs;
1983+ GList *objects, *l;
1984+ GError *error = NULL;
1985+ va_list va;
1986+
1987+ if (!session)
1988+ session = lookup_login_session (NULL);
1989+ else
1990+ session = g_object_ref (session);
1991+ if (!session)
1992+ return;
1993+
1994+ gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
1995+
1996+ va_start (va, field);
1997+ if (!fields_to_attribute (&builder, field, va))
1998+ g_return_if_reached ();
1999+ va_end (va);
2000+
2001+ attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
2002+ objects = find_saved_items (session, attrs);
2003+ gck_attributes_unref (attrs);
2004+
2005+ /* Delete first item */
2006+ for (l = objects; l; l = g_list_next (l)) {
2007+ if (gck_object_destroy (l->data, NULL, &error))
2008+ break; /* Only delete the first item */
2009+ g_warning ("couldn't clear assword: %s", error->message);
2010+ g_clear_error (&error);
2011+ }
2012+
2013+ g_list_free_full (objects, g_object_unref);
2014+ g_object_unref (session);
2015+}
2016+
2017+gboolean
2018+gkd_login_store_password (GckSession *session,
2019+ const gchar *password,
2020+ const gchar *label,
2021+ const gchar *method,
2022+ gint lifetime,
2023+ const gchar *field,
2024+ ...)
2025+{
2026+ GckBuilder builder = GCK_BUILDER_INIT;
2027+ GckAttributes *attrs;
2028+ guchar *identifier;
2029+ GList *previous;
2030+ gboolean ret = FALSE;
2031+ GckObject *item;
2032+ GError *error = NULL;
2033+ gsize length;
2034+ va_list va;
2035+
2036+ if (!method)
2037+ method = GCR_UNLOCK_OPTION_SESSION;
2038+
2039+ if (!session)
2040+ session = lookup_login_session (NULL);
2041+ else
2042+ session = g_object_ref (session);
2043+ if (!session)
2044+ return FALSE;
2045+
2046+ va_start (va, field);
2047+ if (!fields_to_attribute (&builder, field, va))
2048+ g_return_val_if_reached (FALSE);
2049+ va_end (va);
2050+
2051+ if (g_str_equal (method, GCR_UNLOCK_OPTION_ALWAYS)) {
2052+ gck_builder_add_string (&builder, CKA_G_COLLECTION, "login");
2053+
2054+ } else {
2055+ if (g_str_equal (method, GCR_UNLOCK_OPTION_IDLE)) {
2056+ gck_builder_add_boolean (&builder, CKA_GNOME_TRANSIENT, TRUE);
2057+ gck_builder_add_ulong (&builder, CKA_G_DESTRUCT_IDLE, lifetime);
2058+
2059+ } else if (g_str_equal (method, GCR_UNLOCK_OPTION_TIMEOUT)) {
2060+ gck_builder_add_boolean (&builder, CKA_GNOME_TRANSIENT, TRUE);
2061+ gck_builder_add_ulong (&builder, CKA_G_DESTRUCT_AFTER, lifetime);
2062+
2063+ } else if (!g_str_equal (method, GCR_UNLOCK_OPTION_SESSION)) {
2064+ g_message ("Unsupported gpg-cache-method setting: %s", method);
2065+ }
2066+ gck_builder_add_string (&builder, CKA_G_COLLECTION, "session");
2067+ }
2068+
2069+ gck_builder_add_boolean (&builder, CKA_TOKEN, TRUE);
2070+ gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
2071+
2072+ /* Find a previously stored object like this, and replace if so */
2073+ attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
2074+ previous = find_saved_items (session, attrs);
2075+ if (previous) {
2076+ identifier = gck_object_get_data (previous->data, CKA_ID, NULL, &length, NULL);
2077+ if (identifier != NULL)
2078+ gck_builder_add_data (&builder, CKA_ID, identifier, length);
2079+ g_free (identifier);
2080+ g_list_free_full (previous, g_object_unref);
2081+ }
2082+
2083+ /* Put in the remainder of the attributes */
2084+ gck_builder_add_all (&builder, attrs);
2085+ gck_builder_add_string (&builder, CKA_VALUE, password);
2086+ gck_builder_add_string (&builder, CKA_LABEL, label);
2087+ gck_attributes_unref (attrs);
2088+
2089+ item = gck_session_create_object (session, gck_builder_end (&builder), NULL, &error);
2090+ if (item == NULL) {
2091+ g_warning ("couldn't store gpg agent password: %s", egg_error_message (error));
2092+ g_clear_error (&error);
2093+ ret = FALSE;
2094+ } else {
2095+ g_object_unref (item);
2096+ ret = TRUE;
2097+ }
2098+
2099+ g_object_unref (session);
2100+ return ret;
2101+}
2102
2103=== modified file 'daemon/login/gkd-login.h'
2104--- daemon/login/gkd-login.h 2014-04-06 23:26:34 +0000
2105+++ daemon/login/gkd-login.h 2015-02-27 19:55:06 +0000
2106@@ -23,9 +23,29 @@
2107
2108 #include <glib.h>
2109
2110+typedef struct _GckSession GckSession;
2111+
2112 gboolean gkd_login_unlock (const gchar *master);
2113
2114 gboolean gkd_login_change_lock (const gchar *original,
2115 const gchar *master);
2116
2117+gboolean gkd_login_available (GckSession *session);
2118+
2119+gchar * gkd_login_lookup_password (GckSession *session,
2120+ const gchar *field,
2121+ ...) G_GNUC_NULL_TERMINATED;
2122+
2123+void gkd_login_clear_password (GckSession *session,
2124+ const gchar *field,
2125+ ...) G_GNUC_NULL_TERMINATED;
2126+
2127+gboolean gkd_login_store_password (GckSession *session,
2128+ const gchar *password,
2129+ const gchar *label,
2130+ const gchar *method,
2131+ gint lifetime,
2132+ const gchar *field,
2133+ ...) G_GNUC_NULL_TERMINATED;
2134+
2135 #endif /* __GKD_LOGIN_H__ */
2136
2137=== modified file 'daemon/ssh-agent/gkd-ssh-agent-ops.c'
2138--- daemon/ssh-agent/gkd-ssh-agent-ops.c 2012-05-16 17:39:27 +0000
2139+++ daemon/ssh-agent/gkd-ssh-agent-ops.c 2015-02-27 19:55:06 +0000
2140@@ -139,6 +139,7 @@
2141 en = gck_modules_enumerate_objects (modules, search, GCK_SESSION_AUTHENTICATE | GCK_SESSION_READ_WRITE);
2142
2143 for (;;) {
2144+ gboolean done;
2145 object = gck_enumerator_next (en, NULL, &error);
2146 if (!object) {
2147 if (error) {
2148@@ -148,7 +149,9 @@
2149 break;
2150 }
2151
2152- if (!(func) (object, user_data))
2153+ done = !(func) (object, user_data);
2154+ g_object_unref (object);
2155+ if (done)
2156 break;
2157 }
2158
2159@@ -435,6 +438,7 @@
2160 g_free (label);
2161 return;
2162 }
2163+ g_free (label);
2164 }
2165
2166 /* Lock token objects, remove session objects */
2167@@ -773,9 +777,10 @@
2168 g_return_val_if_fail (en, FALSE);
2169
2170 all_attrs = NULL;
2171- do {
2172- obj = gck_enumerator_next (en, NULL, &error);
2173- } while (obj && load_identity_v2_attributes (obj, &all_attrs));
2174+ while ((obj = gck_enumerator_next (en, NULL, &error))) {
2175+ load_identity_v2_attributes (obj, &all_attrs);
2176+ g_object_unref (obj);
2177+ }
2178
2179 g_object_unref (en);
2180
2181@@ -839,10 +844,10 @@
2182 GCK_SESSION_AUTHENTICATE | GCK_SESSION_READ_WRITE);
2183
2184 all_attrs = NULL;
2185- do {
2186- obj = gck_enumerator_next (en, NULL, &error);
2187- } while (obj && load_identity_v1_attributes (obj, &all_attrs));
2188-
2189+ while ((obj = gck_enumerator_next (en, NULL, &error))) {
2190+ load_identity_v1_attributes (obj, &all_attrs);
2191+ g_object_unref (obj);
2192+ }
2193 g_object_unref (en);
2194
2195 if (error) {
2196
2197=== modified file 'daemon/test-startup.c'
2198--- daemon/test-startup.c 2014-04-06 23:26:34 +0000
2199+++ daemon/test-startup.c 2015-02-27 19:55:06 +0000
2200@@ -232,13 +232,13 @@
2201 output = gkd_test_launch_daemon (test->directory, argv, &pid,
2202 "XDG_RUNTIME_DIR", "/tmp/keyring-test-two",
2203 NULL);
2204- g_free (output);
2205+ g_strfreev (output);
2206
2207 /* Replace with the second daemon */
2208 output = gkd_test_launch_daemon (test->directory, replace, &test->pid,
2209 "XDG_RUNTIME_DIR", "/tmp/keyring-test-two",
2210 NULL);
2211- g_free (output);
2212+ g_strfreev (output);
2213
2214 /* The first daemon should have exited cleanly here */
2215 g_assert_cmpint (waitpid (pid, &status, 0), ==, pid);
2216
2217=== modified file 'debian/changelog'
2218--- debian/changelog 2014-12-29 10:12:42 +0000
2219+++ debian/changelog 2015-02-27 19:55:06 +0000
2220@@ -1,3 +1,9 @@
2221+gnome-keyring (3.15.90-0ubuntu1) vivid; urgency=medium
2222+
2223+ * New upstream bugfix release.
2224+
2225+ -- Jackson Doak <noskcaj@ubuntu.com> Sat, 28 Feb 2015 06:42:02 +1100
2226+
2227 gnome-keyring (3.14.0-1ubuntu2) vivid; urgency=medium
2228
2229 * Fix the gpg/ssh agent check syntax. Thanks to Sergey Romanov (LP:
2230
2231=== modified file 'egg/egg-asn1x.c'
2232--- egg/egg-asn1x.c 2014-12-06 18:47:09 +0000
2233+++ egg/egg-asn1x.c 2015-02-27 19:55:06 +0000
2234@@ -2765,7 +2765,7 @@
2235
2236 /* Encode zero characters */
2237 anode_clr_value (node);
2238- anode_set_value (node, g_bytes_new_static ("", 0));
2239+ anode_take_value (node, g_bytes_new_static ("", 0));
2240 }
2241
2242 GQuark
2243@@ -2828,7 +2828,7 @@
2244 anode_write_integer_ulong (val, data, &n_data);
2245
2246 anode_clr_value (node);
2247- anode_set_value (node, g_bytes_new_take (data, n_data));
2248+ anode_take_value (node, g_bytes_new_take (data, n_data));
2249 }
2250
2251 gboolean
2252@@ -2979,7 +2979,7 @@
2253 }
2254
2255 anode_clr_value (node);
2256- anode_set_value (node, value);
2257+ anode_take_value (node, value);
2258
2259 an = node->data;
2260 an->guarantee_unsigned = 0;
2261@@ -3003,7 +3003,7 @@
2262 g_return_if_fail (value != NULL);
2263 g_return_if_fail (anode_def_type (node) == EGG_ASN1X_INTEGER);
2264
2265- anode_set_value (node, value);
2266+ anode_take_value (node, value);
2267 an = node->data;
2268 an->guarantee_unsigned = 1;
2269 }
2270@@ -3151,6 +3151,7 @@
2271
2272 /* A failure, set the message manually so it doesn't get a prefix */
2273 } else {
2274+ atlv_free (tlv);
2275 an = node->data;
2276 g_free (an->failure);
2277 an->failure = g_strdup (msg);
2278@@ -3282,8 +3283,8 @@
2279 type == EGG_ASN1X_UTF8_STRING ||
2280 type == EGG_ASN1X_VISIBLE_STRING);
2281
2282- anode_set_value (node, g_bytes_new_with_free_func (data, n_data,
2283- destroy, data));
2284+ anode_take_value (node, g_bytes_new_with_free_func (data, n_data,
2285+ destroy, data));
2286 }
2287
2288 void
2289@@ -3307,7 +3308,7 @@
2290 type == EGG_ASN1X_UTF8_STRING ||
2291 type == EGG_ASN1X_VISIBLE_STRING);
2292
2293- anode_set_value (node, g_bytes_ref (bytes));
2294+ anode_set_value (node, bytes);
2295 }
2296
2297 GBytes *
2298
2299=== modified file 'egg/egg-cleanup.c'
2300--- egg/egg-cleanup.c 2014-04-06 23:26:34 +0000
2301+++ egg/egg-cleanup.c 2015-02-27 19:55:06 +0000
2302@@ -52,6 +52,7 @@
2303 cleanup = (EggCleanup*)l->data;
2304 if (cleanup->notify == notify && cleanup->user_data == user_data) {
2305 registered_cleanups = g_slist_remove (registered_cleanups, cleanup);
2306+ g_free (cleanup);
2307 break;
2308 }
2309 }
2310
2311=== modified file 'egg/egg-hkdf.c'
2312--- egg/egg-hkdf.c 2014-04-06 23:26:34 +0000
2313+++ egg/egg-hkdf.c 2015-02-27 19:55:06 +0000
2314@@ -102,6 +102,7 @@
2315 break;
2316 }
2317
2318+ gcry_md_close (md2);
2319 g_free (alloc);
2320 gcry_free (buffer);
2321 return TRUE;
2322
2323=== modified file 'egg/test-asn1.c'
2324--- egg/test-asn1.c 2014-04-06 23:26:34 +0000
2325+++ egg/test-asn1.c 2015-02-27 19:55:06 +0000
2326@@ -2385,6 +2385,7 @@
2327 asn = egg_asn1x_create_quark (test_asn1_tab, g_quark_from_static_string ("1.5.13"));
2328 g_assert (asn != NULL);
2329 g_assert_cmpstr (egg_asn1x_name (asn), ==, "TestIntegers");
2330+ egg_asn1x_destroy (asn);
2331 }
2332
2333 static void
2334
2335=== modified file 'egg/test-dn.c'
2336--- egg/test-dn.c 2014-04-06 23:26:34 +0000
2337+++ egg/test-dn.c 2015-02-27 19:55:06 +0000
2338@@ -98,6 +98,7 @@
2339 text = egg_dn_print_value (oid, asn);
2340 g_assert_cmpstr (text, ==, "Thawte Personal Premium CA");
2341 g_free (text);
2342+ g_bytes_unref (bytes);
2343
2344 /* Unknown oid */
2345 oid = g_quark_from_static_string ("1.1.1.1.1.1");
2346
2347=== modified file 'egg/test-padding.c'
2348--- egg/test-padding.c 2014-04-06 23:26:34 +0000
2349+++ egg/test-padding.c 2015-02-27 19:55:06 +0000
2350@@ -114,6 +114,7 @@
2351 g_assert (result[5] == 0x00);
2352 g_assert (result[6] == 'T');
2353 g_assert (result[7] == 'E');
2354+ g_free (vesult);
2355 }
2356
2357 static void
2358
2359=== modified file 'egg/test-spawn.c'
2360--- egg/test-spawn.c 2014-04-06 23:26:34 +0000
2361+++ egg/test-spawn.c 2015-02-27 19:55:06 +0000
2362@@ -188,6 +188,8 @@
2363 g_assert (data.completed);
2364 g_assert_cmpstr (data.output, ==, "80 81 82 83 84\n");
2365 g_assert_cmpstr (data.error, ==, "1\n2\n3\n4\n5\n");
2366+ g_free (data.error);
2367+ g_free (data.output);
2368 }
2369
2370 static void
2371@@ -233,6 +235,8 @@
2372 g_assert (data.completed);
2373 g_assert_cmpstr (data.output, ==, "80 81 82 83 84\n");
2374 g_assert_cmpstr (data.error, ==, "1\n2\n3\n4\n5\n");
2375+ g_free (data.error);
2376+ g_free (data.output);
2377 }
2378
2379 static void
2380@@ -259,6 +263,8 @@
2381 g_assert (data.finalized);
2382 g_assert (data.completed);
2383 g_assert (!data.output);
2384+ g_free (data.error);
2385+ g_free (data.output);
2386 }
2387
2388 static void
2389
2390=== modified file 'pam/test-pam.c'
2391--- pam/test-pam.c 2014-04-06 23:26:34 +0000
2392+++ pam/test-pam.c 2015-02-27 19:55:06 +0000
2393@@ -149,6 +149,7 @@
2394 return;
2395 }
2396 } else if (g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) {
2397+ g_error_free (error);
2398 skip_test (test, "missing test pam config");
2399 return;
2400 }
2401
2402=== modified file 'pkcs11/gkm/gkm-attributes.c'
2403--- pkcs11/gkm/gkm-attributes.c 2014-04-06 23:26:34 +0000
2404+++ pkcs11/gkm/gkm-attributes.c 2015-02-27 19:55:06 +0000
2405@@ -359,6 +359,7 @@
2406 g_checksum_update (checksum, data, n_data);
2407 result = attr->ulValueLen;
2408 g_checksum_get_digest (checksum, attr->pValue, &result);
2409+ g_checksum_free (checksum);
2410 attr->ulValueLen = result;
2411 return CKR_OK;
2412 }
2413
2414=== modified file 'pkcs11/gkm/gkm-credential.c'
2415--- pkcs11/gkm/gkm-credential.c 2014-12-06 18:47:09 +0000
2416+++ pkcs11/gkm/gkm-credential.c 2015-02-27 19:55:06 +0000
2417@@ -209,6 +209,10 @@
2418 g_object_weak_unref (G_OBJECT (self->pv->object), object_went_away, self);
2419 self->pv->object = NULL;
2420
2421+ if (self->pv->secret)
2422+ g_object_unref (G_OBJECT (self->pv->secret));
2423+ self->pv->secret = NULL;
2424+
2425 clear_data (self);
2426
2427 G_OBJECT_CLASS (gkm_credential_parent_class)->dispose (obj);
2428
2429=== modified file 'pkcs11/gkm/gkm-data-asn1.c'
2430--- pkcs11/gkm/gkm-data-asn1.c 2014-04-06 23:26:34 +0000
2431+++ pkcs11/gkm/gkm-data-asn1.c 2015-02-27 19:55:06 +0000
2432@@ -43,6 +43,7 @@
2433 /* Automatically stores in secure memory if DER data is secure */
2434 sz = g_bytes_get_size (buf);
2435 gcry = gcry_mpi_scan (mpi, GCRYMPI_FMT_STD, g_bytes_get_data (buf, NULL), sz, &sz);
2436+ g_bytes_unref (buf);
2437 if (gcry != 0)
2438 return FALSE;
2439
2440
2441=== modified file 'pkcs11/gkm/gkm-mock.c'
2442--- pkcs11/gkm/gkm-mock.c 2014-04-06 23:26:34 +0000
2443+++ pkcs11/gkm/gkm-mock.c 2015-02-27 19:55:06 +0000
2444@@ -72,6 +72,7 @@
2445 static guint unique_identifier = 100;
2446 static GHashTable *the_sessions = NULL;
2447 static GHashTable *the_objects = NULL;
2448+static GArray *the_credential_template = NULL;
2449
2450 enum {
2451 PRIVATE_KEY_CAPITALIZE = 3,
2452@@ -260,6 +261,7 @@
2453 n_the_pin = strlen (the_pin);
2454 the_sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_session);
2455 the_objects = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)gkm_template_free);
2456+ the_credential_template = gkm_template_new (NULL, 0);
2457
2458 /* Our token object */
2459 attrs = gkm_template_new (NULL, 0);
2460@@ -337,6 +339,9 @@
2461 g_hash_table_destroy (the_sessions);
2462 the_sessions = NULL;
2463
2464+ gkm_template_free (the_credential_template);
2465+ the_credential_template = NULL;
2466+
2467 g_free (the_pin);
2468 return CKR_OK;
2469 }
2470@@ -679,9 +684,12 @@
2471 g_return_val_if_fail (session, CKR_SESSION_HANDLE_INVALID);
2472
2473 old = g_strndup ((gchar*)pOldPin, ulOldLen);
2474- if (!old || !g_str_equal (old, the_pin))
2475+ if (!old || !g_str_equal (old, the_pin)) {
2476+ g_free (old);
2477 return CKR_PIN_INCORRECT;
2478+ }
2479
2480+ g_free (old);
2481 g_free (the_pin);
2482 the_pin = g_strndup ((gchar*)pNewPin, ulNewLen);
2483 n_the_pin = ulNewLen;
2484@@ -864,6 +872,10 @@
2485
2486 for (i = 0; i < ulCount; ++i) {
2487 result = pTemplate + i;
2488+ if (result->type == CKA_G_CREDENTIAL_TEMPLATE) {
2489+ gkm_attribute_set_template (result, the_credential_template);
2490+ continue;
2491+ }
2492 attr = gkm_template_find (attrs, result->type);
2493 if (!attr) {
2494 result->ulValueLen = (CK_ULONG)-1;
2495@@ -907,8 +919,22 @@
2496 return CKR_OBJECT_HANDLE_INVALID;
2497 }
2498
2499- for (i = 0; i < ulCount; ++i)
2500- gkm_template_set (attrs, pTemplate + i);
2501+ for (i = 0; i < ulCount; ++i) {
2502+ CK_ATTRIBUTE_PTR attr = pTemplate + i;
2503+
2504+ if (attr->type == CKA_G_CREDENTIAL_TEMPLATE) {
2505+ CK_RV rv;
2506+ GArray *template;
2507+
2508+ rv = gkm_attribute_get_template (attr, &template);
2509+ if (rv != CKR_OK)
2510+ return CKR_OBJECT_HANDLE_INVALID;
2511+ gkm_template_free(the_credential_template);
2512+ the_credential_template = template;
2513+ } else {
2514+ gkm_template_set (attrs, attr);
2515+ }
2516+ }
2517
2518 return CKR_OK;
2519 }
2520
2521=== modified file 'pkcs11/gkm/test-data-asn1.c'
2522--- pkcs11/gkm/test-data-asn1.c 2014-09-23 20:20:23 +0000
2523+++ pkcs11/gkm/test-data-asn1.c 2015-02-27 19:55:06 +0000
2524@@ -99,11 +99,14 @@
2525 g_assert (asn != NULL);
2526
2527 ret = gkm_data_asn1_read_mpi (egg_asn1x_node (asn, "mpi", NULL), &mpt);
2528+ egg_asn1x_destroy (asn);
2529 g_assert ("couldn't read mpi from asn1" && ret);
2530 g_assert ("mpi returned is null" && mpt != NULL);
2531 g_assert ("mpi is wrong number" && gcry_mpi_cmp (mpi, mpt) == 0);
2532
2533 g_bytes_unref (data);
2534+ gcry_mpi_release (mpi);
2535+ gcry_mpi_release (mpt);
2536 }
2537
2538 int
2539
2540=== modified file 'pkcs11/gkm/test-data-der.c'
2541--- pkcs11/gkm/test-data-der.c 2014-04-06 23:26:34 +0000
2542+++ pkcs11/gkm/test-data-der.c 2015-02-27 19:55:06 +0000
2543@@ -111,6 +111,7 @@
2544 /* Now compare them */
2545 g_assert ("key parsed differently" && compare_keys (key, sexp));
2546
2547+ gcry_sexp_release (sexp);
2548 g_bytes_unref (data);
2549 }
2550
2551@@ -154,6 +155,8 @@
2552 g_return_if_fail (gcry == 0);
2553
2554 test_der_public (key);
2555+
2556+ gcry_sexp_release (key);
2557 }
2558
2559 static void
2560@@ -166,6 +169,8 @@
2561 g_return_if_fail (gcry == 0);
2562
2563 test_der_public (key);
2564+
2565+ gcry_sexp_release (key);
2566 }
2567
2568 static void
2569@@ -188,6 +193,7 @@
2570 /* Now compare them */
2571 g_assert ("key parsed differently" && compare_keys (key, sexp));
2572
2573+ gcry_sexp_release (sexp);
2574 g_bytes_unref (data);
2575 }
2576
2577@@ -201,6 +207,8 @@
2578 g_return_if_fail (gcry == 0);
2579
2580 test_der_private (key);
2581+
2582+ gcry_sexp_release (key);
2583 }
2584
2585 static void
2586@@ -213,6 +221,8 @@
2587 g_return_if_fail (gcry == 0);
2588
2589 test_der_private (key);
2590+
2591+ gcry_sexp_release (key);
2592 }
2593
2594 static void
2595@@ -240,6 +250,7 @@
2596 /* Now compare them */
2597 g_assert ("key parsed differently" && compare_keys (skey, pkey));
2598
2599+ gcry_sexp_release (skey);
2600 g_bytes_unref (params);
2601 g_bytes_unref (key);
2602 }
2603@@ -332,6 +343,8 @@
2604
2605 if (res == GKM_DATA_SUCCESS)
2606 gcry_sexp_release (sexp);
2607+
2608+ egg_asn1x_destroy (asn1);
2609 g_bytes_unref (keydata);
2610 }
2611
2612
2613=== modified file 'pkcs11/gkm/test-secret.c'
2614--- pkcs11/gkm/test-secret.c 2014-04-06 23:26:34 +0000
2615+++ pkcs11/gkm/test-secret.c 2015-02-27 19:55:06 +0000
2616@@ -185,6 +185,9 @@
2617 g_object_unref (one);
2618 one = gkm_secret_new_from_password ("other");
2619 g_assert (!gkm_secret_equal (one, two));
2620+
2621+ g_object_unref (one);
2622+ g_object_unref (two);
2623 }
2624
2625 int
2626
2627=== modified file 'pkcs11/gkm/test-sexp.c'
2628--- pkcs11/gkm/test-sexp.c 2014-04-06 23:26:34 +0000
2629+++ pkcs11/gkm/test-sexp.c 2015-02-27 19:55:06 +0000
2630@@ -95,10 +95,12 @@
2631 g_assert (algorithm == GCRY_PK_RSA);
2632 g_assert (is_priv == TRUE);
2633 g_assert (sexp != NULL);
2634+ gcry_sexp_release (sexp);
2635
2636 ret = gkm_sexp_extract_mpi (test->rsakey, &mpi, "p", NULL);
2637 g_assert (ret);
2638 g_assert (mpi != NULL);
2639+ gcry_mpi_release (mpi);
2640 }
2641
2642 static void
2643
2644=== modified file 'pkcs11/gnome2-store/gkm-gnome2-file.c'
2645--- pkcs11/gnome2-store/gkm-gnome2-file.c 2014-12-06 18:47:09 +0000
2646+++ pkcs11/gnome2-store/gkm-gnome2-file.c 2015-02-27 19:55:06 +0000
2647@@ -127,7 +127,7 @@
2648 static GHashTable*
2649 entries_new (void)
2650 {
2651- return g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)g_hash_table_unref);
2652+ return g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)g_hash_table_unref);
2653 }
2654
2655 static gboolean
2656@@ -309,6 +309,7 @@
2657 gsize n_hash, hash_offset;
2658 guint32 length;
2659 int algo;
2660+ gboolean valid;
2661
2662 g_assert (buffer);
2663 g_assert (offset);
2664@@ -337,10 +338,10 @@
2665
2666 check = g_malloc0 (n_hash);
2667 gcry_md_hash_buffer (algo, check, buffer->buf, length);
2668- if (memcmp (check, hash, n_hash) != 0)
2669- return FALSE;
2670+ valid = (memcmp (check, hash, n_hash) == 0);
2671+ g_free (check);
2672
2673- return TRUE;
2674+ return valid;
2675 }
2676
2677 static gboolean
2678@@ -362,31 +363,24 @@
2679 n_block = gcry_cipher_get_algo_blklen (calgo);
2680 g_return_val_if_fail (n_block, FALSE);
2681
2682- /* Allocate memory for the keys */
2683- key = gcry_malloc_secure (n_key);
2684- g_return_val_if_fail (key, FALSE);
2685- iv = g_malloc0 (n_block);
2686-
2687 password = gkm_secret_get_password (login, &n_password);
2688
2689 if (!egg_symkey_generate_simple (calgo, halgo, password, n_password,
2690 salt, n_salt, iterations, &key, &iv)) {
2691- gcry_free (key);
2692- g_free (iv);
2693 return FALSE;
2694 }
2695
2696 gcry = gcry_cipher_open (cipher, calgo, GCRY_CIPHER_MODE_CBC, 0);
2697 if (gcry) {
2698 g_warning ("couldn't create cipher context: %s", gcry_strerror (gcry));
2699- gcry_free (key);
2700+ egg_secure_free (key);
2701 g_free (iv);
2702 return FALSE;
2703 }
2704
2705 gcry = gcry_cipher_setkey (*cipher, key, n_key);
2706 g_return_val_if_fail (!gcry, FALSE);
2707- gcry_free (key);
2708+ egg_secure_free (key);
2709
2710 gcry = gcry_cipher_setiv (*cipher, iv, n_block);
2711 g_return_val_if_fail (!gcry, FALSE);
2712
2713=== modified file 'pkcs11/gnome2-store/gkm-gnome2-storage.c'
2714--- pkcs11/gnome2-store/gkm-gnome2-storage.c 2014-12-06 18:47:09 +0000
2715+++ pkcs11/gnome2-store/gkm-gnome2-storage.c 2015-02-27 19:55:06 +0000
2716@@ -916,6 +916,10 @@
2717 g_object_unref (self->manager);
2718 self->manager = NULL;
2719
2720+ if (self->login)
2721+ g_object_unref (self->login);
2722+ self->login = NULL;
2723+
2724 g_signal_handlers_disconnect_by_func (self->file, data_file_entry_added, self);
2725 g_signal_handlers_disconnect_by_func (self->file, data_file_entry_changed, self);
2726 g_signal_handlers_disconnect_by_func (self->file, data_file_entry_removed, self);
2727
2728=== modified file 'pkcs11/gnome2-store/test-import.c'
2729--- pkcs11/gnome2-store/test-import.c 2014-04-06 23:26:34 +0000
2730+++ pkcs11/gnome2-store/test-import.c 2015-02-27 19:55:06 +0000
2731@@ -62,6 +62,7 @@
2732
2733 test->funcs = gkm_gnome2_store_get_functions ();
2734 rv = (test->funcs->C_Initialize) (&args);
2735+ g_free (args.pReserved);
2736 gkm_assert_cmprv (rv, ==, CKR_OK);
2737
2738 /* And now need to log in */
2739
2740=== modified file 'pkcs11/secret-store/gkm-secret-item.c'
2741--- pkcs11/secret-store/gkm-secret-item.c 2014-04-06 23:26:34 +0000
2742+++ pkcs11/secret-store/gkm-secret-item.c 2015-02-27 19:55:06 +0000
2743@@ -391,6 +391,9 @@
2744 g_hash_table_unref (self->fields);
2745 self->fields = NULL;
2746
2747+ g_free (self->schema);
2748+ self->schema = NULL;
2749+
2750 G_OBJECT_CLASS (gkm_secret_item_parent_class)->finalize (obj);
2751 }
2752
2753
2754=== modified file 'pkcs11/secret-store/gkm-secret-search.c'
2755--- pkcs11/secret-store/gkm-secret-search.c 2014-12-06 18:47:09 +0000
2756+++ pkcs11/secret-store/gkm-secret-search.c 2015-02-27 19:55:06 +0000
2757@@ -247,6 +247,7 @@
2758 "schema-name", schema_name,
2759 "collection-id", identifier,
2760 NULL);
2761+ g_free (identifier);
2762
2763 /* Load any new items or collections */
2764 gkm_module_refresh_token (module);
2765
2766=== modified file 'pkcs11/secret-store/gkm-secret-textual.c'
2767--- pkcs11/secret-store/gkm-secret-textual.c 2014-12-06 18:47:09 +0000
2768+++ pkcs11/secret-store/gkm-secret-textual.c 2015-02-27 19:55:06 +0000
2769@@ -118,6 +118,7 @@
2770 g_free (groupname);
2771 ++index;
2772 }
2773+ g_list_free (names);
2774 }
2775
2776 static void
2777
2778=== modified file 'pkcs11/secret-store/test-secret-binary.c'
2779--- pkcs11/secret-store/test-secret-binary.c 2014-04-06 23:26:34 +0000
2780+++ pkcs11/secret-store/test-secret-binary.c 2015-02-27 19:55:06 +0000
2781@@ -156,6 +156,7 @@
2782 /* Try parsing it again */
2783 res = gkm_secret_binary_read (test->collection, test->sdata, data, n_data);
2784 g_assert (res == GKM_DATA_SUCCESS);
2785+ g_free (data);
2786 }
2787
2788 static void
2789
2790=== modified file 'pkcs11/secret-store/test-secret-textual.c'
2791--- pkcs11/secret-store/test-secret-textual.c 2014-04-06 23:26:34 +0000
2792+++ pkcs11/secret-store/test-secret-textual.c 2015-02-27 19:55:06 +0000
2793@@ -148,6 +148,7 @@
2794 /* Try parsing it again */
2795 res = gkm_secret_textual_read (test->collection, test->sdata, data, n_data);
2796 g_assert (res == GKM_DATA_SUCCESS);
2797+ g_free (data);
2798 }
2799
2800 static void
2801
2802=== modified file 'pkcs11/wrap-layer/gkm-wrap-prompt.c'
2803--- pkcs11/wrap-layer/gkm-wrap-prompt.c 2014-04-06 23:26:34 +0000
2804+++ pkcs11/wrap-layer/gkm-wrap-prompt.c 2015-02-27 19:55:06 +0000
2805@@ -904,14 +904,30 @@
2806 }
2807
2808 static void
2809-gkm_wrap_prompt_finalize (GObject *obj)
2810+gkm_wrap_prompt_clear_prompt_data (GkmWrapPrompt *self)
2811 {
2812- GkmWrapPrompt *self = GKM_WRAP_PROMPT (obj);
2813-
2814 if (self->destroy_data && self->prompt_data)
2815 (self->destroy_data) (self->prompt_data);
2816 self->destroy_data = NULL;
2817 self->prompt_data = NULL;
2818+}
2819+
2820+static void
2821+gkm_wrap_prompt_set_prompt_data (GkmWrapPrompt *self,
2822+ gpointer prompt_data,
2823+ GDestroyNotify destroy_data)
2824+{
2825+ gkm_wrap_prompt_clear_prompt_data (self);
2826+ self->destroy_data = destroy_data;
2827+ self->prompt_data = prompt_data;
2828+}
2829+
2830+static void
2831+gkm_wrap_prompt_finalize (GObject *obj)
2832+{
2833+ GkmWrapPrompt *self = GKM_WRAP_PROMPT (obj);
2834+
2835+ gkm_wrap_prompt_clear_prompt_data (self);
2836
2837 while (!g_queue_is_empty(&self->pool))
2838 g_free (g_queue_pop_head (&self->pool));
2839@@ -934,7 +950,7 @@
2840 typedef struct _CredentialPrompt {
2841 GArray *template;
2842 CK_ULONG n_template;
2843- const gchar *password;
2844+ gchar *password;
2845 } CredentialPrompt;
2846
2847 static void
2848@@ -942,6 +958,7 @@
2849 {
2850 CredentialPrompt *data = user_data;
2851 g_array_free (data->template, TRUE);
2852+ egg_secure_strfree (data->password);
2853 g_slice_free (CredentialPrompt, data);
2854 }
2855
2856@@ -977,8 +994,8 @@
2857 NULL);
2858
2859 /* Build up the prompt */
2860- self->prompt_data = data = g_slice_new0 (CredentialPrompt);
2861- self->destroy_data = credential_prompt_free;
2862+ data = g_slice_new0 (CredentialPrompt);
2863+ gkm_wrap_prompt_set_prompt_data (self, data, credential_prompt_free);
2864 self->module = module;
2865 self->session = session;
2866 self->object = object;
2867@@ -1017,6 +1034,7 @@
2868 attrs = get_attributes_from_object (self, &n_attrs);
2869 g_return_val_if_fail (attrs, FALSE);
2870
2871+ egg_secure_strfree (data->password);
2872 data->password = NULL;
2873
2874 if (self->iteration == 0) {
2875@@ -1028,6 +1046,7 @@
2876 }
2877
2878 if (!data->password) {
2879+ const char *password;
2880 setup_unlock_prompt (self, attrs, n_attrs, self->iteration == 1);
2881
2882 /* Now load up the unlock options into the prompt*/
2883@@ -1039,14 +1058,15 @@
2884
2885 ++(self->iteration);
2886
2887- data->password = gkm_wrap_prompt_request_password (self);
2888- if (data->password == NULL) {
2889+ password = gkm_wrap_prompt_request_password (self);
2890+ if (password == NULL) {
2891 if (error != NULL) {
2892 g_warning ("couldn't prompt for password: %s", egg_error_message (error));
2893 g_error_free (error);
2894 }
2895 return FALSE;
2896 }
2897+ data->password = egg_secure_strdup (password);
2898 }
2899
2900 /* Truncate any extra options off the end of template */
2901@@ -1173,7 +1193,7 @@
2902 CK_UTF8CHAR_PTR *pin, CK_ULONG *n_pin)
2903 {
2904 CK_TOKEN_INFO tinfo;
2905- const gchar *password;
2906+ gchar *password;
2907
2908 g_assert (GKM_IS_WRAP_PROMPT (self));
2909 g_assert (self->module);
2910@@ -1185,11 +1205,12 @@
2911
2912 setup_init_token (self, &tinfo);
2913
2914- password = gkm_wrap_prompt_request_password (self);
2915+ password = (char *)gkm_wrap_prompt_request_password (self);
2916 if (password == NULL)
2917 return FALSE;
2918
2919- self->prompt_data = (gpointer)password;
2920+ g_assert (self->destroy_data == NULL);
2921+ gkm_wrap_prompt_set_prompt_data (self, password, NULL);
2922 *pin = (gpointer)password;
2923 *n_pin = strlen (password);
2924 return TRUE;
2925@@ -1314,8 +1335,9 @@
2926 /* Build up the prompt */
2927 self->module = module;
2928 self->session = session;
2929- self->destroy_data = set_pin_prompt_free;
2930- self->prompt_data = g_slice_new0 (SetPinPrompt);
2931+ gkm_wrap_prompt_set_prompt_data (self,
2932+ g_slice_new0 (SetPinPrompt),
2933+ set_pin_prompt_free);
2934
2935 return self;
2936 }
2937@@ -1438,7 +1460,7 @@
2938 login_prompt_do_specific (GkmWrapPrompt *self, CK_RV last_result,
2939 CK_UTF8CHAR_PTR *pin, CK_ULONG *n_pin)
2940 {
2941- const gchar *password = NULL;
2942+ gchar *password = NULL;
2943 CK_ATTRIBUTE_PTR attrs;
2944 CK_ULONG n_attrs;
2945
2946@@ -1451,6 +1473,9 @@
2947 if (self->iteration == 0) {
2948 ++(self->iteration);
2949 password = auto_unlock_lookup_object (attrs, n_attrs);
2950+ if (password)
2951+ gkm_wrap_prompt_set_prompt_data (self, password,
2952+ (GDestroyNotify)egg_secure_strfree);
2953
2954 } else if (self->iteration == 1 && last_result == CKR_PIN_INCORRECT) {
2955 auto_unlock_remove_object (attrs, n_attrs);
2956@@ -1459,12 +1484,12 @@
2957 if (!password) {
2958 setup_unlock_prompt (self, attrs, n_attrs, self->iteration == 1);
2959
2960- password = gkm_wrap_prompt_request_password (self);
2961+ password = (char *)gkm_wrap_prompt_request_password (self);
2962 if (password == NULL)
2963 return FALSE;
2964+ gkm_wrap_prompt_set_prompt_data (self, password, NULL);
2965 }
2966
2967- self->prompt_data = (gpointer)password;
2968 *pin = (guchar *)password;
2969 *n_pin = strlen (password);
2970 return TRUE;
2971@@ -1477,7 +1502,8 @@
2972 CK_ULONG n_attrs;
2973
2974 g_assert (GKM_IS_WRAP_PROMPT (self));
2975- g_assert (self->destroy_data == NULL);
2976+ g_assert (self->destroy_data == NULL ||
2977+ self->destroy_data == (GDestroyNotify)egg_secure_strfree);
2978
2979 /* Possibly save away auto unlock */
2980 if (call_result == CKR_OK && auto_unlock_should_attach (self)) {
2981@@ -1510,7 +1536,7 @@
2982 CK_UTF8CHAR_PTR *pin, CK_ULONG *n_pin)
2983 {
2984 CK_TOKEN_INFO tinfo;
2985- const gchar *password = NULL;
2986+ gchar *password = NULL;
2987
2988 g_assert (GKM_IS_WRAP_PROMPT (self));
2989 g_assert (self->module);
2990@@ -1523,6 +1549,9 @@
2991 if (self->iteration == 0) {
2992 ++(self->iteration);
2993 password = auto_unlock_lookup_token (&tinfo);
2994+ if (password)
2995+ gkm_wrap_prompt_set_prompt_data (self, password,
2996+ (GDestroyNotify)egg_secure_strfree);
2997
2998 } else if (self->iteration == 1 && last_result == CKR_PIN_INCORRECT) {
2999 auto_unlock_remove_token (&tinfo);
3000@@ -1531,12 +1560,12 @@
3001 if (!password) {
3002 setup_unlock_token (self, &tinfo);
3003
3004- password = gkm_wrap_prompt_request_password (self);
3005+ password = (char *)gkm_wrap_prompt_request_password (self);
3006 if (password == NULL)
3007 return FALSE;
3008+ gkm_wrap_prompt_set_prompt_data (self, password, NULL);
3009 }
3010
3011- self->prompt_data = (gpointer)password;
3012 *pin = (guchar *)password;
3013 *n_pin = strlen (password);
3014 return TRUE;
3015@@ -1548,7 +1577,8 @@
3016 CK_TOKEN_INFO tinfo;
3017
3018 g_assert (GKM_IS_WRAP_PROMPT (self));
3019- g_assert (self->destroy_data == NULL);
3020+ g_assert (self->destroy_data == NULL ||
3021+ self->destroy_data == (GDestroyNotify)egg_secure_strfree);
3022
3023 /* Save the options, and possibly auto unlock */
3024 if (call_result == CKR_OK && auto_unlock_should_attach (self)) {
3025
3026=== modified file 'pkcs11/wrap-layer/mock-secret-store.c'
3027--- pkcs11/wrap-layer/mock-secret-store.c 2014-04-06 23:26:34 +0000
3028+++ pkcs11/wrap-layer/mock-secret-store.c 2015-02-27 19:55:06 +0000
3029@@ -207,7 +207,7 @@
3030 rv = gkm_mock_C_CreateObject (hSession, pTemplate, ulCount, phObject);
3031
3032 if (template)
3033- g_array_free (template, TRUE);
3034+ gkm_template_free (template);
3035
3036 return rv;
3037 }
3038
3039=== modified file 'pkcs11/xdg-store/gkm-xdg-assertion.c'
3040--- pkcs11/xdg-store/gkm-xdg-assertion.c 2014-12-06 18:47:09 +0000
3041+++ pkcs11/xdg-store/gkm-xdg-assertion.c 2015-02-27 19:55:06 +0000
3042@@ -173,6 +173,8 @@
3043 "purpose", purpose,
3044 "peer", peer,
3045 NULL);
3046+ g_free (purpose);
3047+ g_free (peer);
3048
3049 /* Add the assertion to the trust object */
3050 if (!gkm_transaction_get_failed (transaction)) {
3051
3052=== modified file 'pkcs11/xdg-store/gkm-xdg-trust.c'
3053--- pkcs11/xdg-store/gkm-xdg-trust.c 2014-04-06 23:26:34 +0000
3054+++ pkcs11/xdg-store/gkm-xdg-trust.c 2015-02-27 19:55:06 +0000
3055@@ -371,7 +371,7 @@
3056 key = create_assertion_key (gkm_assertion_get_purpose (assertion),
3057 gkm_assertion_get_peer (assertion));
3058 g_object_set_qdata_full (G_OBJECT (assertion), QDATA_ASSERTION_KEY,
3059- g_bytes_ref (key), (GDestroyNotify)g_bytes_unref);
3060+ key, (GDestroyNotify)g_bytes_unref);
3061 }
3062
3063 return key;
3064@@ -439,6 +439,7 @@
3065 if (!g_hash_table_steal (self->pv->assertions, key))
3066 g_return_if_reached ();
3067 gkm_transaction_add (transaction, self, complete_remove_assertion, assertion);
3068+ g_bytes_unref (key);
3069 }
3070 }
3071
3072@@ -706,6 +707,10 @@
3073 g_hash_table_destroy (self->pv->assertions);
3074 self->pv->assertions = NULL;
3075
3076+ if (self->pv->bytes)
3077+ g_bytes_unref (self->pv->bytes);
3078+ self->pv->bytes = NULL;
3079+
3080 G_OBJECT_CLASS (gkm_xdg_trust_parent_class)->finalize (obj);
3081 }
3082
3083@@ -875,7 +880,6 @@
3084 remove_assertion_from_trust (self, previous, transaction);
3085 add_assertion_to_trust (self, assertion, transaction);
3086
3087- g_bytes_unref (key);
3088 }
3089
3090 void
3091
3092=== modified file 'pkcs11/xdg-store/test-xdg-module.c'
3093--- pkcs11/xdg-store/test-xdg-module.c 2014-04-06 23:26:34 +0000
3094+++ pkcs11/xdg-store/test-xdg-module.c 2015-02-27 19:55:06 +0000
3095@@ -190,6 +190,7 @@
3096 rv = gkm_session_C_CreateObject (test->session, attrs, G_N_ELEMENTS (attrs), &object);
3097 gkm_assert_cmprv (rv, ==, CKR_OK);
3098 gkm_assert_cmpulong (object, !=, 0);
3099+ g_free (data);
3100 }
3101
3102 static void
3103
3104=== modified file 'pkcs11/xdg-store/test-xdg-trust.c'
3105--- pkcs11/xdg-store/test-xdg-trust.c 2014-04-06 23:26:34 +0000
3106+++ pkcs11/xdg-store/test-xdg-trust.c 2015-02-27 19:55:06 +0000
3107@@ -656,6 +656,7 @@
3108 n_checksum = sizeof (checksum);
3109 g_checksum_get_digest (md, checksum, &n_checksum);
3110 g_assert (n_checksum == sizeof (checksum));
3111+ g_checksum_free (md);
3112
3113 rv = gkm_session_C_FindObjectsInit (test->session, lookup, G_N_ELEMENTS (lookup));
3114 gkm_assert_cmprv (rv, ==, CKR_OK);
3115
3116=== modified file 'po/LINGUAS'
3117--- po/LINGUAS 2014-04-06 23:26:34 +0000
3118+++ po/LINGUAS 2015-02-27 19:55:06 +0000
3119@@ -42,6 +42,7 @@
3120 it
3121 ja
3122 ka
3123+kk
3124 km
3125 kn
3126 ko
3127
3128=== added file 'po/kk.po'
3129--- po/kk.po 1970-01-01 00:00:00 +0000
3130+++ po/kk.po 2015-02-27 19:55:06 +0000
3131@@ -0,0 +1,572 @@
3132+# Kazakh translation for gnome-keyring.
3133+# Copyright (C) 2014 gnome-keyring's COPYRIGHT HOLDER
3134+# This file is distributed under the same license as the gnome-keyring package.
3135+# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2014.
3136+#
3137+msgid ""
3138+msgstr ""
3139+"Project-Id-Version: gnome-keyring master\n"
3140+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
3141+"keyring&keywords=I18N+L10N&component=general\n"
3142+"POT-Creation-Date: 2014-10-28 07:44+0000\n"
3143+"PO-Revision-Date: 2014-10-28 17:27+0600\n"
3144+"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
3145+"Language-Team: Kazakh <kk@li.org>\n"
3146+"Language: kk\n"
3147+"MIME-Version: 1.0\n"
3148+"Content-Type: text/plain; charset=UTF-8\n"
3149+"Content-Transfer-Encoding: 8bit\n"
3150+"X-Generator: Poedit 1.6.9\n"
3151+
3152+#. TRANSLATORS: This is the label for an keyring created without a label
3153+#: ../daemon/dbus/gkd-secret-change.c:85
3154+#: ../daemon/dbus/gkd-secret-change.c:121
3155+#: ../daemon/dbus/gkd-secret-create.c:78
3156+#: ../pkcs11/secret-store/gkm-secret-collection.c:324
3157+#: ../pkcs11/wrap-layer/gkm-wrap-login.c:345
3158+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:753
3159+msgid "Unnamed"
3160+msgstr "Атаусыз"
3161+
3162+#: ../daemon/dbus/gkd-secret-change.c:90
3163+#, c-format
3164+msgid "Enter the old password for the '%s' keyring"
3165+msgstr "'%s' кілттер бауы үшін ескі парольді енгізіңіз"
3166+
3167+#: ../daemon/dbus/gkd-secret-change.c:94
3168+#, c-format
3169+msgid ""
3170+"An application wants to change the password for the '%s' keyring. Enter the "
3171+"old password for it."
3172+msgstr ""
3173+"Қолданба '%s' кілттер бауы үшін парольді өзгерткісі келеді. Ол үшін ескі "
3174+"парольді енгізіңіз."
3175+
3176+#: ../daemon/dbus/gkd-secret-change.c:100
3177+#: ../daemon/dbus/gkd-secret-change.c:136
3178+#: ../daemon/dbus/gkd-secret-change.c:147
3179+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1143
3180+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1255
3181+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1290
3182+msgid "Continue"
3183+msgstr "Жалғастыру"
3184+
3185+#: ../daemon/dbus/gkd-secret-change.c:126
3186+#, c-format
3187+msgid "Choose a new password for the '%s' keyring"
3188+msgstr "'%s' кілттер бауы үшін жаңа парольді таңдаңыз"
3189+
3190+#: ../daemon/dbus/gkd-secret-change.c:130
3191+#, c-format
3192+msgid ""
3193+"An application wants to change the password for the '%s' keyring. Choose the "
3194+"new password you want to use for it."
3195+msgstr ""
3196+"Қолданба '%s' кілттер бауы үшін парольді өзгерткісі келеді. Қолданғыңыз "
3197+"келетін жаңа парольді енгізіңіз."
3198+
3199+#: ../daemon/dbus/gkd-secret-change.c:143
3200+#: ../daemon/dbus/gkd-secret-create.c:94
3201+msgid "Store passwords unencrypted?"
3202+msgstr "Парольдерді шифрленбеген түрде сақтау керек пе?"
3203+
3204+#: ../daemon/dbus/gkd-secret-change.c:145
3205+#: ../daemon/dbus/gkd-secret-create.c:96
3206+msgid ""
3207+"By choosing to use a blank password, your stored passwords will not be "
3208+"safely encrypted. They will be accessible by anyone with access to your "
3209+"files."
3210+msgstr ""
3211+"Бос парольді таңдасаңыз, сақталған парольдер шифрленбейтін болады. Яғни, "
3212+"сіздің файлдарыңызды оқи алатын адам парольдеріңізді де оқи алатын болады."
3213+
3214+#: ../daemon/dbus/gkd-secret-change.c:153
3215+msgid "The original password was incorrect"
3216+msgstr "Бастапқы паролі қате болды"
3217+
3218+#: ../daemon/dbus/gkd-secret-change.c:354
3219+msgid "Change Keyring Password"
3220+msgstr "Кілттер бауының паролін өзгерту"
3221+
3222+#: ../daemon/dbus/gkd-secret-create.c:80
3223+#, c-format
3224+msgid ""
3225+"An application wants to create a new keyring called '%s'. Choose the "
3226+"password you want to use for it."
3227+msgstr ""
3228+"Қолданба жаңа '%s' кілттер бауын жасағысы келеді. Қолданғыңыз келетін жаңа "
3229+"парольді енгізіңіз."
3230+
3231+#: ../daemon/dbus/gkd-secret-create.c:84
3232+msgid "Choose password for new keyring"
3233+msgstr "Кілттер бауы үшін жаңа парольді таңдаңыз"
3234+
3235+#: ../daemon/dbus/gkd-secret-create.c:311
3236+msgid "New Keyring Password"
3237+msgstr "Кілттер бауының жаңа паролі"
3238+
3239+#: ../daemon/gnome-keyring-gpg.desktop.in.in.h:1
3240+msgid "GPG Password Agent"
3241+msgstr "GPG парольдер агенті"
3242+
3243+#: ../daemon/gnome-keyring-gpg.desktop.in.in.h:2
3244+msgid "GNOME Keyring: GPG Agent"
3245+msgstr "GNOME Keyring: GPG агенті"
3246+
3247+#: ../daemon/gnome-keyring-pkcs11.desktop.in.in.h:1
3248+msgid "Certificate and Key Storage"
3249+msgstr "Сертификаттар және кілттер қоймасы"
3250+
3251+#: ../daemon/gnome-keyring-pkcs11.desktop.in.in.h:2
3252+msgid "GNOME Keyring: PKCS#11 Component"
3253+msgstr "GNOME Keyring: PKCS#11 құрамасы"
3254+
3255+#: ../daemon/gnome-keyring-secrets.desktop.in.in.h:1
3256+msgid "Secret Storage Service"
3257+msgstr "Құпия кілттер қоймасы қызметі"
3258+
3259+#: ../daemon/gnome-keyring-secrets.desktop.in.in.h:2
3260+msgid "GNOME Keyring: Secret Service"
3261+msgstr "GNOME Keyring: Құпия кілттер қызметі"
3262+
3263+#: ../daemon/gnome-keyring-ssh.desktop.in.in.h:1
3264+msgid "SSH Key Agent"
3265+msgstr "SSH кілттер агенті"
3266+
3267+#: ../daemon/gnome-keyring-ssh.desktop.in.in.h:2
3268+msgid "GNOME Keyring: SSH Agent"
3269+msgstr "GNOME Keyring: SSH агенті"
3270+
3271+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:105
3272+msgid "Unknown"
3273+msgstr "Белгісіз"
3274+
3275+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:202
3276+#, c-format
3277+msgid "PGP Key: %s"
3278+msgstr "PGP кілті: %s"
3279+
3280+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:349
3281+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:350
3282+msgid "Enter Passphrase"
3283+msgstr "Кілттік фразаны енгізіңіз"
3284+
3285+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:354
3286+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:602
3287+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:630
3288+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:645
3289+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:721
3290+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:767
3291+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:799
3292+msgid "Unlock"
3293+msgstr "Босату"
3294+
3295+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:383
3296+msgid "Automatically unlock this key, whenever I'm logged in"
3297+msgstr "Мен жүйеге кірген кезде, бұл кілтті автобосату"
3298+
3299+#. TRANSLATORS: This is the display label for the login keyring
3300+#: ../daemon/login/gkd-login.c:150
3301+msgid "Login"
3302+msgstr "Кіру"
3303+
3304+#: ../egg/dotlock.c:668
3305+#, c-format
3306+msgid "failed to create temporary file `%s': %s\n"
3307+msgstr "`%s' уақытша файлын жасау сәтсіз: %s\n"
3308+
3309+#: ../egg/dotlock.c:718
3310+#, c-format
3311+msgid "error writing to `%s': %s\n"
3312+msgstr "`%s' ішіне жазу қатесі: %s\n"
3313+
3314+#: ../egg/dotlock.c:782
3315+#, c-format
3316+msgid "can't create `%s': %s\n"
3317+msgstr "`%s' жасау мүмкін емес: %s\n"
3318+
3319+#. Note: It is unlikley that we get a race here unless a pid is
3320+#. reused too fast or a new process with the same pid as the one
3321+#. of the stale file tries to lock right at the same time as we.
3322+#: ../egg/dotlock.c:1048
3323+#, c-format
3324+msgid "removing stale lockfile (created by %d)\n"
3325+msgstr "ескірген блоктау файлын өшіру (жасаған %d)\n"
3326+
3327+#: ../egg/dotlock.c:1084
3328+#, c-format
3329+msgid "waiting for lock (held by %d%s) %s...\n"
3330+msgstr "блоктауды күту (ұстап отырған %d%s) %s...\n"
3331+
3332+#: ../egg/dotlock.c:1085
3333+msgid "(deadlock?) "
3334+msgstr "(өзара блоктау?) "
3335+
3336+#: ../egg/dotlock.c:1124
3337+#, c-format
3338+msgid "lock `%s' not made: %s\n"
3339+msgstr "`%s' блоктауы жасалмады: %s\n"
3340+
3341+#: ../egg/dotlock.c:1150
3342+#, c-format
3343+msgid "waiting for lock %s...\n"
3344+msgstr "%s блоктауын күту...\n"
3345+
3346+#: ../egg/egg-oid.c:40
3347+msgid "Domain Component"
3348+msgstr "Домен құрамасы"
3349+
3350+#: ../egg/egg-oid.c:42
3351+msgid "User ID"
3352+msgstr "Пайдаланушы ID"
3353+
3354+#: ../egg/egg-oid.c:45
3355+msgid "Email Address"
3356+msgstr "Эл. пошта адресі"
3357+
3358+#: ../egg/egg-oid.c:53
3359+msgid "Date of Birth"
3360+msgstr "Туған күні"
3361+
3362+#: ../egg/egg-oid.c:55
3363+msgid "Place of Birth"
3364+msgstr "Туған жері"
3365+
3366+#: ../egg/egg-oid.c:57
3367+msgid "Gender"
3368+msgstr "Жынысы"
3369+
3370+#: ../egg/egg-oid.c:59
3371+msgid "Country of Citizenship"
3372+msgstr "Қай елдің азаматы"
3373+
3374+#: ../egg/egg-oid.c:61
3375+msgid "Country of Residence"
3376+msgstr "Тұрып жатқан ел"
3377+
3378+#: ../egg/egg-oid.c:64
3379+msgid "Common Name"
3380+msgstr "Жалпы аты"
3381+
3382+#: ../egg/egg-oid.c:66
3383+msgid "Surname"
3384+msgstr "Фамилия"
3385+
3386+#: ../egg/egg-oid.c:68
3387+msgid "Serial Number"
3388+msgstr "Сериялық нөмірі"
3389+
3390+#: ../egg/egg-oid.c:70
3391+msgid "Country"
3392+msgstr "Ел"
3393+
3394+#: ../egg/egg-oid.c:72
3395+msgid "Locality"
3396+msgstr "Аймақ"
3397+
3398+#: ../egg/egg-oid.c:74
3399+msgid "State"
3400+msgstr "Штат"
3401+
3402+#: ../egg/egg-oid.c:76
3403+msgid "Street"
3404+msgstr "Көше"
3405+
3406+#: ../egg/egg-oid.c:78
3407+msgid "Organization"
3408+msgstr "Ұйым"
3409+
3410+#: ../egg/egg-oid.c:80
3411+msgid "Organizational Unit"
3412+msgstr "Ұйым бөлімі"
3413+
3414+#: ../egg/egg-oid.c:82
3415+msgid "Title"
3416+msgstr "Атауы"
3417+
3418+#: ../egg/egg-oid.c:84
3419+msgid "Telephone Number"
3420+msgstr "Телефон нөмірі"
3421+
3422+#: ../egg/egg-oid.c:86
3423+msgid "Given Name"
3424+msgstr "Аты"
3425+
3426+#: ../egg/egg-oid.c:88
3427+msgid "Initials"
3428+msgstr "Инициалдар"
3429+
3430+#: ../egg/egg-oid.c:90
3431+msgid "Generation Qualifier"
3432+msgstr "Ұрпақ белгісі"
3433+
3434+#: ../egg/egg-oid.c:92
3435+msgid "DN Qualifier"
3436+msgstr "Айыру атының белгісі"
3437+
3438+#: ../egg/egg-oid.c:94
3439+msgid "Pseudonym"
3440+msgstr "Псевдоним"
3441+
3442+#: ../egg/egg-oid.c:97
3443+msgid "RSA"
3444+msgstr "RSA"
3445+
3446+#: ../egg/egg-oid.c:98
3447+msgid "MD2 with RSA"
3448+msgstr "RSA қолданатын MD2"
3449+
3450+#: ../egg/egg-oid.c:99
3451+msgid "MD5 with RSA"
3452+msgstr "RSA қолданатын MD5"
3453+
3454+#: ../egg/egg-oid.c:100
3455+msgid "SHA1 with RSA"
3456+msgstr "RSA қолданатын SHA1 "
3457+
3458+#: ../egg/egg-oid.c:102
3459+msgid "DSA"
3460+msgstr "DSA"
3461+
3462+#: ../egg/egg-oid.c:103
3463+msgid "SHA1 with DSA"
3464+msgstr "DSA қолданатын SHA1 "
3465+
3466+#. Extended Key Usages
3467+#: ../egg/egg-oid.c:106
3468+msgid "Server Authentication"
3469+msgstr "Сервер аутентификациясы"
3470+
3471+#: ../egg/egg-oid.c:107
3472+msgid "Client Authentication"
3473+msgstr "Клиент аутентификациясы"
3474+
3475+#: ../egg/egg-oid.c:108
3476+msgid "Code Signing"
3477+msgstr "Кодқа қолтаңба қою"
3478+
3479+#: ../egg/egg-oid.c:109
3480+msgid "Email Protection"
3481+msgstr "Эл. поштаны қорғау"
3482+
3483+#: ../egg/egg-oid.c:110
3484+msgid "Time Stamping"
3485+msgstr "Уақыт белгісі қою"
3486+
3487+#: ../egg/egg-spawn.c:272
3488+#, c-format
3489+msgid "Unexpected error in select() reading data from a child process (%s)"
3490+msgstr ""
3491+"Ұрпақ процестен мәліметті оқу кезінде select() ішіндегі күтпеген қате (%s)"
3492+
3493+#: ../egg/egg-spawn.c:319
3494+#, c-format
3495+msgid "Unexpected error in waitpid() (%s)"
3496+msgstr "Күтпеген waitpid() қатесі (%s)"
3497+
3498+#: ../pkcs11/gkm/gkm-certificate.c:580
3499+msgid "Unnamed Certificate"
3500+msgstr "Атаусыз сертификат"
3501+
3502+#: ../pkcs11/ssh-store/gkm-ssh-private-key.c:341
3503+msgid "Couldn't parse public SSH key"
3504+msgstr "Публикалық SSH кілтін талдау мүмкін емес"
3505+
3506+#. Get the label ready
3507+#: ../pkcs11/wrap-layer/gkm-wrap-login.c:345
3508+#, c-format
3509+msgid "Unlock password for: %s"
3510+msgstr "Босату паролі үшін: %s"
3511+
3512+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:590
3513+msgid "Unlock Login Keyring"
3514+msgstr "Жүйеге кіру кілттер бауын босату"
3515+
3516+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:592
3517+msgid "Enter password to unlock your login keyring"
3518+msgstr "Жүйеге кіру кілттер бауын босату үшін парольді енгізіңіз"
3519+
3520+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:596
3521+msgid ""
3522+"The password you use to log in to your computer no longer matches that of "
3523+"your login keyring."
3524+msgstr ""
3525+"Компьютеріңізге кіру үшін қолданылатын пароль енді жүйеге кіру кілттер бауы "
3526+"паролімен сәйкес келмейді."
3527+
3528+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:598
3529+msgid ""
3530+"The login keyring did not get unlocked when you logged into your computer."
3531+msgstr ""
3532+"Жүйеге кіру кілттер бауы сіз жүйеге кірген кезде блоктаудан босатылмады."
3533+
3534+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:616
3535+msgid "Unlock Keyring"
3536+msgstr "Кілттер бауын босату"
3537+
3538+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:618
3539+#, c-format
3540+msgid "Enter password for keyring '%s' to unlock"
3541+msgstr "'%s' кілттер бауын блоктаудан босату үшін парольді енгізіңіз"
3542+
3543+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:622
3544+#, c-format
3545+msgid "An application wants access to the keyring '%s', but it is locked"
3546+msgstr ""
3547+"Қолданба '%s' кілттер бауына қатынау талабын жасағысы келеді, бірақ, ол "
3548+"блокталған"
3549+
3550+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:628
3551+msgid "Automatically unlock this keyring whenever I'm logged in"
3552+msgstr "Мен жүйеге кірген кезде, бұл кілттер бауын автобосату"
3553+
3554+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:639
3555+msgid "Unlock private key"
3556+msgstr "Жеке кілтті блоктаудан босату"
3557+
3558+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:641
3559+msgid "Unlock certificate"
3560+msgstr "Сертификатты блоктаудан босату"
3561+
3562+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:643
3563+msgid "Unlock public key"
3564+msgstr "Публикалық кілтті блоктаудан босату"
3565+
3566+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:654
3567+msgid "Enter password to unlock the private key"
3568+msgstr "Жеке кілтті блоктаудан босату үшін парольді енгізіңіз"
3569+
3570+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:656
3571+msgid "Enter password to unlock the certificate"
3572+msgstr "Сертификатты блоктаудан босату үшін парольді енгізіңіз"
3573+
3574+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:658
3575+msgid "Enter password to unlock the public key"
3576+msgstr "Публикалық кілтті босату үшін парольді енгізіңіз"
3577+
3578+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:660
3579+msgid "Enter password to unlock"
3580+msgstr "Блоктаудан босату үшін парольді енгізіңіз"
3581+
3582+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:670
3583+msgid "Automatically unlock this key whenever I'm logged in"
3584+msgstr "Мен жүйеге кірген кезде, бұл кілтті автобосату"
3585+
3586+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:672
3587+msgid "Automatically unlock this certificate whenever I'm logged in"
3588+msgstr "Мен жүйеге кірген кезде, бұл сертификатты автобосату"
3589+
3590+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:674
3591+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:796
3592+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1140
3593+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1288
3594+msgid "Automatically unlock whenever I'm logged in"
3595+msgstr "Мен жүйеге кірген кезде, автобосату"
3596+
3597+#. TRANSLATORS: The private key is locked
3598+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:685
3599+#, c-format
3600+msgid "An application wants access to the private key '%s', but it is locked"
3601+msgstr ""
3602+"Қолданба '%s' жеке кілтіне қатынау талабын жасағысы келеді, бірақ, ол "
3603+"блокталған"
3604+
3605+#. TRANSLATORS: The certificate is locked
3606+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:688
3607+#, c-format
3608+msgid "An application wants access to the certificate '%s', but it is locked"
3609+msgstr ""
3610+"Қолданба '%s' сертификатына қатынау талабын жасағысы келеді, бірақ, ол "
3611+"блокталған"
3612+
3613+#. TRANSLATORS: The public key is locked
3614+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:691
3615+#, c-format
3616+msgid "An application wants access to the public key '%s', but it is locked"
3617+msgstr ""
3618+"Қолданба '%s' публикалық кілтіне қатынау талабын жасағысы келеді, бірақ, ол "
3619+"блокталған"
3620+
3621+#. TRANSLATORS: The object '%s' is locked
3622+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:694
3623+#, c-format
3624+msgid "An application wants access to '%s', but it is locked"
3625+msgstr ""
3626+"Қолданба '%s' үшін қатынау талабын жасағысы келеді, бірақ, ол блокталған"
3627+
3628+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:765
3629+msgid "The unlock password was incorrect"
3630+msgstr "Босату паролі қате болды"
3631+
3632+#. Build up the prompt
3633+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:786
3634+msgid "Unlock certificate/key storage"
3635+msgstr "Сертификаттар/кілттер қоймасын блоктаудан босату"
3636+
3637+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:787
3638+msgid "Enter password to unlock the certificate/key storage"
3639+msgstr ""
3640+"Сертификаттар/кілттер қоймасын блоктаудан босату үшін парольді енгізіңіз"
3641+
3642+#. TRANSLATORS: The storage is locked, and needs unlocking before the application can use it.
3643+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:790
3644+#, c-format
3645+msgid ""
3646+"An application wants access to the certificate/key storage '%s', but it is "
3647+"locked"
3648+msgstr ""
3649+"Қолданба '%s' сертификаттар/кілттер қоймасына қатынау талабын жасағысы "
3650+"келеді, бірақ, ол блокталған"
3651+
3652+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1131
3653+msgid "New Password Required"
3654+msgstr "Жаңа пароль керек"
3655+
3656+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1132
3657+msgid "New password required for secure storage"
3658+msgstr "Қауіпсіз қойма үшін жаңа пароль керек"
3659+
3660+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1134
3661+#, c-format
3662+msgid ""
3663+"In order to prepare '%s' for storage of certificates or keys, a password is "
3664+"required"
3665+msgstr ""
3666+"'%s' ішіне сертификаттар не кілттерді сақтауға дайындау үшін пароль керек"
3667+
3668+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1248
3669+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1279
3670+msgid "Change Password"
3671+msgstr "Парольді өзгерту"
3672+
3673+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1249
3674+msgid "Original password for secure storage"
3675+msgstr "Қауіпсіз қойма үшін ескі паролі"
3676+
3677+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1251
3678+#, c-format
3679+msgid "To change the password for '%s', the original password is required"
3680+msgstr "'%s' паролін өзгерту үшін ескі паролі қажет"
3681+
3682+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1280
3683+msgid "Change password for secure storage"
3684+msgstr "Қауіпсіз қойма үшін парольді өзгерту"
3685+
3686+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1282
3687+#, c-format
3688+msgid "Type a new password for '%s'"
3689+msgstr "'%s' үшін жаңа парольді енгізіңіз"
3690+
3691+#: ../tool/gkr-tool.c:100
3692+#, c-format
3693+msgid "usage: gnome-keyring command [options]\n"
3694+msgstr "қолданылуы: gnome-keyring команда [опциялар]\n"
3695+
3696+#: ../tool/gkr-tool.c:102
3697+msgid "commands: "
3698+msgstr "командалар: "
3699+
3700+#. Translators: keep same length as translated message "commands: "
3701+#: ../tool/gkr-tool.c:106
3702+msgid " "
3703+msgstr " "
3704
3705=== modified file 'po/tr.po'
3706--- po/tr.po 2013-11-15 15:32:11 +0000
3707+++ po/tr.po 2015-02-27 19:55:06 +0000
3708@@ -8,15 +8,15 @@
3709 # Serdar CICEK <serdar@nerd.com.tr>, 2008.
3710 # Baris Cicek <baris@teamforce.name.tr>, 2008, 2009.
3711 # Osman Karagöz <osmank3@gmail.com>, 2013.
3712-# Muhammet Kara <muhammetk@gmail.com>, 2011, 2013.
3713+# Muhammet Kara <muhammetk@gmail.com>, 2011, 2013, 2014.
3714 #
3715 msgid ""
3716 msgstr ""
3717 "Project-Id-Version: gnome-keyring\n"
3718 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
3719 "keyring&keywords=I18N+L10N&component=general\n"
3720-"POT-Creation-Date: 2013-08-26 16:32+0000\n"
3721-"PO-Revision-Date: 2013-09-01 13:11+0300\n"
3722+"POT-Creation-Date: 2014-12-06 19:51+0000\n"
3723+"PO-Revision-Date: 2014-12-07 00:18+0200\n"
3724 "Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
3725 "Language-Team: Türkçe <gnome-turk@gnome.org>\n"
3726 "Language: tr\n"
3727@@ -27,21 +27,21 @@
3728 "X-Generator: Gtranslator 2.91.6\n"
3729
3730 #. TRANSLATORS: This is the label for an keyring created without a label
3731-#: ../daemon/dbus/gkd-secret-change.c:86
3732-#: ../daemon/dbus/gkd-secret-change.c:122
3733-#: ../daemon/dbus/gkd-secret-create.c:79
3734-#: ../pkcs11/secret-store/gkm-secret-collection.c:325
3735-#: ../pkcs11/wrap-layer/gkm-wrap-login.c:346
3736-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:754
3737+#: ../daemon/dbus/gkd-secret-change.c:85
3738+#: ../daemon/dbus/gkd-secret-change.c:121
3739+#: ../daemon/dbus/gkd-secret-create.c:78
3740+#: ../pkcs11/secret-store/gkm-secret-collection.c:324
3741+#: ../pkcs11/wrap-layer/gkm-wrap-login.c:345
3742+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:753
3743 msgid "Unnamed"
3744 msgstr "Adsız"
3745
3746-#: ../daemon/dbus/gkd-secret-change.c:91
3747+#: ../daemon/dbus/gkd-secret-change.c:90
3748 #, c-format
3749 msgid "Enter the old password for the '%s' keyring"
3750 msgstr "'%s' anahtarlığı için eski parolayı girin"
3751
3752-#: ../daemon/dbus/gkd-secret-change.c:95
3753+#: ../daemon/dbus/gkd-secret-change.c:94
3754 #, c-format
3755 msgid ""
3756 "An application wants to change the password for the '%s' keyring. Enter the "
3757@@ -50,21 +50,21 @@
3758 "Bir uygulama '%s' anahtarlığının parolasını değiştirmek istiyor. Bu "
3759 "anahtarlık için eski parolayı girin."
3760
3761-#: ../daemon/dbus/gkd-secret-change.c:101
3762-#: ../daemon/dbus/gkd-secret-change.c:137
3763-#: ../daemon/dbus/gkd-secret-change.c:148
3764-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1144
3765-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1256
3766-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1291
3767+#: ../daemon/dbus/gkd-secret-change.c:100
3768+#: ../daemon/dbus/gkd-secret-change.c:136
3769+#: ../daemon/dbus/gkd-secret-change.c:147
3770+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1163
3771+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1276
3772+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1311
3773 msgid "Continue"
3774 msgstr "Devam"
3775
3776-#: ../daemon/dbus/gkd-secret-change.c:127
3777+#: ../daemon/dbus/gkd-secret-change.c:126
3778 #, c-format
3779 msgid "Choose a new password for the '%s' keyring"
3780 msgstr "'%s' anahtarlığı için yeni bir parola belirleyin"
3781
3782-#: ../daemon/dbus/gkd-secret-change.c:131
3783+#: ../daemon/dbus/gkd-secret-change.c:130
3784 #, c-format
3785 msgid ""
3786 "An application wants to change the password for the '%s' keyring. Choose the "
3787@@ -73,13 +73,13 @@
3788 "Bir uygulama '%s' anahtarlığının parolasını değiştirmek istiyor. Bu "
3789 "anahtarlık için kullanmak istediğiniz yeni parolayı seçin."
3790
3791-#: ../daemon/dbus/gkd-secret-change.c:144
3792-#: ../daemon/dbus/gkd-secret-create.c:95
3793+#: ../daemon/dbus/gkd-secret-change.c:143
3794+#: ../daemon/dbus/gkd-secret-create.c:94
3795 msgid "Store passwords unencrypted?"
3796 msgstr "Parolalar şifrelenmeden depolansın mı?"
3797
3798-#: ../daemon/dbus/gkd-secret-change.c:146
3799-#: ../daemon/dbus/gkd-secret-create.c:97
3800+#: ../daemon/dbus/gkd-secret-change.c:145
3801+#: ../daemon/dbus/gkd-secret-create.c:96
3802 msgid ""
3803 "By choosing to use a blank password, your stored passwords will not be "
3804 "safely encrypted. They will be accessible by anyone with access to your "
3805@@ -88,15 +88,15 @@
3806 "Parolayı boş kullanmak seçildiğinde, depolanan parolalarınız güvenli olarak "
3807 "şifrelenmeyecek. Parolalarınıza dosyalarınıza erişebilen kişiler erişecek."
3808
3809-#: ../daemon/dbus/gkd-secret-change.c:154
3810+#: ../daemon/dbus/gkd-secret-change.c:153
3811 msgid "The original password was incorrect"
3812 msgstr "Asıl parola yanlış"
3813
3814-#: ../daemon/dbus/gkd-secret-change.c:355
3815+#: ../daemon/dbus/gkd-secret-change.c:354
3816 msgid "Change Keyring Password"
3817 msgstr "Anahtarlık Parolası Değiştir"
3818
3819-#: ../daemon/dbus/gkd-secret-create.c:81
3820+#: ../daemon/dbus/gkd-secret-create.c:80
3821 #, c-format
3822 msgid ""
3823 "An application wants to create a new keyring called '%s'. Choose the "
3824@@ -105,11 +105,11 @@
3825 "Bir uygulama '%s' adlı yeni bir anahtarlık oluşturmak istiyor. Bunun için "
3826 "kullanmak istediğiniz parolayı seçin."
3827
3828-#: ../daemon/dbus/gkd-secret-create.c:85
3829+#: ../daemon/dbus/gkd-secret-create.c:84
3830 msgid "Choose password for new keyring"
3831 msgstr "Yeni anahtarlık için parola seçin"
3832
3833-#: ../daemon/dbus/gkd-secret-create.c:312
3834+#: ../daemon/dbus/gkd-secret-create.c:311
3835 msgid "New Keyring Password"
3836 msgstr "Yeni Anahtarlık Parolası"
3837
3838@@ -145,36 +145,36 @@
3839 msgid "GNOME Keyring: SSH Agent"
3840 msgstr "GNOME Anahtarlığı: SSH Aracı"
3841
3842-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:106
3843+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:82
3844 msgid "Unknown"
3845 msgstr "Bilinmeyen"
3846
3847-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:203
3848-#, c-format
3849-msgid "PGP Key: %s"
3850-msgstr "PGP Anahtarı: %s"
3851-
3852-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:350
3853-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:351
3854+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:144
3855+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:145
3856 msgid "Enter Passphrase"
3857 msgstr "Parola Metnini Girin"
3858
3859-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:355
3860-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:603
3861-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:631
3862-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:646
3863-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:722
3864-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:768
3865-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:800
3866+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:149
3867+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:602
3868+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:630
3869+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:645
3870+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:721
3871+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:767
3872+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:799
3873 msgid "Unlock"
3874 msgstr "Kilidini kaldır"
3875
3876-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:384
3877+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:162
3878 msgid "Automatically unlock this key, whenever I'm logged in"
3879 msgstr "Her oturum açtığımda, bu anahtarın kilidini otomatik olarak aç"
3880
3881+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:225
3882+#, c-format
3883+msgid "PGP Key: %s"
3884+msgstr "PGP Anahtarı: %s"
3885+
3886 #. TRANSLATORS: This is the display label for the login keyring
3887-#: ../daemon/login/gkd-login.c:145
3888+#: ../daemon/login/gkd-login.c:158
3889 msgid "Login"
3890 msgstr "Giriş"
3891
3892@@ -221,257 +221,256 @@
3893 msgid "waiting for lock %s...\n"
3894 msgstr "%s kilidi bekleniyor...\n"
3895
3896-#: ../egg/egg-oid.c:41
3897+#: ../egg/egg-oid.c:40
3898 msgid "Domain Component"
3899 msgstr "Alan Bileşeni"
3900
3901-#: ../egg/egg-oid.c:43
3902+#: ../egg/egg-oid.c:42
3903 msgid "User ID"
3904 msgstr "Kullanıcı ID"
3905
3906-#: ../egg/egg-oid.c:46
3907+#: ../egg/egg-oid.c:45
3908 msgid "Email Address"
3909 msgstr "E-posta Adresi"
3910
3911-#: ../egg/egg-oid.c:54
3912+#: ../egg/egg-oid.c:53
3913 msgid "Date of Birth"
3914 msgstr "Doğum Tarihi"
3915
3916-#: ../egg/egg-oid.c:56
3917+#: ../egg/egg-oid.c:55
3918 msgid "Place of Birth"
3919 msgstr "Doğum Yeri"
3920
3921-#: ../egg/egg-oid.c:58
3922+#: ../egg/egg-oid.c:57
3923 msgid "Gender"
3924 msgstr "Cinsiyet"
3925
3926-#: ../egg/egg-oid.c:60
3927+#: ../egg/egg-oid.c:59
3928 msgid "Country of Citizenship"
3929 msgstr "Vatandaşlık Ülkesi"
3930
3931-#: ../egg/egg-oid.c:62
3932+#: ../egg/egg-oid.c:61
3933 msgid "Country of Residence"
3934 msgstr "Yerleşim Ülkesi"
3935
3936-#: ../egg/egg-oid.c:65
3937+#: ../egg/egg-oid.c:64
3938 msgid "Common Name"
3939 msgstr "Ortak Ad"
3940
3941-#: ../egg/egg-oid.c:67
3942+#: ../egg/egg-oid.c:66
3943 msgid "Surname"
3944 msgstr "Soyadı"
3945
3946-#: ../egg/egg-oid.c:69
3947+#: ../egg/egg-oid.c:68
3948 msgid "Serial Number"
3949 msgstr "Seri Numarası"
3950
3951-#: ../egg/egg-oid.c:71
3952+#: ../egg/egg-oid.c:70
3953 msgid "Country"
3954 msgstr "Ülke"
3955
3956-#: ../egg/egg-oid.c:73
3957+#: ../egg/egg-oid.c:72
3958 msgid "Locality"
3959 msgstr "Yöre"
3960
3961-#: ../egg/egg-oid.c:75
3962+#: ../egg/egg-oid.c:74
3963 msgid "State"
3964 msgstr "Eyalet"
3965
3966-#: ../egg/egg-oid.c:77
3967+#: ../egg/egg-oid.c:76
3968 msgid "Street"
3969 msgstr "Sokak"
3970
3971-#: ../egg/egg-oid.c:79
3972+#: ../egg/egg-oid.c:78
3973 msgid "Organization"
3974 msgstr "Organizasyon"
3975
3976-#: ../egg/egg-oid.c:81
3977+#: ../egg/egg-oid.c:80
3978 msgid "Organizational Unit"
3979 msgstr "Organizasyon Birimi"
3980
3981-#: ../egg/egg-oid.c:83
3982+#: ../egg/egg-oid.c:82
3983 msgid "Title"
3984 msgstr "Başlık"
3985
3986-#: ../egg/egg-oid.c:85
3987+#: ../egg/egg-oid.c:84
3988 msgid "Telephone Number"
3989 msgstr "Telefon Numarası"
3990
3991-#: ../egg/egg-oid.c:87
3992+#: ../egg/egg-oid.c:86
3993 msgid "Given Name"
3994 msgstr "Verilen Ad"
3995
3996-#: ../egg/egg-oid.c:89
3997+#: ../egg/egg-oid.c:88
3998 msgid "Initials"
3999 msgstr "Başharfleri"
4000
4001-#: ../egg/egg-oid.c:91
4002+#: ../egg/egg-oid.c:90
4003 msgid "Generation Qualifier"
4004 msgstr "Üretim Belirteci"
4005
4006-#: ../egg/egg-oid.c:93
4007+#: ../egg/egg-oid.c:92
4008 msgid "DN Qualifier"
4009 msgstr "DN Belirteci"
4010
4011-#: ../egg/egg-oid.c:95
4012+#: ../egg/egg-oid.c:94
4013 msgid "Pseudonym"
4014 msgstr "Takma ad"
4015
4016-#: ../egg/egg-oid.c:98
4017+#: ../egg/egg-oid.c:97
4018 msgid "RSA"
4019 msgstr "RSA"
4020
4021-#: ../egg/egg-oid.c:99
4022+#: ../egg/egg-oid.c:98
4023 msgid "MD2 with RSA"
4024 msgstr "RSA ile MD2"
4025
4026-#: ../egg/egg-oid.c:100
4027+#: ../egg/egg-oid.c:99
4028 msgid "MD5 with RSA"
4029 msgstr "RSA ile MD5"
4030
4031-#: ../egg/egg-oid.c:101
4032+#: ../egg/egg-oid.c:100
4033 msgid "SHA1 with RSA"
4034 msgstr "RSA ile SHA1"
4035
4036-#: ../egg/egg-oid.c:103
4037+#: ../egg/egg-oid.c:102
4038 msgid "DSA"
4039 msgstr "DSA"
4040
4041-#: ../egg/egg-oid.c:104
4042+#: ../egg/egg-oid.c:103
4043 msgid "SHA1 with DSA"
4044 msgstr "DSA ile SHA1"
4045
4046 #. Extended Key Usages
4047-#: ../egg/egg-oid.c:107
4048+#: ../egg/egg-oid.c:106
4049 msgid "Server Authentication"
4050 msgstr "Sunucu Kimlik Denetimi"
4051
4052-#: ../egg/egg-oid.c:108
4053+#: ../egg/egg-oid.c:107
4054 msgid "Client Authentication"
4055 msgstr "İstemci Kimlik Denetimi"
4056
4057-#: ../egg/egg-oid.c:109
4058+#: ../egg/egg-oid.c:108
4059 msgid "Code Signing"
4060 msgstr "Kod İmzalama"
4061
4062-#: ../egg/egg-oid.c:110
4063+#: ../egg/egg-oid.c:109
4064 msgid "Email Protection"
4065 msgstr "E-posta Koruma"
4066
4067-#: ../egg/egg-oid.c:111
4068+#: ../egg/egg-oid.c:110
4069 msgid "Time Stamping"
4070 msgstr "Zaman Damgalama"
4071
4072-#: ../egg/egg-spawn.c:273
4073+#: ../egg/egg-spawn.c:272
4074 #, c-format
4075 msgid "Unexpected error in select() reading data from a child process (%s)"
4076 msgstr "Alt süreçten bilgi okurken select()'te beklenmeyen hata oluştu (%s)"
4077
4078-#: ../egg/egg-spawn.c:320
4079+#: ../egg/egg-spawn.c:319
4080 #, c-format
4081 msgid "Unexpected error in waitpid() (%s)"
4082 msgstr "waitpid()'de beklenmedik hata oluştu(%s)"
4083
4084-#: ../pkcs11/gkm/gkm-certificate.c:581
4085+#: ../pkcs11/gkm/gkm-certificate.c:580
4086 msgid "Unnamed Certificate"
4087 msgstr "İsimlendirilmemiş Sertifika"
4088
4089-#: ../pkcs11/ssh-store/gkm-ssh-private-key.c:342
4090+#: ../pkcs11/ssh-store/gkm-ssh-private-key.c:341
4091 msgid "Couldn't parse public SSH key"
4092 msgstr "Genel SSH anahtarı ayrıştırılamadı"
4093
4094 #. Get the label ready
4095-#: ../pkcs11/wrap-layer/gkm-wrap-login.c:346
4096+#: ../pkcs11/wrap-layer/gkm-wrap-login.c:345
4097 #, c-format
4098 msgid "Unlock password for: %s"
4099 msgstr "Şunun için kilit açma şifresi: %s"
4100
4101-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:591
4102+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:590
4103 msgid "Unlock Login Keyring"
4104 msgstr "Giriş Anahtarlık Kilidini Kaldır"
4105
4106-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:593
4107+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:592
4108 msgid "Enter password to unlock your login keyring"
4109 msgstr "Giriş anahtarlığınızı açmak için parolayı girin"
4110
4111-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:597
4112-#, fuzzy
4113+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:596
4114 msgid ""
4115 "The password you use to log in to your computer no longer matches that of "
4116 "your login keyring."
4117 msgstr ""
4118-"Bilgisayarınıza giriş yamak için kullandığınız şifre artık giriş "
4119+"Bilgisayarınıza giriş yapmak için kullandığınız parola artık giriş "
4120 "anahtarlığınızla uyuşmuyor."
4121
4122-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:599
4123+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:598
4124 msgid ""
4125 "The login keyring did not get unlocked when you logged into your computer."
4126 msgstr "Giriş anahtarlığı, bilgisayarınıza giriş yaptığınızda açılmadı."
4127
4128-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:617
4129+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:616
4130 msgid "Unlock Keyring"
4131 msgstr "Anahtarlık Kilidini Aç"
4132
4133-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:619
4134+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:618
4135 #, c-format
4136 msgid "Enter password for keyring '%s' to unlock"
4137 msgstr "'%s' anahtarlık kilidini açmak için parola girin"
4138
4139-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:623
4140+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:622
4141 #, c-format
4142 msgid "An application wants access to the keyring '%s', but it is locked"
4143 msgstr ""
4144 "Bir uygulama '%s' anahtarlığına erişmek istiyor, ancak anahtarlık kilitli"
4145
4146-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:629
4147+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:628
4148 msgid "Automatically unlock this keyring whenever I'm logged in"
4149 msgstr "Her oturum açtığımda, bu anahtarlığın kilidini otomatik olarak aç"
4150
4151-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:640
4152+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:639
4153 msgid "Unlock private key"
4154 msgstr "Özel anahtarın kilidini kaldır"
4155
4156-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:642
4157+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:641
4158 msgid "Unlock certificate"
4159 msgstr "Sertifikanın kilidini kaldır"
4160
4161-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:644
4162+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:643
4163 msgid "Unlock public key"
4164 msgstr "Genel anahtarın kilidini kaldır"
4165
4166-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:655
4167+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:654
4168 msgid "Enter password to unlock the private key"
4169 msgstr "Özel anahtarlık kilidini açmak için parola girin"
4170
4171-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:657
4172+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:656
4173 msgid "Enter password to unlock the certificate"
4174 msgstr "Sertifikanın kilidini açmak için parola girin"
4175
4176-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:659
4177+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:658
4178 msgid "Enter password to unlock the public key"
4179 msgstr "Genel anahtarlık kilidini açmak için parola girin"
4180
4181-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:661
4182+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:660
4183 msgid "Enter password to unlock"
4184 msgstr "Kilidini açmak için parola girin"
4185
4186-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:671
4187+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:670
4188 msgid "Automatically unlock this key whenever I'm logged in"
4189 msgstr "Her oturum açtığımda, bu anahtarın kilidini otomatik olarak aç"
4190
4191-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:673
4192+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:672
4193 msgid "Automatically unlock this certificate whenever I'm logged in"
4194 msgstr "Her oturum açtığımda, bu sertifikanın kilidini otomatik olarak aç"
4195
4196-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:675
4197-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:797
4198-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1141
4199-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1289
4200+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:674
4201+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:796
4202+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1160
4203+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1309
4204 msgid "Automatically unlock whenever I'm logged in"
4205 msgstr "Her oturum açtığımda, kilidi otomatik olarak aç"
4206
4207 #. TRANSLATORS: The private key is locked
4208-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:686
4209+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:685
4210 #, c-format
4211 msgid "An application wants access to the private key '%s', but it is locked"
4212 msgstr ""
4213@@ -479,7 +478,7 @@
4214 "anahtarlık kilitli"
4215
4216 #. TRANSLATORS: The certificate is locked
4217-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:689
4218+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:688
4219 #, c-format
4220 msgid "An application wants access to the certificate '%s', but it is locked"
4221 msgstr ""
4222@@ -487,7 +486,7 @@
4223 "kilitli"
4224
4225 #. TRANSLATORS: The public key is locked
4226-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:692
4227+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:691
4228 #, c-format
4229 msgid "An application wants access to the public key '%s', but it is locked"
4230 msgstr ""
4231@@ -495,28 +494,28 @@
4232 "anahtarlık kilitli"
4233
4234 #. TRANSLATORS: The object '%s' is locked
4235-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:695
4236+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:694
4237 #, c-format
4238 msgid "An application wants access to '%s', but it is locked"
4239 msgstr ""
4240 "Bilinmeyen bir uygulama '%s' anahtarlığa ulaşmak istiyor, fakat anahtarlık "
4241 "kilitli"
4242
4243-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:766
4244+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:765
4245 msgid "The unlock password was incorrect"
4246 msgstr "Kilit açma parolası hatalı"
4247
4248 #. Build up the prompt
4249-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:787
4250+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:786
4251 msgid "Unlock certificate/key storage"
4252 msgstr "Sertifika/anahtar deposu kilidini aç"
4253
4254-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:788
4255+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:787
4256 msgid "Enter password to unlock the certificate/key storage"
4257 msgstr "Sertifika/anahtar deposu kilidini açmak için parolanızı girin"
4258
4259 #. TRANSLATORS: The storage is locked, and needs unlocking before the application can use it.
4260-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:791
4261+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:790
4262 #, c-format
4263 msgid ""
4264 "An application wants access to the certificate/key storage '%s', but it is "
4265@@ -524,15 +523,15 @@
4266 msgstr ""
4267 "Bir uygulama sertifika/anahtar deposu '%s' için erişim istiyor, ancak kilitli"
4268
4269-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1132
4270+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1151
4271 msgid "New Password Required"
4272 msgstr "Yeni Parola Gerekli"
4273
4274-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1133
4275+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1152
4276 msgid "New password required for secure storage"
4277 msgstr "Güvenli depolama için yeni parola gerekli"
4278
4279-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1135
4280+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1154
4281 #, c-format
4282 msgid ""
4283 "In order to prepare '%s' for storage of certificates or keys, a password is "
4284@@ -540,40 +539,40 @@
4285 msgstr ""
4286 "'%s' parola ya da anahtar depolamaya hazırlamak için bir parola gereklidir"
4287
4288-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1249
4289-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1280
4290+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1269
4291+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1300
4292 msgid "Change Password"
4293 msgstr "Parolayı Değiştir"
4294
4295-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1250
4296+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1270
4297 msgid "Original password for secure storage"
4298 msgstr "Güvenli depolama için asıl parola"
4299
4300-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1252
4301+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1272
4302 #, c-format
4303 msgid "To change the password for '%s', the original password is required"
4304 msgstr "'%s' parolasını değiştirmek için, asıl parola gereklidir"
4305
4306-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1281
4307+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1301
4308 msgid "Change password for secure storage"
4309 msgstr "Güvenli depolama için parolayı değiştir"
4310
4311-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1283
4312+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1303
4313 #, c-format
4314 msgid "Type a new password for '%s'"
4315 msgstr "'%s' için yeni bir parola yazın"
4316
4317-#: ../tool/gkr-tool.c:102
4318+#: ../tool/gkr-tool.c:100
4319 #, c-format
4320 msgid "usage: gnome-keyring command [options]\n"
4321 msgstr "kullanımı: gnome-keyring komutu [seçenekler]\n"
4322
4323-#: ../tool/gkr-tool.c:104
4324+#: ../tool/gkr-tool.c:102
4325 msgid "commands: "
4326 msgstr "komutlar: "
4327
4328 #. Translators: keep same length as translated message "commands: "
4329-#: ../tool/gkr-tool.c:108
4330+#: ../tool/gkr-tool.c:106
4331 msgid " "
4332 msgstr " "
4333
4334
4335=== modified file 'po/vi.po'
4336--- po/vi.po 2012-09-04 09:25:05 +0000
4337+++ po/vi.po 2015-02-27 19:55:06 +0000
4338@@ -1,28 +1,32 @@
4339 # Vietnamese translation of GNOME Keyring.
4340-# Copyright © 2010 GNOME i18n Project for Vietnamese.
4341+# Copyright © 2014 GNOME i18n Project for Vietnamese.
4342+# This file is distributed under the same license as the gnome-keyring package.
4343 # Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2004,2008,2011-2012.
4344 # Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
4345 # Nguyen Vu Hung <vuhung16plus@gmail.com>, 2011.
4346+# Trần Ngọc Quân <vnwildman@gmail.com>, 2014.
4347+#
4348 msgid ""
4349 msgstr ""
4350-"Project-Id-Version: gnome-keyring 2.26.3\n"
4351+"Project-Id-Version: gnome-keyring master\n"
4352 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
4353 "keyring&keywords=I18N+L10N&component=general\n"
4354-"POT-Creation-Date: 2012-03-08 19:47+0000\n"
4355-"PO-Revision-Date: 2012-09-01 17:12+0700\n"
4356-"Last-Translator: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n"
4357-"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
4358+"POT-Creation-Date: 2014-11-20 20:13+0000\n"
4359+"PO-Revision-Date: 2014-11-21 14:15+0700\n"
4360+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
4361+"Language-Team: Vietnamese <gnome-vi-list@gnome.org>\n"
4362+"Language: vi\n"
4363 "MIME-Version: 1.0\n"
4364 "Content-Type: text/plain; charset=UTF-8\n"
4365 "Content-Transfer-Encoding: 8bit\n"
4366 "Plural-Forms: nplurals=1; plural=0;\n"
4367-"X-Generator: LocFactoryEditor 1.8\n"
4368+"X-Generator: Poedit 1.5.5\n"
4369
4370 #. TRANSLATORS: This is the label for an keyring created without a label
4371 #: ../daemon/dbus/gkd-secret-change.c:85
4372 #: ../daemon/dbus/gkd-secret-change.c:121
4373-#: ../daemon/dbus/gkd-secret-create.c:79
4374-#: ../pkcs11/secret-store/gkm-secret-collection.c:325
4375+#: ../daemon/dbus/gkd-secret-create.c:78
4376+#: ../pkcs11/secret-store/gkm-secret-collection.c:324
4377 #: ../pkcs11/wrap-layer/gkm-wrap-login.c:345
4378 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:753
4379 msgid "Unnamed"
4380@@ -30,35 +34,31 @@
4381
4382 #: ../daemon/dbus/gkd-secret-change.c:90
4383 #, c-format
4384-#| msgid "Choose a new password for the '%s' keyring"
4385 msgid "Enter the old password for the '%s' keyring"
4386-msgstr "Nhập mật khẩu cũ cho vòng khóa '%s'"
4387+msgstr "Nhập mật khẩu cũ cho chùm chìa khóa “%s”"
4388
4389 #: ../daemon/dbus/gkd-secret-change.c:94
4390 #, c-format
4391-#| msgid ""
4392-#| "An application wants to change the password for the '%s' keyring. Choose "
4393-#| "the new password you want to use for it."
4394 msgid ""
4395 "An application wants to change the password for the '%s' keyring. Enter the "
4396 "old password for it."
4397 msgstr ""
4398-"Một ứng dụng muốn thay đổi mật khẫu cho vòng khoá '%s'. Nhập mật khẩu cũ của "
4399-"nó."
4400+"Một ứng dụng muốn thay đổi mật khẩu cho chùm chìa khóa “%s”. Nhập mật khẩu "
4401+"cũ của nó."
4402
4403 #: ../daemon/dbus/gkd-secret-change.c:100
4404 #: ../daemon/dbus/gkd-secret-change.c:136
4405-#: ../daemon/dbus/gkd-secret-change.c:146
4406-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1143
4407-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1255
4408-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1290
4409+#: ../daemon/dbus/gkd-secret-change.c:147
4410+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1163
4411+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1276
4412+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1311
4413 msgid "Continue"
4414 msgstr "Tiếp tục"
4415
4416 #: ../daemon/dbus/gkd-secret-change.c:126
4417 #, c-format
4418 msgid "Choose a new password for the '%s' keyring"
4419-msgstr "Hãy chọn một mật khẩu mới cho vòng khóa '%s'"
4420+msgstr "Hãy chọn một mật khẩu mới cho chùm chìa khóa “%s”"
4421
4422 #: ../daemon/dbus/gkd-secret-change.c:130
4423 #, c-format
4424@@ -66,48 +66,48 @@
4425 "An application wants to change the password for the '%s' keyring. Choose the "
4426 "new password you want to use for it."
4427 msgstr ""
4428-"Một ứng dụng muốn thay đổi mật khẫu cho vòng khoá '%s'. Hãy chọn mật khẩu "
4429-"cần sử dụng với nó."
4430+"Một ứng dụng muốn thay đổi mật khẫu cho chùm chìa khóa “%s”. Hãy chọn mật "
4431+"khẩu cần sử dụng với nó."
4432
4433-#: ../daemon/dbus/gkd-secret-change.c:142
4434-#: ../daemon/dbus/gkd-secret-create.c:95
4435+#: ../daemon/dbus/gkd-secret-change.c:143
4436+#: ../daemon/dbus/gkd-secret-create.c:94
4437 msgid "Store passwords unencrypted?"
4438-msgstr "Lưu mật khẩu không mật mã không?"
4439+msgstr "Lưu mật khẩu không mã hóa không?"
4440
4441-#: ../daemon/dbus/gkd-secret-change.c:144
4442-#: ../daemon/dbus/gkd-secret-create.c:97
4443+#: ../daemon/dbus/gkd-secret-change.c:145
4444+#: ../daemon/dbus/gkd-secret-create.c:96
4445 msgid ""
4446 "By choosing to use a blank password, your stored passwords will not be "
4447 "safely encrypted. They will be accessible by anyone with access to your "
4448 "files."
4449 msgstr ""
4450-"Dùng một mật khẩu trắng thì mật khẩu đã lưu sẽ không thể được mã hoá an "
4451-"toàn. Mọi người đều có thể truy cập vào tập tin của bạn."
4452+"Dùng một mật khẩu trắng thì mật khẩu đã lưu sẽ không được mã hoá an toàn. "
4453+"Mọi người đều có thể truy cập vào tập tin của bạn."
4454
4455-#: ../daemon/dbus/gkd-secret-change.c:152
4456+#: ../daemon/dbus/gkd-secret-change.c:153
4457 msgid "The original password was incorrect"
4458 msgstr "Bạn đã gõ sai mật khẩu gốc"
4459
4460-#: ../daemon/dbus/gkd-secret-change.c:352
4461+#: ../daemon/dbus/gkd-secret-change.c:354
4462 msgid "Change Keyring Password"
4463-msgstr "Đổi mật khẩu vòng khóa"
4464+msgstr "Đổi mật khẩu chùm chìa khóa"
4465
4466-#: ../daemon/dbus/gkd-secret-create.c:81
4467+#: ../daemon/dbus/gkd-secret-create.c:80
4468 #, c-format
4469 msgid ""
4470 "An application wants to create a new keyring called '%s'. Choose the "
4471 "password you want to use for it."
4472 msgstr ""
4473-"Một ứng dụng muốn tạo một vòng khóa mới tên '%s'. Hãy chọn mật khẩu cần sử "
4474-"dụng với nó."
4475+"Một ứng dụng muốn tạo một chùm chìa khóa mới tên “%s”. Hãy chọn mật khẩu mà "
4476+"bạn muốn áp dụng cho nó."
4477
4478-#: ../daemon/dbus/gkd-secret-create.c:85
4479+#: ../daemon/dbus/gkd-secret-create.c:84
4480 msgid "Choose password for new keyring"
4481-msgstr "Hãy chọn mật khẩu cho vòng khóa mới"
4482+msgstr "Hãy chọn mật khẩu cho chùm chìa khóa mới"
4483
4484-#: ../daemon/dbus/gkd-secret-create.c:308
4485+#: ../daemon/dbus/gkd-secret-create.c:311
4486 msgid "New Keyring Password"
4487-msgstr "Mật khẩu vòng khóa mới"
4488+msgstr "Mật khẩu chùm chìa khóa mới"
4489
4490 #: ../daemon/gnome-keyring-gpg.desktop.in.in.h:1
4491 msgid "GPG Password Agent"
4492@@ -115,47 +115,42 @@
4493
4494 #: ../daemon/gnome-keyring-gpg.desktop.in.in.h:2
4495 msgid "GNOME Keyring: GPG Agent"
4496-msgstr "Vòng Khoá GNOME: GPG Agent"
4497+msgstr "Chùm chìa khóa GNOME: Đại diện GPG"
4498
4499 #: ../daemon/gnome-keyring-pkcs11.desktop.in.in.h:1
4500 msgid "Certificate and Key Storage"
4501-msgstr "Lưu trữ Chứng nhận và Khoá"
4502+msgstr "Lưu trữ Chứng nhận và khóa"
4503
4504 #: ../daemon/gnome-keyring-pkcs11.desktop.in.in.h:2
4505 msgid "GNOME Keyring: PKCS#11 Component"
4506-msgstr "Vòng Khoá GNOME: thành phần PKCS#11"
4507+msgstr "Chùm chìa khóa GNOME: thành phần PKCS#11"
4508
4509 #: ../daemon/gnome-keyring-secrets.desktop.in.in.h:1
4510 msgid "Secret Storage Service"
4511-msgstr "Dịch vụ lưu trữ mật"
4512+msgstr "Dịch vụ lưu trữ bảo mật"
4513
4514 #: ../daemon/gnome-keyring-secrets.desktop.in.in.h:2
4515 msgid "GNOME Keyring: Secret Service"
4516-msgstr "Vòng Khoá GNOME: dịch vụ mật"
4517+msgstr "Chùm chìa khóa GNOME: dịch vụ bảo mật"
4518
4519 #: ../daemon/gnome-keyring-ssh.desktop.in.in.h:1
4520 msgid "SSH Key Agent"
4521-msgstr "Tác nhân khoá SSH"
4522+msgstr "Đại diện khóa SSH"
4523
4524 #: ../daemon/gnome-keyring-ssh.desktop.in.in.h:2
4525 msgid "GNOME Keyring: SSH Agent"
4526-msgstr "Vòng Khoá GNOME: SSH Agent"
4527+msgstr "Chùm chìa khóa GNOME: Đại diện SSH"
4528
4529-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:106
4530+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:82
4531 msgid "Unknown"
4532 msgstr "Không biết"
4533
4534-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:203
4535-#, c-format
4536-msgid "PGP Key: %s"
4537-msgstr "Khóa PGP: %s"
4538-
4539-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:360
4540-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:361
4541+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:144
4542+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:145
4543 msgid "Enter Passphrase"
4544 msgstr "Nhập mật mã"
4545
4546-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:365
4547+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:149
4548 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:602
4549 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:630
4550 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:645
4551@@ -163,32 +158,36 @@
4552 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:767
4553 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:799
4554 msgid "Unlock"
4555-msgstr "Mở khoá"
4556+msgstr "Mở khóa"
4557
4558-#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:394
4559-#| msgid "Automatically unlock this keyring whenever I'm logged in"
4560+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:162
4561 msgid "Automatically unlock this key, whenever I'm logged in"
4562-msgstr "Tự động gỡ khoá khoá này khi nào tôi đã đăng nhập"
4563+msgstr "Tự động gỡ khóa khóa này khi nào tôi đã đăng nhập"
4564+
4565+#: ../daemon/gpg-agent/gkd-gpg-agent-ops.c:225
4566+#, c-format
4567+msgid "PGP Key: %s"
4568+msgstr "Khóa PGP: %s"
4569
4570 #. TRANSLATORS: This is the display label for the login keyring
4571-#: ../daemon/login/gkd-login.c:145
4572+#: ../daemon/login/gkd-login.c:158
4573 msgid "Login"
4574 msgstr "Đăng nhập"
4575
4576 #: ../egg/dotlock.c:668
4577 #, c-format
4578 msgid "failed to create temporary file `%s': %s\n"
4579-msgstr "lỗi tạo tập tin tạm `%s': %s\n"
4580+msgstr "gặp lỗi khi tạo tập tin tạm “%s”: %s\n"
4581
4582 #: ../egg/dotlock.c:718
4583 #, c-format
4584 msgid "error writing to `%s': %s\n"
4585-msgstr "lỗi ghi vào `%s': %s\n"
4586+msgstr "gặp lỗi khi ghi vào “%s”: %s\n"
4587
4588 #: ../egg/dotlock.c:782
4589 #, c-format
4590 msgid "can't create `%s': %s\n"
4591-msgstr "lỗi tạo `%s': %s\n"
4592+msgstr "Không thể tạo “%s”: %s\n"
4593
4594 #. Note: It is unlikley that we get a race here unless a pid is
4595 #. reused too fast or a new process with the same pid as the one
4596@@ -196,201 +195,203 @@
4597 #: ../egg/dotlock.c:1048
4598 #, c-format
4599 msgid "removing stale lockfile (created by %d)\n"
4600-msgstr "bỏ tập tin khoá không còn dùng (tạo bởi %d)\n"
4601+msgstr "xóa bỏ tập tin khóa đã hỏng (được tạo bởi %d)\n"
4602
4603 #: ../egg/dotlock.c:1084
4604 #, c-format
4605 msgid "waiting for lock (held by %d%s) %s...\n"
4606-msgstr "chờ khoá (giữ bởi %d%s) %s...\n"
4607+msgstr "chờ khóa (được giữ bởi %d%s) %s...\n"
4608
4609+# http://vi.wikipedia.org/wiki/Deadlock
4610+# deadlock (Khóa chết) Là trạng thái xảy ra trong môi trường đa nhiệm (Muti-Threading) khi hai hoặc nhiều tiến trình đi vào vòng lặp chờ tài nguyên mãi mãi.
4611 #: ../egg/dotlock.c:1085
4612 msgid "(deadlock?) "
4613-msgstr ""
4614+msgstr "(khóa chết?)"
4615
4616 #: ../egg/dotlock.c:1124
4617 #, c-format
4618 msgid "lock `%s' not made: %s\n"
4619-msgstr "khoá `%s' chưa được tạo: %s\n"
4620+msgstr "khóa “%s” chưa được tạo: %s\n"
4621
4622 #: ../egg/dotlock.c:1150
4623 #, c-format
4624 msgid "waiting for lock %s...\n"
4625-msgstr "chờ khoá %s...\n"
4626+msgstr "chờ khóa %s...\n"
4627
4628-#: ../egg/egg-oid.c:41
4629+#: ../egg/egg-oid.c:40
4630 msgid "Domain Component"
4631-msgstr "Thành phần Miền"
4632+msgstr "Thành phần tên miền"
4633
4634-#: ../egg/egg-oid.c:43
4635+#: ../egg/egg-oid.c:42
4636 msgid "User ID"
4637 msgstr "Mã số người dùng"
4638
4639-#: ../egg/egg-oid.c:46
4640+#: ../egg/egg-oid.c:45
4641 msgid "Email Address"
4642 msgstr "Thư điện tử"
4643
4644-#: ../egg/egg-oid.c:54
4645+#: ../egg/egg-oid.c:53
4646 msgid "Date of Birth"
4647 msgstr "Ngày sinh"
4648
4649-#: ../egg/egg-oid.c:56
4650+#: ../egg/egg-oid.c:55
4651 msgid "Place of Birth"
4652 msgstr "Nơi sinh"
4653
4654-#: ../egg/egg-oid.c:58
4655+#: ../egg/egg-oid.c:57
4656 msgid "Gender"
4657 msgstr "Giới tính"
4658
4659-#: ../egg/egg-oid.c:60
4660+#: ../egg/egg-oid.c:59
4661 msgid "Country of Citizenship"
4662 msgstr "Quốc gia cấp công dân"
4663
4664-#: ../egg/egg-oid.c:62
4665+#: ../egg/egg-oid.c:61
4666 msgid "Country of Residence"
4667 msgstr "Quốc gia ở"
4668
4669-#: ../egg/egg-oid.c:65
4670+#: ../egg/egg-oid.c:64
4671 msgid "Common Name"
4672 msgstr "Tên chung"
4673
4674-#: ../egg/egg-oid.c:67
4675+#: ../egg/egg-oid.c:66
4676 msgid "Surname"
4677 msgstr "Họ"
4678
4679-#: ../egg/egg-oid.c:69
4680+#: ../egg/egg-oid.c:68
4681 msgid "Serial Number"
4682 msgstr "Số thứ tự"
4683
4684-#: ../egg/egg-oid.c:71
4685+#: ../egg/egg-oid.c:70
4686 msgid "Country"
4687 msgstr "Quốc gia"
4688
4689-#: ../egg/egg-oid.c:73
4690+#: ../egg/egg-oid.c:72
4691 msgid "Locality"
4692 msgstr "Vùng"
4693
4694-#: ../egg/egg-oid.c:75
4695+#: ../egg/egg-oid.c:74
4696 msgid "State"
4697 msgstr "Tỉnh"
4698
4699-#: ../egg/egg-oid.c:77
4700+#: ../egg/egg-oid.c:76
4701 msgid "Street"
4702 msgstr "Đường"
4703
4704-#: ../egg/egg-oid.c:79
4705+#: ../egg/egg-oid.c:78
4706 msgid "Organization"
4707 msgstr "Tổ chức"
4708
4709-#: ../egg/egg-oid.c:81
4710+#: ../egg/egg-oid.c:80
4711 msgid "Organizational Unit"
4712 msgstr "Đơn vị tổ chức"
4713
4714-#: ../egg/egg-oid.c:83
4715+#: ../egg/egg-oid.c:82
4716 msgid "Title"
4717 msgstr "Tuổi tác"
4718
4719-#: ../egg/egg-oid.c:85
4720+#: ../egg/egg-oid.c:84
4721 msgid "Telephone Number"
4722 msgstr "Số điện thoại"
4723
4724-#: ../egg/egg-oid.c:87
4725+#: ../egg/egg-oid.c:86
4726 msgid "Given Name"
4727 msgstr "Tên hay gọi"
4728
4729-#: ../egg/egg-oid.c:89
4730+#: ../egg/egg-oid.c:88
4731 msgid "Initials"
4732 msgstr "Tên viết tắt"
4733
4734-#: ../egg/egg-oid.c:91
4735+#: ../egg/egg-oid.c:90
4736 msgid "Generation Qualifier"
4737 msgstr "Thế hệ dè dặt"
4738
4739-#: ../egg/egg-oid.c:93
4740+#: ../egg/egg-oid.c:92
4741 msgid "DN Qualifier"
4742 msgstr "Tên miền dè dặt"
4743
4744-#: ../egg/egg-oid.c:95
4745+#: ../egg/egg-oid.c:94
4746 msgid "Pseudonym"
4747 msgstr "Biệt hiệu"
4748
4749-#: ../egg/egg-oid.c:98
4750+#: ../egg/egg-oid.c:97
4751 msgid "RSA"
4752 msgstr "RSA"
4753
4754-#: ../egg/egg-oid.c:99
4755+#: ../egg/egg-oid.c:98
4756 msgid "MD2 with RSA"
4757 msgstr "MD2 với mã hoá RSA"
4758
4759-#: ../egg/egg-oid.c:100
4760+#: ../egg/egg-oid.c:99
4761 msgid "MD5 with RSA"
4762 msgstr "MD5 với mã hoá RSA"
4763
4764-#: ../egg/egg-oid.c:101
4765+#: ../egg/egg-oid.c:100
4766 msgid "SHA1 with RSA"
4767 msgstr "SHA1 với mã hoá RSA"
4768
4769-#: ../egg/egg-oid.c:103
4770+#: ../egg/egg-oid.c:102
4771 msgid "DSA"
4772 msgstr "DSA"
4773
4774-#: ../egg/egg-oid.c:104
4775+#: ../egg/egg-oid.c:103
4776 msgid "SHA1 with DSA"
4777 msgstr "SHA1 với mã hoá DSA"
4778
4779 #. Extended Key Usages
4780-#: ../egg/egg-oid.c:107
4781+#: ../egg/egg-oid.c:106
4782 msgid "Server Authentication"
4783 msgstr "Xác thực máy chủ"
4784
4785-#: ../egg/egg-oid.c:108
4786+#: ../egg/egg-oid.c:107
4787 msgid "Client Authentication"
4788 msgstr "Xác thực máy khách"
4789
4790-#: ../egg/egg-oid.c:109
4791+#: ../egg/egg-oid.c:108
4792 msgid "Code Signing"
4793 msgstr "Ký mã"
4794
4795-#: ../egg/egg-oid.c:110
4796+#: ../egg/egg-oid.c:109
4797 msgid "Email Protection"
4798 msgstr "Bảo vệ thư"
4799
4800-#: ../egg/egg-oid.c:111
4801+#: ../egg/egg-oid.c:110
4802 msgid "Time Stamping"
4803-msgstr "Tem thời gian"
4804+msgstr "Dấu vết thời gian"
4805
4806-#: ../egg/egg-spawn.c:273
4807+#: ../egg/egg-spawn.c:272
4808 #, c-format
4809 msgid "Unexpected error in select() reading data from a child process (%s)"
4810 msgstr ""
4811-"Gặp lỗi bất thường trong « select() » khi đọc dữ liệu từ một tiến trình con "
4812+"Gặp lỗi bất thường trong “select()” khi đọc dữ liệu từ một tiến trình con "
4813 "(%s)"
4814
4815-#: ../egg/egg-spawn.c:320
4816+#: ../egg/egg-spawn.c:319
4817 #, c-format
4818 msgid "Unexpected error in waitpid() (%s)"
4819-msgstr "Gặp lỗi bất thường trong « waitpid() » (%s)"
4820+msgstr "Gặp lỗi bất thường trong “waitpid()” (%s)"
4821
4822-#: ../pkcs11/gkm/gkm-certificate.c:572
4823+#: ../pkcs11/gkm/gkm-certificate.c:580
4824 msgid "Unnamed Certificate"
4825 msgstr "Chứng nhận không tên"
4826
4827-#: ../pkcs11/ssh-store/gkm-ssh-private-key.c:339
4828+#: ../pkcs11/ssh-store/gkm-ssh-private-key.c:341
4829 msgid "Couldn't parse public SSH key"
4830-msgstr "Không thể phân tích cú pháp của khoá SSH công khai"
4831+msgstr "Không thể phân tích cú pháp của khóa SSH công"
4832
4833 #. Get the label ready
4834 #: ../pkcs11/wrap-layer/gkm-wrap-login.c:345
4835 #, c-format
4836 msgid "Unlock password for: %s"
4837-msgstr "Mật khẩu gỡ khoá cho: %s"
4838+msgstr "Mật khẩu gỡ khóa cho: %s"
4839
4840 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:590
4841 msgid "Unlock Login Keyring"
4842-msgstr "Gỡ khoá vòng khoá đăng nhập"
4843+msgstr "Gỡ khóa chùm chìa khóa đăng nhập"
4844
4845 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:592
4846 msgid "Enter password to unlock your login keyring"
4847-msgstr "Nhập mật khẩu để gỡ khoá vòng khoá đăng nhập"
4848+msgstr "Nhập mật khẩu để gỡ khóa chùm chìa khóa đăng nhập"
4849
4850 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:596
4851 msgid ""
4852@@ -398,35 +399,36 @@
4853 "your login keyring."
4854 msgstr ""
4855 "Bạn đang sử dụng một mật khẩu để đăng nhập vào máy tính mà không còn tương "
4856-"ứng với mật khẩu của vòng khoá đăng nhập."
4857+"ứng với mật khẩu của chùm chìa khóa đăng nhập."
4858
4859 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:598
4860 msgid ""
4861 "The login keyring did not get unlocked when you logged into your computer."
4862 msgstr ""
4863-"Vòng khoá đăng nhập đã không được gỡ khoá khi bạn đăng nhập vào máy tính này."
4864+"Chùm chìa khóa đăng nhập đã không được gỡ khóa khi bạn đăng nhập vào máy "
4865+"tính này."
4866
4867 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:616
4868 msgid "Unlock Keyring"
4869-msgstr "Mở vòng"
4870+msgstr "Mở khóa chùm chìa khóa"
4871
4872 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:618
4873 #, c-format
4874 msgid "Enter password for keyring '%s' to unlock"
4875-msgstr "Hãy nhập mật khẩu cho vòng khóa '%s' để mở vòng khóa"
4876+msgstr "Hãy nhập mật khẩu cho chùm chìa khóa “%s” để mở chùm chìa khóa"
4877
4878 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:622
4879 #, c-format
4880 msgid "An application wants access to the keyring '%s', but it is locked"
4881-msgstr "Một ứng dụng muốn truy cập đến vòng khóa '%s', còn nó bị khoá"
4882+msgstr "Một ứng dụng muốn dùng chùm chìa khóa “%s”, nhưng nó đang bị khóa"
4883
4884 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:628
4885 msgid "Automatically unlock this keyring whenever I'm logged in"
4886-msgstr "Tự động gỡ khoá vòng khoá này khi nào tôi đã đăng nhập"
4887+msgstr "Tự động gỡ khóa chùm chìa khóa này khi nào tôi đã đăng nhập"
4888
4889 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:639
4890 msgid "Unlock private key"
4891-msgstr "Mở khoá cá nhân"
4892+msgstr "Mở khóa riêng"
4893
4894 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:641
4895 msgid "Unlock certificate"
4896@@ -434,11 +436,11 @@
4897
4898 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:643
4899 msgid "Unlock public key"
4900-msgstr "Mở khoá công khai"
4901+msgstr "Mở khóa công khai"
4902
4903 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:654
4904 msgid "Enter password to unlock the private key"
4905-msgstr "Gõ mật khẩu để mở khoá cá nhân"
4906+msgstr "Gõ mật khẩu để mở khóa riêng"
4907
4908 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:656
4909 msgid "Enter password to unlock the certificate"
4910@@ -446,66 +448,63 @@
4911
4912 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:658
4913 msgid "Enter password to unlock the public key"
4914-msgstr "Gõ mật khẩu để mở khoá công khai"
4915+msgstr "Gõ mật khẩu để mở khóa công khai"
4916
4917 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:660
4918 msgid "Enter password to unlock"
4919-msgstr "Gõ mật khẩu để gỡ khoá"
4920+msgstr "Gõ mật khẩu để gỡ khóa"
4921
4922 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:670
4923-#| msgid "Automatically unlock this keyring whenever I'm logged in"
4924 msgid "Automatically unlock this key whenever I'm logged in"
4925-msgstr "Tự động gỡ khoá khoá này khi nào tôi đã đăng nhập"
4926+msgstr "Tự động gỡ khóa khóa này khi nào tôi đã đăng nhập"
4927
4928 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:672
4929-#| msgid "Automatically unlock this keyring whenever I'm logged in"
4930 msgid "Automatically unlock this certificate whenever I'm logged in"
4931-msgstr "Tự động gỡ khoá chứng nhận này khi nào tôi đã đăng nhập"
4932+msgstr "Tự động gỡ khóa chứng nhận này khi nào tôi đã đăng nhập"
4933
4934 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:674
4935 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:796
4936-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1140
4937-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1288
4938-#| msgid "Automatically unlock this keyring whenever I'm logged in"
4939+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1160
4940+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1309
4941 msgid "Automatically unlock whenever I'm logged in"
4942-msgstr "Tự động mở khoá khi tôi đăng nhập"
4943+msgstr "Tự động mở khóa khi tôi đăng nhập"
4944
4945 #. TRANSLATORS: The private key is locked
4946 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:685
4947 #, c-format
4948 msgid "An application wants access to the private key '%s', but it is locked"
4949-msgstr "Ứng dụng muốn truy cập đến khoá cá nhân %s, nhưng nó đang bị khóa"
4950+msgstr "Ứng dụng muốn dùng khóa riêng “%s”, nhưng nó đang bị khóa"
4951
4952 #. TRANSLATORS: The certificate is locked
4953 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:688
4954 #, c-format
4955 msgid "An application wants access to the certificate '%s', but it is locked"
4956-msgstr "Ứng dụng muốn truy cập đến chứng nhận %s, nhưng nó đang bị khóa"
4957+msgstr "Ứng dụng muốn dùng chứng nhận “%s”, nhưng nó đang bị khóa"
4958
4959 #. TRANSLATORS: The public key is locked
4960 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:691
4961 #, c-format
4962 msgid "An application wants access to the public key '%s', but it is locked"
4963-msgstr "Ứng dụng muốn truy cập đến khoá công khai %s, nhưng nó đang bị khóa"
4964+msgstr "Ứng dụng muốn dùng khóa công khai “%s”, nhưng nó đang bị khóa"
4965
4966 #. TRANSLATORS: The object '%s' is locked
4967 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:694
4968 #, c-format
4969 msgid "An application wants access to '%s', but it is locked"
4970-msgstr "Ứng dụng muốn truy cập đến '%s', nhưng nó bị khóa"
4971+msgstr "Ứng dụng muốn dùng “%s”, nhưng nó đang bị khóa"
4972
4973 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:765
4974 msgid "The unlock password was incorrect"
4975-msgstr "Bạn đã gõ sai mật khẩu gỡ khoá"
4976+msgstr "Bạn đã gõ sai mật khẩu gỡ khóa"
4977
4978 #. Build up the prompt
4979 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:786
4980 msgid "Unlock certificate/key storage"
4981-msgstr "Mở khoá lưu trữ chứng nhận/khoá"
4982+msgstr "Mở khóa lưu trữ chứng nhận/khóa"
4983
4984 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:787
4985 msgid "Enter password to unlock the certificate/key storage"
4986-msgstr "Nhập mật khẩu để mở khoá kho lưu chứng nhận/khoá"
4987+msgstr "Nhập mật khẩu để mở khóa kho lưu chứng nhận/khóa"
4988
4989 #. TRANSLATORS: The storage is locked, and needs unlocking before the application can use it.
4990 #: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:790
4991@@ -514,65 +513,60 @@
4992 "An application wants access to the certificate/key storage '%s', but it is "
4993 "locked"
4994 msgstr ""
4995-"Một ứng dụng muốn truy cập đến kho lưu chứng nhận/khoá '%s', nhưng nó vẫn bị "
4996+"Một ứng dụng muốn dùng kho lưu chứng nhận/khóa “%s”, nhưng nó vẫn đang bị "
4997 "khóa"
4998
4999-#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1131
5000+#: ../pkcs11/wrap-layer/gkm-wrap-prompt.c:1151
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: