]> jfr.im git - irc/SurrealServices/srsv.git/commitdiff
Fwiw, it';s a lot more stable now. Most stuff seems to work.
authorerry <redacted>
Sat, 9 Jul 2011 12:20:30 +0000 (12:20 +0000)
committererry <redacted>
Sat, 9 Jul 2011 12:20:30 +0000 (12:20 +0000)
I still need to parse CAPAB though and test it in unreal... God knows what it'll do for unreal.
Oh and put the services uuids somewhere else
/ServServ raw is EXTREMELY dangerous: one wrong command and inspircd will kick srsv off, or
make insp segfault :3
Even if you type the command in the wrong case! Oh, and knowing the agent UUIDs is required
if you want to play with /servserv raw.

git-svn-id: http://svn.tabris.net/repos/srsv@3537 70d4eda1-72e9-0310-a436-91e5bd24443c

15 files changed:
branches/0.5.0/SrSv/Agent.pm
branches/0.5.0/SrSv/Help.pm
branches/0.5.0/SrSv/Insp/Parse.pm
branches/0.5.0/SrSv/Insp/Send.pm
branches/0.5.0/SrSv/Log.pm
branches/0.5.0/SrSv/User.pm
branches/0.5.0/SrSv/User/Notice.pm
branches/0.5.0/modules/core.pm
branches/0.5.0/modules/services.pm
branches/0.5.0/modules/serviceslibs/adminserv.pm
branches/0.5.0/modules/serviceslibs/botserv.pm
branches/0.5.0/modules/serviceslibs/chanserv.pm
branches/0.5.0/modules/serviceslibs/nickserv.pm
branches/0.5.0/modules/serviceslibs/operserv.pm
branches/0.5.0/sql/services.sql

index c548b9b2d85f459bb997b604a09058b1bd47a2a4..8ff32dec4ab6c740c17bea528a119ac6dd81d841 100644 (file)
@@ -46,7 +46,7 @@ use SrSv::RunLevel 'main_shutdown';
 use SrSv::IRCd::Send;
 # FIXME
 BEGIN { *SJB64 = \&ircd::SJB64 }
-
+use Data::Dumper;
 our %agents;
 our @defer_join;
 
@@ -55,6 +55,8 @@ addhandler('KILL', undef(), undef(), 'kill_callback', 1);
 
 sub is_agent($) {
        my ($nick) = @_;
+       print "is agent $nick";
+       print "EXISTS: " . Dumper($agents{lc $nick});
        return (defined($agents{lc $nick}));
 }
 
index 0ebf68f0da6a2279903c9796bd81b78cc3510b96..6c4f85738fefd22282990206997c8fcae731c605 100644 (file)
@@ -61,7 +61,7 @@ sub sendhelp($@) {
                $s =~ s/[^a-z0-9\-]/_/g;
        }
        
