projects
/
runtime.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed KILL command related crash in silcd
[runtime.git]
/
apps
/
silcd
/
server_util.c
diff --git
a/apps/silcd/server_util.c
b/apps/silcd/server_util.c
index 345419a25a9568bf6b77a87f4afdbc1e017ce963..d9fc0ffc952ad07ca7afa6dff5603f101390b555 100644
(file)
--- a/
apps/silcd/server_util.c
+++ b/
apps/silcd/server_util.c
@@
-1195,6
+1195,7
@@
SilcBool silc_server_connection_allowed(SilcServer server,
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_VERSION,
"You support too old protocol version");
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_VERSION,
"You support too old protocol version");
+ silc_server_free_sock_user_data(server, sock, NULL);
return FALSE;
}
return FALSE;
}
@@
-1206,6
+1207,7
@@
SilcBool silc_server_connection_allowed(SilcServer server,
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_VERSION,
"You support too old software version");
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_VERSION,
"You support too old software version");
+ silc_server_free_sock_user_data(server, sock, NULL);
return FALSE;
}
return FALSE;
}
@@
-1217,6
+1219,7
@@
SilcBool silc_server_connection_allowed(SilcServer server,
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_VERSION,
"Your software is not supported");
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_VERSION,
"Your software is not supported");
+ silc_server_free_sock_user_data(server, sock, NULL);
return FALSE;
}
}
return FALSE;
}
}
@@
-1236,6
+1239,7
@@
SilcBool silc_server_connection_allowed(SilcServer server,
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_RESOURCE_LIMIT,
"Server is full, try again later");
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_RESOURCE_LIMIT,
"Server is full, try again later");
+ silc_server_free_sock_user_data(server, sock, NULL);
return FALSE;
}
return FALSE;
}
@@
-1247,6
+1251,7
@@
SilcBool silc_server_connection_allowed(SilcServer server,
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_RESOURCE_LIMIT,
"Too many connections from your host");
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_RESOURCE_LIMIT,
"Too many connections from your host");
+ silc_server_free_sock_user_data(server, sock, NULL);
return FALSE;
}
return FALSE;
}
@@
-1538,7
+1543,7
@@
void silc_server_kill_client(SilcServer server,
if (remote_client->connection) {
/* Remove locally conneted client */
SilcPacketStream sock = remote_client->connection;
if (remote_client->connection) {
/* Remove locally conneted client */
SilcPacketStream sock = remote_client->connection;
- silc_server_free_
client_data(server, sock, remote_client, FALSE
, NULL);
+ silc_server_free_
sock_user_data(server, sock
, NULL);
silc_server_close_connection(server, sock);
} else {
/* Update statistics */
silc_server_close_connection(server, sock);
} else {
/* Update statistics */
@@
-1753,10
+1758,11
@@
SilcBool silc_server_inviteban_match(SilcServer server, SilcHashTable list,
SilcUInt8 type, void *check)
{
unsigned char *tmp = NULL;
SilcUInt8 type, void *check)
{
unsigned char *tmp = NULL;
- SilcUInt32 len = 0
, t
;
+ SilcUInt32 len = 0;
SilcHashTableList htl;
SilcBuffer entry, idp = NULL, pkp = NULL;
SilcBool ret = FALSE;
SilcHashTableList htl;
SilcBuffer entry, idp = NULL, pkp = NULL;
SilcBool ret = FALSE;
+ void *t;
SILC_LOG_DEBUG(("Matching invite/ban"));
SILC_LOG_DEBUG(("Matching invite/ban"));
@@
-1786,13
+1792,14
@@
SilcBool silc_server_inviteban_match(SilcServer server, SilcHashTable list,
/* Compare the list */
silc_hash_table_list(list, &htl);
while (silc_hash_table_get(&htl, (void *)&t, (void *)&entry)) {
/* Compare the list */
silc_hash_table_list(list, &htl);
while (silc_hash_table_get(&htl, (void *)&t, (void *)&entry)) {
- if (type ==
t
) {
+ if (type ==
SILC_PTR_TO_32(t)
) {
if (type == 1) {
if (silc_string_match(entry->data, tmp)) {
ret = TRUE;
break;
}
if (type == 1) {
if (silc_string_match(entry->data, tmp)) {
ret = TRUE;
break;
}
- } else if (!memcmp(entry->data, tmp, len)) {
+ } else if (silc_buffer_len(entry) == len &&
+ !memcmp(entry->data, tmp, len)) {
ret = TRUE;
break;
}
ret = TRUE;
break;
}
@@
-1816,6
+1823,7
@@
SilcBool silc_server_inviteban_process(SilcServer server,
{
unsigned char *tmp;
SilcUInt32 type, len;
{
unsigned char *tmp;
SilcUInt32 type, len;
+ void *ptype;
SilcBuffer tmp2;
SilcHashTableList htl;
SilcBuffer tmp2;
SilcHashTableList htl;
@@
-1842,8
+1850,9
@@
SilcBool silc_server_inviteban_process(SilcServer server,
/* Check if the string is added already */
silc_hash_table_list(list, &htl);
/* Check if the string is added already */
silc_hash_table_list(list, &htl);
- while (silc_hash_table_get(&htl, (void *)&type, (void *)&tmp2)) {
- if (type == 1 && silc_string_match(tmp2->data, tmp)) {
+ while (silc_hash_table_get(&htl, (void *)&ptype, (void *)&tmp2)) {
+ if (SILC_PTR_TO_32(ptype) == 1 &&
+ silc_string_match(tmp2->data, tmp)) {
tmp = NULL;
break;
}
tmp = NULL;
break;
}
@@
-1873,8
+1882,8
@@
SilcBool silc_server_inviteban_process(SilcServer server,
/* Check if the public key is in the list already */
silc_hash_table_list(list, &htl);
/* Check if the public key is in the list already */
silc_hash_table_list(list, &htl);
- while (silc_hash_table_get(&htl, (void *)&type, (void *)&tmp2)) {
- if (
type
== 2 && !memcmp(tmp2->data, tmp, len)) {
+ while (silc_hash_table_get(&htl, (void *)&
p
type, (void *)&tmp2)) {
+ if (
SILC_PTR_TO_32(ptype)
== 2 && !memcmp(tmp2->data, tmp, len)) {
tmp = NULL;
break;
}
tmp = NULL;
break;
}
@@
-1893,8
+1902,8
@@
SilcBool silc_server_inviteban_process(SilcServer server,
/* Check if the ID is in the list already */
silc_hash_table_list(list, &htl);
/* Check if the ID is in the list already */
silc_hash_table_list(list, &htl);
- while (silc_hash_table_get(&htl, (void *)&type, (void *)&tmp2)) {
- if (
type
== 3 && !memcmp(tmp2->data, tmp, len)) {
+ while (silc_hash_table_get(&htl, (void *)&
p
type, (void *)&tmp2)) {
+ if (
SILC_PTR_TO_32(ptype)
== 3 && !memcmp(tmp2->data, tmp, len)) {
tmp = NULL;
break;
}
tmp = NULL;
break;
}
@@
-1932,8
+1941,9
@@
SilcBool silc_server_inviteban_process(SilcServer server,
/* Delete from the list */
silc_hash_table_list(list, &htl);
/* Delete from the list */
silc_hash_table_list(list, &htl);
- while (silc_hash_table_get(&htl, (void *)&type, (void *)&tmp2)) {
- if (type == 1 && silc_string_match(tmp2->data, tmp)) {
+ while (silc_hash_table_get(&htl, (void *)&ptype, (void *)&tmp2)) {
+ if (SILC_PTR_TO_32(ptype) == 1 &&
+ silc_string_match(tmp2->data, tmp)) {
silc_hash_table_del_by_context(list, (void *)1, tmp2);
break;
}
silc_hash_table_del_by_context(list, (void *)1, tmp2);
break;
}
@@
-1953,8
+1963,8
@@
SilcBool silc_server_inviteban_process(SilcServer server,
/* Delete from the invite list */
silc_hash_table_list(list, &htl);
/* Delete from the invite list */
silc_hash_table_list(list, &htl);
- while (silc_hash_table_get(&htl, (void *)&type, (void *)&tmp2)) {
- if (
type
== 2 && !memcmp(tmp2->data, tmp, len)) {
+ while (silc_hash_table_get(&htl, (void *)&
p
type, (void *)&tmp2)) {
+ if (
SILC_PTR_TO_32(ptype)
== 2 && !memcmp(tmp2->data, tmp, len)) {
silc_hash_table_del_by_context(list, (void *)2, tmp2);
break;
}
silc_hash_table_del_by_context(list, (void *)2, tmp2);
break;
}
@@
-1966,8
+1976,8
@@
SilcBool silc_server_inviteban_process(SilcServer server,
/* Delete from the invite list */
silc_hash_table_list(list, &htl);
/* Delete from the invite list */
silc_hash_table_list(list, &htl);
- while (silc_hash_table_get(&htl, (void *)&type, (void *)&tmp2)) {
- if (
type
== 3 && !memcmp(tmp2->data, tmp, len)) {
+ while (silc_hash_table_get(&htl, (void *)&
p
type, (void *)&tmp2)) {
+ if (
SILC_PTR_TO_32(ptype)
== 3 && !memcmp(tmp2->data, tmp, len)) {
silc_hash_table_del_by_context(list, (void *)3, tmp2);
break;
}
silc_hash_table_del_by_context(list, (void *)3, tmp2);
break;
}