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