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;


Reply via email to