client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED;
id_cache->expire = SILC_ID_CACHE_EXPIRE_DEF;
} else {
- silc_idlist_del_client(server->local_list, client);
-
/* Remove this client from watcher list if it is */
silc_server_del_from_watcher_list(server, client);
+ silc_idlist_del_client(server->local_list, client);
}
if (!silc_idcache_list_next(list, &id_cache))
if (is_op && is_fo)
return TRUE;
+ /* Founder implies operator */
+ if (is_fo)
+ is_op = TRUE;
+
/* We know that client is channel operator, check that they are not
changing anything that requires channel founder rights. Rest of the
modes are available automatically for channel operator. */
if (mode & SILC_CHANNEL_MODE_PRIVKEY) {
- if (!(channel->mode & SILC_CHANNEL_MODE_PRIVKEY))
- if (is_op && !is_fo)
- return FALSE;
+ if (is_op && !is_fo)
+ return FALSE;
} else {
if (channel->mode & SILC_CHANNEL_MODE_PRIVKEY) {
if (is_op && !is_fo)
}
if (mode & SILC_CHANNEL_MODE_PASSPHRASE) {
- if (!(channel->mode & SILC_CHANNEL_MODE_PASSPHRASE))
- if (is_op && !is_fo)
- return FALSE;
+ if (is_op && !is_fo)
+ return FALSE;
} else {
if (channel->mode & SILC_CHANNEL_MODE_PASSPHRASE) {
if (is_op && !is_fo)
}
if (mode & SILC_CHANNEL_MODE_CIPHER) {
- if (!(channel->mode & SILC_CHANNEL_MODE_CIPHER))
- if (is_op && !is_fo)
- return FALSE;
+ if (is_op && !is_fo)
+ return FALSE;
} else {
if (channel->mode & SILC_CHANNEL_MODE_CIPHER) {
if (is_op && !is_fo)
}
if (mode & SILC_CHANNEL_MODE_FOUNDER_AUTH) {
- if (!(channel->mode & SILC_CHANNEL_MODE_FOUNDER_AUTH))
- if (is_op && !is_fo)
- return FALSE;
+ if (is_op && !is_fo)
+ return FALSE;
} else {
if (channel->mode & SILC_CHANNEL_MODE_FOUNDER_AUTH) {
if (is_op && !is_fo)
}
if (mode & SILC_CHANNEL_MODE_SILENCE_USERS) {
- if (!(channel->mode & SILC_CHANNEL_MODE_SILENCE_USERS))
- if (is_op && !is_fo)
- return FALSE;
+ if (is_op && !is_fo)
+ return FALSE;
} else {
if (channel->mode & SILC_CHANNEL_MODE_SILENCE_USERS) {
if (is_op && !is_fo)
}
if (mode & SILC_CHANNEL_MODE_SILENCE_OPERS) {
- if (!(channel->mode & SILC_CHANNEL_MODE_SILENCE_OPERS))
- if (is_op && !is_fo)
- return FALSE;
+ if (is_op && !is_fo)
+ return FALSE;
} else {
if (channel->mode & SILC_CHANNEL_MODE_SILENCE_OPERS) {
if (is_op && !is_fo)
if (!silc_idlist_del_client(server->global_list, remote_client)) {
/* Remove this client from watcher list if it is */
silc_server_del_from_watcher_list(server, remote_client);
-
silc_idlist_del_client(server->local_list, remote_client);
}
}