libpurple/plugins/keyrings/internalkeyring.c

branch
soc.2008.masterpassword
changeset 34127
51c1bce7f52f
parent 34116
825c98f8c7f6
child 34128
0cbd558ab5e7
equal deleted inserted replaced
34126:a479dca0f05b 34127:51c1bce7f52f
64 const char *password; 64 const char *password;
65 GError *error; 65 GError *error;
66 66
67 ACTIVATE(); 67 ACTIVATE();
68 68
69 purple_debug_misc("keyring-internal",
70 "Reading password for account %s (%s).\n",
71 purple_account_get_username(account),
72 purple_account_get_protocol_id(account));
73
74 password = g_hash_table_lookup(internal_keyring_passwords, account); 69 password = g_hash_table_lookup(internal_keyring_passwords, account);
75 70
76 if (password != NULL) { 71 if (password != NULL) {
72 purple_debug_misc("keyring-internal",
73 "Got password for account %s (%s).\n",
74 purple_account_get_username(account),
75 purple_account_get_protocol_id(account));
77 if (cb != NULL) 76 if (cb != NULL)
78 cb(account, password, NULL, data); 77 cb(account, password, NULL, data);
79 } else { 78 } else {
79 purple_debug_misc("keyring-internal",
80 "No password for account %s (%s).\n",
81 purple_account_get_username(account),
82 purple_account_get_protocol_id(account));
80 error = g_error_new(PURPLE_KEYRING_ERROR, 83 error = g_error_new(PURPLE_KEYRING_ERROR,
81 PURPLE_KEYRING_ERROR_NOPASSWD, "Password not found."); 84 PURPLE_KEYRING_ERROR_NOPASSWD, "Password not found.");
82 if (cb != NULL) 85 if (cb != NULL)
83 cb(account, NULL, error, data); 86 cb(account, NULL, error, data);
84 g_error_free(error); 87 g_error_free(error);
91 PurpleKeyringSaveCallback cb, 94 PurpleKeyringSaveCallback cb,
92 gpointer data) 95 gpointer data)
93 { 96 {
94 ACTIVATE(); 97 ACTIVATE();
95 98
96 if (password == NULL || *password == '\0') { 99 if (password[0] == '\0')
100 password = NULL;
101
102 if (password == NULL)
97 g_hash_table_remove(internal_keyring_passwords, account); 103 g_hash_table_remove(internal_keyring_passwords, account);
98 purple_debug_info("keyring-internal", 104 else
99 "Deleted password for account %s (%s).\n",
100 purple_account_get_username(account),
101 purple_account_get_protocol_id(account));
102 } else {
103 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(password)); 105 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(password));
104 purple_debug_info("keyring-internal", 106
105 "Updated password for account %s (%s).\n", 107 purple_debug_misc("keyring-internal",
106 purple_account_get_username(account), 108 "Password %s for account %s (%s).\n",
107 purple_account_get_protocol_id(account)); 109 (password == NULL ? "removed" : "saved"),
108 110 purple_account_get_username(account),
109 } 111 purple_account_get_protocol_id(account));
110 112
111 if (cb != NULL) 113 if (cb != NULL)
112 cb(account, NULL, data); 114 cb(account, NULL, data);
113 } 115 }
114 116
125 internal_keyring_import_password(PurpleAccount *account, 127 internal_keyring_import_password(PurpleAccount *account,
126 const char *mode, 128 const char *mode,
127 const char *data, 129 const char *data,
128 GError **error) 130 GError **error)
129 { 131 {
130 ACTIVATE(); 132 g_return_if_fail(account != NULL);
131 133 g_return_if_fail(data != NULL);
132 purple_debug_info("keyring-internal", "Importing password.\n"); 134
133 135 ACTIVATE();
134 if (account != NULL && 136
135 data != NULL && 137 if (mode == NULL || g_strcmp0(mode, "cleartext") == 0) {
136 (mode == NULL || g_strcmp0(mode, "cleartext") == 0)) {
137
138 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(data)); 138 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(data));
139 return TRUE; 139 return TRUE;
140
141 } else { 140 } else {
142 *error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOPASSWD, "No password for account."); 141 if (error != NULL) {
142 *error = g_error_new(PURPLE_KEYRING_ERROR,
143 PURPLE_KEYRING_ERROR_WRONGFORMAT,
144 "invalid mode");
145 }
143 return FALSE; 146 return FALSE;
144
145 } 147 }
146 148
147 return TRUE; 149 return TRUE;
148 } 150 }
149 151
155 GDestroyNotify *destroy) 157 GDestroyNotify *destroy)
156 { 158 {
157 gchar *password; 159 gchar *password;
158 160
159 ACTIVATE(); 161 ACTIVATE();
160
161 purple_debug_info("keyring-internal", "Exporting password.\n");
162 162
163 password = g_hash_table_lookup(internal_keyring_passwords, account); 163 password = g_hash_table_lookup(internal_keyring_passwords, account);
164 164
165 if (password == NULL) { 165 if (password == NULL) {
166 return FALSE; 166 return FALSE;

mercurial