]> jfr.im git - irc/SurrealServices/srsv.git/commitdiff
Get rid of getuuid for users and move ircd-specific stuff to send & parse only
authorerry <redacted>
Fri, 22 Jul 2011 13:59:33 +0000 (13:59 +0000)
committererry <redacted>
Fri, 22 Jul 2011 13:59:33 +0000 (13:59 +0000)
fix mode to (probably) work

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

14 files changed:
branches/0.5.0/SrSv/Insp/Parse.pm
branches/0.5.0/SrSv/Insp/Send.pm
branches/0.5.0/SrSv/Insp/UUID.pm
branches/0.5.0/SrSv/Log.pm
branches/0.5.0/SrSv/User.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/hostserv.pm
branches/0.5.0/modules/serviceslibs/memoserv.pm
branches/0.5.0/modules/serviceslibs/nickserv.pm
branches/0.5.0/modules/serviceslibs/operserv.pm

index 21dfb9b68bfc2518e2cabbe9329b8c64ccf5ba0e..61e20d53db5bbf692314afe51de76bcaf4a666d9 100644 (file)
@@ -43,6 +43,7 @@ use SrSv::User '/./';
 # tho MIME's is probably faster
 use MIME::Base64;
 use Data::Dumper;
+use SrSv::Insp::UUID;
 # FIXME
 use constant {
        # Wait For
@@ -112,7 +113,7 @@ sub parse_fjoin ($$$$$$) {
                foreach my $prefix (@ops) {
                        $op |= $opmodes{$prefix};
                }
-               my $user = {ID => $id, __OP=>$op};
+               my $user = {ID => $id, __OP=>$op}; #ID'S are _already_ decoded in FJOIN!
                get_user_nick ($user);
                push @users, $user;
                $i++;
@@ -228,13 +229,12 @@ sub PING($) {
 }
 sub UID ($) {
        #:583 UID 583AAAAAJ 1307703236 erry__ localhost localhost errietta 127.0.0.1 1307703241 + :errietta
-               $_[0] =~ /^(:\S+) UID (\S+) (\d+) (\S+) (\S+) (\S+) (\S+) (\S+) (\d+) (\S+) :(.*)$/;
-               my ($server, $uid, $stamp, $nick, $host, $vhost, $ident, $IP, $ts, $modes, $gecos) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12);
-               ircd::setRevUuid ($uid, $nick);
-               ircd::setUuid ($nick, $uid);
-               my $user = { NICK => $nick, ID => $uid };
-               return ('NICKCONN', undef, undef, WF_NICK, $user, 0, $ts, $ident, $host, $server, $stamp, $modes, $vhost, $gecos,
-                               join('.', unpack('C4', MIME::Base64::decode($IP))));
+       $_[0] =~ /^(:\S+) UID (\S+) (\d+) (\S+) (\S+) (\S+) (\S+) (\S+) (\d+) (\S+) :(.*)$/;
+       my ($server, $uid, $stamp, $nick, $host, $vhost, $ident, $IP, $ts, $modes, $gecos) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12);
+       print "UID $uid " . decodeUUID($uid) . "\n";
+       my $user = { NICK => $nick, ID => decodeUUID($uid) };
+       return ('NICKCONN', undef, undef, WF_NICK, $user, 0, $ts, $ident, $host, $server, $stamp, $modes, $vhost, $gecos,
+                       join('.', unpack('C4', MIME::Base64::decode($IP))));
 }
 sub EOS($) {
        my $event;
@@ -350,7 +350,7 @@ sub PROTOCTL($) {
 
 sub JOIN($) {
        $_[0] =~ /^:(\S+) (?:C|JOIN) (\S+)$/;
-       my $user = { ID => $1 };
+       my $user = { ID => decodeUUID($1) };
        get_user_nick ($user);
        return ('JOIN', undef, 1, WF_CHAN, $user, $2);
 }
@@ -364,7 +364,7 @@ sub FJOIN ($) {
                foreach my $user (@users) {
                        my @params = split (",",$user);
                        push (@status, $params[0]);
-                       push (@ids, $params[1]);
+                       push (@ids, decodeUUID($params[1]));
                }
                return ('SJOIN', undef, undef, WF_CHAN, parse_fjoin($server, $channel, $ts, $modes, \@ids, \@status));
        }
@@ -402,12 +402,12 @@ sub PART($) {
        my $user;
        
        if($_[0] =~ /^:(\S+) (?:D|PART) (\S+) :(.*)$/) {
-               $user = {ID => $1};
+               $user = {ID => decodeUUID($1)};
                get_user_nick ($user);
                return ('PART', undef, 0, WF_CHAN, $user, $2, $3);
        }
        elsif($_[0] =~ /^:(\S+) (?:D|PART) (\S+)$/) {
-               $user = {ID => $1};
+               $user = {ID => decodeUUID($1)};
                get_user_nick ($user);
                return ('PART', undef, 0, WF_CHAN, $user, $2, undef);
        }
@@ -417,15 +417,41 @@ sub FMODE($) {
        #:583 FMODE #erry 1308214721 +b test1!*@* At server connect. Note that the rest of the channel modes are not there but rather at FJOIN. So this will only have bans and the like.
        if($_[0] =~ /^:(\S+) FMODE (#\S+) (\d+) (\S+) ?(.*)$/) {
                my $id = $1;
-               my $user = {ID => $id};
-               get_user_nick ($user);
-               return ('MODE', undef, 1, WF_ALL, $user, $2, $4, $5);
+               my $user;               
+               print "FMODE ID $id " . length($id);
+               if (length($id) > 3) { #UID
+                       print "FFFFFFFFFFF\n";
+                       $user = {ID => decodeUUID($id)};
+                       get_user_nick ($user);
+               }
+               else { #SID
+                       $user = $id;
+               }
+               my $name;
+               my $argz = $5;
+               my @args = split(/ /, $argz);
+               my $modes = $4;
+               print "============MODES $modes=================\n";
+               print "5: $4\n";
+               print "6: $5\n";
+               my @modes = split(//, $modes);
+               my @userargs;
+               foreach my $mode (@modes) {
+                       if($mode eq '+' or $mode eq '-') { next; }
+                       if ($mode !~ /^[vhoaq]$/) { next; }
+                       my $arg = shift (@args);
+                       next if $arg eq '';
+                       my $id = decodeUUID($arg);
+                       my $tuser = {ID=>$id};
+                       get_user_nick ($tuser);
+                       push @userargs, $tuser;                 
+               }
+               return ('MODE', undef, 1, WF_ALL, $user, $2, $4, $5, @userargs);
        }
 }
 sub MODE($) {
        my $user;
-       
-       if($_[0] =~ /^(@|:)(\S+) (?:G|MODE) (#\S+) (\S+) (.*)(?: \d+)?$/) {
+       if($_[0] =~ /^(@|:)(\S+) (?:G|MODE) (#\S+)  (.*)(?: \d+)?$/) {
                my $name;
                if ($1 eq '@') {
                        $name = $servernum[b64toi($2)];
@@ -433,20 +459,46 @@ sub MODE($) {
                }
                else {
                        $name = $2;
-                       $user = { ID=>$name};
+                       $user = { ID=>decodeUUID($name)};
                        get_user_nick ($user);
                }
-               return ('MODE', undef, 1, WF_ALL, $user, $3, $4, $5);
+               my $argz = $6;
+               my @args = split(/ /, $argz);
+               my $modes = $5;
+               print "============MODES $modes=================\n";
+               print "5: $5\n";
+               print "6: $6\n";
+               my @modes = split(//, $modes);
+               my $newargs = "";
+               foreach my $mode (@modes) {
+                       if($mode eq '+' or $mode eq '-') { next; }
+                       my $arg = shift (@args);
+                       next if $arg eq '';
+                       my $id = encodeUUID($arg);
+                       my $tuser = {ID=>$id};
+                       my $nick = get_user_nick ($tuser);
+                       print "!!!!!!!!!!!1!!!!!$nick\n";
+                       $newargs .= ($newargs eq ""?$nick:" $nick"); # what an awful way to do it.
+               }
+               my $arguements;
+               if ($newargs eq "") {
+                       $arguements = $argz;
+               }
+               else {
+                       $arguements = $newargs;
+               }
+               return ('MODE', undef, 1, WF_ALL, $user, $3, $4, $arguements);
        }
        elsif($_[0] =~ /^:(\S+) (?:G|MODE) (\S+) :(\S+)$/) {
                # We shouldn't ever get this, as UMODE2 is preferred
-               $user = { ID => $1 };
+               $user = { ID => decodeUUID($1) };
                get_user_nick ($user);
                return ('UMODE', 0, 0, WF_ALL, $user, $3);
        }
 
 }
 
+
 sub MESSAGE($) {
        my ($event, @args);
        if($_[0] =~ /^(@|:)(\S+) (?:\!|PRIVMSG) (\S+) :(.*)$/) {
@@ -458,14 +510,14 @@ sub MESSAGE($) {
                }
                else {
                        $name = $2;
-                       $srcUser = {ID=>$name};
+                       $srcUser = {ID=>decodeUUID($name)};
                                unless (get_user_nick ($srcUser)) {
                                $srcUser = {NICK=>$name};
                                get_user_id ($name);
                        }
                }
                my $dest = $3;
-               $dstUser = {ID=>$dest};
+               $dstUser = {ID=>($dest)};
                unless (get_user_nick ($dstUser)) {
                        $dstUser = {NICK=>$dest};
                }
@@ -492,12 +544,12 @@ sub MESSAGE($) {
 
 sub AWAY($) {
        if($_[0] =~ /^:(\S+) (?:6|AWAY) :(.*)$/) {
-               my $user = {ID=>$1};
+               my $user = {ID=>decodeUUID($1)};
                get_user_nick($user);
                return ('AWAY', undef, undef, WF_ALL, $user, $2);
        }
        elsif($_[0] =~ /^:(\S+) (?:6|AWAY)$/) {
-               my $user = {ID => $1};
+               my $user = {ID => decodeUUID($1)};
                get_user_nick ($user);
                return ('BACK', undef, undef, WF_ALL, $user);
        }
@@ -507,10 +559,10 @@ sub NICK($) {
        my ($event, @args);
        #:97KAAAAAA NICK erry_ 1307878528
        if($_[0] =~ /^:(\S+) (?:NICK|\&) (\S+) :?(\S+)$/) {
-               my $user = {ID => $1};
+               my $user = {ID => decodeUUID($1)};
                get_user_nick ($user);
-               ircd::setRevUuid ($1, $2);
-               ircd::setUuid ($2, $1);
+               set_user_nick (decodeUUID($1), $2);
+               set_user_id ($2, decodeUUID($1));
                return ('NICKCHANGE', undef, undef, WF_NICK, $user, $2, $3);
        }
 }
@@ -518,7 +570,7 @@ sub NICK($) {
 sub QUIT($) {
        if ($_[0] =~ /^:(\S+) QUIT :Killed \((\S+) \((.*)\)\)$/) {
                #:583AAAAAH QUIT :Killed (erry (die))
-               my $victim = {ID=>$1};
+               my $victim = {ID=>decodeUUID($1)};
                get_user_nick ($victim);
                my $murderer = {NICK=>$2};
                get_user_id ($murderer);
@@ -526,14 +578,14 @@ sub QUIT($) {
                return ('KILL', 0, 1, WF_NICK, $murderer, $victim, $reason, undef);
        }
        elsif ($_[0] =~ /^:(\S+) QUIT :(.*)$/) {
-               my $user = {ID=>$1};
+               my $user = {ID=>decodeUUID($1)};
                get_user_nick ($user);
                return ('QUIT', 0, undef, WF_NICK, $user, $2);
        }
 }
 sub OPERQUIT ($) {
        if ($_[0] =~ /^:(\S+) QUIT :(.*)$/) {
-               my $user = {ID=>$1};
+               my $user = {ID=>decodeUUID($1)};
                get_user_nick ($user);
                return ('QUIT', 0, undef, WF_NICK, $user, $2);
        }
@@ -548,9 +600,9 @@ sub KILL($) {
        #And yes, for (some?) opers it's OPERQUIT not QUIT
        #Joy, JOY, JOY!
        $_[0] =~ /^:(\S+) KILL (\S+) :(.*)$/;
-       my $murderer = {ID=>$1};
+       my $murderer = {ID=>decodeUUID($1)};
        get_user_nick ($murderer);
-       my $victim = {ID=>$2};
+       my $victim = {ID=>decodeUUID($2)};
        get_user_nick ($victim);
        return ("KILL", 0, 1, WF_NICK, $murderer, $victim, $3, undef);
 }
@@ -566,7 +618,7 @@ sub KICK($) {
        else {
                $name = $2;
        }
-       my $user = {ID => $name};
+       my $user = {ID => decodeUUID($name)};
        unless (get_user_nick ($user)) {
                $user = {NICK => $name};
                get_user_id ($user);
@@ -612,7 +664,7 @@ sub IDENT($) {
 sub TOPIC($) {
        if ($_[0] =~ /^:(\S+) TOPIC (\S+) :(.*)$/) {
                #:583AAAAAF TOPIC #erry :Welcome to erry(world|net). Have a cookie.
-               my $setter = { ID => $1 };
+               my $setter = { ID => decodeUUID($1) };
                get_user_nick ($setter);
                return ('TOPIC', 0, 1, WF_ALL, $setter, $2, $setter, 0, $3);
        }
@@ -640,7 +692,7 @@ sub OPERTYPE ($) {
        #Every OPERTYPE will get +o, so it's safe to assume they're opers,
        #even if we don't give them privs (either in inspircd or srsv)
        $_[0] =~ /^:(\S+) OPERTYPE (\S+)$/;
-       my $user = { ID => $1 };
+       my $user = { ID => decodeUUID($1) };
        get_user_nick ($user);
        return ("OPERUP", 0, 0, WF_ALL, $user);
 }
@@ -899,6 +951,7 @@ BEGIN {
                OPERTYPE => \&OPERTYPE,
                OPERQUIT => \&OPERQUIT, #Opers are so special, they get their own QUIT. SOme of the time.
                CAPAB => \&CAPAB,
+               FMODE => \&FMODE
        );
 }
 
index 9909e4b57e8e206f38f5a826a841b1b021cbca10..235a81f2a9d123c25d936dd833142d76802db5d2 100644 (file)
@@ -26,7 +26,7 @@ use SrSv::Insp::UUID;
 use SrSv::Debug;
 use SrSv::Log;
 use Exporter 'import';
-our @EXPORT = qw (agent_doconn getRevUuid getUuid setRevUuid setUuid);
+our @EXPORT = qw (agent_doconn getAgentRevUuid getAgentUuid setAgentRevUuid setAgentUuid);
 # FIXME
 use constant {
        MAXBUFLEN => 510,
@@ -61,10 +61,10 @@ use SrSv::IRCd::Parse qw(parse_tkl parse_addline);
 use SrSv::Unreal::Base64 qw(itob64 b64toi);
 
 use SrSv::Text::Format qw( wordwrap );
-
+use SrSv::User '/./';
 use SrSv::Agent;
 
-use SrSv::Process::InParent qw(update_userkill getRevUuid getUuid setRevUuid SetUUid);
+use SrSv::Process::InParent qw(update_userkill getAgentRevUuid getAgentUuid setAgentRevUuid setAgentUuid);
 
 our %defer_mode;
 our %preconnect_defer_mode;
@@ -78,22 +78,44 @@ addhandler('NETINFO', undef(), undef(), 'ircd::netinfo', 1);
 addhandler('VERSION', undef(), undef(), 'ircd::version', 1);
 addhandler('SERVER', undef(), undef(), 'ircd::handle_server', 1);
 addhandler('ENDBURST',undef(),undef(),'ircd::endburst',1);
-sub getRevUuid($) {
+sub encodeUUID_ ($) {
+       my ($user) = @_;
+       if (ref ($user) ne "HASH") {
+               Carp::confess ("encodeUUID_ called on non-hash " . $user);
+               return;
+       }
+       if (defined ($user->{e_ID})) {
+               return $user->{e_ID};
+       }
+       if (!defined($user->{ID})) {
+               Carp::confess ("encodeUUID_ called on a user w/o id " , Dumper ($user));
+               return;
+       }
+       my $nick = $user->{NICK};
+       if (!defined ($nick)) {
+               $nick = get_user_nick ($user);
+       }
+       if (is_agent ($nick)) {
+               return $user->{e_ID} = $user->{ID};
+       }
+       return $user->{e_ID} = encodeUUID ($user->{ID});
+}
+sub getAgentRevUuid($) {
        my $id = $_[0];
        my $nick = $reverse_uuids{$id};
        $uuids{lc $nick} = $id;
        return $nick;
 }
-sub getUuid($) {
+sub getAgentUuid($) {
        my $nick = lc $_[0];
        my $id = $uuids{$nick};
        return $id;
 }
-sub setRevUuid ($$) {
+sub setAgentRevUuid ($$) {
        my ($id, $nick) = @_;
        $reverse_uuids{$id} = lc $nick;
 }
-sub setUuid ($$) {
+sub setAgentUuid ($$) {
        my ($nick, $id) = @_;
        $uuids{lc $nick} = $id;
 }
@@ -220,7 +242,7 @@ sub kick($$$$) {
        my ($src, $chan, $target, $reason) = @_;
        $src = $main_conf{local} unless initial_synced();
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        ircsend(":$srcId KICK $chan $targetId :$reason");
        callfuncs('KICK', 0, 2, [$srcId, $chan, $targetId, $reason]);
 }
@@ -228,7 +250,7 @@ sub kick($$$$) {
 sub invite($$$) {
        my ($src, $chan, $target) = @_;
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        ircsend(":$srcId INVITE $targetId $chan 0");
 }
 
@@ -300,7 +322,7 @@ sub notice($$@) {
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
        my $targetId;
        if (ref ($dst) eq "HASH") { #User Object
-               $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+               $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        }
        else { # /notice #channel This probably sucks. Blame erry :(
                $targetId = $dst;
@@ -314,7 +336,7 @@ sub ctcp($$@) {
        my ($src, $dst, $cmd, @toks) = @_;
        my $target = $dst; #lazy erry
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        privmsg($srcId, $targetId, "\x01".join(' ', ($cmd, @toks))."\x01");
 }
 
@@ -322,7 +344,7 @@ sub ctcp_reply($$@) {
        my ($src, $dst, $cmd, @toks) = @_;
        my $target = $dst; #lazy erry
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        notice($srcId, $targetId, "\x01".join(' ', ($cmd, @toks))."\x01");
 }
 
@@ -330,7 +352,7 @@ sub setumode($$$) {
        my ($src, $dst, $modes) = @_;
        my $target = $dst; #lazy erry
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        ircsend(":$srcId SVSMODE $targetId $modes");
        callfuncs('UMODE', 0, undef, [$dst, $modes]);
 }
@@ -376,6 +398,9 @@ sub setmode($$$;$) {
        my $srcId;
        if (initial_synced()) {
                if (ref($src) eq "HASH") {
+                       if ($src->{NICK} && !$src->{ID}) {
+                               get_user_id ($src);
+                       }
                        $srcId = ($src->{ID}?$src->{ID}:($src->{UUID}?$src->{UUID}:$src->{NICK}));
                }
                else {
@@ -388,12 +413,12 @@ sub setmode($$$;$) {
        }
        my $targetId;
        if (ref ($target) eq "HASH") {
-               $targetId = ($target->{UID}?$target->{UID}:($target->{ID}?encodeUUID($target->{ID}):$target->{NICK}));
+               $targetId = ($target->{UID}?$target->{UID}:($target->{ID}?encodeUUID_($target):$target->{NICK}));
        }
        else {
                $targetId = $target;
        }
-       callfuncs('MODE', undef, 1, [$srcId, $dst, $modes, $targetId]);
+       callfuncs('MODE', undef, 1, [$srcId, $dst, $modes, $targetId, $target]);
        print "$ircline -- setmode($srcId, $dst, $modes, $targetId)\n" if DEBUG;
        ircsend(":$srcId MODE $dst $modes $targetId");
 }
@@ -410,10 +435,10 @@ sub setmode_many($$$;@) {
        }
        my $parms = "";
        foreach my $target (@targets) { 
-               my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+               my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
                $parms .= ($parms eq ""?"":" ") . $targetId;
        }
-       callfuncs('MODE', undef, 1, [$srcId, $dst, $modes, $parms]);
+       callfuncs('MODE', undef, 1, [$srcId, $dst, $modes, $parms, @targets]);
        print "$ircline -- setmode($srcId, $dst, $modes, $parms)\n" ;
        ircsend(":$srcId MODE $dst $modes $parms");
 }
@@ -488,7 +513,7 @@ sub kline ($$$$$) {
 sub unkline ($$$) {
        my ($setter, $ident, $host) = @_;
        my $line = "TKL - G $ident $host $setter";
-       my $setId = getUuid($setter);
+       my $setId = getAgentUuid($setter);
     if ($setId) { $setter = $setId; }
        #:583AAAAAE DELLINE G test@test.com
        my $line = ":$setter DELLINE G $ident\@$host";
@@ -499,7 +524,7 @@ sub unkline ($$$) {
 sub zline ($$$$) {
        my ($setter, $host, $expiry, $reason) = @_;
        $setter=$main_conf{local} unless defined($setter);
-       my $setId = getUuid($setter);
+       my $setId = getAgentUuid($setter);
     if ($setId) { $setter = $setId; }
     #:583AAAAAE ADDLINE Z test.com inspircd.erry.omg 1308216407 0 :go away
        my $line = ":$setter ADDLINE Z $host " . $main_conf{local} . " ". time() . " " . ($expiry)." :$reason";
@@ -509,7 +534,7 @@ sub zline ($$$$) {
 
 sub unzline ($$) {
        my ($setter, $host) = @_;
-       my $setId = getUuid($setter);
+       my $setId = getAgentUuid($setter);
     if ($setId) { $setter = $setId; }
        my $line = ":$setter DELLINE Z $host";
        ircsend($line);
@@ -542,7 +567,7 @@ sub irckill($$$) {
        my ($src, $target, $reason) = @_;
        $src = $main_conf{local} unless initial_synced();
        my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        my $srcNick = $target->{NICK};
        return 0 unless update_userkill($targetId);
        ircsendimm(":$srcId KILL $targetId :($reason)");
@@ -567,7 +592,7 @@ sub svsnick($$$) {
     # warning, if misused, this can KILL the user
     # with a collision
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
     ircsend(":$srcId SVSNICK $targetId $newnick ".time);
 }
 
@@ -588,7 +613,7 @@ sub svswatch ($$@) {
 # *** We do not track this info nor care.
        my ($src, $target, @watchlist) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        my $base_str = ":$srcId SVSWATCH $targetId ";
        my $send_str = $base_str;
        while (@watchlist) {
@@ -609,7 +634,7 @@ sub svssilence ($$@) {
 # *** We do not track this info nor care.
        my ($src, $target, @silencelist) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        my $base_str = ":$srcId SVSSILENCE $targetId ";
        my $send_str = $base_str;
        while (@silencelist) {
@@ -649,26 +674,26 @@ sub swhois($$$) {
 
 sub svsjoin($$@) {
        my ($src, $target, @chans) = @_;
-       while(my @chanList = splice(@chans, 0, 10)) {
-       # split into no more than 10 at a time.
-               __svsjoin($src, $target, @chanList);
+       foreach my $chan (@chans) {
+               # insp only allows one at the time. 
+               __svsjoin($src, $target, $chan);
        }
 }
 
 sub __svsjoin($$@) {
-    my ($src, $target, @chans) = @_;
+    my ($src, $target, $chan) = @_;
     # a note. a JOIN is returned back to us on success
     # so no need to process this command.
     # similar for svspart.
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
-    ircsend(($srcId?":$srcId":'')." SVSJOIN $targetId ".join(',', @chans));
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
+    ircsend(($srcId?":$srcId":'')." SVSJOIN $targetId $chan");
 }
 
 sub svspart($$$@) {
     my ($src, $target, $reason, @chans) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
     ircsend(($srcId ? ":$srcId" : '')." SVSPART $targetId ".join(',', @chans).
        ($reason ? " :$reason" : ''));
 }
@@ -758,7 +783,7 @@ sub userip($) {
 sub chghost($$$) {
        my ($src, $target, $vhost) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        ircsend(($srcId?":$srcId ":'')." CHGHOST $targetId $vhost");
         callfuncs('CHGHOST', 0, 1, [$srcId, $targetId, $vhost]);
 }
@@ -766,7 +791,7 @@ sub chghost($$$) {
 sub chgident($$$) {
        my ($src, $target, $ident) = @_;
     my $srcId = ($src->{ID}?$src->{ID}:$src->{NICK});
-       my $targetId = ($target->{ID}?encodeUUID($target->{ID}):$target->{NICK});
+       my $targetId = ($target->{ID}?encodeUUID_($target):$target->{NICK});
        ircsend(($src?":$srcId ":'')." CHGIDENT $targetId $ident");
         callfuncs('CHGIDENT', 0, 1, [$srcId, $targetId, $ident]);
 }
@@ -786,7 +811,7 @@ sub agent_dojoin($$) {
        my ($agent, $chan) = @_;
        my $srcId;
        if (ref($agent) ne "HASH") {
-               $srcId = getUuid($agent);
+               $srcId = getAgentUuid($agent);
                if (!$srcId) {
                        $srcId = $agent;
                }
@@ -802,7 +827,7 @@ sub agent_dopart ($$$) {
        my ($agent, $chan, $reason) = @_;
        my $srcId;
        if (ref($agent) ne "HASH") {
-               $srcId = getUuid($agent);
+               $srcId = getAgentUuid($agent);
                if (!$srcId) {
                        $srcId = $agent;
                }
@@ -880,8 +905,8 @@ sub agent_doconn ($$$$$) {
        my $char = chr($count);
        my $uuid = $main_conf{numeric} . "AAAAA" . $char; #FIXME - erry
        ircsend(":" . $main_conf{numeric} . " UID" . " $uuid " . time . " $nick $host $host $ident 127.0.0.1 ". (time+5) . " $modes " . ":$gecos" );
-       setUuid($nick,$uuid);
-       setRevUuid($uuid, $nick);
+       setAgentUuid($nick,$uuid);
+       setAgentRevUuid($uuid, $nick);
        $count++;
 }
 
index 985f3c936c730d7ac4ae3eac9870711db2759f99..bd01109a3a66977043cf006d5f0c72dbcb63b4e3 100644 (file)
@@ -68,6 +68,7 @@ sub decodeSID(@) {
        return $sidN;
 }
 sub decodeUUID($) {
+       local $SIG{__WARN__} = sub { ircd::debug (split($/, Carp::longmess(@_))) };
        my ($UUID) = @_;
        my @chars = split(//, $UUID);
        #my @sidC = @chars[0..2];
@@ -98,6 +99,7 @@ sub int2chars($$) {
        }
 }
 sub encodeUUID($) {
+       local $SIG{__WARN__} = sub { ircd::debug (split($/, Carp::longmess(@_))) };
        my ($int) = @_;
        my $SID_int = ($int & (SID_BITMASK)) >> UID_BITS;
        my $UID_int = $int & UID_BITMASK;
index 97064b0da7287b9e420deecda9d6c786932caddb..a0c297193c5e16892b901da375e2180b21cd013d 100644 (file)
@@ -67,7 +67,7 @@ sub wlog($$$) {
        my $prefix;
        $prefix = "\002\00304" if($level > LOG_INFO);
        $prefix .= $levels[$level];
-       my $rsuser = { NICK => $main::rsnick, ID => ircd::getUuid($main::rsnick) };
+       my $rsuser = { NICK => $main::rsnick, ID => ircd::getAgentUuid($main::rsnick) };
        ircd::privmsg($rsuser, main_conf_diag, "$prefix\: ($service) $text");
        write_log('diag', '<'.$main::rsnick.'>', "$prefix\: ($service) $text");
 }
index 3c064c543172fc20f436a1fcf8235c650e058e85..1f08425ed3f1474c56d5b52f6f1115cdc92761d4 100644 (file)
@@ -43,6 +43,7 @@ BEGIN {
                flood_inc flood_check get_flood_level
                kill_user kline_user
                __flood_expire
+               set_user_id set_user_nick
                ),
                keys(%constants));
        my @flood = qw( flood_inc flood_check get_flood_level );
@@ -84,6 +85,8 @@ our (
        $get_user_flags, $set_user_flag, $unset_user_flag, $set_user_flag_all,
 
        $get_host, $get_vhost, $get_cloakhost,
+       $set_user_id, $set_user_nick
+
 );
 
 proc_init {
@@ -100,6 +103,8 @@ proc_init {
        $get_host = $dbh->prepare("SELECT ident, host FROM user WHERE id=?");
        $get_vhost = $dbh->prepare("SELECT ident, vhost FROM user WHERE id=?");
        $get_cloakhost = $dbh->prepare("SELECT 1, cloakhost FROM user WHERE id=?");
+       $set_user_id = $dbh->prepare("UPDATE user SET id=? WHERE nick=?");
+       $set_user_nick = $dbh->prepare("UPDATE user SET nick=? WHERE id=?");
 };
 require SrSv::MySQL::Stub;
 import SrSv::MySQL::Stub {
@@ -110,7 +115,14 @@ import SrSv::MySQL::Stub {
        __get_user_info => ['ROW', "SELECT ident, host, vhost, gecos, server, time, quittime
                FROM user WHERE id=?"],
 };
-
+sub set_user_nick($$) {
+       my ($id, $nick) = @_;
+       $set_user_nick -> execute ($id, $nick);
+}
+sub set_user_id ($$) {
+       my ($nick, $id) = @_;
+       $set_user_id -> execute ($nick, $id);
+}
 sub get_flood_level($) {
        my ($user) = @_;
 
@@ -158,19 +170,19 @@ sub get_user_id($) {
        my ($id, $n);
        unless(ref($user) eq 'HASH') {
                print "USER $user\mn";
-               Carp::confess("invalid get_user_id call");
+               die("invalid get_user_id call");
        }
        my $nick = $user->{NICK};
        if($nick eq '') {
                print "USER " . Dumper($user);
-               Carp::confess("get_user_id called on empty string");
+               die("get_user_id called on empty string");
        }
-       my $properId = ircd::getUuid ($user->{NICK});
-       print "PROPERID $properId\n";
-       if ($properId != undef) {
-               print "CALLING DECODE\n";
-               $properId = decodeUUID($properId);
-               return $user->{ID} = $properId;
+       if (is_agent ($user->{NICK})) {
+               my $properId = ircd::getAgentUuid ($user->{NICK});
+               if ($properId != undef) {
+                       $properId = ($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}; }
@@ -204,20 +216,12 @@ sub get_user_nick($) {
                die("invalid get_user_nick call");
        }
        if (exists($user->{ID})) {
-               if (my $nick = ircd::getRevUuid ($user->{ID})) {
+               if (my $nick = ircd::getAgentRevUuid ($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};
-               }
+               return $user->{NICK};
        }
 
        # Possible bug? This next bit only works to chase the nick-change
index 82b3f14edf2cfbcf827107585066e2b0d7f84193..7384a1e9da1343199809d72e79c5e922f0bed582 100644 (file)
@@ -42,7 +42,7 @@ proc_init {
 };
 
 our $rsnick = 'ServServ';
-our $rsUser = { NICK => $rsnick, ID => 1 };
+our $rsUser = { NICK => $rsnick, ID => ircd::getAgentUuid($rsnick) };
 addhandler('STATS', undef, undef, 'core::stats');
 sub stats($$) {
        my ($src, $token) = @_;
@@ -74,9 +74,10 @@ sub ev_connect {
 addhandler('PRIVMSG', undef, 'servserv', 'core::dispatch', 1);
 
 sub dispatch {
+       our $rsUser = { NICK => $rsnick, ID => ircd::getAgentUuid($rsnick) };
        my ($user, $dstUser, $msg) = @_;
        return unless (lc $dstUser->{NICK} eq lc $rsnick);
-       $user->{AGENT} = $dstUser;
+       $user->{AGENT} = $rsUser;
        my $src = $user->{NICK};
        my $dst = $dstUser->{NICK};
        if(!adminserv::is_ircop($user)) {
index 979cfb56e681ad74351ab21376ea215f1f295728..377b9ebbc3be7dc4926ab15c8155ec71e43c8620 100644 (file)
@@ -34,7 +34,7 @@ use modules::serviceslibs::operserv;
 use modules::serviceslibs::botserv;
 use modules::serviceslibs::memoserv;
 use modules::serviceslibs::hostserv;
-
+use modules::nullserv;
 *conf = \%services_conf; # only used in some help docs
 
 our @agents = (
@@ -104,6 +104,7 @@ addhandler('KILL', undef, undef, 'nickserv::killhandle');
 
 addhandler('NICKCONN', undef, undef, 'services::ev_nickconn');
 sub ev_nickconn {
+       print "NICKCONN\n";
     nickserv::nick_create(@_[0,2..4,8,5..7,9,10,11]);
 }
 
index 11fdfab4e7fb0ba7410e001dcf2660e99f775d09..d2473cbbcee2ab7340f38b1dfb6f2b460596aed9 100644 (file)
@@ -43,7 +43,7 @@ our (%flags, @levels, @defflags, $allflags);
 
 our $asnick_default = 'AdminServ';
 our $asnick = $asnick_default;
-our $asuser = { NICK => $asnick, ID => "123AAAAAG" };
+our $asuser = { NICK => $asnick, ID => ircd::getAgentUuid($asnick) };
 
 our (@levels, @defflags);
 BEGIN {
@@ -108,13 +108,14 @@ sub init() {
 ### ADMINSERV COMMANDS ###
 
 sub dispatch($$$) {
+       $asuser = { NICK => $asnick, ID => ircd::getAgentUuid($asnick) };
        my ($user, $dstUser, $msg) = @_;
        $msg =~ s/^\s+//;
        my @args = split(/\s+/, $msg);
        my $cmd = shift @args;
-       $user -> {AGENT} = $dstUser;
-       my $src = $user->{NICK};
        return unless (lc $dstUser->{NICK} eq lc $asnick);
+       $user -> {AGENT} = $asuser;
+       my $src = $user->{NICK};
        services::ulog($asuser, LOG_INFO(), "cmd: [$msg]", $user);
 
        unless(is_svsop($user) or is_ircop($user)) {
index 0ebedf2651b3bbb58df18a981d7c450c8bd8ece0..4b35086268077ad77eb8d771d8d74a1dfdaad4c1 100644 (file)
@@ -45,7 +45,7 @@ use constant {
 our $bsnick_default = 'BotServ';
 our $bsnick = $bsnick_default;
 our $botchmode;
-our $bsuser = { NICK => $bsnick, ID => "123AAAAAF" };
+our $bsuser = { NICK => $bsnick, ID => ircd::getAgentUuid($bsnick) };
 
 *agent = \&chanserv::agent;
 
@@ -91,8 +91,9 @@ sub init() {
 };
 
 sub dispatch($$$) {
+       $bsuser = { NICK => $bsnick, ID => ircd::getAgentUuid($bsnick) };
     my ($user, $dstUser, $msg) = @_;
-       $user -> {AGENT} = $dstUser;
+       $user -> {AGENT} = $bsuser;
        my $src = $user->{NICK};
        my $dst = $dstUser->{NICK};
        if(lc $dstUser->{NICK} eq lc $bsnick or lc $dstUser->{NICK} eq lc $bsnick_default ) {
@@ -252,7 +253,7 @@ sub bs_assign($$$) {
 
        if($bot) {
                $assign_bot->execute($bot, $cn);
-               my $botUser = { NICK=>$bot, ID=>ircd::getUuid($bot) };
+               my $botUser = { NICK=>$bot, ID=>ircd::getAgentUUID ($bot) };
                bot_join($chan, $botUser);
                notice($user, "\002$bot\002 now assigned to \002$cn\002.");
        } else {
@@ -318,7 +319,7 @@ sub bs_add($$$$$) {
        get_user_id ($bot);
        my $rsuser = { NICK => $main::rsnick };
        get_user_id ($rsuser);
-       $rsuser->{ID} = encodeUUID($rsuser->{ID});
+       $rsuser->{ID} = ($rsuser->{ID});
        ircd::setmode($rsuser, main_conf_diag, '+h', $bot);
        notice($user, "Bot $botnick connected.");
 }
@@ -461,7 +462,7 @@ sub bs_change($$$$$$) {
        my $rsnick = $main::rsnick;
        my $rsuser = { NICK => $main::rsnick };
        get_user_id ($rsuser);
-       $rsuser->{ID} = encodeUUID($rsuser->{ID});
+       $rsuser->{ID} = ($rsuser->{ID});
        my $bot = { NICK => $botnick };
        get_user_id ($bot);
        ircd::setmode($rsuser, main_conf_diag, '+h', $bot);
@@ -471,7 +472,7 @@ sub bs_change($$$$$$) {
        $get_bots_chans->execute($oldnick);
        while(my ($cn) = $get_bots_chans->fetchrow_array()) {
                my $chan = { CHAN => $cn };
-               my $botUser = { NICK=>$botnick, ID=>ircd::getUuid($botnick) };
+               my $botUser = { NICK=>$botnick, ID=>ircd::getAgentUuid($botnick) };
                bot_join($chan, $botUser)
                        if chanserv::get_user_count($chan) or cr_chk_flag($chan, CRF_BOTSTAY(), 1);
        }
@@ -830,7 +831,7 @@ sub register() {
        while(my ($nick, $ident, $vhost, $gecos, $flags) = $get_all_bots->fetchrow_array) {
                agent_connect($nick, $ident, $vhost, '+pqBSrz'.(($flags & F_DEAF())?'d':''), $gecos);
                ircd::sqline($nick, $services::qlreason);
-               my $bot = { NICK => $nick, ID=>ircd::getUuid($nick) };
+               my $bot = { NICK => $nick, ID=>ircd::getAgentUuid($nick) };
                agent_join($nick, main_conf_diag);
                my $rsuser = { NICK => $main::rsnick };
                get_user_id ($rsuser);
@@ -843,11 +844,12 @@ sub eos() {
        while(my ($cn, $nick) = $get_botchans->fetchrow_array) {
                my $chan = { CHAN => $cn };
                if(chanserv::get_user_count($chan)) {
-                       my $botUser = { NICK=>$nick, ID=>ircd::getUuid($nick) };
+                       my $botUser = { NICK=>$nick };
+                       get_user_id ($botUser);
                        bot_join($chan, $botUser);
                }
                elsif(cr_chk_flag($chan, CRF_BOTSTAY(), 1)) {
-                       my $botUser = { NICK=>$nick, ID=>ircd::getUuid($nick) };
+                       my $botUser = { NICK=>$nick, ID=>ircd::getAgentUuid($nick) };
                        bot_join($chan, $botUser);
                        my $modelock = chanserv::get_modelock($chan);
                        ircd::setmode(main_conf_local, $cn, $modelock) if $modelock;
@@ -876,7 +878,7 @@ sub bot_join($;$) {
        my $nick = $bot->{NICK};
        unless(is_agent_in_chan($nick, $cn)) {
                agent_join($bot, $cn);
-               my $bot2 = { NICK => $nick, ID => ircd::getUuid($nick), UID=>ircd::getUuid($nick) };
+               my $bot2 = { NICK => $nick, ID => ircd::getAgentUuid($nick), UID=>ircd::getAgentUuid($nick) };
                if(!ircd::PREFIXAQ_DISABLE() && $IRCd_capabilities{"FOUNDER"} ne "" && $IRCd_capabilities{"ADMIN"} ne "") {
                        $botchmode = '+q';
                } else {
index 94ec077bb75e661f602b92bb3b479642bad95a98..0c245837844b6d1611831eb5182dacc64eff97ff 100644 (file)
@@ -142,7 +142,7 @@ $chanuser_table = 0;
 
 our $csnick_default = 'ChanServ';
 our $csnick = $csnick_default;
-our $csUser = { NICK => $csnick, ID => "123AAAAAC" };
+our $csUser = { NICK => $csnick, ID => ircd::getAgentUuid($csnick) };
 
 our ($cur_lock, $cnt_lock);
 
@@ -541,12 +541,13 @@ our %high_priority_cmds = (
 );
 
 sub dispatch($$$) {
+       our $csUser = { NICK => $csnick, ID => ircd::getAgentUuid($csnick) };
        my ($user, $dstUser, $msg) = @_;
        my $src = $user->{NICK};
        $msg =~ s/^\s+//;
        my @args = split(/\s+/, $msg);
        my $cmd = shift @args;
-       $user->{AGENT} = $dstUser;
+       $user->{AGENT} = $csUser;
        get_user_id ($user);
        return if flood_check($user);
        return unless (lc $dstUser->{NICK} eq lc $csnick);
@@ -2214,7 +2215,7 @@ sub cs_setmodes($$$@) {
                        }
                }
                get_user_id ($tuser);
-               push @modes, [($de ? '-' : '+').$l[$level], $tuser->{ID}];
+               push @modes, [($de ? '-' : '+').$l[$level], $tuser];
                $count++;
 
        }
@@ -2274,7 +2275,8 @@ sub cs_kick($$$;$$) {
 
        my @targets = split(/\,/, $target);
        foreach $target (@targets) {
-               my $tuser = { NICK => $target, UID => ircd::getUuid ($target) };
+               my $tuser = { NICK => $target };
+               get_user_id ($tuser);
                my $targetlevel = get_best_acc($tuser, $chan);
 
                if(lc $target eq lc agent($chan) or adminserv::is_service($tuser)) {
@@ -4425,7 +4427,7 @@ sub agent($) {
 
        if($chan->{AGENT}) {
                my $a = $chan->{AGENT};
-               $a->{ID} = ircd::getUuid($a->{NICK});
+               $a->{ID} = ircd::getAgentUuid($a->{NICK});
                return $a;
        }
        
@@ -4434,7 +4436,7 @@ sub agent($) {
        }
        $botserv::get_chan_bot->execute($chan->{CHAN});
        my $agentnick = $botserv::get_chan_bot->fetchrow_array;
-       my ($agent) = { NICK => $agentnick, ID => ircd::getUuid($agentnick)};
+       my ($agent) = { NICK => $agentnick, ID => ircd::getAgentUuid($agentnick)};
        $agent = $csUser unless $agentnick;
        return $chan->{AGENT} = $agent;
 }
@@ -4599,7 +4601,9 @@ sub user_join_multi($$) {
        my $seq = $ircline;
        my $multi_tradeoff = 2; # could use some synthetic-benchmark tuning
        foreach my $user (@$users) {
-               print "USER " . Dumper($user); 
+               if ($user->{ID} && !$user->{NICK}) {
+                       get_user_nick ($user); # INSP
+               }
                $user->{__ID} = get_user_id($user);
                unless (defined($user->{__ID})) {
                        # This does happen occasionally. it's a BUG.
@@ -4758,14 +4762,16 @@ sub channel_emptied($) {
 
 sub process_kick($$$$) {
        my ($src, $cn, $target, $reason) = @_;
-       my $tuser = { NICK => $target, ID => ircd::getUuid($target)};
+       my $tuser = { NICK => $target };
+       get_user_id ($tuser);
        user_part($tuser, $cn, 'Kicked by '.$src.' ('.$reason.')');
 
        my $chan = { CHAN => $cn };
        if ( !(is_agent($src) or $src =~ /\./ or adminserv::is_ircop({ NICK => $src })) and
                ({modes::splitmodes(get_modelock($chan))}->{Q}->[0] eq '+') )
        {
-               my $srcUser = { NICK => $src, ID => ircd::getUuid($src) };
+               my $srcUser = { NICK => $src };
+               get_user_id ($srcUser);
                #ircd::irckill(agent($chan), $src, "War script detected (kicked $target past +Q in $cn)");
                nickserv::kline_user($srcUser, 300, "War script detected (kicked $target past +Q in $cn)");
                # SVSJOIN won't work while they're banned, unless you invite.
@@ -4775,8 +4781,9 @@ sub process_kick($$$$) {
        }
 }
 
-sub chan_mode($$$$) {
-       my ($user, $cn, $modes, $args) = @_;
+sub chan_mode($$$$@) {
+       my ($user, $cn, $modes, $args, @userargs) = @_;
+       print "CHAN_MODE $user $cn $modes $args\n";
        my $src;
        if (ref($user) eq "HASH") {
                $src = $user->{NICK};
@@ -4808,35 +4815,32 @@ sub chan_mode($$$$) {
                if($mode eq '-') { $sign = 0; next; }
                
                my $arg = shift(@args) if($mode =~ $scm or $mode =~ $ocm);
-               my $auser;
-               if ($IRCd_capabilities {"INSP"} == 1) { #FIXME this is awful
-                       $auser = { ID => $arg };
-               }
-               else {
-                       $auser = { NICK => $arg };
-               }       
                if($mode =~ /^[vhoaq]$/) {
                        next if $arg eq '';
                        next if is_agent($arg);
+                       my $auser = shift (@userargs);
+                       if (!defined($auser)) {
+                               if ($IRCd_capabilities{INSP}) {
+                                       $auser = {ID=>$arg};
+                                       get_user_nick ($auser);
+                               }
+                               else {
+                                       $auser = { NICK => $arg };
+                                       get_user_id ($auser);
+                               }
+                       }
                        $num = 0 if $mode eq 'v';
                        $num = 1 if $mode eq 'h';
                        $num = 2 if $mode eq 'o';
                        $num = 3 if $mode eq 'a';
                        $num = 4 if $mode eq 'q';
-
                        if($opguard and $sign == 1 and
                                !can_keep_op($user, $chan, $auser, $mode)
                        ) {
                                push @unargs, ["-" . $mode, $auser];
                        } else {
                                my $nid;
-                               if (!$auser->{ID} && $auser->{NICK}) {
-                                       $nid = get_user_id($auser) or next;
-                               }
-                               elsif ($auser->{ID} && !$auser->{NICK}) {
-                                       $nid = decodeUUID($auser->{ID});
-                                       get_user_nick ($auser);
-                               }
+                               $nid = get_user_id($auser) or next;
                                my ($r, $i);
                                do {
                                        if($sign) {
index 6383b1f7cb56177d3a31a09d465530cd8a38b116..376dab55d8a447987ebb2ab808f64d21e9d3e77f 100644 (file)
@@ -36,7 +36,7 @@ require SrSv::DB::StubGen;
 
 our $hsnick_default = 'HostServ';
 our $hsnick = $hsnick_default;
-our $hsuser = { NICK => $hsnick, ID => "123AAAAAH" };
+our $hsuser = { NICK => $hsnick, ID => ircd::getAgentUuid($hsnick) };
 sub init() {
 import SrSv::DB::StubGen (
        dbh => $dbh,
@@ -57,12 +57,13 @@ services_mysql_stubgen(
 }
 
 sub dispatch($$$) {
+       $hsuser = { NICK => $hsnick, ID => ircd::getAgentUuid($hsnick) };
        my ($user, $dstUser, $msg) = @_;
        my $src = $user->{NICK};
        $msg =~ s/^\s+//;
        my @args = split(/\s+/, $msg);
        my $cmd = shift @args;
-       $user->{AGENT} = $dstUser;
+       $user->{AGENT} = $hsuser;
        get_user_id ($user);
        return if flood_check($user);
        return unless (lc $dstUser->{NICK} eq lc $hsnick);
index d58d1b4379adbec1d5f0c32d51c0347b5980b4a7..a7e145d6a12cc1e9c8a5f2131a6fff2070205e90 100644 (file)
@@ -48,7 +48,7 @@ use constant (
 
 our $msnick_default = 'MemoServ';
 our $msnick = $msnick_default;
-our $msuser = { NICK => $msnick, ID => "123AAAAAE" };
+our $msuser = { NICK => $msnick, ID => ircd::getAgentUuid($msnick) };
 our (
        $send_memo, $send_chan_memo, $get_chan_recipients,
 
@@ -122,11 +122,12 @@ sub init() {
 ### MEMOSERV COMMANDS ###
 
 sub dispatch($$$) {
+       $msuser = { NICK => $msnick, ID => ircd::getAgentUuid($msnick) };
        my ($user, $dstUser, $msg) = @_;
        $msg =~ s/^\s+//;
        my @args = split(/\s+/, $msg);
        my $cmd = shift @args;
-       $user -> {AGENT} = $dstUser;
+       $user -> {AGENT} = $msuser;
        return unless (lc $dstUser->{NICK} eq lc $msnick);
        get_user_id ($user);
        return if flood_check($user);
index 97a73cf50e21e55e5fbdd1131b6d376ff945ab98..19631885f2efe25631c7e7b116c8f97da83c84b7 100644 (file)
@@ -48,7 +48,7 @@ use SrSv::NickControl::Enforcer qw(%enforcers);
 use SrSv::Email;
 use SrSv::Insp::UUID;
 use SrSv::Util qw( makeSeqList );
-use SrSv::IRCd::Send qw (getRevUuid    ircd::getUuid setRevUuid setUuid);
+use SrSv::IRCd::Send qw (getAgentRevUuid ircd::getAgentUuid);
 use SrSv::Debug;
 
 use SrSv::NickReg::NickText;
@@ -78,7 +78,7 @@ use constant {
 
 our $nsnick_default = 'NickServ';
 our $nsnick = $nsnick_default;
-our $nsuser = { NICK => $nsnick, ID => "123AAAAAB" }; #FIXME - erry
+our $nsuser = { NICK => $nsnick, ID => ircd::getAgentUuid($nsnick) }; #FIXME - erry
 our $cur_lock;
 our $cnt_lock = 0;
 
@@ -657,16 +657,15 @@ our %high_priority_cmds = (
 );
 
 sub dispatch($$$) {
-       $nsuser = { NICK => $nsnick, ID => "123AAAAAB" }; #FIXME = erry
+       $nsuser = { NICK => $nsnick, ID => ircd::getAgentUuid($nsnick) }; 
        my ($user, $dstUser, $msg) = @_;
        return unless (lc $dstUser->{NICK} eq lc $nsnick);
        $msg =~ s/^\s+//;
        my @args = split(/\s+/, $msg);
        my $cmd = shift @args;
-       print "NICKSERV: USER " . $user . "\n";
        get_user_id ($user);
        my $src = $user->{NICK};
-       $user->{AGENT} = $dstUser;
+       $user->{AGENT} = $nsuser;
        return if flood_check($user);
        if(!defined($high_priority_cmds{lc $cmd}) &&
                !adminserv::is_svsop($user) &&
@@ -2823,7 +2822,7 @@ sub do_expired_silences($$) {
 
        foreach my $user (get_nick_users $nick) {
                $user->{AGENT} = $nsnick;
-               $user->{ID} = ircd::getUuid($nick);
+               get_user_id ($user);
                ircd::svssilence($nsuser, $user, map ( { '-'.$_->[0] } @entries) );
                #notice($user, "The following SILENCE entries have expired: ".
                #       join(', ', map ( { $_->[0] } @entries) ));
@@ -2931,6 +2930,7 @@ sub protect($) {
 sub warn_countdown($) {
        my ($cookie)  = @_;
        my ($nick, $rem) = split(/ /, $cookie);
+       $nsuser = { NICK => $nsnick, ID => ircd::getAgentUuid($nsnick) }; 
        my $user = { NICK => $nick, AGENT => $nsuser };
        get_user_id($user);
        if (is_identified($user, $nick)) {
@@ -3296,7 +3296,6 @@ 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);
index 8461eb7ccb3b73cb9dad782c5794283a0e0a1cde..b8bf2b9ddbc462a8921c478cc2263f3e9b738755 100644 (file)
@@ -47,7 +47,7 @@ use constant {
 
 our $osnick_default = 'OperServ';
 our $osnick = $osnick_default;
-our $osuser = { NICK => $osnick, ID => "123AAAAAD" };
+our $osuser = { NICK => $osnick, ircd::getAgentUuid($osnick) };
 my %newstypes = (
        u => 'User',
        o => 'Oper'
@@ -138,11 +138,12 @@ sub init() {
 }
 
 sub dispatch($$$) {
+       $osuser = { NICK => $osnick, ircd::getAgentUuid($osnick) };
        my ($user, $dstUser, $msg) = @_;
        $msg =~ s/^\s+//;
        my @args = split(/\s+/, $msg);
        my $cmd = shift @args;
-       $user -> {AGENT} = $dstUser;
+       $user -> {AGENT} = $osuser;
        my $src = $user -> {NICK};
        return unless (lc $dstUser->{NICK} eq lc $osnick);
        get_user_id ($user);
@@ -1010,7 +1011,7 @@ sub os_gline($$$@) {
        }
        unless($zline) {
                if(!$remove) {
-                       ircd::kline(ircd::getUuid($osnick), $ident, $host, $expiry, $reason);
+                       ircd::kline(($osuser), $ident, $host, $expiry, $reason);
                } else {
                        ircd::unkline($opernick, $ident, $host);
                }