tupdates
[silc.git] / apps / silcd / packet_receive.c
index 442dd310a6e4bf9f6efc56b999bee58259aac059..98800ee11f801a6dd84b06f57c64f297e1bac3a9 100644 (file)
@@ -630,6 +630,7 @@ void silc_server_notify(SilcServer server,
          if (chl2) {
            chl2->mode = mode;
            silc_free(channel_id);
+           silc_hash_table_list_reset(&htl);
            goto out;
          }
        }
@@ -650,6 +651,7 @@ void silc_server_notify(SilcServer server,
          chl2 = chl;
        }
       }
+      silc_hash_table_list_reset(&htl);
       
       /* Send the same notify to the channel */
       if (!notify_sent)
@@ -2497,10 +2499,10 @@ void silc_server_connection_auth_request(SilcServer server,
                                         SilcSocketConnection sock,
                                         SilcPacketContext *packet)
 {
-  SilcServerConfigSectionClientConnection *client = NULL;
+  SilcServerConfigClient *client = NULL;
   uint16 conn_type;
-  int ret, port;
-  SilcAuthMethod auth_meth;
+  int ret;
+  SilcAuthMethod auth_meth = SILC_AUTH_NONE;
 
   SILC_LOG_DEBUG(("Start"));
 
@@ -2520,21 +2522,21 @@ void silc_server_connection_auth_request(SilcServer server,
 
   /* Get the authentication method for the client */
   auth_meth = SILC_AUTH_NONE;
-  port = server->sockets[server->sock]->port; /* Listenning port */
-  client = silc_server_config_find_client_conn(server->config,
-                                              sock->ip,
-                                              port);
+  client = silc_server_config_find_client(server, sock->ip);
   if (!client)
-    client = silc_server_config_find_client_conn(server->config,
-                                                sock->hostname,
-                                                port);
-  if (client)
-    auth_meth = client->auth_meth;
-         
+    client = silc_server_config_find_client(server, sock->hostname);
+  if (client) {
+    if (client->passphrase) {
+      if (client->publickey && !server->config->prefer_passphrase_auth)
+       auth_meth = SILC_AUTH_PUBLIC_KEY;
+      else
+       auth_meth = SILC_AUTH_PASSWORD;
+    } else if (client->publickey)
+      auth_meth = SILC_AUTH_PUBLIC_KEY;
+  }
+
   /* Send it back to the client */
-  silc_server_send_connection_auth_request(server, sock,
-                                          conn_type,
-                                          auth_meth);
+  silc_server_send_connection_auth_request(server, sock, conn_type, auth_meth);
 }
 
 /* Received REKEY packet. The sender of the packet wants to regenerate