projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Code auditing weekend results and fixes committing.
[silc.git]
/
apps
/
silcd
/
server.c
diff --git
a/apps/silcd/server.c
b/apps/silcd/server.c
index e102e883a1e32726ffea5110aa6294df5f3a0444..26b214fd3aef7adf1900caa2cd8f0204d25d7be6 100644
(file)
--- a/
apps/silcd/server.c
+++ b/
apps/silcd/server.c
@@
-4,7
+4,7
@@
Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
- Copyright (C) 1997 - 200
0
Pekka Riikonen
+ Copyright (C) 1997 - 200
1
Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-1098,6
+1098,9
@@
SILC_TASK_CALLBACK(silc_server_packet_process)
it later. */
if (ret == -2)
return;
it later. */
if (ret == -2)
return;
+
+ if (ret == -1)
+ return;
/* The packet has been sent and now it is time to set the connection
back to only for input. When there is again some outgoing data
/* The packet has been sent and now it is time to set the connection
back to only for input. When there is again some outgoing data
@@
-1209,7
+1212,10
@@
SILC_TASK_CALLBACK(silc_server_packet_parse_real)
SILC_ID_SERVER_COMPARE(packet->dst_id, server->id_string)) {
/* Route the packet to fastest route for the destination ID */
SILC_ID_SERVER_COMPARE(packet->dst_id, server->id_string)) {
/* Route the packet to fastest route for the destination ID */
- void *id = silc_id_str2id(packet->dst_id, packet->dst_id_type);
+ void *id = silc_id_str2id(packet->dst_id, packet->dst_id_len,
+ packet->dst_id_type);
+ if (!id)
+ goto out;
silc_server_packet_route(server,
silc_server_route_get(server, id,
packet->dst_id_type),
silc_server_packet_route(server,
silc_server_route_get(server, id,
packet->dst_id_type),
@@
-1427,7
+1433,10
@@
void silc_server_packet_parse_type(SilcServer server,
proto_ctx->packet = silc_packet_context_dup(packet);
proto_ctx->dest_id_type = packet->src_id_type;
proto_ctx->packet = silc_packet_context_dup(packet);
proto_ctx->dest_id_type = packet->src_id_type;
- proto_ctx->dest_id = silc_id_str2id(packet->src_id, packet->src_id_type);
+ proto_ctx->dest_id = silc_id_str2id(packet->src_id, packet->src_id_len,
+ packet->src_id_type);
+ if (!proto_ctx->dest_id)
+ break;
/* Let the protocol handle the packet */
sock->protocol->execute(server->timeout_queue, 0,
/* Let the protocol handle the packet */
sock->protocol->execute(server->timeout_queue, 0,
@@
-1452,7
+1461,10
@@
void silc_server_packet_parse_type(SilcServer server,
proto_ctx->packet = silc_packet_context_dup(packet);
proto_ctx->dest_id_type = packet->src_id_type;
proto_ctx->packet = silc_packet_context_dup(packet);
proto_ctx->dest_id_type = packet->src_id_type;
- proto_ctx->dest_id = silc_id_str2id(packet->src_id, packet->src_id_type);
+ proto_ctx->dest_id = silc_id_str2id(packet->src_id, packet->src_id_len,
+ packet->src_id_type);
+ if (!proto_ctx->dest_id)
+ break;
/* Let the protocol handle the packet */
sock->protocol->execute(server->timeout_queue, 0,
/* Let the protocol handle the packet */
sock->protocol->execute(server->timeout_queue, 0,
@@
-1689,6
+1701,8
@@
void silc_server_free_sock_user_data(SilcServer server,
silc_idlist_del_client(server->local_list, user_data);
server->stat.my_clients--;
server->stat.clients--;
silc_idlist_del_client(server->local_list, user_data);
server->stat.my_clients--;
server->stat.clients--;
+ if (server->server_type == SILC_ROUTER)
+ server->stat.cell_clients--;
break;
}
case SILC_SOCKET_TYPE_SERVER:
break;
}
case SILC_SOCKET_TYPE_SERVER:
@@
-1708,6
+1722,8
@@
void silc_server_free_sock_user_data(SilcServer server,
silc_idlist_del_server(server->local_list, user_data);
server->stat.my_servers--;
server->stat.servers--;
silc_idlist_del_server(server->local_list, user_data);
server->stat.my_servers--;
server->stat.servers--;
+ if (server->server_type == SILC_ROUTER)
+ server->stat.cell_servers--;
break;
}
default:
break;
}
default:
@@
-1925,16
+1941,16
@@
int silc_server_client_on_channel(SilcClientEntry client,
SILC_TASK_CALLBACK(silc_server_timeout_remote)
{
SILC_TASK_CALLBACK(silc_server_timeout_remote)
{
- SilcServer
Connection sconn = (SilcServerConnection
)context;
- SilcSocketConnection sock = s
conn->s
erver->sockets[fd];
+ SilcServer
server = (SilcServer
)context;
+ SilcSocketConnection sock = server->sockets[fd];
if (!sock)
return;
if (sock->user_data)
if (!sock)
return;
if (sock->user_data)
- silc_server_free_sock_user_data(s
conn->s
erver, sock);
+ silc_server_free_sock_user_data(server, sock);
- silc_server_disconnect_remote(s
conn->s
erver, sock,
+ silc_server_disconnect_remote(server, sock,
"Server closed connection: "
"Connection timeout");
}
"Server closed connection: "
"Connection timeout");
}
@@
-2057,7
+2073,7
@@
SilcChannelEntry silc_server_save_channel_key(SilcServer server,
/* Get channel ID */
tmp = silc_channel_key_get_id(payload, &tmp_len);
/* Get channel ID */
tmp = silc_channel_key_get_id(payload, &tmp_len);
- id = silc_id_str2id(tmp, SILC_ID_CHANNEL);
+ id = silc_id_str2id(tmp,
tmp_len,
SILC_ID_CHANNEL);
if (!id) {
channel = NULL;
goto out;
if (!id) {
channel = NULL;
goto out;