From cc8ae31729e382cbf31682187e8363e688cd9f5e Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 27 Oct 2009 18:17:37 +0000 Subject: [PATCH] Monotone-Parent: 11583101e1da18860a0ec72e4d7a5c096cb0b7c3 Monotone-Revision: 540f090a7d557ec7343d1c63082b35d288d03630 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2009-10-27T18:17:37 Monotone-Branch: ca.inverse.sogo --- SOPE/sope-debian.diff | 974 ++++++++++++++++++++++++------------------ 1 file changed, 557 insertions(+), 417 deletions(-) diff --git a/SOPE/sope-debian.diff b/SOPE/sope-debian.diff index 3032ceee2..fcbee637e 100644 --- a/SOPE/sope-debian.diff +++ b/SOPE/sope-debian.diff @@ -180,23 +180,23 @@ +patch-stamp: patch +patch: + for patch in $(PATCHES); \ -+ do \ -+ if ! test -f debian/patches/$$patch.stamp; \ -+ then \ -+ patch -p0 < debian/patches/$$patch; \ -+ touch debian/patches/$$patch.stamp; \ -+ fi; \ -+ done; \ -+ fi ++ do \ ++ if ! test -f debian/patches/$$patch.stamp; \ ++ then \ ++ patch -p0 < debian/patches/$$patch; \ ++ touch debian/patches/$$patch.stamp; \ ++ fi; \ ++ done + touch patch-stamp + +unpatch: + if test -f patch-stamp; \ -+ then for patch in $(PATCHES); \ ++ then \ ++ for patch in $(PATCHES); \ + do \ -+ patch -p0 -R < debian/patches/$$patch; \ -+ rm -f debian/patches/$$patch.stamp; \ -+ done; \ ++ patch -p0 -R < debian/patches/$$patch; \ ++ rm -f debian/patches/$$patch.stamp; \ ++ done; \ + fi + rm -f patch-stamp + @@ -221,7 +221,7 @@ -Build-Depends: debhelper (>= 4.0.0), dpatch, gnustep-make-ogo, gobjc | objc-compiler, libfoundation1.1-dev, libobjc1, libxml2-dev, libldap2-dev | libldap-dev, libssl-dev, zlib1g-dev, libpq-dev | postgresql-dev, libecpg-dev, apache-dev, apache2-threaded-dev | apache2-prefork-dev | apache2-dev, autotools-dev -Standards-Version: 3.6.1 +Maintainer: Inverse Support -+Build-Depends: debhelper (>= 4.0.0), gnustep-make, libgnustep-base-dev, gobjc | objc-compiler, libxml2-dev, libldap2-dev | libldap-dev, libssl-dev, zlib1g-dev, libpq-dev | postgresql-dev, autotools-dev ++Build-Depends: debhelper (>= 4.0.0), gnustep-make, libgnustep-base-dev, gobjc | objc-compiler, libxml2-dev, libldap2-dev | libldap-dev, libssl-dev, zlib1g-dev, libpq-dev | postgresql-dev, libmysqlclient-dev (>= 5.1), autotools-dev +Standards-Version: 3.8.2 Package: libsope_SOPEVER_-dev @@ -289,7 +289,39 @@ Description: Development files for the GNUstep database libraries SOPE is a framework for developing web applications and services. The name "SOPE" (SKYRiX Object Publishing Environment) is inspired by ZOPE. -@@ -264,19 +265,3 @@ +@@ -223,15 +224,28 @@ + Section: web + Architecture: any + Depends: ${shlibs:Depends}, ${misc:Depends} +-Provides: sope-db-connector +-Recommends: postgresql (>= 7.2.0) ++Provides: sope_SOPEVER_-db-connector ++Suggests: postgresql (>= 8.2) + Description: PostgreSQL connector for SOPE's fork of the GNUstep database environment + SOPE is a framework for developing web applications and services. The + name "SOPE" (SKYRiX Object Publishing Environment) is inspired by ZOPE. + . + This package contains the postgresql connector for SOPE's fork of the + GNUstep database libraries. +- ++ ++Package: sope_SOPEVER_-gdl1-mysql ++Section: web ++Architecture: any ++Depends: ${shlibs:Depends}, ${misc:Depends} ++Provides: sope_SOPEVER_-db-connector ++Recommends: mysql-server (>= 5.0) ++Description: MySQL connector for SOPE's fork of the GNUstep database environment ++ SOPE is a framework for developing web applications and services. The ++ name "SOPE" (SKYRiX Object Publishing Environment) is inspired by ZOPE. ++ . ++ This package contains the mysql connector for SOPE's fork of the ++ GNUstep database libraries. ++ + Package: sope_SOPEVER_-stxsaxdriver + Section: web + Architecture: any +@@ -264,19 +278,3 @@ name "SOPE" (SKYRiX Object Publishing Environment) is inspired by ZOPE. . This parser enables SOPE's SAX engine to parse iCal and vCard files. @@ -3722,7 +3754,7 @@ +--include fhs.make --- sope-4.9.r1660.orig/debian/patches/sope-patchset-r1660.diff +++ sope-4.9.r1660/debian/patches/sope-patchset-r1660.diff -@@ -0,0 +1,4781 @@ +@@ -0,0 +1,4889 @@ +Index: sope-ldap/NGLdap/NGLdapEntry.m +=================================================================== +--- sope-ldap/NGLdap/NGLdapEntry.m (revision 1660) @@ -3759,6 +3791,407 @@ + 2009-04-02 Wolfgang Sourdeau + + * NGLdapConnection.m (useSSL,startTLS): new method enabling ++Index: sope-gdl1/PostgreSQL/PostgreSQL72Channel.m ++=================================================================== ++--- sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (revision 1660) +++++ sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (working copy) ++@@ -713,6 +713,39 @@ ++ return ms; ++ } ++ +++/* GCSEOAdaptorChannel protocol */ +++static NSString *sqlFolderFormat = (@"CREATE TABLE %@ (\n" \ +++ @" c_name VARCHAR (256) NOT NULL PRIMARY KEY,\n" +++ @" c_content VARCHAR (100000) NOT NULL,\n" +++ @" c_creationdate INT4 NOT NULL,\n" +++ @" c_lastmodified INT4 NOT NULL,\n" +++ @" c_version INT4 NOT NULL,\n" +++ @" c_deleted INT4 NULL\n" +++ @")"); +++static NSString *sqlFolderACLFormat = (@"CREATE TABLE %@ (\n" \ +++ @" c_uid VARCHAR (256) NOT NULL,\n" +++ @" c_object VARCHAR (256) NOT NULL,\n" +++ @" c_role VARCHAR (80) NOT NULL\n" +++ @")"); +++ +++- (NSException *) createGCSFolderTableWithName: (NSString *) tableName +++{ +++ NSString *sql; +++ +++ sql = [NSString stringWithFormat: sqlFolderFormat, tableName]; +++ +++ return [self evaluateExpressionX: sql]; +++} +++ +++- (NSException *) createGCSFolderACLTableWithName: (NSString *) tableName +++{ +++ NSString *sql; +++ +++ sql = [NSString stringWithFormat: sqlFolderACLFormat, tableName]; +++ +++ return [self evaluateExpressionX: sql]; +++} +++ ++ @end /* PostgreSQL72Channel */ ++ ++ @implementation PostgreSQL72Channel(PrimaryKeyGeneration) ++Index: sope-gdl1/MySQL/MySQL4Channel.m ++=================================================================== ++--- sope-gdl1/MySQL/MySQL4Channel.m (revision 1660) +++++ sope-gdl1/MySQL/MySQL4Channel.m (working copy) ++@@ -755,6 +755,39 @@ ++ return pkey; ++ } ++ +++/* GCSEOAdaptorChannel protocol */ +++static NSString *sqlFolderFormat = (@"CREATE TABLE %@ (\n" \ +++ @" c_name VARCHAR (256) NOT NULL PRIMARY KEY,\n" +++ @" c_content VARCHAR (100000) NOT NULL,\n" +++ @" c_creationdate INT NOT NULL,\n" +++ @" c_lastmodified INT NOT NULL,\n" +++ @" c_version INT NOT NULL,\n" +++ @" c_deleted INT NULL\n" +++ @")"); +++static NSString *sqlFolderACLFormat = (@"CREATE TABLE %@ (\n" \ +++ @" c_uid VARCHAR (256) NOT NULL,\n" +++ @" c_object VARCHAR (256) NOT NULL,\n" +++ @" c_role VARCHAR (80) NOT NULL\n" +++ @")"); +++ +++- (NSException *) createGCSFolderTableWithName: (NSString *) tableName +++{ +++ NSString *sql; +++ +++ sql = [NSString stringWithFormat: sqlFolderFormat, tableName]; +++ +++ return [self evaluateExpressionX: sql]; +++} +++ +++- (NSException *) createGCSFolderACLTableWithName: (NSString *) tableName +++{ +++ NSString *sql; +++ +++ sql = [NSString stringWithFormat: sqlFolderACLFormat, tableName]; +++ +++ return [self evaluateExpressionX: sql]; +++} +++ ++ @end /* MySQL4Channel */ ++ ++ void __link_MySQL4Channel() { ++Index: sope-gdl1/Oracle8/OracleAdaptorChannel.m ++=================================================================== ++--- sope-gdl1/Oracle8/OracleAdaptorChannel.m (revision 1660) +++++ sope-gdl1/Oracle8/OracleAdaptorChannel.m (working copy) ++@@ -1,7 +1,7 @@ ++ /* ++ ** OracleAdaptorChannel.m ++ ** ++-** Copyright (c) 2007 Inverse groupe conseil inc. and Ludovic Marcotte +++** Copyright (c) 2007-2009 Inverse inc. and Ludovic Marcotte ++ ** ++ ** Author: Ludovic Marcotte ++ ** ++@@ -30,6 +30,11 @@ ++ ++ #import ++ +++#include +++ +++static BOOL debugOn = NO; +++static int maxTry = 3; +++static int maxSleep = 500; ++ // ++ // ++ // ++@@ -41,10 +46,11 @@ ++ ++ @implementation OracleAdaptorChannel (Private) ++ ++-- (void) _cleanup +++- (void) _cleanup ++ { ++ column_info *info; ++ int c; +++ sword result; ++ ++ [_resultSetProperties removeAllObjects]; ++ ++@@ -58,11 +64,29 @@ ++ // so we just free the value instead. ++ if (info->value) ++ { ++- if (OCIDescriptorFree((dvoid *)info->value, (ub4)OCI_DTYPE_LOB) != OCI_SUCCESS) +++ if (info->type == SQLT_CLOB +++ || info->type == SQLT_BLOB +++ || info->type == SQLT_BFILEE +++ || info->type == SQLT_CFILEE) +++ { +++ result = OCIDescriptorFree((dvoid *)info->value, (ub4) OCI_DTYPE_LOB); +++ if (result != OCI_SUCCESS) +++ { +++ NSLog (@"value was not a LOB descriptor"); +++ abort(); +++ } +++ } +++ else ++ free(info->value); ++ info->value = NULL; ++ } ++- free(info); +++ else +++ { +++ NSLog (@"trying to free an already freed value!"); +++ abort(); +++ } +++ free(info); +++ ++ [_row_buffer removeObjectAtIndex: c]; ++ } ++ ++@@ -78,8 +102,7 @@ ++ // ++ @implementation OracleAdaptorChannel ++ ++-static void ++-DBTerminate() +++static void DBTerminate() ++ { ++ if (OCITerminate(OCI_DEFAULT)) ++ NSLog(@"FAILED: OCITerminate()"); ++@@ -89,6 +112,11 @@ ++ ++ + (void) initialize ++ { +++ NSUserDefaults *ud; +++ +++ ud = [NSUserDefaults standardUserDefaults]; +++ debugOn = [ud boolForKey: @"OracleAdaptorDebug"]; +++ ++ // We Initialize the OCI process environment. ++ if (OCIInitialize((ub4)OCI_DEFAULT, (dvoid *)0, ++ (dvoid * (*)(dvoid *, size_t)) 0, ++@@ -156,14 +184,17 @@ ++ [super closeChannel]; ++ ++ // We logoff from the database. ++- if (OCILogoff(_oci_ctx, _oci_err)) +++ if (!_oci_ctx || !_oci_err || OCILogoff(_oci_ctx, _oci_err)) ++ { ++ NSLog(@"FAILED: OCILogoff()"); ++ } ++ +++ if (_oci_ctx) +++ OCIHandleFree(_oci_ctx, OCI_HTYPE_SVCCTX); ++ ++- OCIHandleFree(_oci_ctx, OCI_HTYPE_SVCCTX); ++- OCIHandleFree(_oci_err, OCI_HTYPE_ERROR); +++ if (_oci_err) +++ OCIHandleFree(_oci_err, OCI_HTYPE_ERROR); +++ ++ // OCIHandleFree(_oci_env, OCI_HTYPE_ENV); ++ ++ _oci_ctx = (OCISvcCtx *)0; ++@@ -177,7 +208,8 @@ ++ // ++ - (void) dealloc ++ { ++- //NSLog(@"OracleAdaptorChannel: -dealloc"); +++ if (debugOn) +++ NSLog(@"OracleAdaptorChannel: -dealloc"); ++ ++ [self _cleanup]; ++ ++@@ -222,7 +254,7 @@ ++ { ++ EOAttribute *attribute; ++ OCIParam *param; ++- +++ int rCount; ++ column_info *info; ++ ub4 i, clen, count; ++ text *sql, *cname; ++@@ -231,6 +263,9 @@ ++ ++ [self _cleanup]; ++ +++ if (debugOn) +++ [self logWithFormat: @"expression: %@", theExpression]; +++ ++ if (!theExpression || ![theExpression length]) ++ { ++ [NSException raise: @"OracleInvalidExpressionException" ++@@ -244,7 +279,9 @@ ++ } ++ ++ sql = (text *)[theExpression UTF8String]; ++- +++ +++ rCount = 0; +++ retry: ++ // We alloc our statement handle ++ if ((status = OCIHandleAlloc((dvoid *)_oci_env, (dvoid **)&_current_stm, (ub4)OCI_HTYPE_STMT, (CONST size_t) 0, (dvoid **) 0))) ++ { ++@@ -264,13 +301,39 @@ ++ // We check if we're doing a SELECT and if so, we're fetching data! ++ OCIAttrGet(_current_stm, OCI_HTYPE_STMT, &type, 0, OCI_ATTR_STMT_TYPE, _oci_err); ++ self->isFetchInProgress = (type == OCI_STMT_SELECT ? YES : NO); ++- +++ ++ // We execute our statement. Not that we _MUST_ set iter to 0 for non-SELECT statements. ++ if ((status = OCIStmtExecute(_oci_ctx, _current_stm, _oci_err, (self->isFetchInProgress ? (ub4)0 : (ub4)1), (ub4)0, (CONST OCISnapshot *)NULL, (OCISnapshot *)NULL, ++ ([(OracleAdaptorContext *)[self adaptorContext] autoCommit] ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT)))) ++ { +++ ub4 serverStatus; +++ ++ checkerr(_oci_err, status); ++ NSLog(@"Statement execute failed (OCI_ERROR): %@", theExpression); +++ +++ // We check to see if we lost connection and need to reconnect. +++ serverStatus = 0; +++ OCIAttrGet((dvoid *)_oci_env, OCI_HTYPE_SERVER, (dvoid *)&serverStatus, (ub4 *)0, OCI_ATTR_SERVER_STATUS, _oci_err); +++ +++ if (serverStatus == OCI_SERVER_NOT_CONNECTED) +++ { +++ // We cleanup our previous handles +++ [self cancelFetch]; +++ [self closeChannel]; +++ +++ // We try to reconnect a couple of times before giving up... +++ while (rCount < maxTry) +++ { +++ usleep(maxSleep); +++ rCount++; +++ +++ if ([self openChannel]) +++ { +++ NSLog(@"Connection re-established to Oracle - retrying to process the statement."); +++ goto retry; +++ } +++ } +++ } ++ return NO; ++ } ++ ++@@ -302,7 +365,9 @@ ++ // We read the maximum width of a column ++ info->max_width = 0; ++ status = OCIAttrGet((dvoid*)param, (ub4)OCI_DTYPE_PARAM, (dvoid*)&(info->max_width), (ub4 *)0, (ub4)OCI_ATTR_DATA_SIZE, (OCIError *)_oci_err); ++- +++ +++ if (debugOn) +++ NSLog(@"name: %s, type: %d", cname, info->type); ++ attribute = [EOAttribute attributeWithOracleType: info->type name: cname length: clen width: info->max_width]; ++ [_resultSetProperties addObject: attribute]; ++ ++@@ -394,16 +459,17 @@ ++ return NO; ++ } ++ ++- ++ if (OCIEnvInit((OCIEnv **)&_oci_env, (ub4)OCI_DEFAULT, (size_t)0, (dvoid **)0)) ++ { ++ NSLog(@"FAILED: OCIEnvInit()"); +++ [self closeChannel]; ++ return NO; ++ } ++ ++ if (OCIHandleAlloc((dvoid *)_oci_env, (dvoid *)&_oci_err, (ub4)OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0)) ++ { ++ NSLog(@"FAILED: OCIHandleAlloc() on errhp"); +++ [self closeChannel]; ++ return NO; ++ } ++ ++@@ -414,7 +480,10 @@ ++ // Under Oracle 10g, the third parameter of OCILogon() has the form: [//]host[:port][/service_name] ++ // See http://download-west.oracle.com/docs/cd/B12037_01/network.101/b10775/naming.htm#i498306 for ++ // all juicy details. ++- database = [[NSString stringWithFormat:@"%@:%@", [o serverName], [o port]] UTF8String]; +++ if ([o serverName] && [o port]) +++ database = [[NSString stringWithFormat:@"%@:%@/%@", [o serverName], [o port], [o databaseName]] UTF8String]; +++ else +++ database = [[o databaseName] UTF8String]; ++ ++ // We logon to the database. ++ if (OCILogon(_oci_env, _oci_err, &_oci_ctx, (const OraText*)username, strlen(username), ++@@ -422,6 +491,7 @@ ++ { ++ NSLog(@"FAILED: OCILogon(). username = %s password = %s" ++ @" database = %s", username, password, database); +++ [self closeChannel]; ++ return NO; ++ } ++ ++@@ -438,6 +508,11 @@ ++ { ++ sword status; ++ +++ // We check if our connection is open prior to trying to fetch any data. OCIStmtFetch2() returns +++ // NO error code if the OCI environment is set up but the OCILogon() has failed. +++ if (![self isOpen]) +++ return nil; +++ ++ status = OCIStmtFetch2(_current_stm, _oci_err, (ub4)1, (ub4)OCI_FETCH_NEXT, (sb4)0, (ub4)OCI_DEFAULT); ++ ++ if (status == OCI_NO_DATA) ++@@ -609,7 +684,7 @@ ++ ++ /* GCSEOAdaptorChannel protocol */ ++ static NSString *sqlFolderFormat = (@"CREATE TABLE %@ (\n" \ ++- @" c_name VARCHAR2 (256) NOT NULL,\n" +++ @" c_name VARCHAR2 (256) NOT NULL PRIMARY KEY,\n" ++ @" c_content CLOB NOT NULL,\n" ++ @" c_creationdate INTEGER NOT NULL,\n" ++ @" c_lastmodified INTEGER NOT NULL,\n" ++Index: sope-gdl1/Oracle8/OracleAdaptorChannelController.m ++=================================================================== ++--- sope-gdl1/Oracle8/OracleAdaptorChannelController.m (revision 1660) +++++ sope-gdl1/Oracle8/OracleAdaptorChannelController.m (working copy) ++@@ -31,6 +31,8 @@ ++ #import ++ #import ++ +++static BOOL debugOn = NO; +++ ++ // ++ // ++ // ++@@ -48,6 +50,14 @@ ++ // ++ @implementation OracleAdaptorChannelController ++ ++++ (void) initialize +++{ +++ NSUserDefaults *ud; +++ +++ ud = [NSUserDefaults standardUserDefaults]; +++ debugOn = [ud boolForKey: @"OracleAdaptorDebug"]; +++} +++ ++ - (EODelegateResponse) adaptorChannel: (id) theChannel ++ willInsertRow: (NSMutableDictionary *) theRow ++ forEntity: (EOEntity *) theEntity ++@@ -56,7 +66,8 @@ ++ NSArray *keys; ++ int i, c; ++ ++- NSLog(@"willInsertRow: %@ %@", [theRow description], [theEntity description]); +++ if (debugOn) +++ NSLog(@"willInsertRow: %@ %@", [theRow description], [theEntity description]); ++ ++ s = AUTORELEASE([[NSMutableString alloc] init]); ++ ++@@ -101,7 +112,8 @@ ++ NSArray *keys; ++ int i, c; ++ ++- NSLog(@"willUpdatetRow: %@ %@", [theRow description], [theQualifier description]); +++ if (debugOn) +++ NSLog(@"willUpdateRow: %@ %@", [theRow description], [theQualifier description]); ++ ++ s = AUTORELEASE([[NSMutableString alloc] init]); ++ +Index: sope-mime/NGImap4/NGImap4Functions.m +=================================================================== +--- sope-mime/NGImap4/NGImap4Functions.m (revision 1660) @@ -7359,407 +7792,6 @@ + } + return data; + } -+Index: sope-gdl1/PostgreSQL/PostgreSQL72Channel.m -+=================================================================== -+--- sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (revision 1660) -++++ sope-gdl1/PostgreSQL/PostgreSQL72Channel.m (working copy) -+@@ -713,6 +713,39 @@ -+ return ms; -+ } -+ -++/* GCSEOAdaptorChannel protocol */ -++static NSString *sqlFolderFormat = (@"CREATE TABLE %@ (\n" \ -++ @" c_name VARCHAR (256) NOT NULL PRIMARY KEY,\n" -++ @" c_content VARCHAR (100000) NOT NULL,\n" -++ @" c_creationdate INT4 NOT NULL,\n" -++ @" c_lastmodified INT4 NOT NULL,\n" -++ @" c_version INT4 NOT NULL,\n" -++ @" c_deleted INT4 NULL\n" -++ @")"); -++static NSString *sqlFolderACLFormat = (@"CREATE TABLE %@ (\n" \ -++ @" c_uid VARCHAR (256) NOT NULL,\n" -++ @" c_object VARCHAR (256) NOT NULL,\n" -++ @" c_role VARCHAR (80) NOT NULL\n" -++ @")"); -++ -++- (NSException *) createGCSFolderTableWithName: (NSString *) tableName -++{ -++ NSString *sql; -++ -++ sql = [NSString stringWithFormat: sqlFolderFormat, tableName]; -++ -++ return [self evaluateExpressionX: sql]; -++} -++ -++- (NSException *) createGCSFolderACLTableWithName: (NSString *) tableName -++{ -++ NSString *sql; -++ -++ sql = [NSString stringWithFormat: sqlFolderACLFormat, tableName]; -++ -++ return [self evaluateExpressionX: sql]; -++} -++ -+ @end /* PostgreSQL72Channel */ -+ -+ @implementation PostgreSQL72Channel(PrimaryKeyGeneration) -+Index: sope-gdl1/MySQL/MySQL4Channel.m -+=================================================================== -+--- sope-gdl1/MySQL/MySQL4Channel.m (revision 1660) -++++ sope-gdl1/MySQL/MySQL4Channel.m (working copy) -+@@ -755,6 +755,39 @@ -+ return pkey; -+ } -+ -++/* GCSEOAdaptorChannel protocol */ -++static NSString *sqlFolderFormat = (@"CREATE TABLE %@ (\n" \ -++ @" c_name VARCHAR (256) NOT NULL PRIMARY KEY,\n" -++ @" c_content VARCHAR (100000) NOT NULL,\n" -++ @" c_creationdate INT NOT NULL,\n" -++ @" c_lastmodified INT NOT NULL,\n" -++ @" c_version INT NOT NULL,\n" -++ @" c_deleted INT NULL\n" -++ @")"); -++static NSString *sqlFolderACLFormat = (@"CREATE TABLE %@ (\n" \ -++ @" c_uid VARCHAR (256) NOT NULL,\n" -++ @" c_object VARCHAR (256) NOT NULL,\n" -++ @" c_role VARCHAR (80) NOT NULL\n" -++ @")"); -++ -++- (NSException *) createGCSFolderTableWithName: (NSString *) tableName -++{ -++ NSString *sql; -++ -++ sql = [NSString stringWithFormat: sqlFolderFormat, tableName]; -++ -++ return [self evaluateExpressionX: sql]; -++} -++ -++- (NSException *) createGCSFolderACLTableWithName: (NSString *) tableName -++{ -++ NSString *sql; -++ -++ sql = [NSString stringWithFormat: sqlFolderACLFormat, tableName]; -++ -++ return [self evaluateExpressionX: sql]; -++} -++ -+ @end /* MySQL4Channel */ -+ -+ void __link_MySQL4Channel() { -+Index: sope-gdl1/Oracle8/OracleAdaptorChannel.m -+=================================================================== -+--- sope-gdl1/Oracle8/OracleAdaptorChannel.m (revision 1660) -++++ sope-gdl1/Oracle8/OracleAdaptorChannel.m (working copy) -+@@ -1,7 +1,7 @@ -+ /* -+ ** OracleAdaptorChannel.m -+ ** -+-** Copyright (c) 2007 Inverse groupe conseil inc. and Ludovic Marcotte -++** Copyright (c) 2007-2009 Inverse inc. and Ludovic Marcotte -+ ** -+ ** Author: Ludovic Marcotte -+ ** -+@@ -30,6 +30,11 @@ -+ -+ #import -+ -++#include -++ -++static BOOL debugOn = NO; -++static int maxTry = 3; -++static int maxSleep = 500; -+ // -+ // -+ // -+@@ -41,10 +46,11 @@ -+ -+ @implementation OracleAdaptorChannel (Private) -+ -+-- (void) _cleanup -++- (void) _cleanup -+ { -+ column_info *info; -+ int c; -++ sword result; -+ -+ [_resultSetProperties removeAllObjects]; -+ -+@@ -58,11 +64,29 @@ -+ // so we just free the value instead. -+ if (info->value) -+ { -+- if (OCIDescriptorFree((dvoid *)info->value, (ub4)OCI_DTYPE_LOB) != OCI_SUCCESS) -++ if (info->type == SQLT_CLOB -++ || info->type == SQLT_BLOB -++ || info->type == SQLT_BFILEE -++ || info->type == SQLT_CFILEE) -++ { -++ result = OCIDescriptorFree((dvoid *)info->value, (ub4) OCI_DTYPE_LOB); -++ if (result != OCI_SUCCESS) -++ { -++ NSLog (@"value was not a LOB descriptor"); -++ abort(); -++ } -++ } -++ else -+ free(info->value); -+ info->value = NULL; -+ } -+- free(info); -++ else -++ { -++ NSLog (@"trying to free an already freed value!"); -++ abort(); -++ } -++ free(info); -++ -+ [_row_buffer removeObjectAtIndex: c]; -+ } -+ -+@@ -78,8 +102,7 @@ -+ // -+ @implementation OracleAdaptorChannel -+ -+-static void -+-DBTerminate() -++static void DBTerminate() -+ { -+ if (OCITerminate(OCI_DEFAULT)) -+ NSLog(@"FAILED: OCITerminate()"); -+@@ -89,6 +112,11 @@ -+ -+ + (void) initialize -+ { -++ NSUserDefaults *ud; -++ -++ ud = [NSUserDefaults standardUserDefaults]; -++ debugOn = [ud boolForKey: @"OracleAdaptorDebug"]; -++ -+ // We Initialize the OCI process environment. -+ if (OCIInitialize((ub4)OCI_DEFAULT, (dvoid *)0, -+ (dvoid * (*)(dvoid *, size_t)) 0, -+@@ -156,14 +184,17 @@ -+ [super closeChannel]; -+ -+ // We logoff from the database. -+- if (OCILogoff(_oci_ctx, _oci_err)) -++ if (!_oci_ctx || !_oci_err || OCILogoff(_oci_ctx, _oci_err)) -+ { -+ NSLog(@"FAILED: OCILogoff()"); -+ } -+ -++ if (_oci_ctx) -++ OCIHandleFree(_oci_ctx, OCI_HTYPE_SVCCTX); -+ -+- OCIHandleFree(_oci_ctx, OCI_HTYPE_SVCCTX); -+- OCIHandleFree(_oci_err, OCI_HTYPE_ERROR); -++ if (_oci_err) -++ OCIHandleFree(_oci_err, OCI_HTYPE_ERROR); -++ -+ // OCIHandleFree(_oci_env, OCI_HTYPE_ENV); -+ -+ _oci_ctx = (OCISvcCtx *)0; -+@@ -177,7 +208,8 @@ -+ // -+ - (void) dealloc -+ { -+- //NSLog(@"OracleAdaptorChannel: -dealloc"); -++ if (debugOn) -++ NSLog(@"OracleAdaptorChannel: -dealloc"); -+ -+ [self _cleanup]; -+ -+@@ -222,7 +254,7 @@ -+ { -+ EOAttribute *attribute; -+ OCIParam *param; -+- -++ int rCount; -+ column_info *info; -+ ub4 i, clen, count; -+ text *sql, *cname; -+@@ -231,6 +263,9 @@ -+ -+ [self _cleanup]; -+ -++ if (debugOn) -++ [self logWithFormat: @"expression: %@", theExpression]; -++ -+ if (!theExpression || ![theExpression length]) -+ { -+ [NSException raise: @"OracleInvalidExpressionException" -+@@ -244,7 +279,9 @@ -+ } -+ -+ sql = (text *)[theExpression UTF8String]; -+- -++ -++ rCount = 0; -++ retry: -+ // We alloc our statement handle -+ if ((status = OCIHandleAlloc((dvoid *)_oci_env, (dvoid **)&_current_stm, (ub4)OCI_HTYPE_STMT, (CONST size_t) 0, (dvoid **) 0))) -+ { -+@@ -264,13 +301,39 @@ -+ // We check if we're doing a SELECT and if so, we're fetching data! -+ OCIAttrGet(_current_stm, OCI_HTYPE_STMT, &type, 0, OCI_ATTR_STMT_TYPE, _oci_err); -+ self->isFetchInProgress = (type == OCI_STMT_SELECT ? YES : NO); -+- -++ -+ // We execute our statement. Not that we _MUST_ set iter to 0 for non-SELECT statements. -+ if ((status = OCIStmtExecute(_oci_ctx, _current_stm, _oci_err, (self->isFetchInProgress ? (ub4)0 : (ub4)1), (ub4)0, (CONST OCISnapshot *)NULL, (OCISnapshot *)NULL, -+ ([(OracleAdaptorContext *)[self adaptorContext] autoCommit] ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT)))) -+ { -++ ub4 serverStatus; -++ -+ checkerr(_oci_err, status); -+ NSLog(@"Statement execute failed (OCI_ERROR): %@", theExpression); -++ -++ // We check to see if we lost connection and need to reconnect. -++ serverStatus = 0; -++ OCIAttrGet((dvoid *)_oci_env, OCI_HTYPE_SERVER, (dvoid *)&serverStatus, (ub4 *)0, OCI_ATTR_SERVER_STATUS, _oci_err); -++ -++ if (serverStatus == OCI_SERVER_NOT_CONNECTED) -++ { -++ // We cleanup our previous handles -++ [self cancelFetch]; -++ [self closeChannel]; -++ -++ // We try to reconnect a couple of times before giving up... -++ while (rCount < maxTry) -++ { -++ usleep(maxSleep); -++ rCount++; -++ -++ if ([self openChannel]) -++ { -++ NSLog(@"Connection re-established to Oracle - retrying to process the statement."); -++ goto retry; -++ } -++ } -++ } -+ return NO; -+ } -+ -+@@ -302,7 +365,9 @@ -+ // We read the maximum width of a column -+ info->max_width = 0; -+ status = OCIAttrGet((dvoid*)param, (ub4)OCI_DTYPE_PARAM, (dvoid*)&(info->max_width), (ub4 *)0, (ub4)OCI_ATTR_DATA_SIZE, (OCIError *)_oci_err); -+- -++ -++ if (debugOn) -++ NSLog(@"name: %s, type: %d", cname, info->type); -+ attribute = [EOAttribute attributeWithOracleType: info->type name: cname length: clen width: info->max_width]; -+ [_resultSetProperties addObject: attribute]; -+ -+@@ -394,16 +459,17 @@ -+ return NO; -+ } -+ -+- -+ if (OCIEnvInit((OCIEnv **)&_oci_env, (ub4)OCI_DEFAULT, (size_t)0, (dvoid **)0)) -+ { -+ NSLog(@"FAILED: OCIEnvInit()"); -++ [self closeChannel]; -+ return NO; -+ } -+ -+ if (OCIHandleAlloc((dvoid *)_oci_env, (dvoid *)&_oci_err, (ub4)OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0)) -+ { -+ NSLog(@"FAILED: OCIHandleAlloc() on errhp"); -++ [self closeChannel]; -+ return NO; -+ } -+ -+@@ -414,7 +480,10 @@ -+ // Under Oracle 10g, the third parameter of OCILogon() has the form: [//]host[:port][/service_name] -+ // See http://download-west.oracle.com/docs/cd/B12037_01/network.101/b10775/naming.htm#i498306 for -+ // all juicy details. -+- database = [[NSString stringWithFormat:@"%@:%@", [o serverName], [o port]] UTF8String]; -++ if ([o serverName] && [o port]) -++ database = [[NSString stringWithFormat:@"%@:%@/%@", [o serverName], [o port], [o databaseName]] UTF8String]; -++ else -++ database = [[o databaseName] UTF8String]; -+ -+ // We logon to the database. -+ if (OCILogon(_oci_env, _oci_err, &_oci_ctx, (const OraText*)username, strlen(username), -+@@ -422,6 +491,7 @@ -+ { -+ NSLog(@"FAILED: OCILogon(). username = %s password = %s" -+ @" database = %s", username, password, database); -++ [self closeChannel]; -+ return NO; -+ } -+ -+@@ -438,6 +508,11 @@ -+ { -+ sword status; -+ -++ // We check if our connection is open prior to trying to fetch any data. OCIStmtFetch2() returns -++ // NO error code if the OCI environment is set up but the OCILogon() has failed. -++ if (![self isOpen]) -++ return nil; -++ -+ status = OCIStmtFetch2(_current_stm, _oci_err, (ub4)1, (ub4)OCI_FETCH_NEXT, (sb4)0, (ub4)OCI_DEFAULT); -+ -+ if (status == OCI_NO_DATA) -+@@ -609,7 +684,7 @@ -+ -+ /* GCSEOAdaptorChannel protocol */ -+ static NSString *sqlFolderFormat = (@"CREATE TABLE %@ (\n" \ -+- @" c_name VARCHAR2 (256) NOT NULL,\n" -++ @" c_name VARCHAR2 (256) NOT NULL PRIMARY KEY,\n" -+ @" c_content CLOB NOT NULL,\n" -+ @" c_creationdate INTEGER NOT NULL,\n" -+ @" c_lastmodified INTEGER NOT NULL,\n" -+Index: sope-gdl1/Oracle8/OracleAdaptorChannelController.m -+=================================================================== -+--- sope-gdl1/Oracle8/OracleAdaptorChannelController.m (revision 1660) -++++ sope-gdl1/Oracle8/OracleAdaptorChannelController.m (working copy) -+@@ -31,6 +31,8 @@ -+ #import -+ #import -+ -++static BOOL debugOn = NO; -++ -+ // -+ // -+ // -+@@ -48,6 +50,14 @@ -+ // -+ @implementation OracleAdaptorChannelController -+ -+++ (void) initialize -++{ -++ NSUserDefaults *ud; -++ -++ ud = [NSUserDefaults standardUserDefaults]; -++ debugOn = [ud boolForKey: @"OracleAdaptorDebug"]; -++} -++ -+ - (EODelegateResponse) adaptorChannel: (id) theChannel -+ willInsertRow: (NSMutableDictionary *) theRow -+ forEntity: (EOEntity *) theEntity -+@@ -56,7 +66,8 @@ -+ NSArray *keys; -+ int i, c; -+ -+- NSLog(@"willInsertRow: %@ %@", [theRow description], [theEntity description]); -++ if (debugOn) -++ NSLog(@"willInsertRow: %@ %@", [theRow description], [theEntity description]); -+ -+ s = AUTORELEASE([[NSMutableString alloc] init]); -+ -+@@ -101,7 +112,8 @@ -+ NSArray *keys; -+ int i, c; -+ -+- NSLog(@"willUpdatetRow: %@ %@", [theRow description], [theQualifier description]); -++ if (debugOn) -++ NSLog(@"willUpdateRow: %@ %@", [theRow description], [theQualifier description]); -+ -+ s = AUTORELEASE([[NSMutableString alloc] init]); -+ +Index: sope-core/NGExtensions/NGExtensions/NSString+Ext.h +=================================================================== +--- sope-core/NGExtensions/NGExtensions/NSString+Ext.h (revision 1660) @@ -7942,6 +7974,19 @@ + #import + #import + ++Index: sope-core/NGStreams/GNUmakefile.preamble ++=================================================================== ++--- sope-core/NGStreams/GNUmakefile.preamble (revision 1660) +++++ sope-core/NGStreams/GNUmakefile.preamble (working copy) ++@@ -1,6 +1,7 @@ ++ # compilation settings ++ ++-MACHCPU = $(shell echo $$MACHTYPE | cut -f 1 -d '-') +++# MACHCPU = $(shell echo $$MACHTYPE | cut -f 1 -d '-') +++MACHCPU = $(shell uname -m) ++ ++ libNGStreams_INCLUDE_DIRS += \ ++ -I$(GNUSTEP_TARGET_CPU)/$(GNUSTEP_TARGET_OS) \ +Index: sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h +=================================================================== +--- sope-xml/libxmlSAXDriver/libxmlHTMLSAXDriver.h (revision 1660) @@ -8036,11 +8081,35 @@ +- $(INSTALL_ROOT_DIR)/$(GNUSTEP_MAKEFILES)/wobundle.make +-endif ++ $(DESTDIR)/$(GNUSTEP_MAKEFILES)/wobundle.make ++Index: sope-appserver/NGObjWeb/WOMessage+XML.m ++=================================================================== ++--- sope-appserver/NGObjWeb/WOMessage+XML.m (revision 1660) +++++ sope-appserver/NGObjWeb/WOMessage+XML.m (working copy) ++@@ -84,7 +84,7 @@ ++ id builder; ++ ++ builder = [[[NSClassFromString(@"DOMSaxBuilder") alloc] init] autorelease]; ++- dom = [[builder buildFromData:data] retain]; +++ dom = [builder buildFromData:data]; ++ } ++ ++ /* cache DOM structure */ +Index: sope-appserver/NGObjWeb/ChangeLog +=================================================================== +--- sope-appserver/NGObjWeb/ChangeLog (revision 1660) ++++ sope-appserver/NGObjWeb/ChangeLog (working copy) -+@@ -1,3 +1,22 @@ ++@@ -1,3 +1,33 @@ +++2009-10-26 Wolfgang Sourdeau +++ +++ * WOMessage+XML.m (-contentAsDOMDocument): do not retain "dom" as +++ it will be assigned to self->domCache, to avoid a leak. +++ +++2009-10-21 Wolfgang Sourdeau +++ +++ * WebDAV/SoObjectResultEntry.m (-valueForKey:): we now take +++ WOUseRelativeURLs into account when the "href" key is requested, +++ to work around a bug in iCal 4. +++ ++2009-07-02 Wolfgang Sourdeau ++ ++ * WOMessage.m (-setHeaders:, -setHeader:forKey:, headerForKey:, @@ -8063,6 +8132,77 @@ + 2009-06-10 Helge Hess + + * DAVPropMap.plist: mapped {DAV:}current-user-principal (v4.9.37) ++Index: sope-appserver/NGObjWeb/DAVPropMap.plist ++=================================================================== ++--- sope-appserver/NGObjWeb/DAVPropMap.plist (revision 1660) +++++ sope-appserver/NGObjWeb/DAVPropMap.plist (working copy) ++@@ -157,6 +157,7 @@ ++ "{urn:ietf:params:xml:ns:caldav}supported-calendar-data" = ++ davSupportedCalendarDataTypes; ++ "{urn:ietf:params:xml:ns:caldav}calendar-description" = davDescription; +++ "{urn:ietf:params:xml:ns:caldav}calendar-timezone" = davCalendarTimeZone; ++ ++ /* CardDAV */ ++ "{urn:ietf:params:xml:ns:carddav}addressbook-home-set" = davAddressbookHomeSet; ++Index: sope-appserver/NGObjWeb/WebDAV/SoObjectResultEntry.m ++=================================================================== ++--- sope-appserver/NGObjWeb/WebDAV/SoObjectResultEntry.m (revision 1660) +++++ sope-appserver/NGObjWeb/WebDAV/SoObjectResultEntry.m (working copy) ++@@ -25,7 +25,14 @@ ++ @implementation SoObjectResultEntry ++ ++ static BOOL debugOn = NO; +++static BOOL useRelativeURLs = NO; ++ ++++ (void) initialize +++{ +++ useRelativeURLs = [[NSUserDefaults standardUserDefaults] +++ boolForKey: @"WOUseRelativeURLs"]; +++} +++ ++ - (id)initWithURI:(NSString *)_href object:(id)_o values:(NSDictionary *)_d { ++ if ((self = [super init])) { ++ if (debugOn) { ++@@ -85,10 +92,36 @@ ++ return YES; ++ } ++ +++- (NSString *)_relativeHREF { +++ NSString *newHREF; +++ NSRange hostRange; +++ +++ if ([self->href hasPrefix: @"/"]) +++ return self->href; +++ else { +++ hostRange = [self->href rangeOfString: @"://"]; +++ if (hostRange.length > 0) { +++ newHREF = [self->href substringFromIndex: NSMaxRange (hostRange)]; +++ hostRange = [newHREF rangeOfString: @"/"]; +++ if (hostRange.length > 0) { +++ newHREF = [newHREF substringFromIndex: hostRange.location]; +++ } +++ } else { +++ newHREF = self->href; +++ } +++ +++ return newHREF; +++ } +++} +++ ++ - (id)valueForKey:(NSString *)_key { ++- if ([_key isEqualToString:@"{DAV:}href"]) ++- return self->href; ++- +++ if ([_key isEqualToString:@"{DAV:}href"]) { +++ if (useRelativeURLs) +++ return [self _relativeHREF]; +++ else +++ return self->href; +++ } +++ ++ if ([_key isEqualToString:@"{DAV:}status"]) ++ return nil; ++ +Index: sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m +=================================================================== +--- sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m (revision 1660)