secure auth now also in rcon2irc
authordiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Thu, 9 Apr 2009 07:52:43 +0000 (07:52 +0000)
committerdiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Thu, 9 Apr 2009 07:52:43 +0000 (07:52 +0000)
git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6462 f962a42d-fe04-0410-a3ab-8c8b0445ebaa

server/rcon2irc/rcon2irc-example.conf
server/rcon2irc/rcon2irc.pl

index 5cc2068..d899372 100644 (file)
@@ -26,13 +26,14 @@ irc_channel = #Nexuiz-Pwayers
 #irc_trigger = nexnexnex
 
 # Tuning
+#dp_secure = 1
 #dp_server_from_wan =
-#dp_listen = 141.2.16.23:27771
+#dp_listen = 
 #dp_status_delay = 30
 #irc_reconnect_delay = 300
 #irc_admin_timeout = 3600
 #irc_admin_quote_re =
-#irc_local = 141.2.16.23
+#irc_local = 
 #irc_ping_delay = 120
 #irc_nickserv_identify = PRIVMSG NickServ :IDENTIFY %2$s
 #irc_nickserv_ghost = PRIVMSG NickServ :GHOST %1$s %2$s
@@ -46,3 +47,6 @@ irc_channel = #Nexuiz-Pwayers
 #irc_nickserv_identify = AUTHSERV AUTH myauthname %2$s
 #irc_nickserv_ghost =
 #irc_nickserv_ghost_attempts = 0
+
+# Example: connect to a non-secure DP server
+#dp_secure = 0
index d79562b..b6c7100 100755 (executable)
@@ -436,16 +436,19 @@ sub fds($)
 package Channel::QW;
 use strict;
 use warnings;
+use Digest::HMAC;
+use Digest::MD4;
 
 # Constructor:
 #   my $chan = new Channel::QW($connection, "password");
-sub new($$)
+sub new($$$)
 {
-       my ($class, $conn, $password) = @_;
+       my ($class, $conn, $password, $secure) = @_;
        my $you = {
                connector => $conn,
                password => $password,
                recvbuf => "",
+               secure => $secure,
        };
        return
                bless $you, 'Channel::QW';
@@ -461,7 +464,16 @@ sub join_commands($@)
 sub send($$$)
 {
        my ($self, $line, $nothrottle) = @_;
-       return $self->{connector}->send("\377\377\377\377rcon $self->{password} $line");
+       if($self->{secure})
+       {
+               my $t = sprintf "%ld", time();
+               my $key = Digest::HMAC::hmac("$t $line", $self->{password}, \&Digest::MD4::md4);
+               return $self->{connector}->send("\377\377\377\377srcon HMAC-MD4 TIME $key $t $line");
+       }
+       else
+       {
+               return $self->{connector}->send("\377\377\377\377rcon $self->{password} $line");
+       }
 }
 
 # Note: backslash and quotation mark escaping is a DarkPlaces extension.
@@ -653,6 +665,7 @@ our %config = (
        irc_quakenet_challengeprefix => ':Q!TheQBot@CServe.quakenet.org NOTICE [^:]+ :CHALLENGE',
 
        dp_server => undef,
+       dp_secure => 1,
        dp_listen => "", 
        dp_password => undef,
        dp_status_delay => 30,
@@ -740,7 +753,7 @@ $SIG{TERM} = sub {
 # Create the two channels to gateway between...
 
 $channels{irc} = new Channel::Line(new Connection::Socket(tcp => $config{irc_local} => $config{irc_server} => 6667));
-$channels{dp} = new Channel::QW(my $dpsock = new Connection::Socket(udp => $config{dp_listen} => $config{dp_server} => 26000), $config{dp_password});
+$channels{dp} = new Channel::QW(my $dpsock = new Connection::Socket(udp => $config{dp_listen} => $config{dp_server} => 26000), $config{dp_password}, $config{dp_secure});
 $config{dp_listen} = $dpsock->sockname();
 print "Listening on $config{dp_listen}\n";