Package: mcabber
Version: 0.10.1-2
Severity: normal
Tags: patch

Hey,
it is possible to join a MUC with a password in mcabber. However, if you 
bookmark the MUC
your next attempt to join will fail because currently mcabber does not handle 
password protected
MUCs in bookmarks (hence normal and not wishlist severity).
Attached is a patch that adds this.

Kind regards
Nico
--- mcabber-0.10.1.orig/mcabber/commands.c
+++ mcabber-0.10.1/mcabber/commands.c
@@ -2918,7 +2918,7 @@
 static void room_bookmark(gpointer bud, char *arg)
 {
   const char *roomid;
-  const char *name = NULL, *nick = NULL;
+  const char *name = NULL, *nick = NULL, *passwd = NULL;
   char *tmpnick = NULL;
   enum room_autowhois autowhois = 0;
   enum room_printstatus printstatus = 0;
@@ -2931,7 +2931,8 @@
     char **paramlst;
     char **pp;
 
-    paramlst = split_arg(arg, 3, 0); // At most 3 parameters
+    paramlst = split_arg(arg, 4, 0); // At most 4 parameters
+
     for (pp = paramlst; *pp; pp++) {
       if (!strcasecmp(*pp, "add"))
         action = bm_add;
@@ -2943,9 +2944,11 @@
         autojoin = 1;
       else if (!strcmp(*pp, "-"))
         nick_set = 1;
-      else {
+      else if(nick_set == 0){
         nick_set = 1;
         nick = tmpnick = to_utf8 (*pp);
+      } else if(nick_set == 1){
+       passwd = to_utf8(*pp);
       }
     }
     free_arg_lst(paramlst);
@@ -2961,7 +2964,7 @@
     autowhois   = buddy_getautowhois(bud);
   }
 
-  xmpp_set_storage_bookmark(roomid, name, nick, NULL, autojoin,
+  xmpp_set_storage_bookmark(roomid, name, nick, passwd, autojoin,
                             printstatus, autowhois);
   g_free (tmpnick);
 }
@@ -2988,11 +2991,14 @@
                     (bm_elt->autojoin ? '*' : ' '), bm_elt->roomjid);
     if (bm_elt->nick)
       g_string_append_printf(sbuf, " (%s)", bm_elt->nick);
+    if (bm_elt->passwd)
+      g_string_append_printf(sbuf, " (%s)", bm_elt->passwd);
     if (bm_elt->name)
       g_string_append_printf(sbuf, " %s", bm_elt->name);
     g_free(bm_elt->roomjid);
     g_free(bm_elt->name);
     g_free(bm_elt->nick);
+    g_free(bm_elt->passwd);
     g_free(bm_elt);
     scr_WriteIncomingMessage(NULL, sbuf->str,
                              0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
only in patch2:
unchanged:
--- mcabber-0.10.1.orig/mcabber/xmpp.c
+++ mcabber-0.10.1/mcabber/xmpp.c
@@ -2083,7 +2082,7 @@
     // If the node is a conference item, let's add the note to our list.
     if (x->name && !strcmp(x->name, "conference")) {
       struct bookmark *bm_elt;
-      const char *autojoin, *name, *nick;
+      const char *autojoin, *name, *nick, *passwd;
       const char *fjid = lm_message_node_get_attribute(x, "jid");
       if (!fjid)
         continue;
@@ -2092,10 +2091,13 @@
       autojoin = lm_message_node_get_attribute(x, "autojoin");
       nick = lm_message_node_get_child_value(x, "nick");
       name = lm_message_node_get_attribute(x, "name");
+      passwd = lm_message_node_get_child_value(x, "password");
       if (autojoin && !strcmp(autojoin, "1"))
         bm_elt->autojoin = 1;
       if (nick)
         bm_elt->nick = g_strdup(nick);
+      if (nick)
+        bm_elt->passwd = g_strdup(passwd);
       if (name)
         bm_elt->name = g_strdup(name);
       sl_bookmarks = g_slist_append(sl_bookmarks, bm_elt);
only in patch2:
unchanged:
--- mcabber-0.10.1.orig/mcabber/xmpp.h
+++ mcabber-0.10.1/mcabber/xmpp.h
@@ -24,6 +24,7 @@
   gchar *roomjid;
   gchar *name;
   gchar *nick;
+  gchar *passwd;
   guint autojoin;
   /* enum room_printstatus pstatus; */
   /* enum room_autowhois awhois; */
only in patch2:
unchanged:

Reply via email to