*** servconf.c.orig	Wed May 12 13:19:28 1999
--- servconf.c	Mon Jan 10 22:56:13 2000
***************
*** 81,88 ****
  void initialize_server_options(ServerOptions *options)
  {
    memset(options, 0, sizeof(*options));
!   options->port = -1;
!   options->listen_addr.s_addr = INADDR_ANY;
    options->host_key_file = NULL;
    options->random_seed_file = NULL;
    options->pid_file = NULL;
--- 81,88 ----
  void initialize_server_options(ServerOptions *options)
  {
    memset(options, 0, sizeof(*options));
!   options->num_ports = 0;
!   options->listen_addrs = NULL;
    options->host_key_file = NULL;
    options->random_seed_file = NULL;
    options->pid_file = NULL;
***************
*** 92,97 ****
--- 92,100 ----
    options->permit_root_login = -1;
    options->ignore_rhosts = -1;
    options->ignore_root_rhosts = -1;
+ #ifdef ENABLE_LOG_AUTH
+   options->log_auth = -1;
+ #endif /* ENABLE_LOG_AUTH */
    options->quiet_mode = -1;
    options->fascist_logging = -1;
    options->print_motd = -1;
***************
*** 138,153 ****
  
  void fill_default_server_options(ServerOptions *options)
  {
!   if (options->port == -1)
      {
!       struct servent *sp;
! 
!       sp = getservbyname(SSH_SERVICE_NAME, "tcp");
!       if (sp)
! 	options->port = ntohs(sp->s_port);
!       else
! 	options->port = SSH_DEFAULT_PORT;
!       endservent();
      }
    if (options->host_key_file == NULL)
      options->host_key_file = HOST_KEY_FILE;
--- 141,171 ----
  
  void fill_default_server_options(ServerOptions *options)
  {
!   struct addrinfo hints, *ai, *aitop;
!   char strport[PORTSTRLEN];
!   int i;
! 
!   if (options->num_ports == 0)
!     options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
!   if (options->listen_addrs == NULL)
      {
!       for (i = 0; i < options->num_ports; i++)
! 	{
! 	  memset(&hints, 0, sizeof(hints));
! 	  hints.ai_flags = AI_PASSIVE;
! 	  hints.ai_family = IPv4or6;
! 	  hints.ai_socktype = SOCK_STREAM;
! 	  sprintf(strport, "%d", options->ports[i]);
! 	  if (getaddrinfo(NULL, strport, &hints, &aitop) != 0)
! 	    {
! 	      fprintf(stderr, "fatal: getaddrinfo: Cannot get anyaddr.\n");
! 	      exit(1);
! 	    }
! 	  for (ai = aitop; ai->ai_next; ai = ai->ai_next);
! 	  ai->ai_next = options->listen_addrs;
! 	  options->listen_addrs = aitop;
! 	}
!       /* freeaddrinfo(options->listen_addrs) in sshd.c */
      }
    if (options->host_key_file == NULL)
      options->host_key_file = HOST_KEY_FILE;
***************
*** 243,248 ****
--- 261,269 ----
  {
    sPort, sHostKeyFile, sServerKeyBits, sLoginGraceTime, sKeyRegenerationTime,
    sPermitRootLogin, sQuietMode, sFascistLogging, sLogFacility,
+ #ifdef ENABLE_LOG_AUTH
+   sLogAuth,
+ #endif /* ENABLE_LOG_AUTH */
    sRhostsAuthentication, sRhostsRSAAuthentication, sRSAAuthentication,
    sTISAuthentication, sPasswordAuthentication, sAllowHosts, sDenyHosts,
    sListenAddress, sPrintMotd, sIgnoreRhosts, sX11Forwarding, sX11DisplayOffset,
***************
*** 275,280 ****
--- 296,304 ----
    { "quietmode", sQuietMode },
    { "fascistlogging", sFascistLogging },
    { "syslogfacility", sLogFacility },
+ #ifdef ENABLE_LOG_AUTH
+   { "logauth", sLogAuth },
+ #endif /* ENABLE_LOG_AUTH */
    { "rhostsauthentication", sRhostsAuthentication },
    { "rhostsrsaauthentication", sRhostsRSAAuthentication },
    { "rsaauthentication", sRSAAuthentication },
***************
*** 367,372 ****
--- 391,399 ----
    char *cp, **charptr;
    int linenum, *intptr, i, value;
    ServerOpCodes opcode;
+   struct addrinfo hints, *ai, *aitop;
+   char strport[PORTSTRLEN];
+   int gaierr;
  
    f = fopen(filename, "r");
    if (!f)
***************
*** 389,395 ****
        switch (opcode)
  	{
  	case sPort:
! 	  intptr = &options->port;
  	parse_int:
  	  cp = strtok(NULL, WHITESPACE);
  	  if (!cp)
--- 416,429 ----
        switch (opcode)
  	{
  	case sPort:
! 	  if (options->num_ports >= MAX_PORTS)
! 	    {
! 	      fprintf(stderr, "%s line %d: too many ports.\n",
! 		      filename, linenum);
! 	      exit(1);
! 	    }
! 	  options->ports[options->num_ports] = -1;
! 	  intptr = &options->ports[options->num_ports++];
  	parse_int:
  	  cp = strtok(NULL, WHITESPACE);
  	  if (!cp)
***************
*** 452,462 ****
  		      filename, linenum);
  	      exit(1);
  	    }
! #ifdef BROKEN_INET_ADDR
! 	  options->listen_addr.s_addr = inet_network(cp);
! #else /* BROKEN_INET_ADDR */
! 	  options->listen_addr.s_addr = inet_addr(cp);
! #endif /* BROKEN_INET_ADDR */
  	  break;
  
  	case sHostKeyFile:
--- 486,510 ----
  		      filename, linenum);
  	      exit(1);
  	    }
! 	  if (options->num_ports == 0)
! 	    options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
! 	  for (i = 0; i < options->num_ports; i++)
! 	    {
! 	      memset(&hints, 0, sizeof(hints));
! 	      hints.ai_family = IPv4or6;
! 	      hints.ai_socktype = SOCK_STREAM;
! 	      sprintf(strport, "%d", options->ports[i]);
! 	      if ((gaierr = getaddrinfo(cp, strport, &hints, &aitop)) != 0)
! 		{
! 		  fprintf(stderr, "%s line %d: bad addr or host. (%s)\n",
! 			  filename, linenum, gai_strerror(gaierr));
! 		  exit(1);
! 		}
! 	      for (ai = aitop; ai->ai_next; ai = ai->ai_next);
! 	      ai->ai_next = options->listen_addrs;
! 	      options->listen_addrs = aitop;
! 	    }
! 	  strtok(cp, WHITESPACE);	/* getaddrinfo() may use strtok() */
  	  break;
  
  	case sHostKeyFile:
***************
*** 531,536 ****
--- 579,590 ----
  	  if (*intptr == -1)
  	    *intptr = value;
  	  break;
+ 
+ #ifdef ENABLE_LOG_AUTH
+ 	case sLogAuth:
+ 	  intptr = &options->log_auth;
+ 	  goto parse_flag;
+ #endif /* ENABLE_LOG_AUTH */
  
  	case sIgnoreRhosts:
  	  intptr = &options->ignore_rhosts;
