my @sessions = config_get_keys1('sessions');
my %seen_nicknames = ();
my %seen_sessions = ();
+ my %channels_for_session = ();
foreach my $session (@sessions) {
if ($session !~ /^\d+$/) {
die("Session name ($session) must be numeric!\n");
if (defined($seen_nicknames{$nickname}) and $seen_nicknames{$nickname} == 1) {
die("Please use different nicknames for each session!\n");
}
- if ($nickname !~ /^[a-zA-Z0-9_\-]+/) {
+ if ($nickname !~ /^[a-zA-Z0-9_\-]+$/) {
die("Please use a different nickname: $nickname\n");
}
$seen_nicknames{$nickname} = 1;
$seen_sessions{$session} = 1;
+ $channels_for_session{$session} = 0;
}
-# FIXME: check nick for each session
-# FIXME: check if sessions per channel really exist in session definition
-# FIXME: check maximum number of channels
+ my @channels = config_get_keys1('channels');
+ foreach my $channel (@channels) {
+ my $channel_session = config_get_key3('channels', $channel, 'session');
+ # cannot use session_for_channel() here, because sessions are not yet initialized
+ if (!defined($channel_session) or $channel_session !~ /^\d+$/) {
+ die("Session ($channel_session) for channel '$channel' is invalid\n");
+ }
+ if (!defined($seen_sessions{$channel_session}) or $seen_sessions{$channel_session} != 1) {
+ die("Unknown session ($channel_session) for channel '$channel'\n");
+ }
+ $channels_for_session{$channel_session}++;
+ if ($channels_for_session{$channel_session} > 20) {
+ die("More than 20 channels for session '$channel_session' configured, please change\n");
+ }
+ }
print_msg("Configuration validated", DEBUG);
}