summaryrefslogtreecommitdiff
path: root/openbsd-compat/fake-getaddrinfo.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2003-02-06 10:50:42 +1100
committerDamien Miller <djm@mindrot.org>2003-02-06 10:50:42 +1100
commit850b942037d527117a38d4e0350a5ee786020779 (patch)
tree7c82c09170f2a3949ee444b786cdc26acadc9f63 /openbsd-compat/fake-getaddrinfo.c
parent4b0f1ad4dbf1e3c42e9043ce0b0739a89f5b4c86 (diff)
- (djm) Teach fake-getaddrinfo to use getservbyname() when provided a
string service name. Suggested by markus@, review by itojun@
Diffstat (limited to 'openbsd-compat/fake-getaddrinfo.c')
-rw-r--r--openbsd-compat/fake-getaddrinfo.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/openbsd-compat/fake-getaddrinfo.c b/openbsd-compat/fake-getaddrinfo.c
index 67e9eb788..2a2f269cb 100644
--- a/openbsd-compat/fake-getaddrinfo.c
+++ b/openbsd-compat/fake-getaddrinfo.c
@@ -12,10 +12,10 @@
12#include "includes.h" 12#include "includes.h"
13#include "ssh.h" 13#include "ssh.h"
14 14
15RCSID("$Id: fake-getaddrinfo.c,v 1.2 2001/02/09 01:55:36 djm Exp $"); 15RCSID("$Id: fake-getaddrinfo.c,v 1.3 2003/02/05 23:50:42 djm Exp $");
16 16
17#ifndef HAVE_GAI_STRERROR 17#ifndef HAVE_GAI_STRERROR
18char *gai_strerror(int ecode) 18const char *gai_strerror(int ecode)
19{ 19{
20 switch (ecode) { 20 switch (ecode) {
21 case EAI_NODATA: 21 case EAI_NODATA:
@@ -67,13 +67,23 @@ int getaddrinfo(const char *hostname, const char *servname,
67{ 67{
68 struct addrinfo *cur, *prev = NULL; 68 struct addrinfo *cur, *prev = NULL;
69 struct hostent *hp; 69 struct hostent *hp;
70 struct servent *sp;
70 struct in_addr in; 71 struct in_addr in;
71 int i, port; 72 int i;
73 long int port;
72 74
73 if (servname) 75 port = 0;
74 port = htons(atoi(servname)); 76 if (servname != NULL) {
75 else 77 char *cp;
76 port = 0; 78
79 port = strtol(servname, &cp, 10);
80 if (port > 0 && port <= 65535 && *cp == '\0')
81 port = htons(port);
82 else if ((sp = getservbyname(servname, NULL)) != NULL)
83 port = sp->s_port;
84 else
85 port = 0;
86 }
77 87
78 if (hints && hints->ai_flags & AI_PASSIVE) { 88 if (hints && hints->ai_flags & AI_PASSIVE) {
79 if (NULL != (*res = malloc_ai(port, htonl(0x00000000)))) 89 if (NULL != (*res = malloc_ai(port, htonl(0x00000000))))