Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2007 Pekka Riikonen
+ Copyright (C) 1997 - 2009 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
}
client->data.status |= SILC_IDLIST_STATUS_REGISTERED;
+
+ if (idata->conn_type == SILC_CONN_SERVER)
+ server->stat.cell_clients++;
+ SILC_LOG_DEBUG(("stat.clients %d->%d", server->stat.clients,
+ server->stat.clients + 1));
+ server->stat.clients++;
}
}
/* Remove this client from watcher list if it is */
silc_server_del_from_watcher_list(server, client);
+ /* It's possible router doesn't accept our local client in the network
+ and sends SIGNOFF to our local client */
+ if (SILC_IS_LOCAL(client)) {
+ SILC_LOG_DEBUG(("SIGNOFF from router to local client, disconnect"));
+ if (client->data.sconn) {
+ silc_server_connection_free(client->data.sconn);
+ client->data.sconn = NULL;
+ }
+ silc_packet_set_context(client->connection, NULL);
+ silc_server_disconnect_remote(server, client->connection,
+ SILC_STATUS_ERR_RESOURCE_LIMIT,
+ "Router prevented registration");
+ }
+
client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED;
client->mode = 0;
client->router = NULL;
SilcStatus error;
tmp = silc_argument_get_arg_type(args, 1, &tmp_len);
- if (!tmp && tmp_len != 1)
+ if (!tmp || tmp_len != 1)
goto out;
error = (SilcStatus)tmp[0];
char *newusername;
newusername = silc_calloc(strlen(username) + strlen(hostname) + 2,
sizeof(*newusername));
+ if (!newusername) {
+ silc_free(username);
+ silc_free(realname);
+ silc_free(nickname);
+ silc_server_disconnect_remote(server, sock,
+ SILC_STATUS_ERR_OPERATION_ALLOWED, NULL);
+ silc_server_free_sock_user_data(server, sock, NULL);
+ silc_packet_free(packet);
+ return NULL;
+ }
strncat(newusername, username, strlen(username));
strncat(newusername, "@", 1);
strncat(newusername, hostname, strlen(hostname));
if (!silc_id_create_client_id(server, server->id, server->rng,
server->md5hash, nicknamec,
strlen(nicknamec), &client_id)) {
+ silc_free(username);
+ silc_free(realname);
+ silc_free(nickname);
silc_server_disconnect_remote(server, sock,
SILC_STATUS_ERR_BAD_NICKNAME, NULL);
silc_server_free_sock_user_data(server, sock, NULL);
SilcChannelID channel_id;
char *channel_name, *channel_namec = NULL;
SilcUInt32 name_len;
- unsigned char *id, cid[32];
+ unsigned char cid[32];
SilcUInt32 id_len, cipher_len;
SilcServerEntry server_entry;
SilcChannelEntry channel;
if (!channel_namec)
return;
- id = silc_channel_get_id(payload, &id_len);
-
server_entry = (SilcServerEntry)idata;
if (idata->conn_type == SILC_CONN_ROUTER) {