Author: rfm
Date: Fri Jul 25 14:06:34 2014
New Revision: 38015
URL: http://svn.gna.org/viewcvs/gnustep?rev=38015&view=rev
Log:
TLS fixups
Added:
libs/base/trunk/Tests/base/NSURLConnection/test01.m
Modified:
libs/base/trunk/ChangeLog
libs/base/trunk/Source/GSSocketStream.m
libs/base/trunk/Source/GSTLS.m
libs/base/trunk/Source/NSData.m
Modified: libs/base/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=38015&r1=38014&r2=38015&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog (original)
+++ libs/base/trunk/ChangeLog Fri Jul 25 14:06:34 2014
@@ -1,3 +1,11 @@
+2014-07-25 Richard Frith-Macdonald <[email protected]>
+
+ * Source/GSSocketStream.m: Fix handling TLS handshake in the case
+ where there is a network failure during the handshake (bug#42781).
+ * Source/GSTLS.m: Fix erroneous attempt to load revocation lists.
+ * Tests/base/NSURLConnection/test01.m: https test contributed by
+ Sergei Golovin.
+
2014-07-25 Richard Frith-Macdonald <[email protected]>
* configure.ac: Remove compiler charset options
Modified: libs/base/trunk/Source/GSSocketStream.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/GSSocketStream.m?rev=38015&r1=38014&r2=38015&view=diff
==============================================================================
--- libs/base/trunk/Source/GSSocketStream.m (original)
+++ libs/base/trunk/Source/GSSocketStream.m Fri Jul 25 14:06:34 2014
@@ -628,37 +628,47 @@
case NSStreamEventHasSpaceAvailable:
case NSStreamEventHasBytesAvailable:
case NSStreamEventOpenCompleted:
- [self hello]; /* try to complete the handshake */
- if (handshake == NO)
- {
- NSDebugMLLog(@"NSStream",
- @"GSTLSHandler completed on %p", stream);
- if ([istream streamStatus] == NSStreamStatusOpen)
- {
- [istream _resetEvents: NSStreamEventOpenCompleted];
- [istream _sendEvent: NSStreamEventOpenCompleted];
- }
- else
- {
- [istream _resetEvents: NSStreamEventErrorOccurred];
- [istream _sendEvent: NSStreamEventErrorOccurred];
- }
- if ([ostream streamStatus] == NSStreamStatusOpen)
- {
- [ostream _resetEvents: NSStreamEventOpenCompleted
- | NSStreamEventHasSpaceAvailable];
- [ostream _sendEvent: NSStreamEventOpenCompleted];
- [ostream _sendEvent: NSStreamEventHasSpaceAvailable];
- }
- else
- {
- [ostream _resetEvents: NSStreamEventErrorOccurred];
- [ostream _sendEvent: NSStreamEventErrorOccurred];
- }
- }
+ /* try to complete the handshake.
+ */
+ [self hello];
break;
+
+ case NSStreamEventErrorOccurred:
+ case NSStreamEventEndEncountered:
+ /* stream error or close ... handshake fails.
+ */
+ handshake = NO;
+ break;
+
default:
break;
+ }
+ if (NO == handshake)
+ {
+ NSDebugMLLog(@"NSStream",
+ @"GSTLSHandler completed on %p", stream);
+ if ([istream streamStatus] == NSStreamStatusOpen)
+ {
+ [istream _resetEvents: NSStreamEventOpenCompleted];
+ [istream _sendEvent: NSStreamEventOpenCompleted];
+ }
+ else
+ {
+ [istream _resetEvents: NSStreamEventErrorOccurred];
+ [istream _sendEvent: NSStreamEventErrorOccurred];
+ }
+ if ([ostream streamStatus] == NSStreamStatusOpen)
+ {
+ [ostream _resetEvents: NSStreamEventOpenCompleted
+ | NSStreamEventHasSpaceAvailable];
+ [ostream _sendEvent: NSStreamEventOpenCompleted];
+ [ostream _sendEvent: NSStreamEventHasSpaceAvailable];
+ }
+ else
+ {
+ [ostream _resetEvents: NSStreamEventErrorOccurred];
+ [ostream _sendEvent: NSStreamEventErrorOccurred];
+ }
}
}
}
Modified: libs/base/trunk/Source/GSTLS.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/GSTLS.m?rev=38015&r1=38014&r2=38015&view=diff
==============================================================================
--- libs/base/trunk/Source/GSTLS.m (original)
+++ libs/base/trunk/Source/GSTLS.m Fri Jul 25 14:06:34 2014
@@ -57,6 +57,10 @@
static NSString *
standardizedPath(NSString *path)
{
+ if (0 == [path length])
+ {
+ return nil; // Not a path
+ }
if (NO == [path isAbsolutePath])
{
path = [[[NSFileManager defaultManager] currentDirectoryPath]
@@ -188,9 +192,9 @@
* GS_TLS_CA_FILE environment variable.
*/
str = [[NSUserDefaults standardUserDefaults] stringForKey: GSTLSCAFile];
+ str = standardizedPath(str);
if (nil != str)
{
- str = standardizedPath(str);
ASSIGN(caFile, str);
}
@@ -198,9 +202,9 @@
* GS_TLS_REVOKE environment variable.
*/
str = [[NSUserDefaults standardUserDefaults] stringForKey: GSTLSRevokeFile];
+ str = standardizedPath(str);
if (nil != str)
{
- str = standardizedPath(str);
ASSIGN(revokeFile, str);
}
@@ -1133,7 +1137,7 @@
path, GNUTLS_X509_FMT_PEM);
if (ret < 0)
{
- NSLog(@"Problem loading revocation list from %@: %s",
+ NSLog(@"Problem loading default revocation list from %@: %s",
drv, gnutls_strerror(ret));
}
else
Modified: libs/base/trunk/Source/NSData.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSData.m?rev=38015&r1=38014&r2=38015&view=diff
==============================================================================
--- libs/base/trunk/Source/NSData.m (original)
+++ libs/base/trunk/Source/NSData.m Fri Jul 25 14:06:34 2014
@@ -150,11 +150,7 @@
FILE *theFile = 0;
void *tmp = 0;
int c;
-#if defined(__MINGW__)
- long fileLength;
-#else
off_t fileLength;
-#endif
#if defined(__MINGW__)
thePath = (const unichar*)[path fileSystemRepresentation];
@@ -182,11 +178,7 @@
/*
* Seek to the end of the file.
*/
-#if defined(__MINGW__)
- c = fseek(theFile, 0L, SEEK_END);
-#else
c = fseeko(theFile, 0, SEEK_END);
-#endif
if (c != 0)
{
NSWarnFLog(@"Seek to end of file (%@) failed - %@", path,
@@ -198,13 +190,8 @@
* Determine the length of the file (having seeked to the end of the
* file) by calling ftello().
*/
-#if defined(__MINGW__)
- fileLength = ftell(theFile);
- if (fileLength == -1)
-#else
fileLength = ftello(theFile);
if (fileLength == (off_t) -1)
-#endif
{
NSWarnFLog(@"Ftell on %@ failed - %@", path, [NSError _last]);
goto failure;
@@ -214,11 +201,7 @@
* Rewind the file pointer to the beginning, preparing to read in
* the file.
*/
-#if defined(__MINGW__)
- c = fseek(theFile, 0L, SEEK_SET);
-#else
c = fseeko(theFile, 0, SEEK_SET);
-#endif
if (c != 0)
{
NSWarnFLog(@"Fseek to start of file (%@) failed - %@", path,
Added: libs/base/trunk/Tests/base/NSURLConnection/test01.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSURLConnection/test01.m?rev=38015&view=auto
==============================================================================
--- libs/base/trunk/Tests/base/NSURLConnection/test01.m (added)
+++ libs/base/trunk/Tests/base/NSURLConnection/test01.m Fri Jul 25 14:06:34 2014
@@ -0,0 +1,95 @@
+/**
+ * The test makes connections to not-listening services.
+ * One for HTTP and one for HTTPS.
+ * The NSURLConnection delegate is supposed to catch an
+ * error in that two cases and sets it's ivars accordingly.
+ */
+
+#import <Foundation/Foundation.h>
+#import "Testing.h"
+
+@interface Delegate : NSObject
+{
+ BOOL _done;
+ NSError *_error;
+}
+- (void) reset;
+- (NSError *) error;
+- (BOOL) done;
+- (void) connection: (NSURLConnection *)connection
+ didFailWithError: (NSError *)error;
+@end
+
+@implementation Delegate
+
+- (void) reset
+{
+ _done = NO;
+ _error = nil;
+}
+
+- (NSError *) error
+{
+ return _error;
+}
+
+- (BOOL) done
+{
+ return _done;
+}
+
+- (void) connection: (NSURLConnection *)connection
+ didFailWithError: (NSError *)error
+{
+ _error = error;
+ _done = YES;
+}
+
+@end
+
+int main(int argc, char **argv, char **env)
+{
+ NSAutoreleasePool *arp = [NSAutoreleasePool new];
+ NSTimeInterval timing;
+ NSTimeInterval duration;
+
+ NSString *urlString;
+ NSURLRequest *req;
+ Delegate *del;
+
+ duration = 0.0;
+ timing = 0.1;
+ urlString = @"http://127.0.0.1:19750";
+ req = [NSURLRequest requestWithURL: [NSURL URLWithString: urlString]];
+ del = [[Delegate new] autorelease];
+ [del reset];
+ [NSURLConnection connectionWithRequest: req
+ delegate: del];
+ while (![del done] && duration < 3.0)
+ {
+ [[NSRunLoop currentRunLoop]
+ runUntilDate: [NSDate dateWithTimeIntervalSinceNow: timing]];
+ duration += timing;
+ }
+ PASS([del done] && nil != [del error],
+ "connection to dead(not-listening) HTTP service");
+
+ duration = 0.0;
+ urlString = @"https://127.0.0.1:19750";
+ req = [NSURLRequest requestWithURL: [NSURL URLWithString: urlString]];
+ [NSURLConnection connectionWithRequest: req
+ delegate: del];
+ [del reset];
+ while (![del done] && duration < 3.0)
+ {
+ [[NSRunLoop currentRunLoop]
+ runUntilDate: [NSDate dateWithTimeIntervalSinceNow: timing]];
+ duration += timing;
+ }
+ PASS([del done] && nil != [del error],
+ "connection to dead(not-listening) HTTPS service");
+
+ [arp release]; arp = nil;
+
+ return 0;
+}
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs