[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#682683: marked as done (unblock: sope/1.3.16-1)



Your message dated Sat, 15 Sep 2012 20:24:12 +0200
with message-id <20120915182412.GR5308@radis.cristau.org>
and subject line Re: Bug#682683: unblock: sope/1.3.16-1
has caused the Debian Bug report #682683,
regarding unblock: sope/1.3.16-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
682683: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=682683
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package sope

Debian changelog:

sope (1.3.16-1) unstable; urgency=low

  * New upstream release.
  * Drop patches applied upstream:
    - 0006-Fix-compilation-on-GNU-kFreeBSD
    - 0008-Fix-stale-cache-issue-when-upgrading.patch
    - 0009-GNUstep-1.24-fix.patch
  * Build with hardening enabled.

 -- Jeroen Dekkers <jeroen@dekkers.ch>  Fri, 29 Jun 2012 20:53:29 +0200


The upstream release is a bugfix only release. Most of the fixes are
already in 1.3.15-4 because they are debian fixes submitted upstream
or were backported from development version to the debian package. The
only actual changes in the Debian package are:

* Build with hardening enabled
* Addition of two methods to classes in NGLdap
* Change in NGObjWeb to not use a deprecated method

The attached sope-gitdiff.patch is the difference between my git
branches of 1.3.15-4 and 1.3.16-1 that have all debian patches
applied, while the attached sope-debdiff.patch gives the complete
debdiff.

unblock sope/1.3.16-1

-- System Information:
Debian Release: wheezy/sid
  APT prefers precise-updates
  APT policy: (990, 'precise-updates'), (990, 'precise-security'), (990, 'precise-backports'), (990, 'precise'), (500, 'quantal')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-26-generic (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff --git a/debian/changelog b/debian/changelog
index 4ddf8f3..8d2560a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+sope (1.3.16-1) unstable; urgency=low
+
+  * New upstream release.
+  * Drop patches applied upstream:
+    - 0006-Fix-compilation-on-GNU-kFreeBSD
+    - 0008-Fix-stale-cache-issue-when-upgrading.patch
+    - 0009-GNUstep-1.24-fix.patch
+  * Build with hardening enabled.
+
+ -- Jeroen Dekkers <jeroen@dekkers.ch>  Fri, 29 Jun 2012 20:53:29 +0200
+
 sope (1.3.15-4) unstable; urgency=low
 
   * 0007-Fix-FTBFS-on-arm.patch:
diff --git a/debian/control b/debian/control
index e08398c..6ecfd20 100644
--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ Source: sope
 Section: libs
 Priority: optional
 Maintainer: Jeroen Dekkers <jeroen@dekkers.ch>
-Build-Depends: debhelper (>= 9), cdbs, gnustep-make, libgnustep-base-dev, gobjc, libxml2-dev, libldap2-dev, libgnutls-dev, zlib1g-dev, libpq-dev, libmysqlclient-dev, autotools-dev
+Build-Depends: debhelper (>= 9), cdbs, dpkg-dev (>= 1.16.1~), gnustep-make, libgnustep-base-dev, gobjc, libxml2-dev, libldap2-dev, libgnutls-dev, zlib1g-dev, libpq-dev, libmysqlclient-dev, autotools-dev
 Standards-Version: 3.9.3
 Homepage: http://www.sogo.nu/
 Vcs-Browser: https://github.com/dekkers/sope
diff --git a/debian/libsope1.lintian-overrides b/debian/libsope1.lintian-overrides
index 8675979..6f0b3bf 100644
--- a/debian/libsope1.lintian-overrides
+++ b/debian/libsope1.lintian-overrides
@@ -1 +1,8 @@
+# We bundle a lot of libraries in one binary package, because
+# splitting them up in 11 binary packages isn't very useful.
 package-name-doesnt-match-sonames
+
+# Checked the function calls and the following 2 warnings are false
+# positives.
+libsope1 binary: hardening-no-fortify-functions usr/lib/GNUstep/SaxDrivers-4.9/libxmlSAXDriver.sax/libxmlSAXDriver
+libsope1 binary: hardening-no-fortify-functions usr/lib/libEOControl.so.4.9.74
diff --git a/debian/rules b/debian/rules
index ce1c228..803a55a 100755
--- a/debian/rules
+++ b/debian/rules
@@ -2,6 +2,11 @@
 # -*- makefile -*-
 export DH_VERBOSE=1
 
+export DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow
+include /usr/share/dpkg/buildflags.mk
+# FIXME: dpkg-buildflags / cdbs should support OBJCFLAGS
+DEB_MAKE_BUILD_TARGET = all messages=yes OBJCFLAGS="$(CFLAGS)"
+
 include /usr/share/cdbs/1/rules/gnustep.mk
 include /usr/share/cdbs/1/class/gnumakefile.mk
 
diff --git a/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m b/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m
index 13a33ee..50661ff 100644
--- a/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m
+++ b/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m
@@ -939,8 +939,7 @@ static BOOL _setValue(WOKeyPathAssociation *self, id _value, id root) {
 		handleUnknownKey stuff ...
     */
     
-#if GNUSTEP_BASE_LIBRARY && ((GNUSTEP_BASE_MAJOR_VERSION >= 1) && \
-			     (GNUSTEP_BASE_MINOR_VERSION >= 11))
+#if GNUSTEP_BASE_LIBRARY
     // TODO: also do this for OSX 10.4? probably
     [object setValue:_value forKey:info->extra.key];
 #else
@@ -1097,9 +1096,9 @@ static BOOL _setValue(WOKeyPathAssociation *self, id _value, id root) {
     return;
   }
 
-  if (info->type == WOKeyType_kvc) { // takeValue:forKey:..
+  if (info->type == WOKeyType_kvc) { // setValue:forKey:
     NSCAssert(info->extra.key, @"no key object set ..");
-    [_wo takeValue:uintNumObj(_value) forKey:info->extra.key];
+    [_wo setValue:uintNumObj(_value) forKey:info->extra.key];
     return;
   }
   if (info->type == WOKeyType_binding) { // setValue:forBinding:
diff --git a/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble b/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
index 7cbf560..415c8f6 100644
--- a/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
+++ b/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
@@ -5,12 +5,6 @@ ADDITIONAL_CPPFLAGS += -pipe
 # -DPROFILE_CLUSTERS=1
 
 
-# disable optimization for exception handlers
-SaxDefaultHandler.m_FILE_FILTER_OUT_FLAGS = -O%
-WOCompoundElement.m_FILE_FILTER_OUT_FLAGS = -O%
-WOImage.m_FILE_FILTER_OUT_FLAGS           = -O%
-
-
 ADDITIONAL_CPPFLAGS += -pipe -Wall -funsigned-char -O2
 ADDITIONAL_CPPFLAGS += -DCOMPILING_NGOBJWEB=1
 
diff --git a/sope-appserver/NGObjWeb/NGHttp/common.h b/sope-appserver/NGObjWeb/NGHttp/common.h
index ef3c694..c1d4c09 100644
--- a/sope-appserver/NGObjWeb/NGHttp/common.h
+++ b/sope-appserver/NGObjWeb/NGHttp/common.h
@@ -22,6 +22,7 @@
 #ifndef __NGHttp_common_H__
 #define __NGHttp_common_H__
 
+#include <inttypes.h>
 #include <string.h>
 
 #if !defined(__MINGW32__)
diff --git a/sope-ldap/NGLdap/NGLdapAttribute.h b/sope-ldap/NGLdap/NGLdapAttribute.h
index ae8c348..31bc764 100644
--- a/sope-ldap/NGLdap/NGLdapAttribute.h
+++ b/sope-ldap/NGLdap/NGLdapAttribute.h
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -61,6 +62,8 @@
 - (NSEnumerator *)stringValueEnumerator;
 - (NSString *)stringValueAtIndex:(unsigned)_idx;
 
+- (id) asArrayOrString;
+
 @end
 
 #endif /* __NGLdapAttribute_H__ */
diff --git a/sope-ldap/NGLdap/NGLdapAttribute.m b/sope-ldap/NGLdap/NGLdapAttribute.m
index 56e8f82..5b480ee 100644
--- a/sope-ldap/NGLdap/NGLdapAttribute.m
+++ b/sope-ldap/NGLdap/NGLdapAttribute.m
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -311,4 +312,18 @@
   return s;
 }
 
+- (id) asArrayOrString
+{
+  NSArray *arrayValue;
+  id value;
+
+  arrayValue = [self allStringValues];
+  if ([arrayValue count] == 1)
+    value = [arrayValue objectAtIndex: 0];
+  else
+    value = arrayValue;
+
+  return value;
+}
+
 @end /* NGLdapAttribute */
diff --git a/sope-ldap/NGLdap/NGLdapEntry.h b/sope-ldap/NGLdap/NGLdapEntry.h
index b3ee4ab..d4b9669 100644
--- a/sope-ldap/NGLdap/NGLdapEntry.h
+++ b/sope-ldap/NGLdap/NGLdapEntry.h
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -24,7 +25,7 @@
 
 #import <Foundation/NSObject.h>
 
-@class NSString, NSDictionary, NSArray;
+@class NSString, NSDictionary, NSMutableDictionary, NSArray;
 @class NGLdapAttribute;
 
 @interface NGLdapEntry : NSObject < NSCopying >
@@ -58,6 +59,8 @@
 
 - (NSString *)ldif;
 
+- (NSMutableDictionary *) asDictionary;
+
 @end
 
 #endif /* __NGLdapEntry_H__ */
diff --git a/sope-ldap/NGLdap/NGLdapEntry.m b/sope-ldap/NGLdap/NGLdapEntry.m
index 0e8dbf5..da952b2 100644
--- a/sope-ldap/NGLdap/NGLdapEntry.m
+++ b/sope-ldap/NGLdap/NGLdapEntry.m
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -220,4 +221,29 @@
   return s;
 }
 
+- (NSMutableDictionary *) asDictionary
+{
+  NSMutableDictionary *ldapRecord;
+  NSDictionary *ldapAttributes;
+  NSArray *keys;
+  NSString *key;
+  NSUInteger count, max;
+  id value;
+  
+  ldapAttributes = [self attributes];
+  keys = [ldapAttributes allKeys];
+  max = [keys count];
+
+  ldapRecord = [NSMutableDictionary dictionaryWithCapacity: max];
+  for (count = 0; count < max; count++)
+    {
+      key = [keys objectAtIndex: count];
+      value = [[ldapAttributes objectForKey: key] asArrayOrString];
+      if (value)
+        [ldapRecord setObject: value forKey: [key lowercaseString]];
+    }
+
+  return ldapRecord;
+}
+
 @end /* NGLdapEntry */
diff --git a/sope-xml/DOM/GNUmakefile.preamble b/sope-xml/DOM/GNUmakefile.preamble
index 1d59173..74e4343 100644
--- a/sope-xml/DOM/GNUmakefile.preamble
+++ b/sope-xml/DOM/GNUmakefile.preamble
@@ -16,13 +16,6 @@ DOM_HEADER_FILES = $(libDOM_HEADER_FILES)
 DOM_OBJC_FILES   = $(libDOM_OBJC_FILES)
 
 
-# disable optimization for exception handlers
-DOMPYXOutputter.m_FILE_FILTER_OUT_FLAGS        = -O%
-DOMXMLOutputter.m_FILE_FILTER_OUT_FLAGS        = -O%
-DOMQueryPathExpression.m_FILE_FILTER_OUT_FLAGS = -O%
-DOMSaxHandler.m_FILE_FILTER_OUT_FLAGS          = -O%
-NSObject+QPEval.m_FILE_FILTER_OUT_FLAGS        = -O%
-
 ADDITIONAL_CPPFLAGS += \
 	-O2 \
         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
diff --git a/sope-xml/SaxObjC/GNUmakefile.preamble b/sope-xml/SaxObjC/GNUmakefile.preamble
index bff95d1..ff23aba 100644
--- a/sope-xml/SaxObjC/GNUmakefile.preamble
+++ b/sope-xml/SaxObjC/GNUmakefile.preamble
@@ -16,11 +16,6 @@ libSaxObjC_HEADER_FILES_INSTALL_DIR = /SaxObjC
 SaxObjC_HEADER_FILES = $(libSaxObjC_HEADER_FILES)
 SaxObjC_OBJC_FILES   = $(libSaxObjC_OBJC_FILES)
 
-# disable optimization for exception handlers
-SaxDefaultHandler.m_FILE_FILTER_OUT_FLAGS = -O%
-SaxHandlerBase.m_FILE_FILTER_OUT_FLAGS    = -O%
-SaxObjectDecoder.m_FILE_FILTER_OUT_FLAGS  = -O%
-
 ADDITIONAL_CPPFLAGS += \
 	-O2 \
         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
diff --git a/sope-xml/XmlRpc/GNUmakefile.preamble b/sope-xml/XmlRpc/GNUmakefile.preamble
index 3b15d5c..ba06dae 100644
--- a/sope-xml/XmlRpc/GNUmakefile.preamble
+++ b/sope-xml/XmlRpc/GNUmakefile.preamble
@@ -11,9 +11,6 @@ XmlRpc_INTERFACE_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)
 XmlRpc_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBMINOR_VERSION)
 
 
