Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/commands.c @ 2137:0bfc4bfc127c
Add support for storing passwords to a MUC (Nico Golde)
(Imported from the Debian package.)
This patch (by Nico Golde <nion@debian.org>) adds support for storing
MUC passwords.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 06 Jul 2014 13:12:10 +0200 |
parents | fc7a758ebbde |
children | f063e36425a2 |
comparison
equal
deleted
inserted
replaced
2136:54548cf8f646 | 2137:0bfc4bfc127c |
---|---|
2885 return; | 2885 return; |
2886 } | 2886 } |
2887 | 2887 |
2888 nick_utf8 = to_utf8(nick); | 2888 nick_utf8 = to_utf8(nick); |
2889 fjid_utf8 = g_strdup_printf("%s/%s", buddy_getjid(bud), nick_utf8); | 2889 fjid_utf8 = g_strdup_printf("%s/%s", buddy_getjid(bud), nick_utf8); |
2890 g_free (nick_utf8); | 2890 g_free(nick_utf8); |
2891 msg = to_utf8(arg); | 2891 msg = to_utf8(arg); |
2892 send_message_to(fjid_utf8, msg, NULL, LM_MESSAGE_SUB_TYPE_NOT_SET, FALSE); | 2892 send_message_to(fjid_utf8, msg, NULL, LM_MESSAGE_SUB_TYPE_NOT_SET, FALSE); |
2893 g_free(fjid_utf8); | 2893 g_free(fjid_utf8); |
2894 g_free(msg); | 2894 g_free(msg); |
2895 free_arg_lst(paramlst); | 2895 free_arg_lst(paramlst); |
3182 } | 3182 } |
3183 | 3183 |
3184 static void room_bookmark(gpointer bud, char *arg) | 3184 static void room_bookmark(gpointer bud, char *arg) |
3185 { | 3185 { |
3186 const char *roomid; | 3186 const char *roomid; |
3187 const char *name = NULL, *nick = NULL, *group = NULL; | 3187 const char *name = NULL, *nick = NULL, *passwd = NULL, *group = NULL; |
3188 char *tmpnick = NULL; | 3188 char *tmpnick = NULL; |
3189 enum room_autowhois autowhois = 0; | 3189 enum room_autowhois autowhois = 0; |
3190 enum room_flagjoins flagjoins = 0; | 3190 enum room_flagjoins flagjoins = 0; |
3191 enum room_printstatus printstatus = 0; | 3191 enum room_printstatus printstatus = 0; |
3192 enum { bm_add = 0, bm_del = 1 } action = 0; | 3192 enum { bm_add = 0, bm_del = 1 } action = 0; |
3196 if (arg && *arg) { | 3196 if (arg && *arg) { |
3197 // /room bookmark [add|del] [[+|-]autojoin] [-|nick] | 3197 // /room bookmark [add|del] [[+|-]autojoin] [-|nick] |
3198 char **paramlst; | 3198 char **paramlst; |
3199 char **pp; | 3199 char **pp; |
3200 | 3200 |
3201 paramlst = split_arg(arg, 3, 0); // At most 3 parameters | 3201 paramlst = split_arg(arg, 4, 0); // At most 4 parameters |
3202 | |
3202 for (pp = paramlst; *pp; pp++) { | 3203 for (pp = paramlst; *pp; pp++) { |
3203 if (!strcasecmp(*pp, "add")) | 3204 if (!strcasecmp(*pp, "add")) |
3204 action = bm_add; | 3205 action = bm_add; |
3205 else if (!strcasecmp(*pp, "del")) | 3206 else if (!strcasecmp(*pp, "del")) |
3206 action = bm_del; | 3207 action = bm_del; |
3209 autojoin_set = 1; | 3210 autojoin_set = 1; |
3210 } else if (!strcasecmp(*pp, "+autojoin") | 3211 } else if (!strcasecmp(*pp, "+autojoin") |
3211 || !strcasecmp(*pp, "autojoin")) { | 3212 || !strcasecmp(*pp, "autojoin")) { |
3212 autojoin = 1; | 3213 autojoin = 1; |
3213 autojoin_set = 1; | 3214 autojoin_set = 1; |
3214 } else if (!strcmp(*pp, "-")) | 3215 } else if (!strcmp(*pp, "-")) { |
3215 nick_set = 1; | 3216 nick_set = 1; |
3216 else { | 3217 } else if (nick_set == 0) { |
3217 nick_set = 1; | 3218 nick_set = 1; |
3218 nick = tmpnick = to_utf8 (*pp); | 3219 nick = tmpnick = to_utf8 (*pp); |
3220 } else if (nick_set == 1) { | |
3221 passwd = to_utf8(*pp); | |
3219 } | 3222 } |
3220 } | 3223 } |
3221 free_arg_lst(paramlst); | 3224 free_arg_lst(paramlst); |
3222 } | 3225 } |
3223 | 3226 |
3237 autowhois = buddy_getautowhois(bud); | 3240 autowhois = buddy_getautowhois(bud); |
3238 flagjoins = buddy_getflagjoins(bud); | 3241 flagjoins = buddy_getflagjoins(bud); |
3239 group = buddy_getgroupname(bud); | 3242 group = buddy_getgroupname(bud); |
3240 } | 3243 } |
3241 | 3244 |
3242 xmpp_set_storage_bookmark(roomid, name, nick, NULL, autojoin, | 3245 xmpp_set_storage_bookmark(roomid, name, nick, passwd, autojoin, |
3243 printstatus, autowhois, flagjoins, group); | 3246 printstatus, autowhois, flagjoins, group); |
3244 g_free (tmpnick); | 3247 g_free(tmpnick); |
3245 } | 3248 } |
3246 | 3249 |
3247 static void display_all_bookmarks(void) | 3250 static void display_all_bookmarks(void) |
3248 { | 3251 { |
3249 GSList *bm, *bmp; | 3252 GSList *bm, *bmp; |
3264 bm_elt = bmp->data; | 3267 bm_elt = bmp->data; |
3265 g_string_printf(sbuf, "%c <%s>", | 3268 g_string_printf(sbuf, "%c <%s>", |
3266 (bm_elt->autojoin ? '*' : ' '), bm_elt->roomjid); | 3269 (bm_elt->autojoin ? '*' : ' '), bm_elt->roomjid); |
3267 if (bm_elt->nick) | 3270 if (bm_elt->nick) |
3268 g_string_append_printf(sbuf, " (%s)", bm_elt->nick); | 3271 g_string_append_printf(sbuf, " (%s)", bm_elt->nick); |
3272 if (bm_elt->password) /* replace password for security reasons */ | |
3273 g_string_append_printf(sbuf, " (*****)"); | |
3269 if (bm_elt->name) | 3274 if (bm_elt->name) |
3270 g_string_append_printf(sbuf, " %s", bm_elt->name); | 3275 g_string_append_printf(sbuf, " %s", bm_elt->name); |
3271 g_free(bm_elt->roomjid); | 3276 g_free(bm_elt->roomjid); |
3272 g_free(bm_elt->name); | 3277 g_free(bm_elt->name); |
3273 g_free(bm_elt->nick); | 3278 g_free(bm_elt->nick); |
3279 g_free(bm_elt->password); | |
3274 g_free(bm_elt); | 3280 g_free(bm_elt); |
3275 scr_WriteIncomingMessage(NULL, sbuf->str, | 3281 scr_WriteIncomingMessage(NULL, sbuf->str, |
3276 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); | 3282 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
3277 } | 3283 } |
3278 | 3284 |