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