commit 687c6a86b15d333765ef4f297753176a3f164cd5
parent 4c5ab0a81c5fd956237df4507c24985e8cb09207
Author: Colin Leroy <colin@colino.net>
Date: Tue, 20 Oct 2009 06:37:05 +0000
2009-10-20 [colin] 3.7.3cvs3
* src/exportldif.c
* src/ldif.c
* src/ldif.h
Fix LDIF export. Patch by Michael Rasmussen
Diffstat:
6 files changed, 91 insertions(+), 14 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,10 @@
+2009-10-20 [colin] 3.7.3cvs3
+
+ * src/exportldif.c
+ * src/ldif.c
+ * src/ldif.h
+ Fix LDIF export. Patch by Michael Rasmussen
+
2009-10-18 [paul] 3.7.3cvs2
* tools/claws.i18n.status.pl
diff --git a/PATCHSETS b/PATCHSETS
@@ -3876,3 +3876,4 @@
( cvs diff -u -r 1.207.2.214 -r 1.207.2.215 src/folderview.c; cvs diff -u -r 1.20.2.25 -r 1.20.2.26 src/folderview.h; cvs diff -u -r 1.274.2.302 -r 1.274.2.303 src/mainwindow.c; ) > 3.7.2cvs49.patchset
( cvs diff -u -r 1.105.2.155 -r 1.105.2.156 src/prefs_account.c; cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/prefs_compose_writing.c; cvs diff -u -r 1.16.2.39 -r 1.16.2.40 src/prefs_customheader.c; cvs diff -u -r 1.1.2.26 -r 1.1.2.27 src/prefs_receive.c; cvs diff -u -r 1.1.2.62 -r 1.1.2.63 src/prefs_summaries.c; cvs diff -u -r 1.1.2.20 -r 1.1.2.21 src/prefs_wrapping.c; ) > 3.7.3cvs1.patchset
( cvs diff -u -r 1.1.2.21 -r 1.1.2.22 tools/claws.i18n.status.pl; ) > 3.7.3cvs2.patchset
+( cvs diff -u -r 1.1.4.20 -r 1.1.4.21 src/exportldif.c; cvs diff -u -r 1.12.2.21 -r 1.12.2.22 src/ldif.c; cvs diff -u -r 1.5.2.8 -r 1.5.2.9 src/ldif.h; ) > 3.7.3cvs3.patchset
diff --git a/configure.ac b/configure.ac
@@ -12,7 +12,7 @@ MINOR_VERSION=7
MICRO_VERSION=3
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=2
+EXTRA_VERSION=3
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
diff --git a/src/exportldif.c b/src/exportldif.c
@@ -14,7 +14,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ *
*/
/*
@@ -331,6 +331,57 @@ static gboolean exportldif_test_email( const ItemPerson *person )
}
/**
+ * Format other attributes for person.
+ * \param person ItemPerson.
+ * \param stream Output stream.
+ */
+static void exportldif_fmt_other_attributes(ItemPerson* person, FILE* stream) {
+ UserAttribute* attr;
+ GList* attrList = NULL;
+ gchar* attrib;
+
+ if (! person)
+ return;
+ debug_print("cn: %s\n-----------------------------\n", ADDRITEM_NAME(person));
+ attrList = person->listAttrib;
+ while (attrList) {
+ attr = (UserAttribute *) attrList->data;
+ if (attr->uid) {
+ /* Native address book which does not conform to
+ * the LDAP schemas
+ */
+ attrib = g_strdup_printf("# %s", attr->name);
+ }
+ else {
+ attrib = g_strdup(attr->name);
+ }
+ debug_print("name: %s\nvalue: %s\n", attrib, attr->value);
+ ldif_write_value(stream, attrib, attr->value);
+ g_free(attrib);
+ attrList = g_list_next(attrList);
+ }
+ debug_print("-------------------------------\n");
+}
+
+/**
+ * Find persons displayName.
+ * \param person ItemPerson.
+ * \return displayName.
+ */
+static gchar* exportldif_find_displayName(ItemPerson* person) {
+ gchar* displayName;
+
+ if (! person)
+ return NULL;
+
+ if (person->nickName && strlen(person->nickName) > 0)
+ displayName = g_strdup(person->nickName);
+ else
+ displayName = g_strdup(ADDRITEM_NAME(person));
+ return displayName;
+}
+
+/**
* Format persons in an address book folder.
* \param ctl Export control data.
* \param stream Output stream.
@@ -342,6 +393,8 @@ static gboolean exportldif_fmt_person(
{
gboolean retVal = TRUE;
const GList *node;
+ gchar* sn = NULL;
+ gchar* displayName = NULL;
if( folder->listPerson == NULL ) return retVal;
@@ -401,15 +454,33 @@ static gboolean exportldif_fmt_person(
/* Format person attributes */
ldif_write_value(
stream, LDIF_TAG_COMMONNAME, ADDRITEM_NAME( person ) );
+ sn = g_strdup(person->lastName);
+ if (classPerson || classInetP) {
+ if(! sn || strcmp("", sn) == 0 || strcmp(" ", sn) == 0) {
+ g_free(sn);
+ sn = g_strdup("Some SN");
+ }
+ }
ldif_write_value(
- stream, LDIF_TAG_LASTNAME, person->lastName );
+ stream, LDIF_TAG_LASTNAME, sn );
+ g_free(sn);
+ sn = NULL;
ldif_write_value(
stream, LDIF_TAG_FIRSTNAME, person->firstName );
- ldif_write_value(
- stream, LDIF_TAG_NICKNAME, person->nickName );
+
+ if (! person->externalID)
+ displayName = exportldif_find_displayName(person);
+ else
+ displayName = g_strdup(person->nickName);
+ ldif_write_value(stream, LDIF_TAG_NICKNAME, displayName);
+ g_free(displayName);
+ displayName = NULL;
/* Format E-Mail */
exportldif_fmt_email( person, stream );
+
+ /* Handle other attributes */
+ exportldif_fmt_other_attributes(person, stream);
/* End record */
ldif_write_eor( stream );
diff --git a/src/ldif.c b/src/ldif.c
@@ -295,7 +295,7 @@ static gchar *ldif_get_tagname( char* line, gboolean *flag64 ) {
gchar *tag = NULL;
gchar *lptr = line;
gchar *sptr = NULL;
- gchar *down = NULL;
+
while( *lptr++ ) {
/* Check for language tag */
if( *lptr == LDIF_LANG_TAG ) {
@@ -316,9 +316,7 @@ static gchar *ldif_get_tagname( char* line, gboolean *flag64 ) {
tag = g_strndup( line, len+1 );
tag[ len ] = '\0';
- down = g_utf8_strdown( tag, -1 );
- g_free(tag);
- return down;
+ return tag;
}
}
return tag;
diff --git a/src/ldif.h b/src/ldif.h
@@ -37,15 +37,15 @@
/* Common tag names - for address book import/export */
#define LDIF_TAG_DN "dn"
#define LDIF_TAG_COMMONNAME "cn"
-#define LDIF_TAG_FIRSTNAME "givenname"
+#define LDIF_TAG_FIRSTNAME "givenName"
#define LDIF_TAG_LASTNAME "sn"
-#define LDIF_TAG_NICKNAME "xmozillanickname"
+#define LDIF_TAG_NICKNAME "displayName"
#define LDIF_TAG_EMAIL "mail"
-#define LDIF_TAG_OBJECTCLASS "objectclass"
+#define LDIF_TAG_OBJECTCLASS "objectClass"
/* Object classes */
-#define LDIF_CLASS_PERSON "person"
-#define LDIF_CLASS_INET_PERSON "inetOrgPerson"
+#define LDIF_CLASS_PERSON "person"
+#define LDIF_CLASS_INET_PERSON "inetOrgPerson"
/*
* Typical LDIF entry (similar to that generated by Netscape):