/[inetutils]/inetutils/telnetd/telnetd.c
ViewVC logotype

Diff of /inetutils/telnetd/telnetd.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.31 by gray, Sat Apr 5 16:45:08 2003 UTC revision 1.32 by ams, Mon Jun 20 08:21:25 2005 UTC
# Line 1  Line 1 
1  /* Copyright (C) 1998,2001, 2002 Free Software Foundation, Inc.  /* Copyright (C) 1998, 2001, 2002, 2004x Free Software Foundation, Inc.
2    
3     This file is part of GNU Inetutils.     This file is part of GNU Inetutils.
4    
# Line 275  extern char *localhost __P ((void)); Line 275  extern char *localhost __P ((void));
275  void  void
276  telnetd_setup (int fd)  telnetd_setup (int fd)
277  {  {
278    #ifdef IPV6
279      struct sockaddr_storage saddr;
280      char buf[256], buf2[256]; /* FIXME: We should use dynamic allocation. */
281      int err;
282    #else
283    struct sockaddr_in saddr;    struct sockaddr_in saddr;
284      struct hostent *hp;
285    #endif
286    int true = 1;    int true = 1;
287    socklen_t len;    socklen_t len;
   struct hostent *hp;  
288    char uname[256]; /*FIXME*/    char uname[256]; /*FIXME*/
289    int level;    int level;
290    
# Line 289  telnetd_setup (int fd) Line 295  telnetd_setup (int fd)
295        exit (1);        exit (1);
296      }      }
297    
298    syslog (LOG_INFO, "Connect from %s", inet_ntoa (saddr.sin_addr));  #ifdef IPV6
299        err = getnameinfo ((struct sockaddr *) &saddr, sizeof (saddr), buf,
300                         sizeof (buf), NULL, 0, NI_NUMERICHOST);
301      if (err)
302        {
303          const char *errmsg;
304          
305          if (err == EAI_SYSTEM)
306            errmsg = strerror (errno);
307          else
308            errmsg = gai_strerror (err);
309          
310          syslog (LOG_AUTH|LOG_NOTICE, "Cannot get address: %s", errmsg);
311          fatal (fd, "Cannot get address.");
312        }
313    
314      /* We use a second buffer so we don't have to call getnameinfo again
315         if we need the numeric host below.  */
316      err = getnameinfo ((struct sockaddr *) &saddr, sizeof (saddr), buf2,
317                         sizeof (buf2), NULL, 0, NI_NAMEREQD);
318    
319      if (reverse_lookup)
320        {
321          struct addrinfo *result, *aip;
322    
323          if (err)
324            {
325              const char *errmsg;
326              
327              if (err == EAI_SYSTEM)
328                errmsg = strerror (errno);
329              else
330                errmsg = gai_strerror (err);
331              
332              syslog (LOG_AUTH|LOG_NOTICE, "Can't resolve %s: %s", buf, errmsg);
333              fatal (fd, "Cannot resolve address.");
334            }
335    
336          remote_hostname = xstrdup (buf2);
337    
338          err = getaddrinfo (remote_hostname, NULL, NULL, &result);
339          if (err)
340            {
341              const char *errmsg;
342              
343              if (err == EAI_SYSTEM)
344                errmsg = strerror (errno);
345              else
346                errmsg = gai_strerror (err);
347              
348              syslog (LOG_AUTH|LOG_NOTICE, "Forward resolve of %s failed: %s",
349                      remote_hostname, errmsg);
350              fatal (fd, "Cannot resolve address.");
351            }
352    
353          for (aip = result; aip; aip = aip->ai_next)
354            if (!memcmp (aip->ai_addr, &saddr, aip->ai_addrlen))
355              break;
356    
357          if (aip == NULL)
358            {
359              syslog (LOG_AUTH|LOG_NOTICE,
360                      "None of addresses of %s matched %s",
361                      remote_hostname,
362                      buf);
363              exit (0);
364            }
365    
366          freeaddrinfo (result);
367        }
368      else
369        {
370          if (!err)
371            remote_hostname = xstrdup (buf2);
372          else
373            remote_hostname = xstrdup (buf);
374        }
375    #else
376    hp = gethostbyaddr ((char*)&saddr.sin_addr.s_addr,    hp = gethostbyaddr ((char*)&saddr.sin_addr.s_addr,
377                        sizeof (saddr.sin_addr.s_addr), AF_INET);                        sizeof (saddr.sin_addr.s_addr), AF_INET);
378    if (reverse_lookup)    if (reverse_lookup)
# Line 337  telnetd_setup (int fd) Line 419  telnetd_setup (int fd)
419        else        else
420          remote_hostname = xstrdup (inet_ntoa (saddr.sin_addr));          remote_hostname = xstrdup (inet_ntoa (saddr.sin_addr));
421      }      }
422    #endif
423        
424    /* Set socket options */    /* Set socket options */
425    

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26