2007-07-10 [paul] 2.10.0cvs14
authorPaul Mangan <paul@claws-mail.org>
Tue, 10 Jul 2007 08:03:45 +0000 (08:03 +0000)
committerPaul Mangan <paul@claws-mail.org>
Tue, 10 Jul 2007 08:03:45 +0000 (08:03 +0000)
* src/editaddress_other_attributes_ldap.c
* src/ldapupdate.c
fix crash on selecting 'other attributes' combo
for either a new entry or an old entry with no
existing attributes.
fix bug on editing multiple attributes which
resulted them all having the value of the last
one changed.
Thanks to Colin

ChangeLog
PATCHSETS
configure.ac
src/editaddress_other_attributes_ldap.c
src/ldapupdate.c

index 08d5e7ff9df757b586bc7f32f1e8fe6a614a063d..0d8dc2fbea921a2dd804812bd75384e86f5ace95 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-07-10 [paul]      2.10.0cvs14
+
+       * src/editaddress_other_attributes_ldap.c
+       * src/ldapupdate.c
+               fix crash on selecting 'other attributes' combo
+               for either a new entry or an old entry with no
+               existing attributes.
+               fix bug on editing multiple attributes which
+               resulted them all having the value of the last
+               one changed.
+               Thanks to Colin
+
 2007-07-10 [colin]     2.10.0cvs13
 
        * src/editaddress.c
index d88e0e826b7ff274b3870f2a90da7f82f9d528b1..8f1c2274fbc84b66148a49bf82b32127fb51113b 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.155.2.66 -r 1.155.2.67 src/Makefile.am;  cvs diff -u -r 1.5.2.19 -r 1.5.2.20 src/exporthtml.c;  cvs diff -u -r 1.28.2.35 -r 1.28.2.36 src/mbox.c;  cvs diff -u -r 1.16.2.51 -r 1.16.2.52 src/msgcache.c;  cvs diff -u -r 1.1.2.44 -r 1.1.2.45 src/prefs_summaries.c;  cvs diff -u -r 1.3.2.48 -r 1.3.2.49 src/prefs_themes.c;  cvs diff -u -r 1.47.2.43 -r 1.47.2.44 src/procheader.c;  cvs diff -u -r 1.24.2.14 -r 1.24.2.15 src/common/Makefile.am;  cvs diff -u -r 1.6.2.11 -r 1.6.2.12 src/common/log.c;  cvs diff -u -r 1.1.2.7 -r 1.1.2.8 src/common/timing.h;  cvs diff -u -r 1.36.2.104 -r 1.36.2.105 src/common/utils.c;  cvs diff -u -r 1.20.2.46 -r 1.20.2.47 src/common/utils.h;  diff -u /dev/null src/common/w32_account.c;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/common/w32lib.h;  cvs diff -u -r 1.20.2.14 -r 1.20.2.15 src/gtk/Makefile.am;  cvs diff -u -r 1.2.2.18 -r 1.2.2.19 src/gtk/colorlabel.c;  cvs diff -u -r 1.1.2.8 -r 1.1.2.9 src/plugins/pgpcore/Makefile.am;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpcore/claws.def;  cvs diff -u -r 1.1.2.26 -r 1.1.2.27 src/plugins/pgpcore/passphrase.c;  cvs diff -u -r 1.1.2.11 -r 1.1.2.12 src/plugins/pgpcore/pgp_viewer.c;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/plugins/pgpcore/plugin.def;  cvs diff -u -r 1.1.2.45 -r 1.1.2.46 src/plugins/pgpcore/sgpgme.c;  cvs diff -u -r 1.1.2.7 -r 1.1.2.8 src/plugins/pgpinline/Makefile.am;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpinline/claws.def;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpinline/mypgpcore.def;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/plugins/pgpinline/plugin.def;  cvs diff -u -r 1.1.2.9 -r 1.1.2.10 src/plugins/pgpmime/Makefile.am;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/plugins/pgpmime/claws.def;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpmime/mypgpcore.def;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/plugins/pgpmime/plugin.def;  ) > 2.10.0cvs11.patchset
 ( cvs diff -u -r 1.155.2.67 -r 1.155.2.68 src/Makefile.am;  cvs diff -u -r 1.13.2.11 -r 1.13.2.12 src/addritem.c;  cvs diff -u -r 1.12.2.9 -r 1.12.2.10 src/addritem.h;  cvs diff -u -r 1.14.2.24 -r 1.14.2.25 src/editaddress.c;  diff -u /dev/null src/editaddress_other_attributes_ldap.c;  diff -u /dev/null src/editaddress_other_attributes_ldap.h;  cvs diff -u -r 1.8.2.21 -r 1.8.2.22 src/editldap.c;  cvs diff -u -r 1.2.2.9 -r 1.2.2.10 src/ldapctrl.c;  cvs diff -u -r 1.1.4.10 -r 1.1.4.11 src/ldapctrl.h;  cvs diff -u -r 1.1.2.7 -r 1.1.2.8 src/ldapupdate.c;  ) > 2.10.0cvs12.patchset
 ( cvs diff -u -r 1.14.2.25 -r 1.14.2.26 src/editaddress.c;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/editaddress_other_attributes_ldap.h;  cvs diff -u -r 1.1.2.8 -r 1.1.2.9 src/ldapupdate.c;  ) > 2.10.0cvs13.patchset
+( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/editaddress_other_attributes_ldap.c;  cvs diff -u -r 1.1.2.9 -r 1.1.2.10 src/ldapupdate.c;  ) > 2.10.0cvs14.patchset
index fe24bc67e9a3c4b7b198d7064f10b023ace5e5d1..c34c4d0f4b2a7403183bc587e1e2ad577dbad6eb 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=10
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=13
+EXTRA_VERSION=14
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index fa645bd69241b075bbb43e67aa2c9cf6543e4ca9..008b49dbcbd59a3f575519a673c0df3417300bc4 100644 (file)
@@ -112,9 +112,11 @@ static void edit_person_option_menu_changed(GtkOptionMenu *opt_menu, gpointer da
        gint row = personEditDlg->rowIndAttrib;
        UserAttribute *attrib = gtk_clist_get_row_data(clist, row);
        gint option = gtk_option_menu_get_history(opt_menu);
+       const gchar *str = attrib ? attrib->name:"";
 
+       g_return_if_fail (option < ATTRIBUTE_SIZE);
        /* A corresponding attribute in contact does not match selected option */ 
-       if (strcmp(ATTRIBUTE[option], attrib->name) != 0) {
+       if (strcmp(ATTRIBUTE[option], str) != 0) {
                gtk_widget_set_sensitive(personEditDlg->attrib_add, TRUE);
                gtk_widget_set_sensitive(personEditDlg->attrib_mod, TRUE);
                gtk_widget_set_sensitive(personEditDlg->attrib_del, FALSE);
index ef23ce2d821b913fe607f7ff39bbb3d04b870e75..d6b0fe1bae87ba72f48d0071de80ce324c5953eb 100644 (file)
@@ -869,16 +869,18 @@ gboolean ldapsvr_check_search_attributes(char **list, char *attr) {
  */
 void ldapsvr_handle_other_attributes(LDAP *ld, LdapServer *server, char *dn, GHashTable *contact) {
        GList *node;
-       gboolean CHECKED_ATTRIBUTE[ATTRIBUTE_SIZE];
+       gboolean CHECKED_ATTRIBUTE[ATTRIBUTE_SIZE + 1];
        LDAPMod *mods[ATTRIBUTE_SIZE + 1];
        LDAPMod modarr[ATTRIBUTE_SIZE];
        gint cnt = 0;
-       char *attr[] = {NULL, NULL};
+       char *attr[ATTRIBUTE_SIZE + 1][2];
        int mod_op, rc, i;
 
        g_return_if_fail(server != NULL || dn != NULL || contact != NULL);
-       for (i = 0; i < ATTRIBUTE_SIZE; i++)
+       for (i = 0; i <= ATTRIBUTE_SIZE; i++) {
                CHECKED_ATTRIBUTE[i] = FALSE;
+               attr[i][0] = attr[i][1] = NULL;
+       }
        node = g_hash_table_lookup(contact , "attribute");
        while (node) {
                AttrKeyValue *item = node->data;
@@ -920,7 +922,7 @@ void ldapsvr_handle_other_attributes(LDAP *ld, LdapServer *server, char *dn, GHa
                                        */
                                }
                                else {
-                                       SETMOD(mods[cnt], modarr[cnt], mod_op, g_strdup(item->key), attr, g_strdup(item->value));
+                                       SETMOD(mods[cnt], modarr[cnt], mod_op, g_strdup(item->key), attr[cnt], g_strdup(item->value));
                                        cnt++;
                                        CHECKED_ATTRIBUTE[index] = TRUE;
                                }
@@ -939,7 +941,7 @@ void ldapsvr_handle_other_attributes(LDAP *ld, LdapServer *server, char *dn, GHa
                        if (ldapsvr_check_search_attributes(attribs, (char *) ATTRIBUTE[i])) {
                                mod_op = ldapsvr_deside_operation(ld, server, dn, (char *) ATTRIBUTE[i], "");
                                if (mod_op == LDAP_MOD_DELETE) {
-                                       SETMOD(mods[cnt], modarr[cnt], LDAP_MOD_DELETE, g_strdup((char *) ATTRIBUTE[i]), attr, NULL);
+                                       SETMOD(mods[cnt], modarr[cnt], LDAP_MOD_DELETE, g_strdup((char *) ATTRIBUTE[i]), attr[cnt], NULL);
                                        cnt++;
                                }
                        }