summaryrefslogtreecommitdiff
path: root/security/ssh/files/patch-bh
blob: 3e50aaeda0926a02f84670023a63d53ede03c3de (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
*** getnameinfo.c.orig	Mon Jan 10 22:56:13 2000
--- getnameinfo.c	Mon Jan 10 22:56:13 2000
***************
*** 0 ****
--- 1,61 ----
+ /*
+  * fake library for ssh
+  *
+  * This file includes getnameinfo().
+  * These funtions are defined in rfc2133.
+  *
+  * But these functions are not implemented correctly. The minimum subset
+  * is implemented for ssh use only. For exapmle, this routine assumes
+  * that ai_family is AF_INET. Don't use it for another purpose.
+  * 
+  * In the case not using 'configure --enable-ipv6', this getnameinfo.c
+  * will be used if you have broken getnameinfo or no getnameinfo.
+  */
+ 
+ #include "includes.h"
+ #include "ssh.h"
+ 
+ #include "gai.h"
+ 
+ int
+ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
+ const struct sockaddr *sa;
+ size_t salen;
+ char *host;
+ size_t hostlen;
+ char *serv;
+ size_t servlen;
+ int flags;
+ {
+   struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+   struct hostent *hp;
+   char tmpserv[16];
+   
+   if (serv) {
+     sprintf(tmpserv, "%d", ntohs(sin->sin_port));
+     if (strlen(tmpserv) > servlen)
+       return EAI_MEMORY;
+     else
+       strcpy(serv, tmpserv);
+   }
+   if (host)
+     if (flags & NI_NUMERICHOST)
+       if (strlen(inet_ntoa(sin->sin_addr)) > hostlen)
+ 	return EAI_MEMORY;
+       else {
+ 	strcpy(host, inet_ntoa(sin->sin_addr));
+ 	return 0;
+       }
+     else
+       if (hp = gethostbyaddr((char *)&sin->sin_addr, sizeof(struct in_addr),
+ 			     AF_INET))
+ 	if (strlen(hp->h_name) > hostlen)
+ 	  return EAI_MEMORY;
+ 	else {
+ 	  strcpy(host, hp->h_name);
+ 	  return 0;
+ 	}
+       else
+ 	return EAI_NODATA;
+   return 0;
+ }