-# disable optimization for exception handlers
-NSObject+XmlRpc.m_FILE_FILTER_OUT_FLAGS = -O%
-
 ADDITIONAL_CPPFLAGS += \
 	-O2 \
         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
diff -Nru sope-1.3.15/_MTN/revision sope-1.3.16/_MTN/revision
--- sope-1.3.15/_MTN/revision	2012-05-11 22:23:08.000000000 +0200
+++ sope-1.3.16/_MTN/revision	2012-06-01 07:12:48.000000000 +0200
@@ -2,4 +2,4 @@
 
 new_manifest [0000000000000000000000000000000000000001]
 
-old_revision [251de628e771ed3930ca566995fad547dbce20df]
+old_revision [bac2c81bb9b48922cfe4173bcbb8c041ec4631ef]
diff -Nru sope-1.3.15/debian/changelog sope-1.3.16/debian/changelog
--- sope-1.3.15/debian/changelog	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/changelog	2012-06-29 21:00:44.000000000 +0200
@@ -1,3 +1,14 @@
+sope (1.3.16-1) unstable; urgency=low
+
+  * New upstream release.
+  * Drop patches applied upstream:
+    - 0006-Fix-compilation-on-GNU-kFreeBSD
+    - 0008-Fix-stale-cache-issue-when-upgrading.patch
+    - 0009-GNUstep-1.24-fix.patch
+  * Build with hardening enabled.
+
+ -- Jeroen Dekkers <jeroen@dekkers.ch>  Fri, 29 Jun 2012 20:53:29 +0200
+
 sope (1.3.15-4) unstable; urgency=low
 
   * 0007-Fix-FTBFS-on-arm.patch:
diff -Nru sope-1.3.15/debian/control sope-1.3.16/debian/control
--- sope-1.3.15/debian/control	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/control	2012-06-29 21:00:44.000000000 +0200
@@ -2,7 +2,7 @@
 Section: libs
 Priority: optional
 Maintainer: Jeroen Dekkers <jeroen@dekkers.ch>
-Build-Depends: debhelper (>= 9), cdbs, gnustep-make, libgnustep-base-dev, gobjc, libxml2-dev, libldap2-dev, libgnutls-dev, zlib1g-dev, libpq-dev, libmysqlclient-dev, autotools-dev
+Build-Depends: debhelper (>= 9), cdbs, dpkg-dev (>= 1.16.1~), gnustep-make, libgnustep-base-dev, gobjc, libxml2-dev, libldap2-dev, libgnutls-dev, zlib1g-dev, libpq-dev, libmysqlclient-dev, autotools-dev
 Standards-Version: 3.9.3
 Homepage: http://www.sogo.nu/
 Vcs-Browser: https://github.com/dekkers/sope
diff -Nru sope-1.3.15/debian/libsope1.lintian-overrides sope-1.3.16/debian/libsope1.lintian-overrides
--- sope-1.3.15/debian/libsope1.lintian-overrides	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/libsope1.lintian-overrides	2012-06-29 21:00:44.000000000 +0200
@@ -1 +1,8 @@
+# We bundle a lot of libraries in one binary package, because
+# splitting them up in 11 binary packages isn't very useful.
 package-name-doesnt-match-sonames
