r23586 - /scripts/KGB/server/KGB
dmn at users.alioth.debian.org
dmn at users.alioth.debian.org
Sat Jul 26 15:28:38 UTC 2008
Author: dmn
Date: Sat Jul 26 15:28:34 2008
New Revision: 23586
URL: http://svn.debian.org/wsvn/?sc=1&rev=23586
Log:
protocol version 1 -- sha1 authentication
6-argument call are considered protocol 0
common parts of protocol 0 and 1 moved in do_commit_01
Modified:
scripts/KGB/server/KGB
Modified: scripts/KGB/server/KGB
URL: http://svn.debian.org/wsvn/scripts/KGB/server/KGB?rev=23586&op=diff
==============================================================================
--- scripts/KGB/server/KGB (original)
+++ scripts/KGB/server/KGB Sat Jul 26 15:28:34 2008
@@ -29,6 +29,7 @@
use Getopt::Long;
use List::Util qw(max);
use YAML ();
+use Digest::SHA1 qw(sha1_hex);
my $conf = YAML::LoadFile("kgb.conf") or die "Error loading config";
@@ -152,35 +153,10 @@
delete $heap->{$_} foreach(keys %$heap);
undef;
}
-sub do_commit {
- my $kernel = $_[KERNEL];
- my $response = $_[ARG0];
- my $params = $response->soapbody;
- warn("commit: " . YAML::Dump($params));
- unless(ref $params and ref $params eq "HASH"
- and $params->{Array} and ref $params->{Array}
- and ref $params->{Array} eq "ARRAY"
- and scalar @{$params->{Array}} == 6) {
- $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
- 'commit(string repo_id, string password, int rev, ' .
- 'string[] paths, string log, string author)');
- warn("Invalid call\n");
- return;
- }
- my($repo_id, $passwd, $rev, $paths, $log, $author) = @{$params->{Array}};
- unless($conf->{repositories}{$repo_id}) {
- $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
- "Repository $repo_id is unknown");
- warn("Unknown repository\n");
- return
- }
- if($conf->{repositories}{$repo_id}{password} and
- $conf->{repositories}{$repo_id}{password} ne $passwd) {
- $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
- "Invalid password for repository $repo_id");
- warn("Invalid password\n");
- return
- }
+sub do_commit_01 {
+ my $kernel = $_[KERNEL];
+ my $response = $_[ARG0];
+ my($repo_id, $rev, $paths, $log, $author) = @_;
my @log = split(/\n+/, $log);
my @string = ("\002$repo_id\017: \00303$author\017 * r\002$rev\017 " .
"(files: \00310@$paths\017) $log[0]");
@@ -211,6 +187,71 @@
$response->content( "OK" );
$kernel->post( SOAPServer => 'DONE', $response );
}
+sub do_commit_0 {
+ my $kernel = $_[KERNEL];
+ my $response = $_[ARG0];
+ my($repo_id, $passwd, $rev, $paths, $log, $author) = @_;
+ unless($conf->{repositories}{$repo_id}) {
+ $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+ "Repository $repo_id is unknown");
+ warn("Unknown repository\n");
+ return
+ }
+ if($conf->{repositories}{$repo_id}{password} and
+ $conf->{repositories}{$repo_id}{password} ne $passwd) {
+ $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+ "Invalid password for repository $repo_id");
+ warn("Invalid password\n");
+ return
+ }
+ do_commit_01($repo_id, $rev, $paths, $log, $author) = @_;
+}
+sub do_commit_1 {
+ my $kernel = $_[KERNEL];
+ my $response = $_[ARG0];
+ my($repo_id, $checksum, $rev, $paths, $log, $author) = @_;
+ unless($conf->{repositories}{$repo_id}) {
+ $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+ "Repository $repo_id is unknown");
+ warn("Unknown repository\n");
+ return
+ }
+ if($conf->{repositories}{$repo_id}{password}
+ and sha1_hex(repo_id, $rev, @$paths, $log, $author) ne $checksum) {
+ $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+ "Authentication failed for repository $repo_id");
+ warn("Authentication failed\n");
+ return
+ }
+ do_commit_01($repo_id, $rev, $paths, $log, $author) = @_;
+}
+sub do_commit {
+ my $kernel = $_[KERNEL];
+ my $response = $_[ARG0];
+ my $params = $response->soapbody;
+ warn("commit: " . YAML::Dump($params));
+ unless(ref $params and ref $params eq "HASH"
+ and $params->{Array} and ref $params->{Array}
+ and ref $params->{Array} eq "ARRAY") {
+ $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+ 'commit(params ...)');
+ warn("Invalid call\n");
+ return;
+ }
+ if( @{$params->{Array}} == 6 ) {
+ # protocol 0
+ return do_commit_0(@{$params->{Array}});
+ }
+ my $proto_ver = shift @{$params->{Array}};
+ if($proto_ver == 1) {
+ return do_commit_1(@{$params->{Array}})
+ } else {
+ $kernel->post(SOAPServer => 'FAULT', $response, 'Client.Arguments',
+ "Invalid protocol version ($protocol_ver)");
+ warn("Invalid protocol version ($protocol_ver)\n");
+ return;
+ }
+}
sub irc_default {
my ($event, $args) = @_[ ARG0 .. $#_ ];
my $out = "$event ";
More information about the Pkg-perl-cvs-commits
mailing list