X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=starttls.c;h=a3ddf945f9856d5f744f8fa2a6ec3ff9c31f0444;hb=bcbb663d3249baf4731ce670fef341da10655f54;hp=2cf7ced5c4d24da1e4340a8daf8661b35030feca;hpb=a676a49c84f8790fda17ae1ce7544f8656eff6d2;p=elisp%2Fstarttls.git diff --git a/starttls.c b/starttls.c index 2cf7ced..a3ddf94 100644 --- a/starttls.c +++ b/starttls.c @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -46,8 +47,11 @@ #ifdef HAVE_POLL_H #include #endif -#define _GNU_SOURCE #include "getopt.h" +#include "getaddrinfo.h" +#include "gettext.h" +#include "inet_ntop.h" +#include "strdup.h" extern void tls_negotiate (int, const char *, const char *); extern int tls_write(int, const char *, int); @@ -81,19 +85,12 @@ do_tls_negotiate(sig) } int -socket_connect (hostname, service) +tcp_connect (hostname, service) const char *hostname, *service; { - int server, false = 0; -#ifdef HAVE_ADDRINFO + int server, _false = 0; struct addrinfo *in, *in0, hints; -#else - struct hostent *host; - struct servent *serv; - struct sockaddr_in sin; -#endif -#ifdef HAVE_ADDRINFO memset (&hints, 0, sizeof (hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; @@ -115,31 +112,9 @@ socket_connect (hostname, service) if (server < 0) return -1; -#else - memset (&sin, 0, sizeof (sin)); - host = gethostbyname (hostname); - if (!host) - return -1; - memcpy (&sin.sin_addr, host->h_addr, host->h_length); - serv = getservbyname (service, "tcp"); - if (serv) - sin.sin_port = serv->s_port; - else if (isdigit (service[0])) - sin.sin_port = htons (atoi (service)); - sin.sin_family = AF_INET; - server = socket (sin.sin_family, SOCK_STREAM, 0); - if (server == -1) - return -1; - - if (connect (server, (struct sockaddr *)&sin, sizeof (sin)) < 0) - { - close (server); - return -1; - } -#endif - setsockopt (server, SOL_SOCKET, SO_KEEPALIVE, (const char *) &false, - sizeof (false)); + setsockopt (server, SOL_SOCKET, SO_KEEPALIVE, (const char *) &_false, + sizeof (_false)); return server; } @@ -183,21 +158,21 @@ main (argc, argv) opt_key_file = optarg; break; default: - usage (basename (argv[0])); + usage (argv[0]); return 1; } } if (optind+2 != argc) { - usage (basename (argv[0])); + usage (argv[0]); return 1; } - tls_fd = socket_connect (argv[optind], argv[optind+1]); + tls_fd = tcp_connect (argv[optind], argv[optind+1]); if (tls_fd < 0) { - perror ("socket_connect"); + perror ("tcp_connect"); return 1; }