|
1 # HG changeset patch |
|
2 # Parent 43143bc6ddf39de0d04929f589a4fcfa0000b54b |
1 Guard XMPP password with option guard |
3 Guard XMPP password with option guard |
2 |
4 |
3 * instead of filtering access to stored in public place |
5 * instead of filtering access to stored in public place |
4 restricted data, better store restricted data somewhere else |
6 restricted data, better store restricted data somewhere else |
5 * add xmpp_init() and xmpp_have_password (non-api) |
7 * add xmpp_init() and xmpp_have_password (non-api) |
6 |
8 |
7 diff -r d5d7361a99c0 mcabber/mcabber/commands.c |
9 diff -r 43143bc6ddf3 mcabber/mcabber/commands.c |
8 --- a/mcabber/mcabber/commands.c Tue Nov 11 21:10:14 2014 +0200 |
10 --- a/mcabber/mcabber/commands.c Sat Nov 07 14:31:02 2015 +0200 |
9 +++ b/mcabber/mcabber/commands.c Tue Nov 11 21:12:47 2014 +0200 |
11 +++ b/mcabber/mcabber/commands.c Sat Nov 07 14:37:38 2015 +0200 |
10 @@ -2286,10 +2286,8 @@ |
12 @@ -2303,10 +2303,8 @@ |
11 |
13 |
12 static void list_option_cb(char *k, char *v, void *f) |
14 static void list_option_cb(char *k, char *v, void *f) |
13 { |
15 { |
14 - if (strcmp(k, "password")) { |
16 - if (strcmp(k, "password")) { |
15 - GSList **list = f; |
17 - GSList **list = f; |
18 + GSList **list = f; |
20 + GSList **list = f; |
19 + *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp); |
21 + *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp); |
20 } |
22 } |
21 |
23 |
22 static void do_set(char *arg) |
24 static void do_set(char *arg) |
23 diff -r d5d7361a99c0 mcabber/mcabber/main.c |
25 diff -r 43143bc6ddf3 mcabber/mcabber/main.c |
24 --- a/mcabber/mcabber/main.c Tue Nov 11 21:10:14 2014 +0200 |
26 --- a/mcabber/mcabber/main.c Sat Nov 07 14:31:02 2015 +0200 |
25 +++ b/mcabber/mcabber/main.c Tue Nov 11 21:12:47 2014 +0200 |
27 +++ b/mcabber/mcabber/main.c Sat Nov 07 14:37:38 2015 +0200 |
26 @@ -389,6 +389,7 @@ |
28 @@ -447,6 +447,7 @@ |
27 scr_init_locale_charset(); |
29 scr_init_locale_charset(); |
28 ut_init_debug(); |
30 ut_init_debug(); |
29 help_init(); |
31 help_init(); |
30 + xmpp_init(); |
32 + xmpp_init(); |
31 |
33 |
32 /* Parsing config file... */ |
34 /* Parsing config file... */ |
33 ret = cfg_read_file(configFile, TRUE); |
35 ret = cfg_read_file(configFile, TRUE); |
34 @@ -410,8 +411,9 @@ |
36 @@ -468,19 +469,21 @@ |
35 |
37 |
36 /* If no password is stored, we ask for it before entering |
38 /* If no password is stored, we ask for it before entering |
37 ncurses mode -- unless the username is unknown. */ |
39 ncurses mode -- unless the username is unknown. */ |
38 - if (settings_opt_get("jid") && !settings_opt_get("password")) { |
40 - if (settings_opt_get("jid") && !settings_opt_get("password")) { |
39 + if (settings_opt_get("jid") && !xmpp_have_password) { |
41 + if (settings_opt_get("jid") && !xmpp_have_password) { |
40 char *pwd = ask_password("your Jabber password"); |
42 const char *pass_eval = settings_opt_get("password_eval"); |
41 + /* Will be intercepted by guard */ |
43 if (pass_eval) { |
42 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); |
44 int status = 0; |
43 g_free(pwd); |
45 char *pwd = password_eval(pass_eval, &status); |
44 } |
46 if (status == 0 && pwd) { |
45 diff -r d5d7361a99c0 mcabber/mcabber/xmpp.c |
47 + /* Will be intercepted by guard */ |
46 --- a/mcabber/mcabber/xmpp.c Tue Nov 11 21:10:14 2014 +0200 |
48 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); |
47 +++ b/mcabber/mcabber/xmpp.c Tue Nov 11 21:12:47 2014 +0200 |
49 } |
|
50 g_free(pwd); |
|
51 } |
|
52 // If the password is still unset, ask the user... |
|
53 - if (!settings_opt_get("password")) { |
|
54 + if (!xmpp_have_password) { |
|
55 char *pwd = ask_password("your Jabber password"); |
|
56 + /* Will be intercepted by guard */ |
|
57 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); |
|
58 g_free(pwd); |
|
59 } |
|
60 diff -r 43143bc6ddf3 mcabber/mcabber/xmpp.c |
|
61 --- a/mcabber/mcabber/xmpp.c Sat Nov 07 14:31:02 2015 +0200 |
|
62 +++ b/mcabber/mcabber/xmpp.c Sat Nov 07 14:37:38 2015 +0200 |
48 @@ -23,6 +23,8 @@ |
63 @@ -23,6 +23,8 @@ |
49 */ |
64 */ |
50 #include <stdlib.h> |
65 #include <stdlib.h> |
51 #include <string.h> |
66 #include <string.h> |
52 +#include <sys/mman.h> |
67 +#include <sys/mman.h> |
53 +#include <errno.h> |
68 +#include <errno.h> |
54 |
69 |
55 #include "xmpp.h" |
70 #include "xmpp.h" |
56 #include "xmpp_helper.h" |
71 #include "xmpp_helper.h" |
57 @@ -54,6 +56,9 @@ |
72 @@ -56,6 +58,9 @@ |
58 static enum imstatus mywantedstatus = available; |
73 static enum imstatus mywantedstatus = available; |
59 gchar *mystatusmsg; |
74 gchar *mystatusmsg; |
60 |
75 |
61 +static char *xmpp_password = NULL; |
76 +static char *xmpp_password = NULL; |
62 +gboolean xmpp_have_password = FALSE; |
77 +gboolean xmpp_have_password = FALSE; |
63 + |
78 + |
64 char imstatus2char[imstatus_size+1] = { |
79 char imstatus2char[imstatus_size+1] = { |
65 '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0' |
80 '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0' |
66 }; |
81 }; |
67 @@ -778,16 +783,15 @@ |
82 @@ -800,16 +805,15 @@ |
68 GError *error = NULL; |
83 GError *error = NULL; |
69 |
84 |
70 if (success) { |
85 if (success) { |
71 - const char *password, *resource; |
86 - const char *password, *resource; |
72 + const char *resource; |
87 + const char *resource; |
81 - if (!lm_connection_authenticate(lconnection, username, password, resource, |
96 - if (!lm_connection_authenticate(lconnection, username, password, resource, |
82 + if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource, |
97 + if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource, |
83 connection_auth_cb, NULL, FALSE, &error)) { |
98 connection_auth_cb, NULL, FALSE, &error)) { |
84 scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s", |
99 scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s", |
85 error->message); |
100 error->message); |
86 @@ -1687,13 +1691,37 @@ |
101 @@ -1749,13 +1753,37 @@ |
87 } |
102 } |
88 } |
103 } |
89 |
104 |
90 +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) |
91 +{ |
106 +{ |
118 gint xmpp_connect(void) |
133 gint xmpp_connect(void) |
119 { |
134 { |
120 - const char *userjid, *password, *resource, *servername, *ssl_fpr; |
135 - const char *userjid, *password, *resource, *servername, *ssl_fpr; |
121 + const char *userjid, *resource, *servername, *ssl_fpr; |
136 + const char *userjid, *resource, *servername, *ssl_fpr; |
122 char *dynresource = NULL; |
137 char *dynresource = NULL; |
123 char fpr[16]; |
138 char fpr[FINGERPRINT_LENGTH] = {0}; |
124 const char *proxy_host; |
139 const char *proxy_host; |
125 @@ -1710,7 +1738,6 @@ |
140 @@ -1772,7 +1800,6 @@ |
126 |
141 |
127 servername = settings_opt_get("server"); |
142 servername = settings_opt_get("server"); |
128 userjid = settings_opt_get("jid"); |
143 userjid = settings_opt_get("jid"); |
129 - password = settings_opt_get("password"); |
144 - password = settings_opt_get("password"); |
130 resource = settings_opt_get("resource"); |
145 resource = settings_opt_get("resource"); |
131 proxy_host = settings_opt_get("proxy_host"); |
146 proxy_host = settings_opt_get("proxy_host"); |
132 ssl_fpr = settings_opt_get("ssl_fingerprint"); |
147 ssl_fpr = settings_opt_get("ssl_fingerprint"); |
133 @@ -1719,7 +1746,7 @@ |
148 @@ -1781,7 +1808,7 @@ |
134 scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!"); |
149 scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!"); |
135 return -1; |
150 return -1; |
136 } |
151 } |
137 - if (!password) { |
152 - if (!password) { |
138 + if (!xmpp_password) { |
153 + if (!xmpp_password) { |
139 scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!"); |
154 scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!"); |
140 return -1; |
155 return -1; |
141 } |
156 } |
142 diff -r d5d7361a99c0 mcabber/mcabber/xmpp.h |
157 diff -r 43143bc6ddf3 mcabber/mcabber/xmpp.h |
143 --- a/mcabber/mcabber/xmpp.h Tue Nov 11 21:10:14 2014 +0200 |
158 --- a/mcabber/mcabber/xmpp.h Sat Nov 07 14:31:02 2015 +0200 |
144 +++ b/mcabber/mcabber/xmpp.h Tue Nov 11 21:12:47 2014 +0200 |
159 +++ b/mcabber/mcabber/xmpp.h Sat Nov 07 14:37:38 2015 +0200 |
145 @@ -34,7 +34,9 @@ |
160 @@ -34,7 +34,9 @@ |
146 |
161 |
147 extern LmConnection* lconnection; |
162 extern LmConnection* lconnection; |
148 extern LmSSL* lssl; |
163 extern LmSSL* lssl; |
149 +extern gboolean xmpp_have_password; /* private */ |
164 +extern gboolean xmpp_have_password; /* private */ |