-        my $file = HELP_PATH . join('/', @subject) . '.txt';
+    my $file = HELP_PATH . join('/', @subject) . '.txt';
        my @array = readhelp($file);
         unless($array[0]) {
            notice($user, "No help for \002".join(' ', 
index 1d72162b0a8ec208e55b794c6beaabfdd8104dfd..5f8bce599c581cb5dd05f97a64acd5b94b0c9145 100644 (file)
@@ -271,8 +271,8 @@ sub SERVER($) {
        #ircd::debug($_[0]) if $debug;
 
        if($_[0] =~ /^(?:SERVER|\') (\S+) (\S+) :(U[0-9]+)-([A-Za-z0-9]+)-([0-9]+) (.*)$/) {
-       # SERVER test-tab.surrealchat.net 1 :U2307-FhinXeOoZEmM-200 SurrealChat
-       # cmd, servername, hopCount, U<protocol>-<buildflags>-<numeric> infoLine
+               # SERVER test-tab.surrealchat.net 1 :U2307-FhinXeOoZEmM-200 SurrealChat
+               # cmd, servername, hopCount, U<protocol>-<buildflags>-<numeric> infoLine
                $remoteserv = $1;
                create_server($1);
                $servernum[$5] = $1;
@@ -357,16 +357,23 @@ sub JOIN($) {
 
 sub FJOIN ($) {
        #>> 13 :97K FJOIN #erry 1307879417 +nt :o,97KAAAAAA ,97KAAAAAB
-       $_[0] =~ m"^(:\S+) FJOIN (\S+) (\d+) (\S+) (.*)$";
-       my ($server, $channel, $ts, $modes, $userstring) = ($1, $2, $3, $4, $5);
-       my @users = split (" ", $userstring);
-       my (@ids, @status);
-       foreach my $user (@users) {
-               my @params = split (",",$user);
-               push (@status, $params[0]);
-               push (@ids, $params[1]);
+       if ($_[0] =~ m"^(:\S+) FJOIN (\S+) (\d+) (\S+) (:?)(.*)$") {
+               my ($server, $channel, $ts, $modes, $userstring) = ($1, $2, $3, $4, $6);
+               my @users = split (" ", $userstring);
+               my (@ids, @status);
+               foreach my $user (@users) {
+                       my @params = split (",",$user);
+                       push (@status, $params[0]);
+                       push (@ids, $params[1]);
+               }
+               return ('SJOIN', undef, undef, WF_CHAN, parse_fjoin($server, $channel, $ts, $modes, \@ids, \@status));
+       }
+       #>> 15 :583 FJOIN #opers 1310128904 +Pis :
+       #CHANNELS CONFIGURED TO STAY OPEN WITH CHMODE +P (INSP)
+       elsif ($_[0] =~ m"^(:\S+) FJOIN (\S+) (\d+) (\S+) :$") {
+               print "WHOOOOOOF";
+               #FIXME - Update channel modes.
        }
-       return ('SJOIN', undef, undef, WF_CHAN, parse_fjoin($server, $channel, $ts, $modes, \@ids, \@status));
 }
 sub SJOIN($) {
        if ($_[0] =~ /^(?:\~|SJOIN) (\S+) (\S+) (.*)$/) {
@@ -401,6 +408,7 @@ sub PART($) {
        }
        elsif($_[0] =~ /^:(\S+) (?:D|PART) (\S+)$/) {
                $user = {ID => $1};
+               get_user_nick ($user);
                return ('PART', undef, 0, WF_CHAN, $user, $2, undef);
        }
 }
@@ -461,8 +469,6 @@ sub MESSAGE($) {
                unless (get_user_nick ($dstUser)) {
                        $dstUser = {NICK=>$dest};
                }
-               print Dumper ($srcUser);
-               print Dumper ($dstUser);
                $event = 'PRIVMSG'; @args = ($srcUser, $dstUser, $4);
        }
        elsif($_[0] =~ /^(@|:)(\S+) (?:B|NOTICE) (\S+) :(.*)$/) {
@@ -510,31 +516,44 @@ sub NICK($) {
 }
 
 sub QUIT($) {
-       $_[0] =~ /^:(\S+) (?:QUIT|\,) :(.*)$/;
-       my $user = {ID=>$1};
-       get_user_nick ($1);
-       return ('QUIT', 0, undef, WF_NICK, $user, $2);
-}
-
-sub KILL($) {
-#:tabris KILL ProxyBotW :tabris.netadmin.SCnet.ops!tabris (test.)
-#:ProxyBotW!bopm@ircop.SCnet.ops QUIT :Killed (tabris (test.))
-       $_[0] =~ /^(@|:)(\S+) (?:KILL|\.) (\S+) :(\S+) \((.*)\)$/;
-       my $name;
-       if ($1 eq '@') {
-               $name = $servernum[b64toi($2)];
-       }
-       else {
-               $name = $2;
+       if ($_[0] =~ /^:(\S+) QUIT :Killed \((\S+) \((.*)\)\)$/) {
+               #:583AAAAAH QUIT :Killed (erry (die))
+               my $victim = {ID=>$1};
+               get_user_nick ($victim);
+               my $murderer = {NICK=>$2};
+               get_user_id ($murderer);
+               my $reason = $3;
+               return ('KILL', 0, 1, WF_NICK, $murderer, $victim, $reason, undef);
+       }
+       elsif ($_[0] =~ /^:(\S+) QUIT :(.*)$/) {
+               my $user = {ID=>$1};
+               get_user_nick ($user);
+               return ('QUIT', 0, undef, WF_NICK, $user, $2);
        }
-       my $user = {ID => $name};
-       unless (get_user_nick ($user)) {
-               $user = {NICK => $name};
-               get_user_id ($user);
+}
+sub OPERQUIT ($) {
+       if ($_[0] =~ /^:(\S+) QUIT :(.*)$/) {
+               my $user = {ID=>$1};
+               get_user_nick ($user);
+               return ('QUIT', 0, undef, WF_NICK, $user, $2);
        }
-       return ('KILL', 0, 1, WF_NICK, $user, $3, $4, $5);
 }
 
+sub KILL($) {
+       #All insp sends is :583AAAAAH QUIT :Killed (erry (die))
+       #_VERY_ helpful.
+       #UNLESS you kill someone who's in the services server:
+       #:583AAAAAA KILL 123AAAAAA :Killed (erry (die))
+       #:123AAAAAA OPERQUIT :Killed (erry (die))
+       #And yes, for (some?) opers it's OPERQUIT not QUIT
+       #Joy, JOY, JOY!
+       $_[0] =~ /^:(\S+) KILL (\S+) :(.*)$/;
+       my $murderer = {ID=>$1};
+       get_user_nick ($murderer);
+       my $victim = {ID=>$2};
+       get_user_nick ($victim);
+       return ("KILL", 0, 1, WF_NICK, $murderer, $victim, $3, undef);
+}
 sub KICK($) {
 #:tabris KICK #diagnostics SurrealBot :i know you don't like this. but it's for science!
        $_[0] =~ /^(@|:)(\S+) (?:KICK|H) (\S+) (\S+) :(.*)$/;
@@ -622,7 +641,6 @@ sub OPERTYPE ($) {
        #even if we don't give them privs (either in inspircd or srsv)
        $_[0] =~ /^:(\S+) OPERTYPE (\S+)$/;
        my $user = { ID => $1 };
-       print Dumper ($user);
        get_user_nick ($user);
        return ("OPERUP", 0, 0, WF_ALL, $user);
 }
@@ -827,6 +845,7 @@ BEGIN {
                '2'             =>      \&STATS,
                UID => \&UID,
                OPERTYPE => \&OPERTYPE,
+               OPERQUIT => \&OPERQUIT, #Opers are so special, they get their own QUIT.
        );
 }
 
index 52e3ca376f7d8f2d18e51aef213c2f03a028354b..9b5e83825711519b82f287e7ba1d738758a9aac7 100644 (file)
@@ -87,7 +87,6 @@ sub getRevUuid($) {
 sub getUuid($) {
        my $nick = lc $_[0];
        my $id = $uuids{$nick};
-       print "getUuid $nick $id\n";
        return $id;
 }
 sub setRevUuid ($$) {
@@ -136,10 +135,10 @@ sub pong($$$) {
                # $dst is always $main_conf{local} anyway...
                # this is only valid b/c we never have messages routed THROUGH us
                # we are always an end point.
-               ircsendimm(":$dst $tkn{PONG}[$tkn] $src :$cookie");
+               ircsendimm(":$dst PONG $src :$cookie");
        }
        else {
-               ircsendimm("$tkn{PONG}[$tkn] :$src");
+               ircsendimm("PONG :$src");
         }
 }
 sub endburst {
@@ -157,7 +156,7 @@ sub eos {
        #print "Synced: ", synced(), "\n\n";
        #exit;
        
-       ircsendimm(':'.$main_conf{local}.' '.$tkn{EOS}[$tkn], 'VERSION');
+       ircsendimm(':'.$main_conf{local}.' EOS VERSION');
 
        agent_sync();
        flushmodes(\%preconnect_defer_mode);
@@ -167,12 +166,12 @@ sub eos {
 }
 
 sub netinfo($$$$$$$$) {
-       ircsendimm($tkn{NETINFO}[$tkn].' 0 '.time." $_[2] $_[3] 0 0 0 :$_[7]");
+       ircsendimm('NETINFO 0 '.time." $_[2] $_[3] 0 0 0 :$_[7]");
        $main_conf{network} = $_[7];
 }
 
 sub tssync {
-       ircsendimm((SJB64 ? '@'.itob64($main_conf{numeric}) : ':'.$main_conf{local})." $tkn{TSCTL}[$tkn] SVSTIME ".time);
+       ircsendimm((SJB64 ? '@'.itob64($main_conf{numeric}) : ':'.$main_conf{local})." TSCTL SVSTIME ".time);
 }
 
 sub parse_sjoin($$$$) {
@@ -222,7 +221,7 @@ sub kick($$$$) {
        $src = $main_conf{local} unless initial_synced();
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-       ircsend(":$srcId $tkn{KICK}[$tkn] $chan $targetId :$reason");
+       ircsend(":$srcId KICK $chan $targetId :$reason");
        callfuncs('KICK', 0, 2, [$srcId, $chan, $targetId, $reason]);
 }
 
@@ -230,12 +229,12 @@ sub invite($$$) {
        my ($src, $chan, $target) = @_;
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-       ircsend(":$srcId $tkn{INVITE}[$tkn] $targetId $chan 0");
+       ircsend(":$srcId INVITE $targetId $chan 0");
 }
 
 sub ping {
 #      if(@_ == 1) {
-               ircsend(':'.$main_conf{local}.' '.$tkn{PING}[$tkn].' :'.$main_conf{local});
+               ircsend(':'.$main_conf{local}.' PING :'.$main_conf{local});
 #      } else {
 #              ircsend(':'.$_[2].' '.$tkn{PONG}[$tkn].' '.$_[0].' :'.$_[1]);
 #      }
@@ -255,7 +254,7 @@ sub privmsg($$@) {
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        
        # submit a list of messages as a single packet to the server
-       ircsend(":$srcId $tkn{PRIVMSG}[$tkn] $dst :".join("\r\n".":$src $tkn{PRIVMSG}[$tkn] $dst :", @bufs));
+       ircsend(":$srcId PRIVMSG $dst :".join("\r\n".":$src PRIVMSG $dst :", @bufs));
        callfuncs('LOOP_PRIVMSG', 0, 1, [$src, $dst, \@bufs]);
 }
 
@@ -283,7 +282,7 @@ sub debug_privmsg($$@) {
        }
 
        # submit a list of messages as a single packet to the server
-       ircsendimm(":$src $tkn{PRIVMSG}[$tkn] $dst :".join("\r\n".":$src $tkn{PRIVMSG}[$tkn] $dst :", @bufs));
+       ircsendimm(":$src PRIVMSG $dst :".join("\r\n".":$src PRIVMSG $dst :", @bufs));
        callfuncs('LOOP_PRIVMSG', 0, 1, [$src, $dst, \@bufs]);
 }
 
@@ -307,7 +306,7 @@ sub notice($$@) {
                $targetId = $dst;
        }
        print "targid $targetId\n";
-       ircsend(":$srcId $tkn{NOTICE}[$tkn] $targetId :".join("\r\n".":$srcId $tkn{NOTICE}[$tkn] $targetId :", @bufs));
+       ircsend(":$srcId NOTICE $targetId :".join("\r\n".":$srcId NOTICE $targetId :", @bufs));
        callfuncs('LOOP_NOTICE', 0, 1, [$srcId, $targetId, \@bufs]);
 }
 
@@ -332,17 +331,18 @@ sub setumode($$$) {
        my $target = $dst; #lazy erry
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-       ircsend(":$srcId $tkn{SVSMODE}[$tkn] $targetId $modes");
+       ircsend(":$srcId SVSMODE $targetId $modes");
        callfuncs('UMODE', 0, undef, [$dst, $modes]);
 }
 
 sub setsvsstamp($$$) {
        my ($src, $dst, $stamp) = @_;
        
-       ircsend(":$src $tkn{SVS2MODE}[$tkn] $dst +d $stamp");
+       ircsend(":$src SVS2MODE $dst +d $stamp");
        # This function basically set the svsstamp to
        # be the same as the userid. Not all ircd will
        # support this function.
+       #and insp doesn't.
        # We obviously already know the userid, so don't
        # use a callback here.
        #callfuncs('UMODE', 0, undef, [$dst, $modes]);
@@ -350,7 +350,7 @@ sub setsvsstamp($$$) {
 
 sub setagent_umode($$) {
        my ($src, $modes) = @_;
-       ircsend(":$src $tkn{UMODE2}[$tkn] $modes");
+       ircsend(":$src UMODE2 $modes");
 }
 
 sub setmode2($$@) {
@@ -364,25 +364,35 @@ sub setmode2($$@) {
 sub ban_list($$$$@) {
 # Convenience function for lots of bans or excepts.
        my ($src, $cn, $sign, $mode, @parms) = @_;
-       my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my @masklist;
        foreach my $mask (@parms) {
                push @masklist, [( ($sign >= 1) ? '+' : '-').$mode, $mask];
        }
-       ircd::setmode2($srcId, $cn, @masklist);
+       ircd::setmode2($src, $cn, @masklist);
 }
 
 sub setmode($$$;$) {
        my ($src, $dst, $modes, $target) = @_;
        my $srcId;
        if (initial_synced()) {
-               $srcId = ($src->{ID}?$src->{ID}:($src->{UUID}?$src->{UUID}:$src->{NICK}));
+               if (ref($src) eq "HASH") {
+                       $srcId = ($src->{ID}?$src->{ID}:($src->{UUID}?$src->{UUID}:$src->{NICK}));
+               }
+               else {
+                       $srcId = $src;
+               }
        }
        else {
                $src = $main_conf{numeric};
                $srcId = $src;
        }
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId;
+       if (ref ($target) eq "HASH") {
+               $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       }
+       else {
+               $targetId = $target;
+       }
        callfuncs('MODE', undef, 1, [$srcId, $dst, $modes, $targetId]);
        #print "$ircline -- setmode($srcId, $dst, $modes, $targetId)\n" ;
        ircsend(":$srcId MODE $dst $modes $targetId");
@@ -429,7 +439,7 @@ sub setmode_real($$$;$) {
        # for server sources, there must be a timestamp. but you can put 0 for unspecified.
        $parms =~ s/\s+$//; #trim any trailing whitespace, as it might break the simple parser in the ircd.
        
-       ircsend(":$src ".$tkn{MODE}[$tkn]." $dst $modes".($parms?" $parms":'').($src =~ /\./ ? ' 0' : ''));
+       ircsend(":$src MODE $dst $modes".($parms?" $parms":'').($src =~ /\./ ? ' 0' : ''));
 }
 
 sub settopic($$$$$) {
@@ -437,19 +447,19 @@ sub settopic($$$$$) {
        $src = $main_conf{numeric} unless initial_synced();
        #>> 38 :583AAAAAF TOPIC #erry :Welcome to erry(world|net). Have a cookie.
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       ircsend(":$srcId ".$tkn{TOPIC}[$tkn]." $chan :$topic");
+       ircsend(":$srcId TOPIC $chan :$topic");
        callfuncs('TOPIC', undef, undef, [$srcId, $chan, $setter, $time, $topic]);
 }
 
 sub wallops ($$) {
        my ($src, $message) = @_;
-       ircsend(":$src $tkn{WALLOPS}[$tkn] :$message");
+       ircsend(":$src WALLOPS :$message");
 }
 
 sub globops ($$) {
        my ($src, $message) = @_;
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       ircsend(":$srcId $tkn{GLOBOPS}[$tkn] :$message");
+       ircsend(":$srcId GLOBOPS :$message");
 }
 
 sub kline ($$$$$) {
@@ -462,9 +472,14 @@ sub kline ($$$$$) {
     #NOTE FOR ALL ADDLINES:
     #note that you need to provide expiry alone, not expiry +time
     #otherwise you will end up with insanely long bans
-    my $setId = getUuid($setter);
-    if ($setId) { $setter = $setId; }
-    my $line = ":$setter ADDLINE G $ident\@$host " . $main_conf{local} . " ". time() . " " . ($expiry)." :$reason";
+    my $setId;
+    if (ref ($setter) eq "HASH") {
+       $setId = $setter->{ID};
+    }
+    else {
+       $setId = $setter;
+    }
+    my $line = ":$setId ADDLINE G $ident\@$host " . $main_conf{local} . " ". time() . " " . ($expiry)." :$reason";
        ircsend($line);
        #return ($type, +1, $ident, $host, $setter, $expire, $time, $reason);
        callfuncs('TKL', undef, undef, [parse_addline($line)]);
@@ -530,7 +545,7 @@ sub irckill($$$) {
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
        my $srcNick = $target->{NICK};
        return 0 unless update_userkill($targetId);
-       ircsendimm(":$srcId ".$tkn{KILL}[$tkn]." $targetId :$srcNick ($reason)");
+       ircsendimm(":$srcId KILL $targetId ($reason)");
        callfuncs('KILL', 0, 1, [$srcId, $targetId, $srcNick, $reason]);
 }
 
@@ -553,7 +568,7 @@ sub svsnick($$$) {
     # with a collision
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-    ircsend(":$srcId ".$tkn{SVSNICK}[$tkn]." $targetId $newnick ".time);
+    ircsend(":$srcId SVSNICK $targetId $newnick ".time);
 }
 
 sub svsnoop($$$) {
@@ -561,7 +576,7 @@ sub svsnoop($$$) {
     $src = $main_conf{local} unless defined($src);
     if ($bool > 0) { $bool = '+'; } else { $bool = '-'; }
 #this is SVS NO-OP not SVS SNOOP
-    ircsend(":$main_conf{local} $tkn{SVSNOOP}[$tkn] $targetserver $bool");
+    ircsend(":$main_conf{local} SVSNOOP $targetserver $bool");
 }
 
 #START TODO - erry
@@ -572,7 +587,7 @@ sub svswatch ($$@) {
 # Example: SVSWATCH Blah :+Blih!*@* -Bluh!*@* +Bleh!*@*.com
 # *** We do not track this info nor care.
        my ($src, $target, @watchlist) = @_;
-       my $base_str = ":$src ".$tkn{SVSWATCH}[$tkn]." $target :";
+       my $base_str = ":$src SVSWATCH $target :";
        my $send_str = $base_str;
        while (@watchlist) {
                my $watch = shift @watchlist;
@@ -591,7 +606,7 @@ sub svssilence ($$@) {
 # Example: SVSSILENCE Blah :+Blih!*@* -Bluh!*@* +Bleh!*@*.com
 # *** We do not track this info nor care.
        my ($src, $target, @silencelist) = @_;
-       my $base_str = ":$src ".$tkn{SVSSILENCE}[$tkn]." $target :";
+       my $base_str = ":$src SVSSILENCE $target :";
        my $send_str = $base_str;
        while (@silencelist) {
                my $silence = shift @silencelist;
@@ -615,7 +630,7 @@ sub svso($$$) {
 
     my ($src, $target, $oflags) = @_;
     $src = $main_conf{local} unless defined($src);
-    ircsend(":$src $tkn{SVSO}[$tkn] $target $oflags");
+    ircsend(":$src SVSO $target $oflags");
 
 }
 
@@ -623,7 +638,7 @@ sub swhois($$$) {
 # *** We do not track this info nor care.
     my ($src, $target, $swhois) = @_;
     $src = $main_conf{local} unless defined($src);
-    ircsend(":$src $tkn{SWHOIS}[$tkn] $target :$swhois");
+    ircsend(":$src SWHOIS $target :$swhois");
 }
 #END TODO - erry
 
@@ -642,14 +657,14 @@ sub __svsjoin($$@) {
     # similar for svspart.
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-    ircsend(($srcId?":$srcId":'')." $tkn{SVSJOIN}[$tkn] $targetId ".join(',', @chans));
+    ircsend(($srcId?":$srcId":'')." SVSJOIN $targetId ".join(',', @chans));
 }
 
 sub svspart($$$@) {
     my ($src, $target, $reason, @chans) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-    ircsend(($srcId ? ":$srcId" : '')." $tkn{SVSPART}[$tkn] $targetId ".join(',', @chans).
+    ircsend(($srcId ? ":$srcId" : '')." SVSPART $targetId ".join(',', @chans).
        ($reason ? " :$reason" : ''));
 }
 
@@ -714,7 +729,7 @@ sub svskill($$$) {
        # not sure if it'll accept a servername or not.
        # consider defaulting to ServServ
        die('svskill called w/o $src') unless $src;
-       ircsend(':'.$src.' '.$tkn{SVSKILL}[$tkn].' '.$target.' :'.$reason);
+       ircsend(':'.$src.' SVSKILL '.$target.' :'.$reason);
        callfuncs('QUIT', 0, undef, [$target, $reason]);
 }
 
@@ -726,7 +741,7 @@ sub version($) {
 
 sub userhost($) {
        my ($target) = @_;
-       ircsend($tkn{USERHOST}[$tkn]." $target");
+       ircsend("USERHOST $target");
 }
 
 sub userip($) {
@@ -739,7 +754,7 @@ sub chghost($$$) {
        my ($src, $target, $vhost) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-       ircsend(($srcId?":$srcId ":'').$tkn{CHGHOST}[$tkn]." $targetId $vhost");
+       ircsend(($srcId?":$srcId ":'')." CHGHOST $targetId $vhost");
         callfuncs('CHGHOST', 0, 1, [$srcId, $targetId, $vhost]);
 }
 
@@ -747,7 +762,7 @@ sub chgident($$$) {
        my ($src, $target, $ident) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-       ircsend(($src?":$srcId ":'').$tkn{CHGIDENT}[$tkn]." $targetId $ident");
+       ircsend(($src?":$srcId ":'')." CHGIDENT $targetId $ident");
         callfuncs('CHGIDENT', 0, 1, [$srcId, $targetId, $ident]);
 }
 
@@ -757,21 +772,19 @@ sub jupe_server($$) {
        # :nascent.surrealchat.net SERVER wyvern.surrealchat.net 2 :SurrealChat
        die "You can't jupe $server"
                if ((lc($server) eq lc($remoteserv)) or (lc($server) eq lc($main_conf{local})));
-       ircsend(':'.$main_conf{local}.' '.$tkn{SQUIT}[$tkn]." $server :");
-       ircsend(':'.$main_conf{local}.' '.$tkn{SERVER}[$tkn]." $server 2 :$reason");
+       ircsend(':'.$main_conf{local}." SQUIT $server :");
+       ircsend(':'.$main_conf{local}." SERVER $server 2 :$reason");
 
        set_server_juped($server);
 }
 sub agent_dojoin($$) {
        my ($agent, $chan) = @_;
-       print "DOJOIN " . Dumper ($agent);
        my $srcId;
        if (ref($agent) ne "HASH") {
                $srcId = getUuid($agent);
                if (!$srcId) {
                        $srcId = $agent;
                }
-               print "SRCID " . Dumper($srcId);
        }
        else {
                my $src = $agent;
@@ -793,7 +806,7 @@ sub agent_dopart ($$$) {
                my $src = $agent;
                $srcId = ($src->{ID}?$src->{ID}:($src->{UUID}?$src->{UUID}:$src->{NICK}));
        }
-       ircsend(":$srcId $tkn{PART}[$tkn] $chan :$reason");
+       ircsend(":$srcId PART $chan :$reason");
 }
 sub rehash_all_servers(;$) {
        my ($type) = @_;
@@ -803,7 +816,7 @@ sub rehash_all_servers(;$) {
        $type = undef() if(defined($type) && !($type =~ /^\-(motd|botmotd|opermotd|garbage)$/i));
 
        foreach my $server (get_online_servers()) {
-               ircsend(':'.$main::rsnick.' '.$tkn{REHASH}[$tkn].' '.$server.(defined($type) ? ' '.$type : '') );
+               ircsend(':'.$main::rsnick.' REHASH '.$server.(defined($type) ? ' '.$type : '') );
        }
 }
 
@@ -817,12 +830,12 @@ sub unban_nick($$@) {
        while(my $nick = shift @nicks) {
                push @nicklist, $nick;
                if(++$i >= 10) {
-                       ircsend(($src ? ":$src " : '' ).$tkn{SVSMODE}[$tkn]." $cn -".'b'x($i).' '.join(' ', @nicklist));
+                       ircsend(($src ? ":$src" : '' )." SVSMODE $cn -".'b'x($i).' '.join(' ', @nicklist));
                        $i = 0; @nicklist = ();
                }
        }
        
-       ircsend(($srcId ? ":$srcId " : '' ).$tkn{SVSMODE}[$tkn]." $cn -".'b'x($i).' '.join(' ', @nicklist));
+       ircsend(($srcId ? ":$srcId " : "SVSMODE $cn -".'b'x($i).' '.join(' ', @nicklist)));
        # We don't loopback this, as we'll receive back the list
        # of removed bans.
 }
@@ -833,7 +846,7 @@ sub clear_bans($$) {
 # Similar concepts may exist in other ircd implementations
        my ($src, $cn) = @_;
        
-       ircsend(($src ? ":$src " : '' ).$tkn{SVSMODE}[$tkn]." $cn -b");
+       ircsend(($src ? ":$src " : '' ). "SVSMODE $cn -b");
        # We don't loopback this, as we'll receive back the list
        # of removed bans.
 }
@@ -871,7 +884,7 @@ sub nolag($$@) {
        my ($src, $sign, @targets) = @_;
        $src = $main_conf{local} unless $src;
        foreach my $target (@targets) {
-               ircsend(':'.$src .' '.$tkn{SVS2NOLAG}[$tkn].' '.$sign.' '.$target);
+               ircsend(':'.$src .' SVSNOLAG '.$sign.' '.$target);
        }
 }
 
index e27d853ab0667f766d99b63e4a5dfd3e20ed9ecd..97064b0da7287b9e420deecda9d6c786932caddb 100644 (file)
@@ -67,7 +67,8 @@ sub wlog($$$) {
        my $prefix;
        $prefix = "\002\00304" if($level > LOG_INFO);
        $prefix .= $levels[$level];
-       ircd::privmsg($main::rsnick, main_conf_diag, "$prefix\: ($service) $text");
+       my $rsuser = { NICK => $main::rsnick, ID => ircd::getUuid($main::rsnick) };
+       ircd::privmsg($rsuser, main_conf_diag, "$prefix\: ($service) $text");
        write_log('diag', '<'.$main::rsnick.'>', "$prefix\: ($service) $text");
 }
 
index 24eed2ab2eff343bfd7901819f4cf5329de93f1d..633ed71b983317ae7977ca8b5bbaa0b648c02398 100644 (file)
@@ -27,7 +27,7 @@ SrSv::User - Track users
 =cut
 
 use strict;
-
+use Data::Dumper;
 use Exporter 'import';
 BEGIN {
        my %constants = (
@@ -61,7 +61,7 @@ use SrSv::MySQL::Stub {
 };
        
        
-
+use SrSv::Insp::UUID;
 use SrSv::IRCd::Send; #package ircd
 use SrSv::Process::Init;
 use SrSv::MySQL '$dbh';
@@ -156,26 +156,24 @@ sub flood_check($;$) {
 sub get_user_id($) {
        my ($user) = @_;
        my ($id, $n);
-
-       return undef if(is_agent($user->{NICK}) and not $enforcers{lc $user->{NICK}});
-
        unless(ref($user) eq 'HASH') {
-               die("invalid get_user_nick call");
+               die("invalid get_user_id call");
        }
-
-       if(exists($user->{ID})) { return $user->{ID}; }
-
        my $nick = $user->{NICK};
-
+       if($nick eq '') {
+               die("get_user_id called on empty string");
+       }
+       my $properId = ircd::getUuid ($user->{NICK});
+       if ($properId != "") {
+               $properId = decodeUUID($properId);
+               return $user->{ID} = $properId;
+       }
+       return undef if(is_agent($user->{NICK}) and not $enforcers{lc $user->{NICK}});
+       if(exists($user->{ID})) {  return $user->{ID}; }
        # a cheat for isServer()
        if($user->{NICK} =~ /\./) {
                return $user->{ID} = undef;
        }
-
-       if($nick eq '') {
-               die("get_user_id called on empty string");
-       }
-
        my $nick2;
        while($n < 10 and !defined($id)) {
                $n++;
@@ -193,18 +191,30 @@ sub get_user_id($) {
                $user->{OLDNICK} = $user->{NICK};
                $user->{NICK} = $nick2;
        }
-
        return $user->{ID} = $id;
 }
 
 sub get_user_nick($) {
        my ($user) = @_;
-
        unless(ref($user) eq 'HASH') {
                die("invalid get_user_nick call");
        }
-
-       if(exists($user->{NICK}) and is_online($user->{NICK})) { return $user->{NICK} }
+       if (exists($user->{ID})) {
+               if (my $nick = ircd::getRevUuid ($user->{ID})) {
+                       return $user->{NICK} = $nick;
+               }
+       }
+       if(exists($user->{NICK}) and is_online($user->{NICK})) { 
+               my $realnick = ircd::getRevUuid($user->{NICK});
+               if ($realnick) {
+                       $user->{ID} = $user->{NICK};
+                       $user->{NICK} = $realnick;
+                       return $realnick;
+               }
+               else {
+                       return $user->{NICK};
+               }
+       }
 
        # Possible bug? This next bit only works to chase the nick-change
        # if the caller already did a get_user_id to find out
@@ -436,7 +446,7 @@ sub get_user_ip($) {
 sub kill_user($$) {
        my ($user, $reason) = @_;
 
-       ircd::irckill(get_user_agent($user) || main_conf_local, get_user_nick($user), $reason);
+       ircd::irckill(get_user_agent($user) || main_conf_local, $user, $reason);
 }
 
 sub kline_user($$$) {
index 5321f92f9dee2bb58df36f48e24cb885628242e3..84b384aa24e740354da81df3418c7a62071f5ea5 100644 (file)
@@ -29,7 +29,7 @@ sub notice($@) {
        # FIXME: ref to 'NickServ' should call for the agent-nick in nickserv.pm,
        # but that's not available at this layer, so we'd be making
        # a blind reference to something that _might_ be undef
-       ircd::notice($user->{AGENT} || 'NickServ', get_user_nick($user), @_);
+       ircd::notice($user->{AGENT} || 'NickServ', $user, @_);
 }
 
 sub user_die($@) {
index 52049abe73591188184142320d5e119827aa680f..7c415c90c2486ecbf93896ef4870f747b229bfa0 100644 (file)
@@ -74,9 +74,11 @@ sub ev_connect {
 addhandler('PRIVMSG', undef, 'servserv', 'core::dispatch', 1);
 
 sub dispatch {
-       print "DISPATCH CALLED\n";
-       my ($src, $dst, $msg) = @_;
-       my $user = { NICK => $src, AGENT => $rsnick, ID => getUuid($src) };
+       my ($user, $dstUser, $msg) = @_;
+       return unless (lc $dstUser->{NICK} eq lc $rsnick);
+       $user->{AGENT} = $dstUser;
+       my $src = $user->{NICK};
+       my $dst = $dstUser->{NICK};
        if(!adminserv::is_ircop($user)) {
                notice($user, 'Access Denied');
                ircd::globops($rsnick, "\002$src\002 failed access to $rsnick $msg");
@@ -101,6 +103,7 @@ sub dispatch {
                }
                my $cmd = $msg;
                $cmd =~ s/raw\s+//i;
+               print "$cmd\n";
                ircsend($cmd);
        }
        if($msg =~ /^help$/) {
index d399daacde992b224bbee18f9c694155424adc35..6065df4b0dae3a3c27e254816d2ed8800cb2e27f 100644 (file)
@@ -78,7 +78,6 @@ if(services_conf_hostserv) {
 our $qlreason = 'Reserved for Services';
 
 foreach my $a (@agents) {
-       print "AGENT " . Dumper($a);
        agent_connect($a->[0], 'services', undef, $a->[1], $a->[2]);
        ircd::sqline($a->[0], $qlreason);
        agent_join($a->[0], main_conf_diag);
@@ -117,6 +116,7 @@ addhandler('CHGIDENT', undef, undef, 'nickserv::chgident');
 addhandler('USERIP', undef, undef, 'nickserv::userip');
 addhandler('SQUIT', undef, undef, 'nickserv::squit') if ircd::NOQUIT();
 addhandler("OPERUP", undef, undef, 'nickserv::handle_oper');
+addhandler('PRIVMSG', undef, undef, 'core::dispatch');
 addhandler('PRIVMSG', undef, undef, 'nickserv::dispatch');
 addhandler('PRIVMSG', undef, lc services_conf_nickserv, 'nickserv::dispatch') if services_conf_nickserv;
 
index 29b58d757ba53682dabfa662dea32d127a111871..11fdfab4e7fb0ba7410e001dcf2660e99f775d09 100644 (file)
@@ -31,7 +31,7 @@ use SrSv::Log;
 use SrSv::NickReg::Flags qw(NRF_NOHIGHLIGHT nr_chk_flag_user);
 
 use SrSv::MySQL '$dbh';
-
+use Data::Dumper;
 use constant {
        S_HELP => 1,
        S_OPER => 2,
@@ -271,7 +271,6 @@ sub can_do($$) {
        my $nflag = $flags{$flag};
        
        my ($level, $nick) = get_best_svs_level($user);
-       print ("LEVELS $defflags[$level] $nflag" . "\n");
        if($defflags[$level] & $nflag) {
                return $nick if (($nflag == $flags{'HELP'}) or is_ircop($user)); 
        }
@@ -281,13 +280,13 @@ sub can_do($$) {
 
 sub is_svsop($;$) {
        my ($user, $rlev) = @_;
-
+       
        my ($level, $nick) = get_best_svs_level($user);
+       return $nick if (is_agent($nick)); #something odd with srsv kicking itself
        return $nick if(defined($level) and !defined($rlev));
 
        if($level >= $rlev) {
-               return $nick ; #if (($rlev == S_HELP) or is_ircop($user)) FIXME - erry
-               #Problem is inspircd has a gay way of identifying opers, instead of umode +o it sends OPERTYPE crap.
+               return $nick if (($rlev == S_HELP) or is_ircop($user)) 
        }
        
        return undef;
@@ -301,7 +300,6 @@ sub is_ircop($) {
        return $user->{IRCOP} if(exists($user->{IRCOP}));
 
        my %umodes = modes::splitumodes(nickserv::get_user_modes($user));
-
        no warnings 'deprecated';
        if(($umodes{'o'} eq '+') or ($umodes{'S'} eq '+')) {
                $user->{IRCOP} = 1;
@@ -366,7 +364,6 @@ sub get_best_svs_level($) {
        $user->{SVSOP_LEVEL} = $level; $user->{SVSOP_NICK} = $nick;
        
        if(wantarray) {
-               print "LEVEL $level\n";
                return ($level, $nick);
        } else {
                return $level;
index b27b7c2e4e6662d6f07575ce2d498a44a676cede..232b38b16ada8f825fdc57fe7b1d796972f94311 100644 (file)
@@ -32,7 +32,6 @@ use SrSv::Conf2Consts qw( main services );
 use SrSv::User qw(get_user_nick get_user_id :flood);
 use SrSv::User::Notice;
 use SrSv::Help qw( sendhelp );
-
 use SrSv::ChanReg::Flags;
 use SrSv::NickReg::Flags qw(NRF_NOHIGHLIGHT nr_chk_flag_user);
 
@@ -108,7 +107,7 @@ sub dispatch($$$) {
                if($msg =~ /^\!/) {
                        $has_bot->execute($dst);
                        return unless($has_bot->fetchrow_array);
-                       chan_dispatch($src, $dst, $msg);
+                       chan_dispatch($user, $dst, $msg);
                } else {
                        chan_msg($src, $dst, $msg);
                }
@@ -500,7 +499,8 @@ sub chan_dispatch($$$) {
        my @args = split(/\s+/, $msg);
        my $cmd = lc(shift @args);
        $cmd =~ s/^\!//;
-
+       my $chan = { CHAN => $cn };
+       $user->{AGENT} = agent($chan);
        my $chan = { CHAN => $cn };
 
        my %cmdhash = (
@@ -855,7 +855,7 @@ sub eos() {
                }
                elsif(cr_chk_flag($chan, CRF_BOTSTAY(), 1)) {
                        my $botUser = { NICK=>$nick, ID=>ircd::getUuid($nick) };
-                       bot_join($chan, $nick);
+                       bot_join($chan, $botUser);
                        my $modelock = chanserv::get_modelock($chan);
                        ircd::setmode(main_conf_local, $cn, $modelock) if $modelock;
                }
index 4edb2d4c437c1a278b851b72faa976d19dabdf59..aa4d1420f0966f2fa63ed0490b63d44af09c870f 100644 (file)
@@ -1806,11 +1806,10 @@ sub cs_set($$$;$) {
 
                $set_founder->execute($root, $cn); $set_founder->finish();
                set_acc($root, $user, $chan, FOUNDER);
-
                notice($user, ($override ? "The previous founder, \002$prev\002, has" : "You have") . " been moved to the co-founder list of \002$cn\002.");
                notice_all_nicks($user, $root, "\002$root\002 has been set as the founder of \002$cn\002.");
                services::ulog($csnick, LOG_INFO(), "set founder of \002$cn\002 to \002$root\002", $user, $chan);
-
+               $del_nick_akick->execute($cn, $root); $del_nick_akick->finish(); #just in case
                $get_successor->execute($cn);
                my $suc = $get_successor->fetchrow_array; $get_successor->finish();
                if(lc($suc) eq lc($root)) {
@@ -3651,7 +3650,6 @@ sub do_nick_akick($$;$) {
 
 sub check_akick($$;$) {
        my ($user, $chan, $check_only) = @_;
-       print "Do status!\n";
        if(adminserv::is_svsop($user, adminserv::S_HELP())) {
                return 0;
        }
@@ -3764,7 +3762,7 @@ sub notice_all_nicks($$$) {
 
        notice($user, $msg);
        foreach my $u (get_nick_user_nicks $nick) {
-               notice({ NICK => $u, AGENT => $csnick }, $msg) unless lc $src eq lc $u;
+               notice({ NICK => $u, AGENT => $csUser }, $msg) unless lc $src eq lc $u;
        }
 }
 
@@ -4569,7 +4567,6 @@ sub user_join($$) {
 }
 
 sub handle_sjoin($$$$$$$) {
-       print "wheeeeeeeeee\n";
        my ($server, $cn, $ts, $chmodes, $chmodeparms, $userarray, $banarray, $exceptarray) = @_;
        my $chan = { CHAN => $cn };
 
@@ -4578,8 +4575,6 @@ sub handle_sjoin($$$$$$$) {
        } else {
                update_modes($cn, "$chmodes $chmodeparms") if $chmodes;
        }
-       print "HANDLE  SJOIN $cn\n";
-       print Dumper (@$userarray);
        user_join_multi($chan, $userarray) if scalar @$userarray;
 
        foreach my $ban (@$banarray) {
index cbaacd1d92b193b040f959cdcd5e16c0f053309a..34821cce6554714601a1746c84b5c90a9a6b32c1 100644 (file)
@@ -180,7 +180,7 @@ our (
        $get_nicks_by_email,
 
        $nick_deleteChanUser, $nick_deleteNickCh, $nick_deleteNickId,
-       $id_delUser
+       $id_delUser, $nick_delUser,
 );
 
 sub init() {
@@ -190,6 +190,7 @@ sub init() {
        $nick_deleteNickCh = $dbh -> prepare ("DELETE FROM nickchg WHERE nickid=?");
        $nick_deleteNickId = $dbh -> prepare ("DELETE FROM nickid WHERE id=?");
        $id_delUser = $dbh->prepare ("DELETE FROM user WHERE id=?");
+       $nick_delUser = $dbh->prepare ("DELETE FROM user WHERE nick=?");
        $nick_create = $dbh->prepare("INSERT INTO user SET nick=?, time=?, inval=0, ident=?, host=?, vhost=?, server=?, modes=?,
                gecos=?, flags=?, cloakhost=?, online=1");
        $nick_create2 = $dbh->prepare("INSERT INTO user SET id=?, nick=?, time=?, inval=0, ident=?, host=?, vhost=?, server=?, modes=?,
@@ -1049,7 +1050,9 @@ my @ghostbusters_quotes = (
 
        } else {
                my $ghostbusters = @ghostbusters_quotes[int rand(scalar(@ghostbusters_quotes))];
-               ircd::irckill($nsuser, $user, "GHOST command used by $src ($ghostbusters)");
+               my $baduser = {NICK => $nick};
+               get_user_id ($baduser);
+               ircd::irckill($nsuser, $baduser, "GHOST command used by $src ($ghostbusters)");
                notice($user, "Your ghost has been disconnected");
                services::ulog($nsnick, LOG_INFO(), "used NickServ GHOST on $nick", $user);
                #nick_delete($nick);
@@ -1108,7 +1111,7 @@ sub ns_register($$$) {
                $id_update->execute($src, $uid); $id_update->finish();
                services::ulog($nsuser, LOG_INFO(), "registered $src (email: $email)".
                        (services_conf_validate_email ? ' requires email validation code' : ''),
-                       $user);
+                       $src);
        } else {
                $unlock_tables->execute; $unlock_tables->finish;
                notice($user, 'Your nickname has already been registered.');
@@ -3273,11 +3276,13 @@ sub nick_create {
                $nick_checkExists->execute ($id, $time);
                my $exists = $nick_checkExists -> fetchrow_array();
                my $flags = (synced() ? UF_FINISHED() : 0);
+               print "FFFF\n";
                unless (defined($exists)) {
                        $nick_deleteChanUser -> execute ($id);
                        $nick_deleteNickCh -> execute ($id);
                        $nick_deleteNickId -> execute ($id);
                        $id_delUser -> execute ($id);
+                       $nick_delUser -> execute ($nick);
                        $nick_create2 -> execute ($id, $nick, $time, $ident, $host, $vhost, $server, $modes, $gecos, $flags, $cloakhost);
                }
                else {
@@ -3359,7 +3364,6 @@ sub nick_delete($$) {
                chanserv::channel_emptied({CHAN => $cn});
        }
        $get_quit_empty_chans->finish();
-       ns_logout ($user);
 }
 
 sub squit($$$) {
@@ -3474,9 +3478,13 @@ sub umode($$) {
 }
 
 sub killhandle($$$$) {
-       my ($src, $dst, $path, $reason) = @_;
+       my ($srcUser, $dstUser, $path, $reason) = @_;
+       my $dst = $dstUser->{NICK};
+       my $src = $srcUser->{NICK};
+       print "KILL $src $dst\n";
        unless (is_agent($dst)) {
-               nick_delete($dst, "Killed ($src ($reason))");
+               print "WhootS";
+               nick_delete($dstUser, "Killed ($src ($reason))");
        }
 }
 
index eac60918fa12b57439fc98c0602afd5bd4122d41..0465256488c627602b0411c3450957169f460342 100644 (file)
@@ -154,7 +154,7 @@ sub dispatch($$$) {
                if($cmd =~ /^set/i) {
                        nickserv::kill_user($user, "OS SET doesn't exist here");
                }
-               ircd::globops($osnick, "\002$src\002 failed access to $osnick $msg");
+               ircd::globops($osuser, "\002$src\002 failed access to $osnick $msg");
                return;
        }
 
index 8a34b1a4491c7a4f03deda89bb03e19bd52e1a45..ea909a2ad1ca0f9cf400254e0dff16362268036f 100644 (file)
@@ -47,7 +47,7 @@ CREATE TABLE `chanlvl` (
 
 CREATE TABLE `chanperm` (
   `name` char(10) NOT NULL default '',
-  `id` smallint(5) unsigned NOT NULL auto_increment,
+  `id` bigint(20) unsigned NOT NULL auto_increment,
   `level` tinyint(4) NOT NULL default '0',
   `max` tinyint(3) unsigned NOT NULL default 0,
   PRIMARY KEY  (`name`),
@@ -115,14 +115,14 @@ CREATE TABLE `nickalias` (
 ) ENGINE=MyISAM;
 
 CREATE TABLE `nickid` (
-  `id` int(10) unsigned NOT NULL default '0',
+  `id` bigint(10) unsigned NOT NULL default '0',
   `nrid` int(11) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`,`nrid`),
   KEY `nrid` (`nrid`)
 ) ENGINE=HEAP;
 
 CREATE TABLE `nickreg` (
-  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
   `nick` char(30) NOT NULL default '',
   `pass` char(127) binary NOT NULL default '',
   `email` char(127) NOT NULL default '',
@@ -251,7 +251,7 @@ CREATE TABLE `chantext` (
 DROP TABLE IF EXISTS `chanuser`;
 CREATE TABLE `chanuser` (
   `seq` mediumint(8) unsigned NOT NULL default '0',
-  `nickid` int(11) unsigned NOT NULL default '0',
+  `nickid` bigint(11) unsigned NOT NULL default '0',
   `chan` char(32) NOT NULL default '',
   `joined` tinyint(3) unsigned NOT NULL default '0',
   `op` tinyint(4) NOT NULL default '0',