r24641 - in /scripts/KGB: debian/changelog server/KGB server/kgb.conf.sample

tincho at users.alioth.debian.org tincho at users.alioth.debian.org
Wed Aug 27 07:42:00 UTC 2008


Author: tincho
Date: Wed Aug 27 07:41:58 2008
New Revision: 24641

URL: http://svn.debian.org/wsvn/?sc=1&rev=24641
Log:
server/KGB: fixed an error in the password verification (protocol 1).
Tried to make more sense of the protocol versions, by not making it
configurable but a hardcoded hash of the *really* supported versions.

Modified:
    scripts/KGB/debian/changelog
    scripts/KGB/server/KGB
    scripts/KGB/server/kgb.conf.sample

Modified: scripts/KGB/debian/changelog
URL: http://svn.debian.org/wsvn/scripts/KGB/debian/changelog?rev=24641&op=diff
==============================================================================
--- scripts/KGB/debian/changelog (original)
+++ scripts/KGB/debian/changelog Wed Aug 27 07:41:58 2008
@@ -9,5 +9,8 @@
   * server/KGB: separate into packages for clearer code. Allow SIGQUIT to
     restart the server (with complete close and disconnect).
   * server/KGB: support for reloading the configuration file with SIGHUP.
+  * server/KGB: fixed an error in the password verification (protocol 1).
+    Tried to make more sense of the protocol versions, by not making it
+    configurable but a hardcoded hash of the *really* supported versions.
 
  -- Damyan Ivanov <dmn at debian.org>  Mon, 28 Jul 2008 14:44:04 +0300

Modified: scripts/KGB/server/KGB
URL: http://svn.debian.org/wsvn/scripts/KGB/server/KGB?rev=24641&op=diff
==============================================================================
--- scripts/KGB/server/KGB (original)
+++ scripts/KGB/server/KGB Wed Aug 27 07:41:58 2008
@@ -52,6 +52,10 @@
     NSsvc   => "NickServID",
     NRsvc   => "NickReclaim",
 );
+our %supported_protos = (
+    "0" => 1,
+    "1" => 1,
+);
 our @argv;
 our $restart = 0;
 
@@ -76,10 +80,6 @@
     $conf->{soap}{service_name} ||= "KGB";
     $conf->{soap}{server_port}  ||= 9999;
     $conf->{soap}{server_addr}  ||= "127.0.0.1";