+
+# Checked the function calls and the following 2 warnings are false
+# positives.
+libsope1 binary: hardening-no-fortify-functions usr/lib/GNUstep/SaxDrivers-4.9/libxmlSAXDriver.sax/libxmlSAXDriver
+libsope1 binary: hardening-no-fortify-functions usr/lib/libEOControl.so.4.9.74
diff -Nru sope-1.3.15/debian/patches/0006-Fix-FTBFS-on-arm.patch sope-1.3.16/debian/patches/0006-Fix-FTBFS-on-arm.patch
--- sope-1.3.15/debian/patches/0006-Fix-FTBFS-on-arm.patch	1970-01-01 01:00:00.000000000 +0100
+++ sope-1.3.16/debian/patches/0006-Fix-FTBFS-on-arm.patch	2012-06-29 15:40:26.000000000 +0200
@@ -0,0 +1,39 @@
+From: Jeroen Dekkers <jeroen@dekkers.ch>
+Date: Mon, 28 May 2012 16:10:46 +0200
+Subject: Fix FTBFS on arm
+
+Forwarded: http://www.sogo.nu/bugs/view.php?id=1820
+Author: Jeroen Dekkers <jeroen@dekkers.ch>
+---
+ .../GDLAccess/FoundationExt/PrintfFormatScanner.m  |   18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m b/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
+index de90910..20c8a9b 100644
+--- a/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
++++ b/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
+@@ -32,12 +32,18 @@
+     va_list va;
+ 
+ #ifdef __va_copy
+-    // args being NULL breaks heavily on amd64
+-    if (args) {
+-        __va_copy(va, args);
+-    } else {
+-	return format;
+-    }
++    // args being NULL breaks heavily on amd64. It shouldn't be
++    // possible to be NULL at all, but we're called with an array as
++    // argument instead of a va_list in EOSQLQualifier and are thus
++    // calling __va_copy on an array, which is something that really
++    // shouldn't be done. Checking whether args is NULL breaks on arm
++    // however, because a va_list isn't a pointer, so we don't do the
++    // check on arm.
++#ifndef __arm__
++    if (!args)
++      return format;
++#endif
++    __va_copy(va, args);
+ #else
+     va = args;
+ #endif
diff -Nru sope-1.3.15/debian/patches/0006-Fix-compilation-on-GNU-kFreeBSD.patch sope-1.3.16/debian/patches/0006-Fix-compilation-on-GNU-kFreeBSD.patch
--- sope-1.3.15/debian/patches/0006-Fix-compilation-on-GNU-kFreeBSD.patch	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/patches/0006-Fix-compilation-on-GNU-kFreeBSD.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-From: Jeroen Dekkers <jeroen@dekkers.ch>
-Date: Wed, 23 May 2012 16:09:44 +0200
-Subject: Fix compilation on GNU/kFreeBSD
-
-Origin: vendor
-Forwarded: http://www.sogo.nu/bugs/view.php?id=1817
-Author: Jeroen Dekkers <jeroen@dekkers.ch>
----
- sope-core/NGStreams/NGInternetSocketAddress.m |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/sope-core/NGStreams/NGInternetSocketAddress.m b/sope-core/NGStreams/NGInternetSocketAddress.m
-index 552366d..221f900 100644
---- a/sope-core/NGStreams/NGInternetSocketAddress.m
-+++ b/sope-core/NGStreams/NGInternetSocketAddress.m
-@@ -48,7 +48,7 @@
- #include "NGInternetSocketDomain.h"
- #include "common.h"
- 
--#if defined(HAVE_GETHOSTBYNAME_R) && !defined(linux) && !defined(__FreeBSD__)
-+#if defined(HAVE_GETHOSTBYNAME_R) && !defined(linux) && !defined(__FreeBSD__) && !defined(__GLIBC__)
- #define USE_GETHOSTBYNAME_R 1
- #endif
- 
diff -Nru sope-1.3.15/debian/patches/0007-Fix-FTBFS-on-arm.patch sope-1.3.16/debian/patches/0007-Fix-FTBFS-on-arm.patch
--- sope-1.3.15/debian/patches/0007-Fix-FTBFS-on-arm.patch	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/patches/0007-Fix-FTBFS-on-arm.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-From: Jeroen Dekkers <jeroen@dekkers.ch>
-Date: Mon, 28 May 2012 16:10:46 +0200
-Subject: Fix FTBFS on arm
-
-Forwarded: http://www.sogo.nu/bugs/view.php?id=1820
-Author: Jeroen Dekkers <jeroen@dekkers.ch>
----
- .../GDLAccess/FoundationExt/PrintfFormatScanner.m  |   18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m b/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
-index 7d4a248..20c8a9b 100644
---- a/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
-+++ b/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
-@@ -32,12 +32,18 @@
-     va_list va;
- 
- #ifdef __va_copy
--    // args being NULL breaks heavily on amd64
--    if (args != NULL) {
--        __va_copy(va, args);
--    } else {
--	return format;
--    }
-+    // args being NULL breaks heavily on amd64. It shouldn't be
-+    // possible to be NULL at all, but we're called with an array as
-+    // argument instead of a va_list in EOSQLQualifier and are thus
-+    // calling __va_copy on an array, which is something that really
-+    // shouldn't be done. Checking whether args is NULL breaks on arm
-+    // however, because a va_list isn't a pointer, so we don't do the
-+    // check on arm.
-+#ifndef __arm__
-+    if (!args)
-+      return format;
-+#endif
-+    __va_copy(va, args);
- #else
-     va = args;
- #endif
diff -Nru sope-1.3.15/debian/patches/0007-Remove-disabling-of-optimization.patch sope-1.3.16/debian/patches/0007-Remove-disabling-of-optimization.patch
--- sope-1.3.15/debian/patches/0007-Remove-disabling-of-optimization.patch	1970-01-01 01:00:00.000000000 +0100
+++ sope-1.3.16/debian/patches/0007-Remove-disabling-of-optimization.patch	2012-06-29 21:00:44.000000000 +0200
@@ -0,0 +1,77 @@
+From: Jeroen Dekkers <jeroen@dekkers.ch>
+Date: Fri, 29 Jun 2012 17:50:29 +0200
+Subject: Remove disabling of optimization
+
+Origin: vendor
+---
+ sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble |    6 ------
+ sope-xml/DOM/GNUmakefile.preamble                            |    7 -------
+ sope-xml/SaxObjC/GNUmakefile.preamble                        |    5 -----
+ sope-xml/XmlRpc/GNUmakefile.preamble                         |    3 ---
+ 4 files changed, 21 deletions(-)
+
+diff --git a/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble b/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
+index 7cbf560..415c8f6 100644
+--- a/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
++++ b/sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
+@@ -5,12 +5,6 @@ ADDITIONAL_CPPFLAGS += -pipe
+ # -DPROFILE_CLUSTERS=1
+ 
+ 
+-# disable optimization for exception handlers
+-SaxDefaultHandler.m_FILE_FILTER_OUT_FLAGS = -O%
+-WOCompoundElement.m_FILE_FILTER_OUT_FLAGS = -O%
+-WOImage.m_FILE_FILTER_OUT_FLAGS           = -O%
+-
+-
+ ADDITIONAL_CPPFLAGS += -pipe -Wall -funsigned-char -O2
+ ADDITIONAL_CPPFLAGS += -DCOMPILING_NGOBJWEB=1
+ 
+diff --git a/sope-xml/DOM/GNUmakefile.preamble b/sope-xml/DOM/GNUmakefile.preamble
+index 1d59173..74e4343 100644
+--- a/sope-xml/DOM/GNUmakefile.preamble
++++ b/sope-xml/DOM/GNUmakefile.preamble
+@@ -16,13 +16,6 @@ DOM_HEADER_FILES = $(libDOM_HEADER_FILES)
+ DOM_OBJC_FILES   = $(libDOM_OBJC_FILES)
+ 
+ 
+-# disable optimization for exception handlers
+-DOMPYXOutputter.m_FILE_FILTER_OUT_FLAGS        = -O%
+-DOMXMLOutputter.m_FILE_FILTER_OUT_FLAGS        = -O%
+-DOMQueryPathExpression.m_FILE_FILTER_OUT_FLAGS = -O%
+-DOMSaxHandler.m_FILE_FILTER_OUT_FLAGS          = -O%
+-NSObject+QPEval.m_FILE_FILTER_OUT_FLAGS        = -O%
+-
+ ADDITIONAL_CPPFLAGS += \
+ 	-O2 \
+         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
+diff --git a/sope-xml/SaxObjC/GNUmakefile.preamble b/sope-xml/SaxObjC/GNUmakefile.preamble
+index bff95d1..ff23aba 100644
+--- a/sope-xml/SaxObjC/GNUmakefile.preamble
++++ b/sope-xml/SaxObjC/GNUmakefile.preamble
+@@ -16,11 +16,6 @@ libSaxObjC_HEADER_FILES_INSTALL_DIR = /SaxObjC
+ SaxObjC_HEADER_FILES = $(libSaxObjC_HEADER_FILES)
+ SaxObjC_OBJC_FILES   = $(libSaxObjC_OBJC_FILES)
+ 
+-# disable optimization for exception handlers
+-SaxDefaultHandler.m_FILE_FILTER_OUT_FLAGS = -O%
+-SaxHandlerBase.m_FILE_FILTER_OUT_FLAGS    = -O%
+-SaxObjectDecoder.m_FILE_FILTER_OUT_FLAGS  = -O%
+-
+ ADDITIONAL_CPPFLAGS += \
+ 	-O2 \
+         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
+diff --git a/sope-xml/XmlRpc/GNUmakefile.preamble b/sope-xml/XmlRpc/GNUmakefile.preamble
+index 3b15d5c..ba06dae 100644
+--- a/sope-xml/XmlRpc/GNUmakefile.preamble
++++ b/sope-xml/XmlRpc/GNUmakefile.preamble
+@@ -11,9 +11,6 @@ XmlRpc_INTERFACE_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)
+ XmlRpc_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBMINOR_VERSION)
+ 
+ 
+-# disable optimization for exception handlers
+-NSObject+XmlRpc.m_FILE_FILTER_OUT_FLAGS = -O%
+-
+ ADDITIONAL_CPPFLAGS += \
+ 	-O2 \
+         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
diff -Nru sope-1.3.15/debian/patches/0008-Fix-stale-cache-issue-when-upgrading.patch sope-1.3.16/debian/patches/0008-Fix-stale-cache-issue-when-upgrading.patch
--- sope-1.3.15/debian/patches/0008-Fix-stale-cache-issue-when-upgrading.patch	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/patches/0008-Fix-stale-cache-issue-when-upgrading.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,74 +0,0 @@
-From: Wolfgang Sourdeau <wsourdeau@inverse.ca>
-Date: Thu, 24 May 2012 14:26:45 +0000
-Subject: Fix stale cache issue when upgrading
-
-Origin: upstream, http://mtn.inverse.ca/revision/info/b2721d7f18528c981a921065d3272cca1a9070e8
----
- sope-appserver/WEExtensions/ChangeLog           |    8 ++++++++
- sope-appserver/WEExtensions/WEResourceManager.m |   15 ++++++++++-----
- 2 files changed, 18 insertions(+), 5 deletions(-)
-
-diff --git a/sope-appserver/WEExtensions/ChangeLog b/sope-appserver/WEExtensions/ChangeLog
-index 771dc98..ff32f17 100644
---- a/sope-appserver/WEExtensions/ChangeLog
-+++ b/sope-appserver/WEExtensions/ChangeLog
-@@ -1,3 +1,11 @@
-+2012-05-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
-+
-+	* WEResourceManager.m
-+	(_urlForResourceNamed:inFramework:language:applicationName:):
-+	append "lm=" + the unix timestamp of the file last modification
-+	date to force a reload of the file each time it is modified, no
-+	matter what expiry date the browsers are using in their cache.
-+
- 2010-01-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
- 
- 	* WEResourceManager.m
-diff --git a/sope-appserver/WEExtensions/WEResourceManager.m b/sope-appserver/WEExtensions/WEResourceManager.m
-index a7ed87f..03aa8b5 100644
---- a/sope-appserver/WEExtensions/WEResourceManager.m
-+++ b/sope-appserver/WEExtensions/WEResourceManager.m
-@@ -575,8 +575,7 @@ checkCache(NSDictionary *_cache, WEResourceKey *_key,
-       }
-       [ms appendString:_name];
-       
--      url = [ms copy];
--      [ms release]; ms = nil;
-+      url = ms;
-       if (debugOn) [self debugWithFormat:@"FOUND: '%@'", url];
-       goto done;
-     }
-@@ -589,6 +588,7 @@ checkCache(NSDictionary *_cache, WEResourceKey *_key,
-   while ((path = [e nextObject])) {
-     NSMutableString *ms;
-     NSString *fpath, *basepath;
-+    NSDate *lastModified;
-     
-     /* check language */
-     if (_lang) {
-@@ -608,7 +608,11 @@ checkCache(NSDictionary *_cache, WEResourceKey *_key,
-     
-     if (![fm fileExistsAtPath:fpath])
-       continue;
--      
-+
-+    lastModified = [[fm fileAttributesAtPath: fpath
-+                                traverseLink: YES]
-+                     fileModificationDate];
-+
-     ms = [[NSMutableString alloc] initWithCapacity:256];
-       
-     if (prefix) [ms appendString:prefix];
-@@ -622,9 +626,10 @@ checkCache(NSDictionary *_cache, WEResourceKey *_key,
-       [ms appendString:@".lproj/"];
-     }
-     [ms appendString:_name];
-+    [ms appendFormat: @"?lm=%u",
-+        (NSUInteger) [lastModified timeIntervalSince1970]];
-       
--    url = [ms copy];
--    [ms release]; ms = nil;
-+    url = ms;
-     if (debugOn) [self debugWithFormat:@"FOUND: '%@'", url];
-     goto done;
-   }
diff -Nru sope-1.3.15/debian/patches/0009-GNUstep-1.24-fix.patch sope-1.3.16/debian/patches/0009-GNUstep-1.24-fix.patch
--- sope-1.3.15/debian/patches/0009-GNUstep-1.24-fix.patch	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/patches/0009-GNUstep-1.24-fix.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,730 +0,0 @@
-From: Ludovic Marcotte <lmarcotte@inverse.ca>
-Date: Tue, 29 May 2012 18:56:25 +0000
-Subject: GNUstep 1.24 fix
-
-Origin: upstream, http://mtn.inverse.ca/revision/diff/1e79eab4c546452715e5171f1c326b7d36f1c195/with/99dc7d9dce88b8a323b1e7aab60de99ed2bfda60
----
- .../NGObjWeb/NGHttp/NGHttpHeaderFields.m           |   18 +++++++--------
- sope-appserver/WOExtensions/WOTabPanel.m           |   10 ++++----
- sope-core/NGExtensions/NGCalendarDateRange.m       |   12 +++++-----
- .../NGExtensions/NGCalendarDateRange.h             |    2 +-
- sope-gdl1/PostgreSQL/PGResultSet.m                 |    5 ----
- sope-gdl1/PostgreSQL/PostgreSQL72Channel.m         |   16 +++++++++----
- sope-xml/DOM/DOMNodeWithChildren.m                 |   10 ++++----
- sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h    |    4 ++--
- sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m    |   18 +++++++--------
- sope-xml/SaxObjC/SaxAttributeList.m                |   14 ++++++------
- sope-xml/SaxObjC/SaxAttributes.m                   |   14 ++++++------
- sope-xml/XmlRpc/NSObject+XmlRpc.h                  |    2 +-
- sope-xml/XmlRpc/NSObject+XmlRpc.m                  |   20 ++++++++--------
- sope-xml/XmlRpc/XmlRpcDecoder.m                    |    4 ++--
- sope-xml/XmlRpc/XmlRpcSaxHandler.m                 |   24 ++++++++++----------
- 15 files changed, 88 insertions(+), 85 deletions(-)
-
-diff --git a/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m b/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m
-index e3e1bd0..6629adb 100644
---- a/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m
-+++ b/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m
-@@ -145,7 +145,7 @@
- 
- - (NSString *)stringValue {
-   NSMutableString *str = [[NSMutableString allocWithZone:[self zone]] init];
--  int  cnt, count = [self->charsets count];
-+  NSUInteger  cnt, count = [self->charsets count];
- 
-   for (cnt = 0; cnt < count; cnt++) {
-     if (cnt != 0) [str appendString:@","];
-@@ -201,7 +201,7 @@
- 
- - (NSString *)stringValue {
-   NSMutableString *str;
--  int  cnt, count;
-+  NSUInteger      cnt, count;
- 
-   str = [[NSMutableString allocWithZone:[self zone]] init];
-   count = [self->types count];
-@@ -260,7 +260,7 @@
- 
- - (NSString *)stringValue {
-   NSMutableString *str = [[NSMutableString allocWithZone:[self zone]] init];
--  int  cnt, count = [self->languages count];
-+  NSUInteger      cnt, count = [self->languages count];
- 
-   for (cnt = 0; cnt < count; cnt++) {
-     if (cnt != 0) [str appendString:@", "];
-@@ -283,8 +283,8 @@ static void _parseUserAgent(NGHttpUserAgent *self) {
- 
-   if ([self->value hasPrefix:@"Mozilla"]) {
-     // Mozilla Browser or compatible
--    NSRange r;
--    int idx, av, iv;
-+    NSRange    r;
-+    NSUInteger idx, av, iv;
- 
-     r = [self->value rangeOfString:@"/"];
-     idx = r.location;
-@@ -299,7 +299,7 @@ static void _parseUserAgent(NGHttpUserAgent *self) {
- 
-       self->browser = @"Mozilla";
- 
--      sscanf([tmp cString], "%i.%i", &av, &iv);
-+      sscanf([tmp cString], "%"PRIuPTR".%"PRIuPTR"", &av, &iv);
-       self->majorVersion = av;
-       self->minorVersion = iv;
- 
-@@ -310,7 +310,7 @@ static void _parseUserAgent(NGHttpUserAgent *self) {
-           tmp = [self->value substringFromIndex:(idx + 5)];
-           self->browser = @"MSIE";
- 
--          sscanf([tmp cString], "%i.%i", &av, &iv);
-+          sscanf([tmp cString], "%"PRIuPTR".%"PRIuPTR"", &av, &iv);
-           self->majorVersion = av;
-           self->minorVersion = iv;
-         }
-@@ -553,8 +553,8 @@ static void _parseUserAgent(NGHttpUserAgent *self) {
-     NSData *data = [_credentials dataByDecodingBase64];
- 
-     if (data) {
--      char *str   = (char *)[data bytes];
--      int  len    = [data length];
-+      char *str = (char *)[data bytes];
-+      NSUInteger len = [data length];
-       char *start = str;
- 
-       while ((*str != '\0') && (*str != ':') && (len > 0)) {
-diff --git a/sope-appserver/WOExtensions/WOTabPanel.m b/sope-appserver/WOExtensions/WOTabPanel.m
-index 504312a..9f798a1 100644
---- a/sope-appserver/WOExtensions/WOTabPanel.m
-+++ b/sope-appserver/WOExtensions/WOTabPanel.m
-@@ -82,7 +82,7 @@
-   {
-     WOComponent *sComponent;
-     NSArray     *ttabs;
--    unsigned    i;
-+    NSUInteger  i;
-     
-     sComponent = [_ctx component];
-     ttabs      = [self->tabs valueInComponent:sComponent];
-@@ -118,17 +118,17 @@
-   if ([section isEqualToString:@"tab"]) {
-     WOComponent *sComponent;
-     NSArray *ttabs;
--    int idx;
-+    NSUInteger idx;
-     
-     [_ctx consumeElementID]; // consume 'tab'
-     
-     sComponent = [_ctx component];
-     ttabs = [self->tabs valueInComponent:sComponent];
- 
--    idx = [[_ctx currentElementID] intValue];
-+    idx = [[_ctx currentElementID] unsignedIntegerValue];
-     [_ctx consumeElementID]; // consume index
- 
--    if (idx >= (int)[ttabs count]) {
-+    if (idx >= [ttabs count]) {
-       /* index out of range */
-       idx = 0;
-     }
-@@ -156,7 +156,7 @@
-   WOComponent *sComponent;
-   NSArray     *ttabs;
-   BOOL        isInForm;
--  unsigned    i, selIdx;
-+  NSUInteger  i, selIdx;
-   NSString    *selColor, *unselColor, *s;
-   
-   if ([_ctx isRenderingDisabled]) {
-diff --git a/sope-core/NGExtensions/NGCalendarDateRange.m b/sope-core/NGExtensions/NGCalendarDateRange.m
-index 9bc4291..af4f8dd 100644
---- a/sope-core/NGExtensions/NGCalendarDateRange.m
-+++ b/sope-core/NGExtensions/NGCalendarDateRange.m
-@@ -217,7 +217,7 @@
-   andEndDateKey:(NSString *)e
- {
-   NSMutableArray *ma;
--  unsigned i, count;
-+  NSUInteger     i, count;
-   
-   count = [self count];
-   ma    = [NSMutableArray arrayWithCapacity:count];
-@@ -243,7 +243,7 @@
- }
- 
- - (BOOL)dateRangeArrayContainsDate:(NSCalendarDate *)_date {
--  unsigned i, count;
-+  NSUInteger i, count;
-   
-   if (_date == nil) 
-     return NO;
-@@ -256,8 +256,8 @@
-   }
-   return NO;
- }
--- (unsigned)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range {
--  unsigned i, count;
-+- (NSUInteger)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range {
-+  NSUInteger i, count;
-   
-   if (_range == nil)
-     return NO;
-@@ -276,7 +276,7 @@
-   // TODO: this is a candidate for unit testing ...
-   // TODO: pretty "slow" algorithm, improve
-   NSMutableArray *ma;
--  unsigned i, count;
-+  NSUInteger     i, count;
-   
-   count = [self count];
-   if (count < 2)
-@@ -289,7 +289,7 @@
-     NGCalendarDateRange *rangeToAdd;
-     NGCalendarDateRange *availRange;
-     NGCalendarDateRange *newRange;
--    unsigned idx;
-+    NSUInteger idx;
-     
-     rangeToAdd = [self objectAtIndex:i];
-     idx = [ma indexOfFirstIntersectingDateRange:rangeToAdd];
-diff --git a/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h b/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h
-index c86488b..9a53ed3 100644
---- a/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h
-+++ b/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h
-@@ -67,7 +67,7 @@
- - (NSArray *)arrayByCreatingDateRangesFromObjectsWithStartDateKey:(NSString *)s
-   andEndDateKey:(NSString *)e;
- 
--- (unsigned)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range;
-+- (NSUInteger)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range;
- - (BOOL)dateRangeArrayContainsDate:(NSCalendarDate *)_date;
- 
- - (NSArray *)arrayByCompactingContainedDateRanges;
-diff --git a/sope-gdl1/PostgreSQL/PGResultSet.m b/sope-gdl1/PostgreSQL/PGResultSet.m
-index ce8db02..71e718b 100644
---- a/sope-gdl1/PostgreSQL/PGResultSet.m
-+++ b/sope-gdl1/PostgreSQL/PGResultSet.m
-@@ -98,12 +98,7 @@
- }
- 
- - (int)indexOfFieldNamed:(NSString *)_name {
--#if LIB_FOUNDATION_LIBRARY
--  // TBD: might be wrong even in this case?
--  return PQfnumber(self->results, [_name cString]);
--#else
-   return PQfnumber(self->results, [_name UTF8String]);
--#endif
- }
- 
- - (int)fieldSizeAtIndex:(unsigned int)_idx {
-diff --git a/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m b/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m
-index 52c20c0..f081ee5 100644
---- a/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m
-+++ b/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m
-@@ -394,21 +394,29 @@ static int openConnectionCount = 0;
-   
-   for (cnt = 0; cnt < attrCount; cnt++) {
-     EOAttribute *attribute;
-+#ifndef GDL_USE_PQFNUMBER_INDEX
-+    NSUInteger  res;
-+#endif
-     
-     attribute = [_attributes objectAtIndex:cnt];
- #if GDL_USE_PQFNUMBER_INDEX
-     self->fieldIndices[cnt] = 
-       [self->resultSet indexOfFieldNamed:[attribute columnName]];
-+    if (self->fieldIndices[cnt] == -1) {
-+      [PostgreSQL72Exception raiseWithFormat:
-+                               @"attribute %@ not covered by query",
-+                             attribute];
-+    }
- #else
--    self->fieldIndices[cnt] = 
--      [fieldNames indexOfObject:[attribute columnName]];
--#endif
-+    res = [fieldNames indexOfObject:[attribute columnName]];
-     
--    if (self->fieldIndices[cnt] == NSNotFound) {
-+    if (res == NSNotFound) {
-       [PostgreSQL72Exception raiseWithFormat:
-                                @"attribute %@ not covered by query",
-                              attribute];
-     }
-+    self->fieldIndices[cnt] = (int)res;
-+#endif
-     [fieldNames replaceObjectAtIndex:self->fieldIndices[cnt] withObject:null];
-   }
-   [fieldNames release]; fieldNames = nil;
-diff --git a/sope-xml/DOM/DOMNodeWithChildren.m b/sope-xml/DOM/DOMNodeWithChildren.m
-index f4c2803..72af9a5 100644
---- a/sope-xml/DOM/DOMNodeWithChildren.m
-+++ b/sope-xml/DOM/DOMNodeWithChildren.m
-@@ -59,7 +59,7 @@
-     : nil;
- }
- - (id<NSObject,DOMNode>)lastChild {
--  unsigned count;
-+  NSUInteger count;
- 
-   return (count = [self->childNodes count]) > 0 
-     ? [self->childNodes objectAtIndex:(count - 1)]
-@@ -69,7 +69,7 @@
- /* modification */
- 
- - (id<NSObject,DOMNode>)removeChild:(id<NSObject,DOMNode>)_node {
--  unsigned idx;
-+  NSUInteger idx;
- 
-   if (self->childNodes == nil)
-     /* this node has no childnodes ! */
-@@ -93,7 +93,7 @@
-   
-   if ([_node nodeType] == DOM_DOCUMENT_FRAGMENT_NODE) {
-     id             fragNodes;
--    unsigned       i, count;
-+    NSUInteger     i, count;
-     NSMutableArray *cache;
-     
-     fragNodes = [_node childNodes];
-@@ -133,7 +133,7 @@
- /* sibling navigation */
- 
- - (id)_domNodeBeforeNode:(id)_node {
--  unsigned idx;
-+  NSUInteger idx;
-   
-   if ((idx = [self->childNodes indexOfObject:_node]) == NSNotFound)
-     /* given node isn't a child of this node */
-@@ -145,7 +145,7 @@
-   return [self->childNodes objectAtIndex:(idx - 1)];
- }
- - (id)_domNodeAfterNode:(id)_node {
--  unsigned idx, count;
-+  NSUInteger idx, count;
- 
-   if ((count = [self->childNodes count]) == 0)
-     /* this node has no children at all .. */
-diff --git a/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h b/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h
-index 35a24af..25073c9 100644
---- a/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h
-+++ b/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h
-@@ -62,7 +62,7 @@
- 
- - (void)parse;
- 
--- (int)lineType:(StructuredLine *)_line;
-+- (NSUInteger)lineType:(StructuredLine *)_line;
- 
- - (void)separateIntoBlocks;
- - (void)adjustLineLevels;
-@@ -78,7 +78,7 @@
- - (StructuredTextLiteralBlock *)buildLiteralBlock;
- - (StructuredTextList *)buildList;
- 
--- (int)listItemTypology:(StructuredLine *)_line;
-+- (NSUInteger)listItemTypology:(StructuredLine *)_line;
- 
- @end
- 
-diff --git a/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m b/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m
-index 25742a5..7ff8209 100644
---- a/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m
-+++ b/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m
-@@ -105,7 +105,7 @@
-   NSString	  *text, *currentLine, *trimmedLine;
-   NSMutableString *buf;
-   NSCharacterSet  *set;
--  int i, count;
-+  NSUInteger      i, count;
-   
-   set   = [NSCharacterSet characterSetWithCharactersInString:@"\r"];
-   buf   = [NSMutableString stringWithCapacity:256];
-@@ -278,7 +278,7 @@
-   [objectStack release];
- }
- 
--- (int)lineType:(StructuredLine *)aLine {
-+- (NSUInteger)lineType:(StructuredLine *)aLine {
-   if ([self checkForListItem:aLine])
-     return StructuredTextParserLine_List;
-   
-@@ -357,7 +357,7 @@
-   
-   if ([[text stringByTrimmingCharactersInSet:
- 	       [NSCharacterSet whitespaceCharacterSet]] hasSuffix:@"::"]) {
--    int length;
-+    NSUInteger length;
- 
-     length = [text length];
-     text   = [text substringToIndex:length - 2];
-@@ -384,7 +384,7 @@
-   StructuredLine	 *line, *prevLine = nil;
-   StructuredTextListItem *item = nil;
-   StructuredStack	 *paragraphs;
--  int type;
-+  NSUInteger		 type;
-   
-   result     = nil;
-   paragraphs = [self paragraphs];
-@@ -428,7 +428,7 @@
-       break;
-     case StructuredTextList_DEFINITION: {
-       NSArray *components;
--      int i, count;
-+      NSUInteger i, count;
- 
-       components = [text componentsSeparatedByString:@" -- "];
-       count = [components count];
-@@ -477,10 +477,10 @@
-   return [result autorelease];
- }
- 
--- (int)listItemTypology:(StructuredLine *)aLine {
--  NSString *text;
--  int      type = NSNotFound;
--  int      i, h, length;
-+- (NSUInteger)listItemTypology:(StructuredLine *)aLine {
-+  NSString   *text;
-+  NSUInteger type = NSNotFound;
-+  NSUInteger i, h, length;
-   NSRange  range;
- 
-   text = [aLine text];
-diff --git a/sope-xml/SaxObjC/SaxAttributeList.m b/sope-xml/SaxObjC/SaxAttributeList.m
-index 0b8f75e..7fcb7e1 100644
---- a/sope-xml/SaxObjC/SaxAttributeList.m
-+++ b/sope-xml/SaxObjC/SaxAttributeList.m
-@@ -33,7 +33,7 @@
- }
- - (id)initWithAttributeList:(id<SaxAttributeList>)_attrList {
-   if ((self = [self init])) {
--    unsigned i;
-+    NSUInteger i;
- 
-     for (i = 0; i < [_attrList count]; i++) {
-       [self->names  addObject:[_attrList nameAtIndex:i]];
-@@ -46,7 +46,7 @@
- 
- - (id)initWithAttributes:(id<SaxAttributes>)_attrList {
-   if ((self = [self init])) {
--    int i, c;
-+    NSUInteger i, c;
- 
-     for (i = 0, c = [_attrList count]; i < c; i++) {
-       [self->names  addObject:[_attrList rawNameAtIndex:i]];
-@@ -67,7 +67,7 @@
- /* modify operations */
- 
- - (void)setAttributeList:(id<SaxAttributeList>)_attrList {
--  unsigned i;
-+  NSUInteger i;
- 
-   [self clear];
-   
-@@ -95,7 +95,7 @@
- }
- 
- - (void)removeAttribute:(NSString *)_name {
--  int idx;
-+  NSUInteger idx;
- 
-   if ((idx = [self->names indexOfObject:_name]) == NSNotFound)
-     return;
-@@ -118,7 +118,7 @@
- }
- 
- - (NSString *)typeForName:(NSString *)_name {
--  int i;
-+  NSUInteger i;
- 
-   if ((i = [self->names indexOfObject:_name]) == NSNotFound)
-     return nil;
-@@ -126,7 +126,7 @@
-   return [self typeAtIndex:i];
- }
- - (NSString *)valueForName:(NSString *)_name {
--  int i;
-+  NSUInteger i;
- 
-   if ((i = [self->names indexOfObject:_name]) == NSNotFound)
-     return nil;
-@@ -157,7 +157,7 @@
- - (NSString *)description {
-   NSMutableString *s;
-   NSString        *is;
--  int i, c;
-+  NSUInteger i, c;
-   
-   s = [[NSMutableString alloc] init];
-   [s appendFormat:@"<%08X[%@]:", self, NSStringFromClass([self class])];
-diff --git a/sope-xml/SaxObjC/SaxAttributes.m b/sope-xml/SaxObjC/SaxAttributes.m
-index d07a0fa..5166beb 100644
---- a/sope-xml/SaxObjC/SaxAttributes.m
-+++ b/sope-xml/SaxObjC/SaxAttributes.m
-@@ -36,7 +36,7 @@
- }
- - (id)initWithAttributes:(id<SaxAttributes>)_attrs {
-   if ((self = [self init])) {
--    int i, c;
-+    NSUInteger i, c;
-     
-     for (i = 0, c = [_attrs count]; i < c; i++) {
-       [self addAttribute:[_attrs nameAtIndex:i]
-@@ -51,7 +51,7 @@
- 
- - (id)initWithAttributeList:(id<SaxAttributeList>)_attrList {
-   if ((self = [self init])) {
--    unsigned i;
-+    NSUInteger i;
-     
-     for (i = 0; i < [_attrList count]; i++) {
-       [self addAttribute:[_attrList nameAtIndex:i] uri:@""
-@@ -115,7 +115,7 @@
- }
- - (NSUInteger)indexOfName:(NSString *)_localPart uri:(NSString *)_uri
- {
--  unsigned int i, c;
-+  NSUInteger i, c;
-   
-   for (i = 0, c = [self count]; i < c; i++) {
-     NSString *name;
-@@ -160,7 +160,7 @@
- /* lookup data by name */
- 
- - (NSString *)typeForRawName:(NSString *)_rawName {
--  unsigned int i;
-+  NSUInteger i;
- 
-   if ((i = [self indexOfRawName:_rawName]) == NSNotFound)
-     return nil;
-@@ -168,7 +168,7 @@
-   return [self typeAtIndex:i];
- }
- - (NSString *)typeForName:(NSString *)_localName uri:(NSString *)_uri {
--  unsigned int i;
-+  NSUInteger i;
-   
-   if ((i = [self indexOfName:_localName uri:_uri]) == NSNotFound)
-     return nil;
-@@ -177,7 +177,7 @@
- }
- 
- - (NSString *)valueForRawName:(NSString *)_rawName {
--  unsigned int i;
-+  NSUInteger i;
- 
-   if ((i = [self indexOfRawName:_rawName]) == NSNotFound)
-     return nil;
-@@ -210,7 +210,7 @@
- - (NSString *)description {
-   NSMutableString *s;
-   NSString        *is;
--  int i, c;
-+  NSUInteger i, c;
-   
-   s = [[NSMutableString alloc] init];
-   [s appendFormat:@"<%08X[%@]:", self, NSStringFromClass([self class])];
-diff --git a/sope-xml/XmlRpc/NSObject+XmlRpc.h b/sope-xml/XmlRpc/NSObject+XmlRpc.h
-index 2b5eda1..93192ee 100644
---- a/sope-xml/XmlRpc/NSObject+XmlRpc.h
-+++ b/sope-xml/XmlRpc/NSObject+XmlRpc.h
-@@ -29,7 +29,7 @@
- @interface NSObject(XmlRpcValues)
- 
- + (id)objectWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len;
-+  characters:(unichar *)_chars length:(NSUInteger)_len;
- 
- @end
- 
-diff --git a/sope-xml/XmlRpc/NSObject+XmlRpc.m b/sope-xml/XmlRpc/NSObject+XmlRpc.m
-index 211f980..5d83b04 100644
---- a/sope-xml/XmlRpc/NSObject+XmlRpc.m
-+++ b/sope-xml/XmlRpc/NSObject+XmlRpc.m
-@@ -31,25 +31,25 @@
- @interface NSString(XmlRpcParsing)
- - (id)initWithXmlRpcType:(NSString *)_type
-   characters:(unichar *)_chars
--  length:(int)_len;
-+  length:(NSUInteger)_len;
- @end
- 
- @interface NSDate(XmlRpcParsing)
- - (id)initWithXmlRpcType:(NSString *)_type
-   characters:(unichar *)_chars
--  length:(int)_len;
-+  length:(NSUInteger)_len;
- @end
- 
- @interface NSNumber(XmlRpcParsing)
- - (id)initWithXmlRpcType:(NSString *)_type
-   characters:(unichar *)_chars
--  length:(int)_len;
-+  length:(NSUInteger)_len;
- @end
- 
- @interface NSData(XmlRpcParsing)
- - (id)initWithXmlRpcType:(NSString *)_type
-   characters:(unichar *)_chars
--  length:(int)_len;
-+  length:(NSUInteger)_len;
- @end
- 
- @interface NSData(UsedNGExtensions)
-@@ -132,7 +132,7 @@
- }
- 
- + (id)objectWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len
-+  characters:(unichar *)_chars length:(NSUInteger)_len
- {
-   static NSDictionary *typeToClass = nil;
-   Class ObjClass = Nil;
-@@ -171,7 +171,7 @@
- }
- 
- - (id)initWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len
-+  characters:(unichar *)_chars length:(NSUInteger)_len
- {
-   if ([self respondsToSelector:@selector(initWithString:)]) {
-     NSString *s;
-@@ -194,7 +194,7 @@
- /* NSData represents the xml-rpc base type 'base64' */
- 
- - (id)initWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len
-+  characters:(unichar *)_chars length:(NSUInteger)_len
- {
-   NSString *v;
- 
-@@ -215,7 +215,7 @@
- 
- /* NSDate represents the xml-rpc type dateTime.iso8601: */
- - (id)initWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len
-+  characters:(unichar *)_chars length:(NSUInteger)_len
- {
-   /* eg 19980717T14:08:55 */
-   if (_len < 17) {
-@@ -283,7 +283,7 @@
- /* NSNumber represents the xml-rpc base types: 'int', 'double', 'boolean': */
- 
- - (id)initWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len
-+  characters:(unichar *)_chars length:(NSUInteger)_len
- {
-   if ([_type isEqualToString:@"boolean"]) {
-     BOOL v;
-@@ -318,7 +318,7 @@
- @implementation NSString(XmlRpcParsing)
- 
- - (id)initWithXmlRpcType:(NSString *)_type
--  characters:(unichar *)_chars length:(int)_len
-+  characters:(unichar *)_chars length:(NSUInteger)_len
- {
-   /* this is *never* called, since NSString+alloc returns a NSTemporaryString*/
-   return [self initWithCharacters:_chars length:_len];
-diff --git a/sope-xml/XmlRpc/XmlRpcDecoder.m b/sope-xml/XmlRpc/XmlRpcDecoder.m
-index eb19825..580152e 100644
---- a/sope-xml/XmlRpc/XmlRpcDecoder.m
-+++ b/sope-xml/XmlRpc/XmlRpcDecoder.m
-@@ -589,8 +589,8 @@ static BOOL  doDebug         = NO;
-   int result;
-   
-   if ((newValue = [self beginDecodingKey:_key]) == nil)
--    /* any useful alternatives ? */
--    return NSNotFound;
-+    /* NSKeyedArchiver returns 0, we too */
-+    return 0;
-   
-   result = [self decodeInt];
-   [self finishedDecodingKey];
-diff --git a/sope-xml/XmlRpc/XmlRpcSaxHandler.m b/sope-xml/XmlRpc/XmlRpcSaxHandler.m
-index 1245b9b..25083e9 100644
---- a/sope-xml/XmlRpc/XmlRpcSaxHandler.m
-+++ b/sope-xml/XmlRpc/XmlRpcSaxHandler.m
-@@ -158,7 +158,7 @@ static BOOL  doDebug         = NO;
- - (void)end_name {
-   self->nextCharactersProcessor = NULL;
- }
--- (void)_name:(unichar *)_chars length:(int)_len {
-+- (void)_name:(unichar *)_chars length:(NSUInteger)_len {
-   NSString *name;
-   name = [NSString stringWithCharacters:_chars length:_len];
-   [self->memberNameStack addObject:name];
-@@ -184,7 +184,7 @@ static BOOL  doDebug         = NO;
-   self->valueNestingLevel--;
- }
- 
--- (void)_dateValue:(unichar *)_chars length:(int)_len {
-+- (void)_dateValue:(unichar *)_chars length:(NSUInteger)_len {
-   if (self->dateTime)
-     return;
-   
-@@ -193,7 +193,7 @@ static BOOL  doDebug         = NO;
-                               retain];
- }
- 
--- (void)_baseValue:(unichar *)_chars length:(int)_len {
-+- (void)_baseValue:(unichar *)_chars length:(NSUInteger)_len {
-   id value;
- 
-   if (self->valueNestingLevel == 0) {
-@@ -239,8 +239,8 @@ static BOOL  doDebug         = NO;
-   self->nextCharactersProcessor = @selector(_baseValue:length:);
- }
- - (void)start_dateTime:(id<SaxAttributes>)_attrs {
--  NSString *tz;
--  int      idx;
-+  NSString   *tz;
-+  NSUInteger idx;
-   
-   [self->timeZone release]; self->timeZone = nil;
-   [self->dateTime release]; self->dateTime = nil;
-@@ -467,7 +467,7 @@ static BOOL  doDebug         = NO;
- - (void)end_methodName {
-   self->nextCharactersProcessor = NULL;
- }
--- (void)_methodName:(unichar *)_chars length:(int)_len {
-+- (void)_methodName:(unichar *)_chars length:(NSUInteger)_len {
-   [self->methodName release];
-   self->methodName = [[NSString alloc] initWithCharacters:_chars length:_len];
- }
-@@ -529,8 +529,8 @@ static BOOL  doDebug         = NO;
-   attributes:(id<SaxAttributes>)_attrs
- {
-   NSString *tmp = nil;
--  SEL      sel;
--  int      idx;
-+  SEL        sel;
-+  NSUInteger idx;
-   
-   [self->tagStack addObject:_rawName];
- 
-@@ -559,14 +559,14 @@ static BOOL  doDebug         = NO;
-   namespace:(NSString *)_ns
-   rawName:(NSString *)_rawName
- {
--  unsigned stackDepth, lastIdx;
-+  NSUInteger stackDepth, lastIdx;
-   NSString *tmp;
-   SEL sel;
- 
-   if (self->nextCharactersProcessor != NULL) {
--    void (*m)(id, SEL, unichar *, int);
-+    void (*m)(id, SEL, unichar *, NSUInteger);
-     unichar *chars;
--    unsigned len;
-+    NSUInteger len;
- 
-     len   = [self->characters length];
-     chars = malloc(sizeof(unichar)*len);
-@@ -606,7 +606,7 @@ static BOOL  doDebug         = NO;
-   }
- }
- 
--- (void)characters:(unichar *)_chars length:(int)_len {
-+- (void)characters:(unichar *)_chars length:(NSUInteger)_len {
-   if (_len > 0) {
-     [self->characters appendString:
-          [NSString stringWithCharacters:_chars length:_len]];
diff -Nru sope-1.3.15/debian/patches/series sope-1.3.16/debian/patches/series
--- sope-1.3.15/debian/patches/series	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/patches/series	2012-06-29 21:00:44.000000000 +0200
@@ -3,7 +3,5 @@
 0003-close-all-fds-on-daemon-start.patch
 0004-link-everything-correctly.patch
 0005-Do-not-build-xmlrpc-and-stxsaxdriver.patch
-0006-Fix-compilation-on-GNU-kFreeBSD.patch
-0007-Fix-FTBFS-on-arm.patch
-0008-Fix-stale-cache-issue-when-upgrading.patch
-0009-GNUstep-1.24-fix.patch
+0006-Fix-FTBFS-on-arm.patch
+0007-Remove-disabling-of-optimization.patch
diff -Nru sope-1.3.15/debian/rules sope-1.3.16/debian/rules
--- sope-1.3.15/debian/rules	2012-07-03 01:12:28.000000000 +0200
+++ sope-1.3.16/debian/rules	2012-06-29 21:00:44.000000000 +0200
@@ -2,6 +2,11 @@
 # -*- makefile -*-
 export DH_VERBOSE=1
 
+export DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow
+include /usr/share/dpkg/buildflags.mk
+# FIXME: dpkg-buildflags / cdbs should support OBJCFLAGS
+DEB_MAKE_BUILD_TARGET = all messages=yes OBJCFLAGS="$(CFLAGS)"
+
 include /usr/share/cdbs/1/rules/gnustep.mk
 include /usr/share/cdbs/1/class/gnumakefile.mk
 
diff -Nru sope-1.3.15/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m sope-1.3.16/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m
--- sope-1.3.15/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m	2012-05-11 22:23:08.000000000 +0200
+++ sope-1.3.16/sope-appserver/NGObjWeb/Associations/WOKeyPathAssociation.m	2012-06-01 07:12:49.000000000 +0200
@@ -939,8 +939,7 @@
 		handleUnknownKey stuff ...
     */
     
-#if GNUSTEP_BASE_LIBRARY && ((GNUSTEP_BASE_MAJOR_VERSION >= 1) && \
-			     (GNUSTEP_BASE_MINOR_VERSION >= 11))
+#if GNUSTEP_BASE_LIBRARY
     // TODO: also do this for OSX 10.4? probably
     [object setValue:_value forKey:info->extra.key];
 #else
@@ -1097,9 +1096,9 @@
     return;
   }
 
-  if (info->type == WOKeyType_kvc) { // takeValue:forKey:..
+  if (info->type == WOKeyType_kvc) { // setValue:forKey:
     NSCAssert(info->extra.key, @"no key object set ..");
-    [_wo takeValue:uintNumObj(_value) forKey:info->extra.key];
+    [_wo setValue:uintNumObj(_value) forKey:info->extra.key];
     return;
   }
   if (info->type == WOKeyType_binding) { // setValue:forBinding:
diff -Nru sope-1.3.15/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m sope-1.3.16/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m
--- sope-1.3.15/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m	2012-05-11 22:23:08.000000000 +0200
+++ sope-1.3.16/sope-appserver/NGObjWeb/NGHttp/NGHttpHeaderFields.m	2012-06-01 07:12:49.000000000 +0200
@@ -145,7 +145,7 @@
 
 - (NSString *)stringValue {
   NSMutableString *str = [[NSMutableString allocWithZone:[self zone]] init];
-  int  cnt, count = [self->charsets count];
+  NSUInteger  cnt, count = [self->charsets count];
 
   for (cnt = 0; cnt < count; cnt++) {
     if (cnt != 0) [str appendString:@","];
@@ -201,7 +201,7 @@
 
 - (NSString *)stringValue {
   NSMutableString *str;
-  int  cnt, count;
+  NSUInteger      cnt, count;
 
   str = [[NSMutableString allocWithZone:[self zone]] init];
   count = [self->types count];
@@ -260,7 +260,7 @@
 
 - (NSString *)stringValue {
   NSMutableString *str = [[NSMutableString allocWithZone:[self zone]] init];
-  int  cnt, count = [self->languages count];
+  NSUInteger      cnt, count = [self->languages count];
 
   for (cnt = 0; cnt < count; cnt++) {
     if (cnt != 0) [str appendString:@", "];
@@ -283,8 +283,8 @@
 
   if ([self->value hasPrefix:@"Mozilla"]) {
     // Mozilla Browser or compatible
-    NSRange r;
-    int idx, av, iv;
+    NSRange    r;
+    NSUInteger idx, av, iv;
 
     r = [self->value rangeOfString:@"/"];
     idx = r.location;
@@ -299,7 +299,7 @@
 
       self->browser = @"Mozilla";
 
-      sscanf([tmp cString], "%i.%i", &av, &iv);
+      sscanf([tmp cString], "%"PRIuPTR".%"PRIuPTR"", &av, &iv);
       self->majorVersion = av;
       self->minorVersion = iv;
 
@@ -310,7 +310,7 @@
           tmp = [self->value substringFromIndex:(idx + 5)];
           self->browser = @"MSIE";
 
-          sscanf([tmp cString], "%i.%i", &av, &iv);
+          sscanf([tmp cString], "%"PRIuPTR".%"PRIuPTR"", &av, &iv);
           self->majorVersion = av;
           self->minorVersion = iv;
         }
@@ -553,8 +553,8 @@
     NSData *data = [_credentials dataByDecodingBase64];
 
     if (data) {
-      char *str   = (char *)[data bytes];
-      int  len    = [data length];
+      char *str = (char *)[data bytes];
+      NSUInteger len = [data length];
       char *start = str;
 
       while ((*str != '\0') && (*str != ':') && (len > 0)) {
diff -Nru sope-1.3.15/sope-appserver/NGObjWeb/NGHttp/common.h sope-1.3.16/sope-appserver/NGObjWeb/NGHttp/common.h
--- sope-1.3.15/sope-appserver/NGObjWeb/NGHttp/common.h	2012-05-11 22:23:08.000000000 +0200
+++ sope-1.3.16/sope-appserver/NGObjWeb/NGHttp/common.h	2012-06-01 07:12:49.000000000 +0200
@@ -22,6 +22,7 @@
 #ifndef __NGHttp_common_H__
 #define __NGHttp_common_H__
 
+#include <inttypes.h>
 #include <string.h>
 
 #if !defined(__MINGW32__)
diff -Nru sope-1.3.15/sope-appserver/WEExtensions/ChangeLog sope-1.3.16/sope-appserver/WEExtensions/ChangeLog
--- sope-1.3.15/sope-appserver/WEExtensions/ChangeLog	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-appserver/WEExtensions/ChangeLog	2012-06-01 07:12:50.000000000 +0200
@@ -1,3 +1,11 @@
+2012-05-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+	* WEResourceManager.m
+	(_urlForResourceNamed:inFramework:language:applicationName:):
+	append "lm=" + the unix timestamp of the file last modification
+	date to force a reload of the file each time it is modified, no
+	matter what expiry date the browsers are using in their cache.
+
 2010-01-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
 	* WEResourceManager.m
diff -Nru sope-1.3.15/sope-appserver/WEExtensions/WEResourceManager.m sope-1.3.16/sope-appserver/WEExtensions/WEResourceManager.m
--- sope-1.3.15/sope-appserver/WEExtensions/WEResourceManager.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-appserver/WEExtensions/WEResourceManager.m	2012-06-01 07:12:50.000000000 +0200
@@ -575,8 +575,7 @@
       }
       [ms appendString:_name];
       
-      url = [ms copy];
-      [ms release]; ms = nil;
+      url = ms;
       if (debugOn) [self debugWithFormat:@"FOUND: '%@'", url];
       goto done;
     }
@@ -589,6 +588,7 @@
   while ((path = [e nextObject])) {
     NSMutableString *ms;
     NSString *fpath, *basepath;
+    NSDate *lastModified;
     
     /* check language */
     if (_lang) {
@@ -608,7 +608,11 @@
     
     if (![fm fileExistsAtPath:fpath])
       continue;
-      
+
+    lastModified = [[fm fileAttributesAtPath: fpath
+                                traverseLink: YES]
+                     fileModificationDate];
+
     ms = [[NSMutableString alloc] initWithCapacity:256];
       
     if (prefix) [ms appendString:prefix];
@@ -622,9 +626,10 @@
       [ms appendString:@".lproj/"];
     }
     [ms appendString:_name];
+    [ms appendFormat: @"?lm=%u",
+        (NSUInteger) [lastModified timeIntervalSince1970]];
       
-    url = [ms copy];
-    [ms release]; ms = nil;
+    url = ms;
     if (debugOn) [self debugWithFormat:@"FOUND: '%@'", url];
     goto done;
   }
diff -Nru sope-1.3.15/sope-appserver/WOExtensions/WOTabPanel.m sope-1.3.16/sope-appserver/WOExtensions/WOTabPanel.m
--- sope-1.3.15/sope-appserver/WOExtensions/WOTabPanel.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-appserver/WOExtensions/WOTabPanel.m	2012-06-01 07:12:50.000000000 +0200
@@ -82,7 +82,7 @@
   {
     WOComponent *sComponent;
     NSArray     *ttabs;
-    unsigned    i;
+    NSUInteger  i;
     
     sComponent = [_ctx component];
     ttabs      = [self->tabs valueInComponent:sComponent];
@@ -118,17 +118,17 @@
   if ([section isEqualToString:@"tab"]) {
     WOComponent *sComponent;
     NSArray *ttabs;
-    int idx;
+    NSUInteger idx;
     
     [_ctx consumeElementID]; // consume 'tab'
     
     sComponent = [_ctx component];
     ttabs = [self->tabs valueInComponent:sComponent];
 
-    idx = [[_ctx currentElementID] intValue];
+    idx = [[_ctx currentElementID] unsignedIntegerValue];
     [_ctx consumeElementID]; // consume index
 
-    if (idx >= (int)[ttabs count]) {
+    if (idx >= [ttabs count]) {
       /* index out of range */
       idx = 0;
     }
@@ -156,7 +156,7 @@
   WOComponent *sComponent;
   NSArray     *ttabs;
   BOOL        isInForm;
-  unsigned    i, selIdx;
+  NSUInteger  i, selIdx;
   NSString    *selColor, *unselColor, *s;
   
   if ([_ctx isRenderingDisabled]) {
diff -Nru sope-1.3.15/sope-core/NGExtensions/NGCalendarDateRange.m sope-1.3.16/sope-core/NGExtensions/NGCalendarDateRange.m
--- sope-1.3.15/sope-core/NGExtensions/NGCalendarDateRange.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-core/NGExtensions/NGCalendarDateRange.m	2012-06-01 07:12:50.000000000 +0200
@@ -217,7 +217,7 @@
   andEndDateKey:(NSString *)e
 {
   NSMutableArray *ma;
-  unsigned i, count;
+  NSUInteger     i, count;
   
   count = [self count];
   ma    = [NSMutableArray arrayWithCapacity:count];
@@ -243,7 +243,7 @@
 }
 
 - (BOOL)dateRangeArrayContainsDate:(NSCalendarDate *)_date {
-  unsigned i, count;
+  NSUInteger i, count;
   
   if (_date == nil) 
     return NO;
@@ -256,8 +256,8 @@
   }
   return NO;
 }
-- (unsigned)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range {
-  unsigned i, count;
+- (NSUInteger)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range {
+  NSUInteger i, count;
   
   if (_range == nil)
     return NO;
@@ -276,7 +276,7 @@
   // TODO: this is a candidate for unit testing ...
   // TODO: pretty "slow" algorithm, improve
   NSMutableArray *ma;
-  unsigned i, count;
+  NSUInteger     i, count;
   
   count = [self count];
   if (count < 2)
@@ -289,7 +289,7 @@
     NGCalendarDateRange *rangeToAdd;
     NGCalendarDateRange *availRange;
     NGCalendarDateRange *newRange;
-    unsigned idx;
+    NSUInteger idx;
     
     rangeToAdd = [self objectAtIndex:i];
     idx = [ma indexOfFirstIntersectingDateRange:rangeToAdd];
diff -Nru sope-1.3.15/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h sope-1.3.16/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h
--- sope-1.3.15/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-core/NGExtensions/NGExtensions/NGCalendarDateRange.h	2012-06-01 07:12:50.000000000 +0200
@@ -67,7 +67,7 @@
 - (NSArray *)arrayByCreatingDateRangesFromObjectsWithStartDateKey:(NSString *)s
   andEndDateKey:(NSString *)e;
 
-- (unsigned)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range;
+- (NSUInteger)indexOfFirstIntersectingDateRange:(NGCalendarDateRange *)_range;
 - (BOOL)dateRangeArrayContainsDate:(NSCalendarDate *)_date;
 
 - (NSArray *)arrayByCompactingContainedDateRanges;
diff -Nru sope-1.3.15/sope-core/NGStreams/NGInternetSocketAddress.m sope-1.3.16/sope-core/NGStreams/NGInternetSocketAddress.m
--- sope-1.3.15/sope-core/NGStreams/NGInternetSocketAddress.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-core/NGStreams/NGInternetSocketAddress.m	2012-06-01 07:12:51.000000000 +0200
@@ -48,7 +48,7 @@
 #include "NGInternetSocketDomain.h"
 #include "common.h"
 
-#if defined(HAVE_GETHOSTBYNAME_R) && !defined(linux) && !defined(__FreeBSD__)
+#if defined(HAVE_GETHOSTBYNAME_R) && !defined(linux) && !defined(__FreeBSD__) && !defined(__GLIBC__)
 #define USE_GETHOSTBYNAME_R 1
 #endif
 
diff -Nru sope-1.3.15/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m sope-1.3.16/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m
--- sope-1.3.15/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-gdl1/GDLAccess/FoundationExt/PrintfFormatScanner.m	2012-06-01 07:12:51.000000000 +0200
@@ -33,7 +33,7 @@
 
 #ifdef __va_copy
     // args being NULL breaks heavily on amd64
-    if (args != NULL) {
+    if (args) {
         __va_copy(va, args);
     } else {
 	return format;
diff -Nru sope-1.3.15/sope-gdl1/PostgreSQL/PGResultSet.m sope-1.3.16/sope-gdl1/PostgreSQL/PGResultSet.m
--- sope-1.3.15/sope-gdl1/PostgreSQL/PGResultSet.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-gdl1/PostgreSQL/PGResultSet.m	2012-06-01 07:12:51.000000000 +0200
@@ -98,12 +98,7 @@
 }
 
 - (int)indexOfFieldNamed:(NSString *)_name {
-#if LIB_FOUNDATION_LIBRARY
-  // TBD: might be wrong even in this case?
-  return PQfnumber(self->results, [_name cString]);
-#else
   return PQfnumber(self->results, [_name UTF8String]);
-#endif
 }
 
 - (int)fieldSizeAtIndex:(unsigned int)_idx {
diff -Nru sope-1.3.15/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m sope-1.3.16/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m
--- sope-1.3.15/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-gdl1/PostgreSQL/PostgreSQL72Channel.m	2012-06-01 07:12:51.000000000 +0200
@@ -394,21 +394,29 @@
   
   for (cnt = 0; cnt < attrCount; cnt++) {
     EOAttribute *attribute;
+#ifndef GDL_USE_PQFNUMBER_INDEX
+    NSUInteger  res;
+#endif
     
     attribute = [_attributes objectAtIndex:cnt];
 #if GDL_USE_PQFNUMBER_INDEX
     self->fieldIndices[cnt] = 
       [self->resultSet indexOfFieldNamed:[attribute columnName]];
+    if (self->fieldIndices[cnt] == -1) {
+      [PostgreSQL72Exception raiseWithFormat:
+                               @"attribute %@ not covered by query",
+                             attribute];
+    }
 #else
-    self->fieldIndices[cnt] = 
-      [fieldNames indexOfObject:[attribute columnName]];
-#endif
+    res = [fieldNames indexOfObject:[attribute columnName]];
     
-    if (self->fieldIndices[cnt] == NSNotFound) {
+    if (res == NSNotFound) {
       [PostgreSQL72Exception raiseWithFormat:
                                @"attribute %@ not covered by query",
                              attribute];
     }
+    self->fieldIndices[cnt] = (int)res;
+#endif
     [fieldNames replaceObjectAtIndex:self->fieldIndices[cnt] withObject:null];
   }
   [fieldNames release]; fieldNames = nil;
diff -Nru sope-1.3.15/sope-ldap/NGLdap/NGLdapAttribute.h sope-1.3.16/sope-ldap/NGLdap/NGLdapAttribute.h
--- sope-1.3.15/sope-ldap/NGLdap/NGLdapAttribute.h	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-ldap/NGLdap/NGLdapAttribute.h	2012-06-01 07:12:51.000000000 +0200
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -61,6 +62,8 @@
 - (NSEnumerator *)stringValueEnumerator;
 - (NSString *)stringValueAtIndex:(unsigned)_idx;
 
+- (id) asArrayOrString;
+
 @end
 
 #endif /* __NGLdapAttribute_H__ */
diff -Nru sope-1.3.15/sope-ldap/NGLdap/NGLdapAttribute.m sope-1.3.16/sope-ldap/NGLdap/NGLdapAttribute.m
--- sope-1.3.15/sope-ldap/NGLdap/NGLdapAttribute.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-ldap/NGLdap/NGLdapAttribute.m	2012-06-01 07:12:51.000000000 +0200
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -311,4 +312,18 @@
   return s;
 }
 
+- (id) asArrayOrString
+{
+  NSArray *arrayValue;
+  id value;
+
+  arrayValue = [self allStringValues];
+  if ([arrayValue count] == 1)
+    value = [arrayValue objectAtIndex: 0];
+  else
+    value = arrayValue;
+
+  return value;
+}
+
 @end /* NGLdapAttribute */
diff -Nru sope-1.3.15/sope-ldap/NGLdap/NGLdapEntry.h sope-1.3.16/sope-ldap/NGLdap/NGLdapEntry.h
--- sope-1.3.15/sope-ldap/NGLdap/NGLdapEntry.h	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-ldap/NGLdap/NGLdapEntry.h	2012-06-01 07:12:51.000000000 +0200
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -24,7 +25,7 @@
 
 #import <Foundation/NSObject.h>
 
-@class NSString, NSDictionary, NSArray;
+@class NSString, NSDictionary, NSMutableDictionary, NSArray;
 @class NGLdapAttribute;
 
 @interface NGLdapEntry : NSObject < NSCopying >
@@ -58,6 +59,8 @@
 
 - (NSString *)ldif;
 
+- (NSMutableDictionary *) asDictionary;
+
 @end
 
 #endif /* __NGLdapEntry_H__ */
diff -Nru sope-1.3.15/sope-ldap/NGLdap/NGLdapEntry.m sope-1.3.16/sope-ldap/NGLdap/NGLdapEntry.m
--- sope-1.3.15/sope-ldap/NGLdap/NGLdapEntry.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-ldap/NGLdap/NGLdapEntry.m	2012-06-01 07:12:51.000000000 +0200
@@ -1,5 +1,6 @@
 /*
   Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2012 Inverse inc.
 
   This file is part of SOPE.
 
@@ -220,4 +221,29 @@
   return s;
 }
 
+- (NSMutableDictionary *) asDictionary
+{
+  NSMutableDictionary *ldapRecord;
+  NSDictionary *ldapAttributes;
+  NSArray *keys;
+  NSString *key;
+  NSUInteger count, max;
+  id value;
+  
+  ldapAttributes = [self attributes];
+  keys = [ldapAttributes allKeys];
+  max = [keys count];
+
+  ldapRecord = [NSMutableDictionary dictionaryWithCapacity: max];
+  for (count = 0; count < max; count++)
+    {
+      key = [keys objectAtIndex: count];
+      value = [[ldapAttributes objectForKey: key] asArrayOrString];
+      if (value)
+        [ldapRecord setObject: value forKey: [key lowercaseString]];
+    }
+
+  return ldapRecord;
+}
+
 @end /* NGLdapEntry */
diff -Nru sope-1.3.15/sope-xml/DOM/DOMNodeWithChildren.m sope-1.3.16/sope-xml/DOM/DOMNodeWithChildren.m
--- sope-1.3.15/sope-xml/DOM/DOMNodeWithChildren.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/DOM/DOMNodeWithChildren.m	2012-06-01 07:12:51.000000000 +0200
@@ -59,7 +59,7 @@
     : nil;
 }
 - (id<NSObject,DOMNode>)lastChild {
-  unsigned count;
+  NSUInteger count;
 
   return (count = [self->childNodes count]) > 0 
     ? [self->childNodes objectAtIndex:(count - 1)]
@@ -69,7 +69,7 @@
 /* modification */
 
 - (id<NSObject,DOMNode>)removeChild:(id<NSObject,DOMNode>)_node {
-  unsigned idx;
+  NSUInteger idx;
 
   if (self->childNodes == nil)
     /* this node has no childnodes ! */
@@ -93,7 +93,7 @@
   
   if ([_node nodeType] == DOM_DOCUMENT_FRAGMENT_NODE) {
     id             fragNodes;
-    unsigned       i, count;
+    NSUInteger     i, count;
     NSMutableArray *cache;
     
     fragNodes = [_node childNodes];
@@ -133,7 +133,7 @@
 /* sibling navigation */
 
 - (id)_domNodeBeforeNode:(id)_node {
-  unsigned idx;
+  NSUInteger idx;
   
   if ((idx = [self->childNodes indexOfObject:_node]) == NSNotFound)
     /* given node isn't a child of this node */
@@ -145,7 +145,7 @@
   return [self->childNodes objectAtIndex:(idx - 1)];
 }
 - (id)_domNodeAfterNode:(id)_node {
-  unsigned idx, count;
+  NSUInteger idx, count;
 
   if ((count = [self->childNodes count]) == 0)
     /* this node has no children at all .. */
diff -Nru sope-1.3.15/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h sope-1.3.16/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h
--- sope-1.3.15/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.h	2012-06-01 07:12:51.000000000 +0200
@@ -62,7 +62,7 @@
 
 - (void)parse;
 
-- (int)lineType:(StructuredLine *)_line;
+- (NSUInteger)lineType:(StructuredLine *)_line;
 
 - (void)separateIntoBlocks;
 - (void)adjustLineLevels;
@@ -78,7 +78,7 @@
 - (StructuredTextLiteralBlock *)buildLiteralBlock;
 - (StructuredTextList *)buildList;
 
-- (int)listItemTypology:(StructuredLine *)_line;
+- (NSUInteger)listItemTypology:(StructuredLine *)_line;
 
 @end
 
diff -Nru sope-1.3.15/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m sope-1.3.16/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m
--- sope-1.3.15/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/STXSaxDriver/ExtraSTX/StructuredText.m	2012-06-01 07:12:51.000000000 +0200
@@ -105,7 +105,7 @@
   NSString	  *text, *currentLine, *trimmedLine;
   NSMutableString *buf;
   NSCharacterSet  *set;
-  int i, count;
+  NSUInteger      i, count;
   
   set   = [NSCharacterSet characterSetWithCharactersInString:@"\r"];
   buf   = [NSMutableString stringWithCapacity:256];
@@ -278,7 +278,7 @@
   [objectStack release];
 }
 
-- (int)lineType:(StructuredLine *)aLine {
+- (NSUInteger)lineType:(StructuredLine *)aLine {
   if ([self checkForListItem:aLine])
     return StructuredTextParserLine_List;
   
@@ -357,7 +357,7 @@
   
   if ([[text stringByTrimmingCharactersInSet:
 	       [NSCharacterSet whitespaceCharacterSet]] hasSuffix:@"::"]) {
-    int length;
+    NSUInteger length;
 
     length = [text length];
     text   = [text substringToIndex:length - 2];
@@ -384,7 +384,7 @@
   StructuredLine	 *line, *prevLine = nil;
   StructuredTextListItem *item = nil;
   StructuredStack	 *paragraphs;
-  int type;
+  NSUInteger		 type;
   
   result     = nil;
   paragraphs = [self paragraphs];
@@ -428,7 +428,7 @@
       break;
     case StructuredTextList_DEFINITION: {
       NSArray *components;
-      int i, count;
+      NSUInteger i, count;
 
       components = [text componentsSeparatedByString:@" -- "];
       count = [components count];
@@ -477,10 +477,10 @@
   return [result autorelease];
 }
 
-- (int)listItemTypology:(StructuredLine *)aLine {
-  NSString *text;
-  int      type = NSNotFound;
-  int      i, h, length;
+- (NSUInteger)listItemTypology:(StructuredLine *)aLine {
+  NSString   *text;
+  NSUInteger type = NSNotFound;
+  NSUInteger i, h, length;
   NSRange  range;
 
   text = [aLine text];
diff -Nru sope-1.3.15/sope-xml/SaxObjC/SaxAttributeList.m sope-1.3.16/sope-xml/SaxObjC/SaxAttributeList.m
--- sope-1.3.15/sope-xml/SaxObjC/SaxAttributeList.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/SaxObjC/SaxAttributeList.m	2012-06-01 07:12:51.000000000 +0200
@@ -33,7 +33,7 @@
 }
 - (id)initWithAttributeList:(id<SaxAttributeList>)_attrList {
   if ((self = [self init])) {
-    unsigned i;
+    NSUInteger i;
 
     for (i = 0; i < [_attrList count]; i++) {
       [self->names  addObject:[_attrList nameAtIndex:i]];
@@ -46,7 +46,7 @@
 
 - (id)initWithAttributes:(id<SaxAttributes>)_attrList {
   if ((self = [self init])) {
-    int i, c;
+    NSUInteger i, c;
 
     for (i = 0, c = [_attrList count]; i < c; i++) {
       [self->names  addObject:[_attrList rawNameAtIndex:i]];
@@ -67,7 +67,7 @@
 /* modify operations */
 
 - (void)setAttributeList:(id<SaxAttributeList>)_attrList {
-  unsigned i;
+  NSUInteger i;
 
   [self clear];
   
@@ -95,7 +95,7 @@
 }
 
 - (void)removeAttribute:(NSString *)_name {
-  int idx;
+  NSUInteger idx;
 
   if ((idx = [self->names indexOfObject:_name]) == NSNotFound)
     return;
@@ -118,7 +118,7 @@
 }
 
 - (NSString *)typeForName:(NSString *)_name {
-  int i;
+  NSUInteger i;
 
   if ((i = [self->names indexOfObject:_name]) == NSNotFound)
     return nil;
@@ -126,7 +126,7 @@
   return [self typeAtIndex:i];
 }
 - (NSString *)valueForName:(NSString *)_name {
-  int i;
+  NSUInteger i;
 
   if ((i = [self->names indexOfObject:_name]) == NSNotFound)
     return nil;
@@ -157,7 +157,7 @@
 - (NSString *)description {
   NSMutableString *s;
   NSString        *is;
-  int i, c;
+  NSUInteger i, c;
   
   s = [[NSMutableString alloc] init];
   [s appendFormat:@"<%08X[%@]:", self, NSStringFromClass([self class])];
diff -Nru sope-1.3.15/sope-xml/SaxObjC/SaxAttributes.m sope-1.3.16/sope-xml/SaxObjC/SaxAttributes.m
--- sope-1.3.15/sope-xml/SaxObjC/SaxAttributes.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/SaxObjC/SaxAttributes.m	2012-06-01 07:12:51.000000000 +0200
@@ -36,7 +36,7 @@
 }
 - (id)initWithAttributes:(id<SaxAttributes>)_attrs {
   if ((self = [self init])) {
-    int i, c;
+    NSUInteger i, c;
     
     for (i = 0, c = [_attrs count]; i < c; i++) {
       [self addAttribute:[_attrs nameAtIndex:i]
@@ -51,7 +51,7 @@
 
 - (id)initWithAttributeList:(id<SaxAttributeList>)_attrList {
   if ((self = [self init])) {
-    unsigned i;
+    NSUInteger i;
     
     for (i = 0; i < [_attrList count]; i++) {
       [self addAttribute:[_attrList nameAtIndex:i] uri:@""
@@ -115,7 +115,7 @@
 }
 - (NSUInteger)indexOfName:(NSString *)_localPart uri:(NSString *)_uri
 {
-  unsigned int i, c;
+  NSUInteger i, c;
   
   for (i = 0, c = [self count]; i < c; i++) {
     NSString *name;
@@ -160,7 +160,7 @@
 /* lookup data by name */
 
 - (NSString *)typeForRawName:(NSString *)_rawName {
-  unsigned int i;
+  NSUInteger i;
 
   if ((i = [self indexOfRawName:_rawName]) == NSNotFound)
     return nil;
@@ -168,7 +168,7 @@
   return [self typeAtIndex:i];
 }
 - (NSString *)typeForName:(NSString *)_localName uri:(NSString *)_uri {
-  unsigned int i;
+  NSUInteger i;
   
   if ((i = [self indexOfName:_localName uri:_uri]) == NSNotFound)
     return nil;
@@ -177,7 +177,7 @@
 }
 
 - (NSString *)valueForRawName:(NSString *)_rawName {
-  unsigned int i;
+  NSUInteger i;
 
   if ((i = [self indexOfRawName:_rawName]) == NSNotFound)
     return nil;
@@ -210,7 +210,7 @@
 - (NSString *)description {
   NSMutableString *s;
   NSString        *is;
-  int i, c;
+  NSUInteger i, c;
   
   s = [[NSMutableString alloc] init];
   [s appendFormat:@"<%08X[%@]:", self, NSStringFromClass([self class])];
diff -Nru sope-1.3.15/sope-xml/XmlRpc/NSObject+XmlRpc.h sope-1.3.16/sope-xml/XmlRpc/NSObject+XmlRpc.h
--- sope-1.3.15/sope-xml/XmlRpc/NSObject+XmlRpc.h	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/XmlRpc/NSObject+XmlRpc.h	2012-06-01 07:12:51.000000000 +0200
@@ -29,7 +29,7 @@
 @interface NSObject(XmlRpcValues)
 
 + (id)objectWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len;
+  characters:(unichar *)_chars length:(NSUInteger)_len;
 
 @end
 
diff -Nru sope-1.3.15/sope-xml/XmlRpc/NSObject+XmlRpc.m sope-1.3.16/sope-xml/XmlRpc/NSObject+XmlRpc.m
--- sope-1.3.15/sope-xml/XmlRpc/NSObject+XmlRpc.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/XmlRpc/NSObject+XmlRpc.m	2012-06-01 07:12:51.000000000 +0200
@@ -31,25 +31,25 @@
 @interface NSString(XmlRpcParsing)
 - (id)initWithXmlRpcType:(NSString *)_type
   characters:(unichar *)_chars
-  length:(int)_len;
+  length:(NSUInteger)_len;
 @end
 
 @interface NSDate(XmlRpcParsing)
 - (id)initWithXmlRpcType:(NSString *)_type
   characters:(unichar *)_chars
-  length:(int)_len;
+  length:(NSUInteger)_len;
 @end
 
 @interface NSNumber(XmlRpcParsing)
 - (id)initWithXmlRpcType:(NSString *)_type
   characters:(unichar *)_chars
-  length:(int)_len;
+  length:(NSUInteger)_len;
 @end
 
 @interface NSData(XmlRpcParsing)
 - (id)initWithXmlRpcType:(NSString *)_type
   characters:(unichar *)_chars
-  length:(int)_len;
+  length:(NSUInteger)_len;
 @end
 
 @interface NSData(UsedNGExtensions)
@@ -132,7 +132,7 @@
 }
 
 + (id)objectWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len
+  characters:(unichar *)_chars length:(NSUInteger)_len
 {
   static NSDictionary *typeToClass = nil;
   Class ObjClass = Nil;
@@ -171,7 +171,7 @@
 }
 
 - (id)initWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len
+  characters:(unichar *)_chars length:(NSUInteger)_len
 {
   if ([self respondsToSelector:@selector(initWithString:)]) {
     NSString *s;
@@ -194,7 +194,7 @@
 /* NSData represents the xml-rpc base type 'base64' */
 
 - (id)initWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len
+  characters:(unichar *)_chars length:(NSUInteger)_len
 {
   NSString *v;
 
@@ -215,7 +215,7 @@
 
 /* NSDate represents the xml-rpc type dateTime.iso8601: */
 - (id)initWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len
+  characters:(unichar *)_chars length:(NSUInteger)_len
 {
   /* eg 19980717T14:08:55 */
   if (_len < 17) {
@@ -283,7 +283,7 @@
 /* NSNumber represents the xml-rpc base types: 'int', 'double', 'boolean': */
 
 - (id)initWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len
+  characters:(unichar *)_chars length:(NSUInteger)_len
 {
   if ([_type isEqualToString:@"boolean"]) {
     BOOL v;
@@ -318,7 +318,7 @@
 @implementation NSString(XmlRpcParsing)
 
 - (id)initWithXmlRpcType:(NSString *)_type
-  characters:(unichar *)_chars length:(int)_len
+  characters:(unichar *)_chars length:(NSUInteger)_len
 {
   /* this is *never* called, since NSString+alloc returns a NSTemporaryString*/
   return [self initWithCharacters:_chars length:_len];
diff -Nru sope-1.3.15/sope-xml/XmlRpc/XmlRpcDecoder.m sope-1.3.16/sope-xml/XmlRpc/XmlRpcDecoder.m
--- sope-1.3.15/sope-xml/XmlRpc/XmlRpcDecoder.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/XmlRpc/XmlRpcDecoder.m	2012-06-01 07:12:51.000000000 +0200
@@ -589,8 +589,8 @@
   int result;
   
   if ((newValue = [self beginDecodingKey:_key]) == nil)
-    /* any useful alternatives ? */
-    return NSNotFound;
+    /* NSKeyedArchiver returns 0, we too */
+    return 0;
   
   result = [self decodeInt];
   [self finishedDecodingKey];
diff -Nru sope-1.3.15/sope-xml/XmlRpc/XmlRpcSaxHandler.m sope-1.3.16/sope-xml/XmlRpc/XmlRpcSaxHandler.m
--- sope-1.3.15/sope-xml/XmlRpc/XmlRpcSaxHandler.m	2012-05-11 22:23:09.000000000 +0200
+++ sope-1.3.16/sope-xml/XmlRpc/XmlRpcSaxHandler.m	2012-06-01 07:12:51.000000000 +0200
@@ -158,7 +158,7 @@
 - (void)end_name {
   self->nextCharactersProcessor = NULL;
 }
-- (void)_name:(unichar *)_chars length:(int)_len {
+- (void)_name:(unichar *)_chars length:(NSUInteger)_len {
   NSString *name;
   name = [NSString stringWithCharacters:_chars length:_len];
   [self->memberNameStack addObject:name];
@@ -184,7 +184,7 @@
   self->valueNestingLevel--;
 }
 
-- (void)_dateValue:(unichar *)_chars length:(int)_len {
+- (void)_dateValue:(unichar *)_chars length:(NSUInteger)_len {
   if (self->dateTime)
     return;
   
@@ -193,7 +193,7 @@
                               retain];
 }
 
-- (void)_baseValue:(unichar *)_chars length:(int)_len {
+- (void)_baseValue:(unichar *)_chars length:(NSUInteger)_len {
   id value;
 
   if (self->valueNestingLevel == 0) {
@@ -239,8 +239,8 @@
   self->nextCharactersProcessor = @selector(_baseValue:length:);
 }
 - (void)start_dateTime:(id<SaxAttributes>)_attrs {
-  NSString *tz;
-  int      idx;
+  NSString   *tz;
+  NSUInteger idx;
   
   [self->timeZone release]; self->timeZone = nil;
   [self->dateTime release]; self->dateTime = nil;
@@ -467,7 +467,7 @@
 - (void)end_methodName {
   self->nextCharactersProcessor = NULL;
 }
-- (void)_methodName:(unichar *)_chars length:(int)_len {
+- (void)_methodName:(unichar *)_chars length:(NSUInteger)_len {
   [self->methodName release];
   self->methodName = [[NSString alloc] initWithCharacters:_chars length:_len];
 }
@@ -529,8 +529,8 @@
   attributes:(id<SaxAttributes>)_attrs
 {
   NSString *tmp = nil;
-  SEL      sel;
-  int      idx;
+  SEL        sel;
+  NSUInteger idx;
   
   [self->tagStack addObject:_rawName];
 
@@ -559,14 +559,14 @@
   namespace:(NSString *)_ns
   rawName:(NSString *)_rawName
 {
-  unsigned stackDepth, lastIdx;
+  NSUInteger stackDepth, lastIdx;
   NSString *tmp;
   SEL sel;
 
   if (self->nextCharactersProcessor != NULL) {
-    void (*m)(id, SEL, unichar *, int);
+    void (*m)(id, SEL, unichar *, NSUInteger);
     unichar *chars;
-    unsigned len;
+    NSUInteger len;
 
     len   = [self->characters length];
     chars = malloc(sizeof(unichar)*len);
@@ -606,7 +606,7 @@
   }
 }
 
-- (void)characters:(unichar *)_chars length:(int)_len {
+- (void)characters:(unichar *)_chars length:(NSUInteger)_len {
   if (_len > 0) {
     [self->characters appendString:
          [NSString stringWithCharacters:_chars length:_len]];

--- End Message ---
--- Begin Message ---
On Thu, Aug  2, 2012 at 00:43:35 +0200, Jeroen Dekkers wrote:

> At Wed, 1 Aug 2012 22:36:12 +0200,
> Julien Cristau wrote:
> > 
> > On Tue, Jul 24, 2012 at 17:33:09 +0200, Jeroen Dekkers wrote:
> > 
> > > The upstream release is a bugfix only release. Most of the fixes are
> > > already in 1.3.15-4 because they are debian fixes submitted upstream
> > > or were backported from development version to the debian package. The
> > > only actual changes in the Debian package are:
> > > 
> > > * Build with hardening enabled
> > > * Addition of two methods to classes in NGLdap
> > > * Change in NGObjWeb to not use a deprecated method
> > > 
> > That doesn't sound like it fixes an important bug in the package, or am
> > I missing something?
> 
> Although enabling hardening doesn't fix an important bug, it does add
> a lot of protection against security bugs. It's a release goal and if
> I'm right changes for release goals are also allowed. SOPE includes a
> lot of old code that deals directly with untrusted input from the web,
> having hardening enabled for such code is important in my opinion.
> 
> The two new NGLdap methods are used by SOGo 1.3.16 and I'm not sure
> that it works correctly when used with an older SOPE version that
> doesn't have these methods. It's not really a tested/supported
> configuration and I would have to check that if the added hardening
> isn't a reason to unblock.
> 
> The deprecated method change doesn't really matter at all. I prepared
> these packages with the intention that they were uploaded before the
> freeze, but my sponsor didn't had the time to do the upload. That's
> why it's included, but I can't see how that change can cause any
> problems.
> 
Okay, I've unblocked that version...

Cheers,
Julien

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply to: