conn = sconn->conn;
if (conn) {
- /* Match found. Use the configured authentication method */
+ /* Match found. Use the configured authentication method. Take only
+ the passphrase, since for public key auth we automatically use
+ our local key pair. */
if (conn->passphrase) {
- if (conn->publickey && !server->config->prefer_passphrase_auth) {
- proto_ctx->auth_data = conn->publickey;
- proto_ctx->auth_data_len = 0;
+ if (conn->publickeys && !server->config->prefer_passphrase_auth) {
proto_ctx->auth_meth = SILC_AUTH_PUBLIC_KEY;
} else {
proto_ctx->auth_data = strdup(conn->passphrase);
proto_ctx->auth_data_len = strlen(conn->passphrase);
proto_ctx->auth_meth = SILC_AUTH_PASSWORD;
}
- } else if (conn->publickey) {
- proto_ctx->auth_data = conn->publickey;
- proto_ctx->auth_data_len = 0;
+ } else if (conn->publickeys) {
proto_ctx->auth_meth = SILC_AUTH_PUBLIC_KEY;
} else {
proto_ctx->auth_meth = SILC_AUTH_NONE;
SILC_ROUTER, ctx->dest_id, NULL, sock);
if (!id_entry) {
silc_free(ctx->dest_id);
+ SILC_LOG_ERROR(("Cannot add new server entry to cache"));
silc_server_disconnect_remote(server, sock, "Server closed connection: "
"Authentication failed");
goto out;
later when outgoing data is available. */
SILC_REGISTER_CONNECTION_FOR_IO(sock->sock);
- SILC_LOG_INFO(("Incoming connection from %s (%s)", sock->hostname,
+ SILC_LOG_INFO(("Incoming connection %s (%s)", sock->hostname,
sock->ip));
port = server->sockets[server->sock]->port; /* Listenning port */
entry->data.last_receive = time(NULL);
- num_sockets = silc_server_num_sockets_by_ip(server, sock->ip);
+ num_sockets = silc_server_num_sockets_by_ip(server, sock->ip,
+ ctx->conn_type);
switch (ctx->conn_type) {
case SILC_SOCKET_TYPE_CLIENT:
if (conn->param) {
if (conn->param->connections_max &&
server->stat.my_clients >= conn->param->connections_max) {
+ SILC_LOG_INFO(("Server is full, closing %s (%s) connection",
+ sock->hostname, sock->ip));
silc_server_disconnect_remote(server, sock,
"Server closed connection: "
"Server is full, try again later");
max_per_host = conn->param->connections_max_per_host;
}
- if (num_sockets > max_per_host) {
+ if (num_sockets >= max_per_host) {
+ SILC_LOG_INFO(("Too many connections from %s (%s), closing connection",
+ sock->hostname, sock->ip));
silc_server_disconnect_remote(server, sock,
"Server closed connection: "
"Too many connections from your host");
}
SILC_LOG_DEBUG(("Remote host is client"));
- SILC_LOG_INFO(("Connection from %s (%s) is client", sock->hostname,
+ SILC_LOG_INFO(("Connection %s (%s) is client", sock->hostname,
sock->ip));
/* Add the client to the client ID cache. The nickname and Client ID
/* Check for maximum connections limit */
if (sconn->param->connections_max &&
server->stat.my_servers >= sconn->param->connections_max) {
+ SILC_LOG_INFO(("Server is full, closing %s (%s) connection",
+ sock->hostname, sock->ip));
silc_server_disconnect_remote(server, sock,
"Server closed connection: "
"Server is full, try again later");
backup_router = sconn->backup_router;
}
- if (num_sockets > max_per_host) {
+ if (num_sockets >= max_per_host) {
+ SILC_LOG_INFO(("Too many connections from %s (%s), closing connection",
+ sock->hostname, sock->ip));
silc_server_disconnect_remote(server, sock,
"Server closed connection: "
"Too many connections from your host");
ctx->conn_type == SILC_SOCKET_TYPE_SERVER ?
"server" : (backup_router ?
"backup router" : "router")));
- SILC_LOG_INFO(("Connection from %s (%s) is %s", sock->hostname,
+ SILC_LOG_INFO(("Connection s (%s) is %s", sock->hostname,
sock->ip, ctx->conn_type == SILC_SOCKET_TYPE_SERVER ?
"server" : (backup_router ?
"backup router" : "router")));
/* If connection is disconnecting or disconnected we will ignore
what we read. */
if (SILC_IS_DISCONNECTING(sock) || SILC_IS_DISCONNECTED(sock)) {
- SILC_LOG_DEBUG(("Ignoring read data from disonnected connection"));
+ SILC_LOG_DEBUG(("Ignoring read data from disconnected connection"));
return;
}
if (!sock)
return;
+ SILC_LOG_ERROR(("No response from %s (%s), Connection timeout",
+ sock->hostname, sock->ip));
+
/* If we have protocol active we must assure that we call the protocol's
final callback so that all the memory is freed. */
if (sock->protocol) {