compile fixes. (camel_tcp_stream_openssl_enable_ssl): Check to make sure
2002-03-06 Jeffrey Stedfast <fejj@ximian.com> * camel-tcp-stream-openssl.c: compile fixes. (camel_tcp_stream_openssl_enable_ssl): Check to make sure that the sockfd != -1, it's not enough to check that it is non-zero. Also set the sockfd to -1 on fail (open_ssl_connection will close the sockfd on fail). svn path=/trunk/; revision=15953
This commit is contained in:

committed by
Jeffrey Stedfast

parent
cb85cdf892
commit
7324c70f41
@ -1,3 +1,11 @@
|
|||||||
|
2002-03-06 Jeffrey Stedfast <fejj@ximian.com>
|
||||||
|
|
||||||
|
* camel-tcp-stream-openssl.c: compile fixes.
|
||||||
|
(camel_tcp_stream_openssl_enable_ssl): Check to make sure that the
|
||||||
|
sockfd != -1, it's not enough to check that it is non-zero. Also
|
||||||
|
set the sockfd to -1 on fail (open_ssl_connection will close the
|
||||||
|
sockfd on fail).
|
||||||
|
|
||||||
2002-03-06 Dan Winship <danw@ximian.com>
|
2002-03-06 Dan Winship <danw@ximian.com>
|
||||||
|
|
||||||
* providers/smtp/camel-smtp-transport.c (smtp_construct): Make
|
* providers/smtp/camel-smtp-transport.c (smtp_construct): Make
|
||||||
|
@ -242,17 +242,19 @@ camel_tcp_stream_openssl_enable_ssl (CamelTcpStreamOpenSSL *stream)
|
|||||||
{
|
{
|
||||||
SSL *ssl;
|
SSL *ssl;
|
||||||
|
|
||||||
g_return_val_if_fail (CAMEL_IS_TCP_STREAM_OPENSSL (ssl), -1);
|
g_return_val_if_fail (CAMEL_IS_TCP_STREAM_OPENSSL (stream), -1);
|
||||||
|
|
||||||
if (stream->priv->sockfd && !stream->priv->ssl_mode) {
|
if (stream->priv->sockfd != -1 && !stream->priv->ssl_mode) {
|
||||||
ssl = open_ssl_connection (stream->priv->service, stream->priv->sockfd, stream);
|
ssl = open_ssl_connection (stream->priv->service, stream->priv->sockfd, stream);
|
||||||
if (ssl == NULL)
|
if (ssl == NULL) {
|
||||||
|
stream->priv->sockfd = -1;
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
ssl->priv->ssl = ssl;
|
stream->priv->ssl = ssl;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssl->priv->ssl_mode = TRUE;
|
stream->priv->ssl_mode = TRUE;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -355,19 +357,19 @@ stream_write (CamelStream *stream, const char *buffer, size_t n)
|
|||||||
fd_set rdset, wrset;
|
fd_set rdset, wrset;
|
||||||
int error, flags, fdmax;
|
int error, flags, fdmax;
|
||||||
|
|
||||||
flags = fcntl (tcp_stream_openssl->priv->sockfd, F_GETFL);
|
flags = fcntl (openssl->priv->sockfd, F_GETFL);
|
||||||
fcntl (tcp_stream_openssl->priv->sockfd, F_SETFL, flags | O_NONBLOCK);
|
fcntl (openssl->priv->sockfd, F_SETFL, flags | O_NONBLOCK);
|
||||||
|
|
||||||
fdmax = MAX (tcp_stream_openssl->priv->sockfd, cancel_fd) + 1;
|
fdmax = MAX (openssl->priv->sockfd, cancel_fd) + 1;
|
||||||
do {
|
do {
|
||||||
FD_ZERO (&rdset);
|
FD_ZERO (&rdset);
|
||||||
FD_ZERO (&wrset);
|
FD_ZERO (&wrset);
|
||||||
FD_SET (tcp_stream_openssl->priv->sockfd, &wrset);
|
FD_SET (openssl->priv->sockfd, &wrset);
|
||||||
FD_SET (cancel_fd, &rdset);
|
FD_SET (cancel_fd, &rdset);
|
||||||
|
|
||||||
select (fdmax, &rdset, &wrset, 0, NULL);
|
select (fdmax, &rdset, &wrset, 0, NULL);
|
||||||
if (FD_ISSET (cancel_fd, &rdset)) {
|
if (FD_ISSET (cancel_fd, &rdset)) {
|
||||||
fcntl (tcp_stream_openssl->priv->sockfd, F_SETFL, flags);
|
fcntl (openssl->priv->sockfd, F_SETFL, flags);
|
||||||
errno = EINTR;
|
errno = EINTR;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -387,7 +389,7 @@ stream_write (CamelStream *stream, const char *buffer, size_t n)
|
|||||||
w = 0;
|
w = 0;
|
||||||
} else {
|
} else {
|
||||||
error = errno;
|
error = errno;
|
||||||
fcntl (tcp_stream_openssl->priv->sockfd, F_SETFL, flags);
|
fcntl (openssl->priv->sockfd, F_SETFL, flags);
|
||||||
errno = error;
|
errno = error;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -395,7 +397,7 @@ stream_write (CamelStream *stream, const char *buffer, size_t n)
|
|||||||
written += w;
|
written += w;
|
||||||
} while (w >= 0 && written < n);
|
} while (w >= 0 && written < n);
|
||||||
|
|
||||||
fcntl (tcp_stream_openssl->priv->sockfd, F_SETFL, flags);
|
fcntl (openssl->priv->sockfd, F_SETFL, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
return written;
|
return written;
|
||||||
|
Reference in New Issue
Block a user