[nexuiz-commits] r6462 - trunk/server/rcon2irc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Apr 9 03:52:50 EDT 2009


Author: div0
Date: 2009-04-09 03:52:43 -0400 (Thu, 09 Apr 2009)
New Revision: 6462

Modified:
   trunk/server/rcon2irc/rcon2irc-example.conf
   trunk/server/rcon2irc/rcon2irc.pl
Log:
secure auth now also in rcon2irc


Modified: trunk/server/rcon2irc/rcon2irc-example.conf
===================================================================
--- trunk/server/rcon2irc/rcon2irc-example.conf	2009-04-09 07:47:31 UTC (rev 6461)
+++ trunk/server/rcon2irc/rcon2irc-example.conf	2009-04-09 07:52:43 UTC (rev 6462)
@@ -26,13 +26,14 @@
 #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_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

Modified: trunk/server/rcon2irc/rcon2irc.pl
===================================================================
--- trunk/server/rcon2irc/rcon2irc.pl	2009-04-09 07:47:31 UTC (rev 6461)
+++ trunk/server/rcon2irc/rcon2irc.pl	2009-04-09 07:52:43 UTC (rev 6462)
@@ -436,16 +436,19 @@
 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 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 @@
 	irc_quakenet_challengeprefix => ':Q!TheQBot at CServe.quakenet.org NOTICE [^:]+ :CHALLENGE',
 
 	dp_server => undef,
+	dp_secure => 1,
 	dp_listen => "", 
 	dp_password => undef,
 	dp_status_delay => 30,
@@ -740,7 +753,7 @@
 # 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";
 



More information about the nexuiz-commits mailing list