1 # HG changeset patch |
1 # HG changeset patch |
2 # Parent 43143bc6ddf39de0d04929f589a4fcfa0000b54b |
2 # Parent 6a07f127a10b06c5314e76713bebce46f40c602a |
3 Guard XMPP password with option guard |
3 Guard XMPP password with option guard |
4 |
4 |
5 * instead of filtering access to stored in public place |
5 * instead of filtering access to stored in public place |
6 restricted data, better store restricted data somewhere else |
6 restricted data, better store restricted data somewhere else |
7 * add xmpp_init() and xmpp_have_password (non-api) |
7 * add xmpp_init() and xmpp_have_password (non-api) |
8 |
8 |
9 diff -r 43143bc6ddf3 mcabber/mcabber/commands.c |
9 diff -r 6a07f127a10b mcabber/mcabber/commands.c |
10 --- a/mcabber/mcabber/commands.c Sat Nov 07 14:31:02 2015 +0200 |
10 --- a/mcabber/mcabber/commands.c Fri Mar 04 13:54:13 2016 +0200 |
11 +++ b/mcabber/mcabber/commands.c Sat Nov 07 14:37:38 2015 +0200 |
11 +++ b/mcabber/mcabber/commands.c Fri Mar 04 13:55:29 2016 +0200 |
12 @@ -2303,10 +2303,8 @@ |
12 @@ -2303,10 +2303,8 @@ |
13 |
13 |
14 static void list_option_cb(char *k, char *v, void *f) |
14 static void list_option_cb(char *k, char *v, void *f) |
15 { |
15 { |
16 - if (strcmp(k, "password")) { |
16 - if (strcmp(k, "password")) { |
20 + GSList **list = f; |
20 + GSList **list = f; |
21 + *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp); |
21 + *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp); |
22 } |
22 } |
23 |
23 |
24 static void do_set(char *arg) |
24 static void do_set(char *arg) |
25 diff -r 43143bc6ddf3 mcabber/mcabber/main.c |
25 diff -r 6a07f127a10b mcabber/mcabber/main.c |
26 --- a/mcabber/mcabber/main.c Sat Nov 07 14:31:02 2015 +0200 |
26 --- a/mcabber/mcabber/main.c Fri Mar 04 13:54:13 2016 +0200 |
27 +++ b/mcabber/mcabber/main.c Sat Nov 07 14:37:38 2015 +0200 |
27 +++ b/mcabber/mcabber/main.c Fri Mar 04 13:55:29 2016 +0200 |
28 @@ -447,6 +447,7 @@ |
28 @@ -451,6 +451,7 @@ |
29 scr_init_locale_charset(); |
29 scr_init_locale_charset(); |
30 ut_init_debug(); |
30 ut_init_debug(); |
31 help_init(); |
31 help_init(); |
32 + xmpp_init(); |
32 + xmpp_init(); |
33 |
33 |
34 /* Parsing config file... */ |
34 /* Parsing config file... */ |
35 ret = cfg_read_file(configFile, TRUE); |
35 ret = cfg_read_file(configFile, TRUE); |
36 @@ -468,19 +469,21 @@ |
36 @@ -472,19 +473,21 @@ |
37 |
37 |
38 /* If no password is stored, we ask for it before entering |
38 /* If no password is stored, we ask for it before entering |
39 ncurses mode -- unless the username is unknown. */ |
39 ncurses mode -- unless the username is unknown. */ |
40 - if (settings_opt_get("jid") && !settings_opt_get("password")) { |
40 - if (settings_opt_get("jid") && !settings_opt_get("password")) { |
41 + if (settings_opt_get("jid") && !xmpp_have_password) { |
41 + if (settings_opt_get("jid") && !xmpp_have_password) { |
55 char *pwd = ask_password("your Jabber password"); |
55 char *pwd = ask_password("your Jabber password"); |
56 + /* Will be intercepted by guard */ |
56 + /* Will be intercepted by guard */ |
57 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); |
57 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); |
58 g_free(pwd); |
58 g_free(pwd); |
59 } |
59 } |
60 diff -r 43143bc6ddf3 mcabber/mcabber/xmpp.c |
60 diff -r 6a07f127a10b mcabber/mcabber/xmpp.c |
61 --- a/mcabber/mcabber/xmpp.c Sat Nov 07 14:31:02 2015 +0200 |
61 --- a/mcabber/mcabber/xmpp.c Fri Mar 04 13:54:13 2016 +0200 |
62 +++ b/mcabber/mcabber/xmpp.c Sat Nov 07 14:37:38 2015 +0200 |
62 +++ b/mcabber/mcabber/xmpp.c Fri Mar 04 13:55:29 2016 +0200 |
63 @@ -23,6 +23,8 @@ |
63 @@ -23,6 +23,8 @@ |
64 */ |
64 */ |
65 #include <stdlib.h> |
65 #include <stdlib.h> |
66 #include <string.h> |
66 #include <string.h> |
67 +#include <sys/mman.h> |
67 +#include <sys/mman.h> |
68 +#include <errno.h> |
68 +#include <errno.h> |
69 |
69 |
70 #include "xmpp.h" |
70 #include "xmpp.h" |
71 #include "xmpp_helper.h" |
71 #include "xmpp_helper.h" |
72 @@ -56,6 +58,9 @@ |
72 @@ -58,6 +60,9 @@ |
73 static enum imstatus mywantedstatus = available; |
73 static enum imstatus mywantedstatus = available; |
74 gchar *mystatusmsg; |
74 gchar *mystatusmsg; |
75 |
75 |
76 +static char *xmpp_password = NULL; |
76 +static char *xmpp_password = NULL; |
77 +gboolean xmpp_have_password = FALSE; |
77 +gboolean xmpp_have_password = FALSE; |
78 + |
78 + |
79 char imstatus2char[imstatus_size+1] = { |
79 char imstatus2char[imstatus_size+1] = { |
80 '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0' |
80 '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0' |
81 }; |
81 }; |
82 @@ -800,16 +805,15 @@ |
82 @@ -816,16 +821,15 @@ |
83 GError *error = NULL; |
83 GError *error = NULL; |
84 |
84 |
85 if (success) { |
85 if (success) { |
86 - const char *password, *resource; |
86 - const char *password, *resource; |
87 + const char *resource; |
87 + const char *resource; |
96 - if (!lm_connection_authenticate(lconnection, username, password, resource, |
96 - if (!lm_connection_authenticate(lconnection, username, password, resource, |
97 + if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource, |
97 + if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource, |
98 connection_auth_cb, NULL, FALSE, &error)) { |
98 connection_auth_cb, NULL, FALSE, &error)) { |
99 scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s", |
99 scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s", |
100 error->message); |
100 error->message); |
101 @@ -1749,13 +1753,37 @@ |
101 @@ -1765,13 +1769,37 @@ |
102 } |
102 } |
103 } |
103 } |
104 |
104 |
105 +static gchar *xmpp_password_guard(const gchar *key, const gchar *new_value) |
105 +static gchar *xmpp_password_guard(const gchar *key, const gchar *new_value) |
106 +{ |
106 +{ |
133 gint xmpp_connect(void) |
133 gint xmpp_connect(void) |
134 { |
134 { |
135 - const char *userjid, *password, *resource, *servername, *ssl_fpr; |
135 - const char *userjid, *password, *resource, *servername, *ssl_fpr; |
136 + const char *userjid, *resource, *servername, *ssl_fpr; |
136 + const char *userjid, *resource, *servername, *ssl_fpr; |
137 char *dynresource = NULL; |
137 char *dynresource = NULL; |
|
138 #ifndef LOUDMOUTH_USES_SHA256 |
138 char fpr[FINGERPRINT_LENGTH] = {0}; |
139 char fpr[FINGERPRINT_LENGTH] = {0}; |
139 const char *proxy_host; |
140 @@ -1790,7 +1818,6 @@ |
140 @@ -1772,7 +1800,6 @@ |
|
141 |
141 |
142 servername = settings_opt_get("server"); |
142 servername = settings_opt_get("server"); |
143 userjid = settings_opt_get("jid"); |
143 userjid = settings_opt_get("jid"); |
144 - password = settings_opt_get("password"); |
144 - password = settings_opt_get("password"); |
145 resource = settings_opt_get("resource"); |
145 resource = settings_opt_get("resource"); |
146 proxy_host = settings_opt_get("proxy_host"); |
146 proxy_host = settings_opt_get("proxy_host"); |
147 ssl_fpr = settings_opt_get("ssl_fingerprint"); |
147 ssl_fpr = settings_opt_get("ssl_fingerprint"); |
148 @@ -1781,7 +1808,7 @@ |
148 @@ -1799,7 +1826,7 @@ |
149 scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!"); |
149 scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!"); |
150 return -1; |
150 return -1; |
151 } |
151 } |
152 - if (!password) { |
152 - if (!password) { |
153 + if (!xmpp_password) { |
153 + if (!xmpp_password) { |
154 scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!"); |
154 scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!"); |
155 return -1; |
155 return -1; |
156 } |
156 } |
157 diff -r 43143bc6ddf3 mcabber/mcabber/xmpp.h |
157 diff -r 6a07f127a10b mcabber/mcabber/xmpp.h |
158 --- a/mcabber/mcabber/xmpp.h Sat Nov 07 14:31:02 2015 +0200 |
158 --- a/mcabber/mcabber/xmpp.h Fri Mar 04 13:54:13 2016 +0200 |
159 +++ b/mcabber/mcabber/xmpp.h Sat Nov 07 14:37:38 2015 +0200 |
159 +++ b/mcabber/mcabber/xmpp.h Fri Mar 04 13:55:29 2016 +0200 |
160 @@ -34,7 +34,9 @@ |
160 @@ -34,7 +34,9 @@ |
161 |
161 |
162 extern LmConnection* lconnection; |
162 extern LmConnection* lconnection; |
163 extern LmSSL* lssl; |
163 extern LmSSL* lssl; |
164 +extern gboolean xmpp_have_password; /* private */ |
164 +extern gboolean xmpp_have_password; /* private */ |