Author: dylan
Date: 2005-05-25 03:07:09 -0400 (Wed, 25 May 2005)
New Revision: 733
Modified:
trunk/
trunk/main/server/lib/Haver/Server/Talker.pm
Log:
[EMAIL PROTECTED]: dylan | 2005-05-25 03:06:55 -0400
added error checking.
Fixed a bug I hope nobody notices...
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:1025
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
+ 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:1035
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
Modified: trunk/main/server/lib/Haver/Server/Talker.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Talker.pm 2005-05-25 03:04:06 UTC
(rev 732)
+++ trunk/main/server/lib/Haver/Server/Talker.pm 2005-05-25 07:07:09 UTC
(rev 733)
@@ -18,6 +18,23 @@
our $VERSION = '0.08';
our $Lobby = new Haver::Server::Entity::Lobby (name => '&lobby');
+my $NamePattern = qr/&?[a-z][a-z0-9_.'@-]+/i;
+
+
+sub valid_name {
+ my $name = shift;
+ return $name =~ $NamePattern;
+}
+
+sub reserved_name {
+ for (shift) {
+ return (/&/ or /\@/);
+ }
+}
+
+
+
+
states qw(
_start _stop _default
input error flush
@@ -160,9 +177,14 @@
sub msg_IDENT {
my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
my ($name) = @$args;
+ my $ns = 'user';
- if ($Lobby->contains('user', $name)) {
- $kernel->yield('fail', 'exists.user', $name);
+ if ($Lobby->contains($ns, $name)) {
+ $kernel->yield('fail', "exists.$ns", $name);
+ } elsif (not valid_name($name)) {
+ $kernel->yield('fail', "invalid.$ns", $name);
+ } elsif ($ns eq 'user' and reserved_name($name)) {
+ $kernel->yield('fail', "reserved.$ns", $name);
} else {
my $user = new Haver::Server::Entity::User (
name => $name,
@@ -170,7 +192,6 @@
);
$Lobby->add($user);
$heap->{user} = $user;
- $kernel->state('msg_ODENT');
$heap->{client}->put(['HELLO', $name]);
$kernel->state('msg_IDENT');
foreach (qw( TO BYE IN )) {
@@ -185,6 +206,11 @@
my $user = $heap->{user};
my $targ = $Lobby->fetch('user', $name);
+
+ unless (valid_name($name)) {
+ $kernel->yield('fail', "invalid.user", $name);
+ return;
+ }
unless ($targ) {
$kernel->yield('fail', 'unknown.user');
return;