resolve.c
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:2k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* Nessuslib -- the Nessus Library
  2.  * Copyright (C) 1998 Renaud Deraison
  3.  *
  4.  * This library is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU Library General Public
  6.  * License as published by the Free Software Foundation; either
  7.  * version 2 of the License, or (at your option) any later version.
  8.  *
  9.  * This library is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.  * Library General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU Library General Public
  15.  * License along with this library; if not, write to the Free
  16.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  *
  18.  * Hostname resolver.
  19.  */
  20. #define EXPORTING
  21. #include <includes.h>
  22. #include "resolve.h"
  23. #ifndef __u32
  24. #define __u32 unsigned long
  25. #endif
  26. #ifndef INADDR_NONE
  27. #define INADDR_NONE 0xffffffff
  28. #endif
  29. ExtFunc int
  30. host2ip(name, ip)
  31. char * name;
  32. struct in_addr * ip;
  33. {
  34. #undef HAVE_GETHOSTBYNAME_R
  35. #ifdef HAVE_GETHOSTBYNAME_R
  36.         int Errno = 0;
  37.         char * buf = emalloc(4096);
  38.         struct hostent * res = NULL;
  39.         struct hostent * t = NULL;
  40. struct hostent * myhostent;
  41. myhostent = emalloc(sizeof(struct hostent));
  42. #undef HAVE_SOLARIS_GETHOSTBYNAME_R
  43. #ifdef HAVE_SOLARIS_GETHOSTBYNAME_R
  44.         gethostbyname_r(name, myhostent, buf, 4096, &Errno);
  45.  if(Errno){
  46.    efree(&myhostent);
  47. efree(&buf);
  48. return -1;
  49. }
  50. #else
  51.          gethostbyname_r(name, myhostent, buf, 4096, &res, &Errno);
  52.          t = myhostent;
  53.          myhostent = res;
  54. #endif /* HAVE_SOLARIS_... */
  55. memcpy(ip, myhostent->h_addr, myhostent->h_length);
  56. efree(&myhostent);
  57. efree(&buf);
  58. return 0;
  59. #else
  60. struct hostent * ent;
  61. ent = gethostbyname(name);
  62. if(!ent)
  63. return -1;
  64. else if(ip) memcpy(ip, ent->h_addr, ent->h_length);
  65. return 0; /* success */
  66. #endif /* defined(GETHOSTBYNAME_R) */
  67. }
  68. struct in_addr 
  69. nn_resolve(name)
  70. const char * name;
  71. {
  72. struct in_addr ret;
  73. if(host2ip(name, &ret)  < 0)
  74. {
  75. ret.s_addr = INADDR_NONE;
  76. }
  77. return ret;
  78. }