libpurple/plugins/keyrings/secretservice.c

Mon, 03 Feb 2014 20:15:43 +0100

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Mon, 03 Feb 2014 20:15:43 +0100
changeset 35350
c4a6a72c6662
parent 34281
ad957d0a467a
child 35362
a6223370667b
child 37059
18f5830bd82c
permissions
-rw-r--r--

Style: fix keyrings

34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
1 /* purple
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
2 * @file secretservice.c Secret Service password storage
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
3 * @ingroup plugins
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
4 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
7 * source distribution.
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
8 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
12 * (at your option) any later version.
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
13 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
17 * GNU General Public License for more details.
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
18 *
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
20 * along with this program ; if not, write to the Free Software
34199
73d122f25f2b Localize strings
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34197
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
22 */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
23
34197
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
24 #error "This keyring needs some more work (see TODO)"
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
25
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
26 /* TODO
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
27 *
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
28 * This keyring needs some more work, so it will be disabled until its quality
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
29 * was raised. Some of the pain points:
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
30 * - throws a lot of g_warnings
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
31 * - it doesn't notify about some backend faults (like access denied), some of
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
32 * them are not handled at all
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
33 * - it could use libsecret's Complete API
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
34 * - code formatting could be better
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
35 */
e3507bd26a39 Disable Secret Service keyring, because of its (current) poor quality, far away from being ready to ship
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34155
diff changeset
36
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
37 #include "internal.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
38 #include "account.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
39 #include "debug.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
40 #include "keyring.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
41 #include "plugin.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
42 #include "version.h"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
43
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
44 #include <libsecret/secret.h>
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
45
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
46 #define SECRETSERVICE_NAME N_("Secret Service")
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
47 #define SECRETSERVICE_ID "keyring-libsecret"
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
48
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
49 static PurpleKeyring *keyring_handler = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
50
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
51 static const SecretSchema purple_schema = {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
52 "im.pidgin.Purple", SECRET_SCHEMA_NONE,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
53 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
54 {"user", SECRET_SCHEMA_ATTRIBUTE_STRING},
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
55 {"protocol", SECRET_SCHEMA_ATTRIBUTE_STRING},
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
56 {"NULL", 0}
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
57 },
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
58 /* Reserved fields */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
59 0, 0, 0, 0, 0, 0, 0, 0
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
60 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
61
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
62 typedef struct _InfoStorage InfoStorage;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
63
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
64 struct _InfoStorage
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
65 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
66 PurpleAccount *account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
67 gpointer cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
68 gpointer user_data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
69 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
70
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
71 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
72 /* Keyring interface */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
73 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
74 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
75 ss_read_continue(GObject *object, GAsyncResult *result, gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
76 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
77 InfoStorage *storage = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
78 PurpleAccount *account = storage->account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
79 PurpleKeyringReadCallback cb = storage->cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
80 char *password;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
81 GError *error = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
82
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
83 password = secret_password_lookup_finish(result, &error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
84
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
85 if (error != NULL) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
86 int code = error->code;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
87
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
88 switch (code) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
89 case G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND:
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
90 case G_DBUS_ERROR_IO_ERROR:
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
91 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
92 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
93 "Failed to communicate with Secret Service (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
94 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
95 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
96 cb(account, NULL, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
97 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
98 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
99
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
100 default:
34144
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
101 purple_debug_error("keyring-libsecret",
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
102 "Unknown error (account: %s (%s), domain: %s, code: %d): %s.\n",
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
103 purple_account_get_username(account),
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
104 purple_account_get_protocol_id(account),
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
105 g_quark_to_string(error->domain), code, error->message);
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
106 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
107 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
108 "Unknown error (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
109 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
110 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
111 cb(account, NULL, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
112 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
113 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
114 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
115
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
116 } else if (password == NULL) {
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
117 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
118 PURPLE_KEYRING_ERROR_NOPASSWORD,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
119 "No password found for account: %s",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
120 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
121 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
122 cb(account, NULL, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
123 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
124
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
125 } else {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
126 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
127 cb(account, password, NULL, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
128 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
129
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
130 g_free(storage);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
131 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
132
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
133 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
134 ss_read(PurpleAccount *account, PurpleKeyringReadCallback cb, gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
135 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
136 InfoStorage *storage = g_new0(InfoStorage, 1);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
137
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
138 storage->account = account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
139 storage->cb = cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
140 storage->user_data = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
141
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
142 secret_password_lookup(&purple_schema,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
143 NULL, ss_read_continue, storage,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
144 "user", purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
145 "protocol", purple_account_get_protocol_id(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
146 NULL);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
147 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
148
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
149 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
150 ss_save_continue(GObject *object, GAsyncResult *result, gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
151 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
152 InfoStorage *storage = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
153 PurpleKeyringSaveCallback cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
154 GError *error = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
155 PurpleAccount *account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
156
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
157 account = storage->account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
158 cb = storage->cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
159
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
160 secret_password_store_finish(result, &error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
161
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
162 if (error != NULL) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
163 int code = error->code;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
164
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
165 switch (code) {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
166 case G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND:
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
167 case G_DBUS_ERROR_IO_ERROR:
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
168 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
169 "Failed to communicate with Secret Service (account : %s (%s)).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
170 purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
171 purple_account_get_protocol_id(account));
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
172 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
173 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
174 "Failed to communicate with Secret Service (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
175 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
176 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
177 cb(account, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
178 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
179 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
180
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
181 default:
34144
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
182 purple_debug_error("keyring-libsecret",
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
183 "Unknown error (account: %s (%s), domain: %s, code: %d): %s.\n",
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
184 purple_account_get_username(account),
34144
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
185 purple_account_get_protocol_id(account),
34e5e09a6291 Small SecretService improvements, but it needs to be rewritten using Complete API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34134
diff changeset
186 g_quark_to_string(error->domain), code, error->message);
34129
52b91b4b8314 Proper error handling when doing a password migration, fixes reverting it.
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34116
diff changeset
187 error = g_error_new(PURPLE_KEYRING_ERROR,
34154
857c361d3791 Refine keyring error coded
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34144
diff changeset
188 PURPLE_KEYRING_ERROR_BACKENDFAIL,
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
189 "Unknown error (account : %s).",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
190 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
191 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
192 cb(account, error, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
193 g_error_free(error);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
194 break;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
195 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
196
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
197 } else {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
198 purple_debug_info("keyring-libsecret", "Password for %s updated.\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
199 purple_account_get_username(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
200
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
201 if (cb != NULL)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
202 cb(account, NULL, storage->user_data);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
203 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
204
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
205 g_free(storage);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
206 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
207
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
208 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
209 ss_save(PurpleAccount *account,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
210 const gchar *password,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
211 PurpleKeyringSaveCallback cb,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
212 gpointer data)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
213 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
214 InfoStorage *storage = g_new0(InfoStorage, 1);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
215
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
216 storage->account = account;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
217 storage->cb = cb;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
218 storage->user_data = data;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
219
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
220 if (password != NULL && *password != '\0') {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
221 const char *username = purple_account_get_username(account);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
222 char *label;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
223
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
224 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
225 "Updating password for account %s (%s).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
226 username, purple_account_get_protocol_id(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
227
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
228 label = g_strdup_printf(_("Pidgin IM password for account %s"), username);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
229 secret_password_store(&purple_schema, SECRET_COLLECTION_DEFAULT,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
230 label, password,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
231 NULL, ss_save_continue, storage,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
232 "user", username,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
233 "protocol", purple_account_get_protocol_id(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
234 NULL);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
235 g_free(label);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
236
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
237 } else { /* password == NULL, delete password. */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
238 purple_debug_info("keyring-libsecret",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
239 "Forgetting password for account %s (%s).\n",
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
240 purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
241 purple_account_get_protocol_id(account));
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
242
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
243 secret_password_clear(&purple_schema, NULL, ss_save_continue, storage,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
244 "user", purple_account_get_username(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
245 "protocol", purple_account_get_protocol_id(account),
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
246 NULL);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
247 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
248 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
249
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
250 static void
34155
567c48f9658c Refactor the keyring API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34154
diff changeset
251 ss_close(void)
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
252 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
253 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
254
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
255 static gboolean
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
256 ss_init(void)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
257 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
258 keyring_handler = purple_keyring_new();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
259
34281
ad957d0a467a Keyring (and some GTK): fix translation callbacks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34199
diff changeset
260 purple_keyring_set_name(keyring_handler, _(SECRETSERVICE_NAME));
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
261 purple_keyring_set_id(keyring_handler, SECRETSERVICE_ID);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
262 purple_keyring_set_read_password(keyring_handler, ss_read);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
263 purple_keyring_set_save_password(keyring_handler, ss_save);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
264 purple_keyring_set_close_keyring(keyring_handler, ss_close);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
265
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
266 purple_keyring_register(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
267
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
268 return TRUE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
269 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
270
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
271 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
272 ss_uninit(void)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
273 {
34155
567c48f9658c Refactor the keyring API
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34154
diff changeset
274 ss_close();
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
275 purple_keyring_unregister(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
276 purple_keyring_free(keyring_handler);
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
277 keyring_handler = NULL;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
278 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
279
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
280 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
281 /* Plugin interface */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
282 /***********************************************/
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
283
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
284 static gboolean
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
285 ss_load(PurplePlugin *plugin)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
286 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
287 return ss_init();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
288 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
289
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
290 static gboolean
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
291 ss_unload(PurplePlugin *plugin)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
292 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
293 if (purple_keyring_get_inuse() == keyring_handler)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
294 return FALSE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
295
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
296 ss_uninit();
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
297
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
298 return TRUE;
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
299 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
300
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
301 PurplePluginInfo plugininfo =
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
302 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
303 PURPLE_PLUGIN_MAGIC, /* magic */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
304 PURPLE_MAJOR_VERSION, /* major_version */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
305 PURPLE_MINOR_VERSION, /* minor_version */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
306 PURPLE_PLUGIN_STANDARD, /* type */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
307 NULL, /* ui_requirement */
34116
825c98f8c7f6 Get rid of PURPLE_PLUGIN_FLAG_AUTOLOAD
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34107
diff changeset
308 PURPLE_PLUGIN_FLAG_INVISIBLE, /* flags */
34107
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
309 NULL, /* dependencies */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
310 PURPLE_PRIORITY_DEFAULT, /* priority */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
311 SECRETSERVICE_ID, /* id */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
312 SECRETSERVICE_NAME, /* name */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
313 DISPLAY_VERSION, /* version */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
314 "Secret Service Plugin", /* summary */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
315 N_("This plugin will store passwords in Secret Service."), /* description */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
316 "Elliott Sales de Andrade (qulogic[at]pidgin.im)", /* author */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
317 PURPLE_WEBSITE, /* homepage */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
318 ss_load, /* load */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
319 ss_unload, /* unload */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
320 NULL, /* destroy */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
321 NULL, /* ui_info */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
322 NULL, /* extra_info */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
323 NULL, /* prefs_info */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
324 NULL, /* actions */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
325 NULL, /* padding... */
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
326 NULL,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
327 NULL,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
328 NULL,
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
329 };
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
330
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
331 static void
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
332 init_plugin(PurplePlugin *plugin)
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
333 {
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
334 }
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
335
efe6019c9e91 Add a Secret Service password plugin.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
336 PURPLE_INIT_PLUGIN(secret_service, init_plugin, plugininfo)

mercurial