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