From aa4f7a7d00a087ddbfa05f0de962d0c5c80c8cba Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Sun, 6 Jul 2014 10:06:40 +0200 Subject: [PATCH] move use_imaps out of server_conf_t it doesn't belong there - it's a property of imap_server_conf_t. the port setup is now done while reading the config. this makes socket.[hc] imap-agnostic. --- src/drv_imap.c | 17 ++++++++++++----- src/socket.c | 20 +++++++------------- src/socket.h | 1 - 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index e6d93ee..299aa23 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -46,6 +46,7 @@ typedef struct imap_server_conf { int max_in_progress; #ifdef HAVE_LIBSSL char use_ssl; + char use_imaps; char require_ssl; char require_cram; #endif @@ -1531,7 +1532,7 @@ imap_open_store_connected( int ok, void *aux ) if (!ok) imap_open_store_bail( ctx ); #ifdef HAVE_LIBSSL - else if (srvc->sconf.use_imaps) + else if (srvc->use_imaps) socket_start_tls( &ctx->conn, imap_open_store_tlsstarted1 ); #endif } @@ -1581,7 +1582,7 @@ imap_open_store_authenticate( imap_store_t *ctx ) if (ctx->greeting != GreetingPreauth) { #ifdef HAVE_LIBSSL - if (!srvc->sconf.use_imaps && srvc->use_ssl) { + if (!srvc->use_imaps && srvc->use_ssl) { /* always try to select SSL support if available */ if (CAP(STARTTLS)) { imap_exec( ctx, 0, imap_open_store_authenticate_p2, "STARTTLS" ); @@ -1600,7 +1601,7 @@ imap_open_store_authenticate( imap_store_t *ctx ) imap_open_store_authenticate2( ctx ); } else { #ifdef HAVE_LIBSSL - if (!srvc->sconf.use_imaps && srvc->require_ssl) { + if (!srvc->use_imaps && srvc->require_ssl) { error( "IMAP error: SSL support not available\n" ); imap_open_store_bail( ctx ); return; @@ -2272,7 +2273,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) #ifdef HAVE_LIBSSL if (starts_with( cfg->val, -1, "imaps:", 6 )) { cfg->val += 6; - server->sconf.use_imaps = 1; + server->use_imaps = 1; server->sconf.use_sslv2 = 1; server->sconf.use_sslv3 = 1; } else @@ -2310,7 +2311,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) } else if (!strcasecmp( "RequireSSL", cfg->cmd )) server->require_ssl = parse_bool( cfg ); else if (!strcasecmp( "UseIMAPS", cfg->cmd )) - server->sconf.use_imaps = parse_bool( cfg ); + server->use_imaps = parse_bool( cfg ); else if (!strcasecmp( "UseSSLv2", cfg->cmd )) server->sconf.use_sslv2 = parse_bool( cfg ); else if (!strcasecmp( "UseSSLv3", cfg->cmd )) @@ -2377,6 +2378,12 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) return 1; } #endif + if (!server->sconf.port) + server->sconf.port = +#ifdef HAVE_LIBSSL + server->use_imaps ? 993 : +#endif + 143; } if (store) { if (!store->server) { diff --git a/src/socket.c b/src/socket.c index f47e375..4bc2752 100644 --- a/src/socket.c +++ b/src/socket.c @@ -312,7 +312,7 @@ socket_connect( conn_t *sock, void (*cb)( int ok, void *aux ) ) sock->callbacks.connect = cb; - /* open connection to IMAP server */ + /* open connection to server */ if (conf->tunnel) { int a[2]; @@ -352,7 +352,7 @@ socket_connect( conn_t *sock, void (*cb)( int ok, void *aux ) ) hints.ai_flags = AI_ADDRCONFIG; infon( "Resolving %s... ", conf->host ); if ((gaierr = getaddrinfo( conf->host, NULL, &hints, &sock->addrs ))) { - error( "IMAP error: Cannot resolve server '%s': %s\n", conf->host, gai_strerror( gaierr ) ); + error( "Error: Cannot resolve server '%s': %s\n", conf->host, gai_strerror( gaierr ) ); socket_connect_bail( sock ); return; } @@ -365,7 +365,7 @@ socket_connect( conn_t *sock, void (*cb)( int ok, void *aux ) ) infon( "Resolving %s... ", conf->host ); he = gethostbyname( conf->host ); if (!he) { - error( "IMAP error: Cannot resolve server '%s': %s\n", conf->host, hstrerror( h_errno ) ); + error( "Error: Cannot resolve server '%s': %s\n", conf->host, hstrerror( h_errno ) ); socket_connect_bail( sock ); return; } @@ -381,7 +381,6 @@ static void socket_connect_one( conn_t *sock ) { int s; - ushort port; #ifdef HAVE_IPV6 struct addrinfo *ai; #else @@ -400,18 +399,13 @@ socket_connect_one( conn_t *sock ) return; } - port = sock->conf->port ? sock->conf->port : -#ifdef HAVE_LIBSSL - sock->conf->use_imaps ? 993 : -#endif - 143; #ifdef HAVE_IPV6 if (ai->ai_family == AF_INET6) { struct sockaddr_in6 *in6 = ((struct sockaddr_in6 *)ai->ai_addr); char sockname[64]; - in6->sin6_port = htons( port ); + in6->sin6_port = htons( sock->conf->port ); nfasprintf( &sock->name, "%s ([%s]:%hu)", - sock->conf->host, inet_ntop( AF_INET6, &in6->sin6_addr, sockname, sizeof(sockname) ), port ); + sock->conf->host, inet_ntop( AF_INET6, &in6->sin6_addr, sockname, sizeof(sockname) ), sock->conf->port ); } else #endif { @@ -421,9 +415,9 @@ socket_connect_one( conn_t *sock ) in->sin_family = AF_INET; in->sin_addr.s_addr = *((int *)*sock->curr_addr); #endif - in->sin_port = htons( port ); + in->sin_port = htons( sock->conf->port ); nfasprintf( &sock->name, "%s (%s:%hu)", - sock->conf->host, inet_ntoa( in->sin_addr ), port ); + sock->conf->host, inet_ntoa( in->sin_addr ), sock->conf->port ); } #ifdef HAVE_IPV6 diff --git a/src/socket.h b/src/socket.h index 1545b39..c7fcb78 100644 --- a/src/socket.h +++ b/src/socket.h @@ -34,7 +34,6 @@ typedef struct server_conf { int port; #ifdef HAVE_LIBSSL char *cert_file; - char use_imaps; char use_sslv2, use_sslv3, use_tlsv1, use_tlsv11, use_tlsv12; /* these are actually variables and are leaked at the end */