-    $conf->{min_protocol_ver}   ||= 1;
-
-    $conf->{min_protocol_ver} =~ /^[01]$/
-        or die "Unrecognised min_protocol_ver (".$conf->{min_protocol_ver}."). I only know about protocol 0 and 1.\n";
 
     foreach(keys %{$conf->{networks}}) {
         $conf->{networks}{$_}{nick}     ||= "KGB";
@@ -223,7 +223,7 @@
 use List::Util qw(max);
 use Digest::SHA1 qw(sha1_hex);
 
-sub do_commit_01 {
+sub do_commit_msg {
     my($kernel, $response, $repo_id, $rev, $paths, $log, $author) = @_;
     my @log = split(/\n+/, $log);
     my @string = ("\002$repo_id\017: \00303$author\017 * r\002$rev\017 " .
@@ -257,14 +257,9 @@
     $response->content( "OK" );
     $kernel->post( SOAPServer => 'DONE', $response );
 }
-sub do_commit_0 {
+sub do_commit_v0 {
     my($kernel, $response, $repo_id, $passwd, $rev, $paths, $log, $author) = @_;
-    unless($KGB::config->{min_protocol_ver} == 0) {
-        $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
-            "Protocol version 0 not welcome");
-        warn("Protocol version 0 rejected\n");
-        return
-    }
+
     unless($KGB::config->{repositories}{$repo_id}) {
         $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
             "Repository $repo_id is unknown");
@@ -278,30 +273,33 @@
         warn("Invalid password\n");
         return
     }
-    do_commit_01($kernel, $response, $repo_id, $rev, $paths, $log, $author);
-}
-sub do_commit_1 {
-    my($kernel, $response, $repo_id, $checksum, $rev, $paths, $log, $author) = @_;
+    do_commit_msg($kernel, $response, $repo_id, $rev, $paths, $log, $author);
+}
+sub do_commit_v1 {
+    my($kernel, $response, $repo_id, $checksum, $rev, $paths, $log,
+        $author) = @_;
     unless($KGB::config->{repositories}{$repo_id}) {
         $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
             "Repository $repo_id is unknown");
         warn("Unknown repository\n");
-        return
-    }
-    if($KGB::config->{repositories}{$repo_id}{password}
-	    and sha1_hex($repo_id, $rev, @$paths, $log, $author) ne $checksum) {
+        return;
+    }
+    if($KGB::config->{repositories}{$repo_id}{password} and
+        sha1_hex($repo_id, $rev, @$paths, $log, $author,
+            $KGB::config->{repositories}{$repo_id}{password}) ne $checksum) {
         $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
             "Authentication failed for repository $repo_id");
         warn("Authentication failed\n");
-        return
-    }
-    do_commit_01($kernel, $response, $repo_id, $rev, $paths, $log, $author);
+        return;
+    }
+    do_commit_msg($kernel, $response, $repo_id, $rev, $paths, $log, $author);
 }
 sub commit {
     my $kernel = $_[KERNEL];
     my $response = $_[ARG0];
-    my $params = $response->soapbody;
+    my $params = $response->soapbody();
     print $KGB::out "commit: " . YAML::Dump($params) if($KGB::config->{debug});
+
     unless(ref $params and ref $params eq "HASH"
             and $params->{Array} and ref $params->{Array}
             and ref $params->{Array} eq "ARRAY") {
@@ -310,31 +308,32 @@
         print $KGB::out "Invalid call\n" if($KGB::config->{debug});
         return;
     }
+    my $proto_ver;
     if( @{$params->{Array}} == 6 ) {
-    	# protocol 0
-        return do_commit_0($kernel, $response, @{$params->{Array}});
-    } 
-    my $proto_ver = shift @{$params->{Array}};
-    unless(defined($proto_ver) and $proto_ver =~ /^\d{1,5}$/
-        and $KGB::config->{min_protocol_ver} <= $proto_ver)
-    {
+        $proto_ver = 0;
+    } else {
+        $proto_ver = shift @{$params->{Array}};
+    }
+    unless(defined($proto_ver) and $KGB::supported_protos{$proto_ver}) {
         $proto_ver = "<undef>" unless defined($proto_ver);
 
         $kernel->yield('FAULT', $response, 'Client.commit.Arguments',
             "Protocol version $proto_ver not welcomed");
         print $KGB::out "Protocol version $proto_ver rejected\n" if(
             $KGB::config->{debug});
-        return
+        return;
+    }
+    if($proto_ver == 0) {
+        return do_commit_v0($kernel, $response, @{$params->{Array}});
     }
     if($proto_ver == 1) {
-        return do_commit_1($kernel, $response, @{$params->{Array}})
-    } else {
-        $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
-            "Invalid protocol version ($proto_ver)");
-        print $KGB::out "Invalid protocol version ($proto_ver)\n" if(
-            $KGB::config->{debug});
-        return;
-    }
+        return do_commit_v1($kernel, $response, @{$params->{Array}})
+    }
+    $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+        "Invalid protocol version ($proto_ver)");
+    print $KGB::out "Invalid protocol version ($proto_ver)\n" if(
+        $KGB::config->{debug});
+    return;
 }
 
 package KGB::IRC;
@@ -346,6 +345,8 @@
 
 our %current = ();
 
+# Handles the connection, disconnection and real-time configuration changes WRT
+# IRC servers and channels
 sub _irc_reconnect {
     my ($kernel, $session) = @_[KERNEL, SESSION];
     my(@to_start, @to_stop, @to_restart);

Modified: scripts/KGB/server/kgb.conf.sample
URL: http://svn.debian.org/wsvn/scripts/KGB/server/kgb.conf.sample?rev=24641&op=diff
==============================================================================
--- scripts/KGB/server/kgb.conf.sample (original)
+++ scripts/KGB/server/kgb.conf.sample Wed Aug 27 07:41:58 2008
@@ -24,5 +24,3 @@
     repos:
       - foo
 pid_dir: /var/run/kgb-bot
-# anything less is rejected
-min_protocol_ver: 1




More information about the Pkg-perl-cvs-commits mailing list