[kup] 03/18: Add support for subcmd config option
debian-kernel at lists.debian.org
debian-kernel at lists.debian.org
Sun Apr 9 02:47:29 UTC 2017
This is an automated email from the git hooks/post-receive script.
benh pushed a commit to branch master
in repository kup.
commit f91f3ef0affcfcd96cc8882c10f988d5ef0e79a7
Author: Konstantin Ryabitsev <konstantin at linuxfoundation.org>
Date: Tue Mar 14 16:30:43 2017 -0400
Add support for subcmd config option
It is possible to use kup in conjunction with another authorization
system that already relies on ssh for authentication (e.g. gitolite),
in which case we need to be able to specify a subcommand to specifically
invoke the kup server.
If no subcmd is specified, the default standalone kup behaviour is used.
Signed-off-by: Konstantin Ryabitsev <konstantin at linuxfoundation.org>
---
kup | 30 +++++++++++++++++++++++++-----
kup.1 | 7 +++++++
2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/kup b/kup
index b00dbb3..aa97789 100755
--- a/kup
+++ b/kup
@@ -28,6 +28,7 @@ my $blksiz = 1024*1024;
my %opt = (
'rsh' => 'ssh -a -x -k -T',
'host' => undef,
+ 'subcmd' => undef,
'batch' => 0,
'verbose' => 0,
);
@@ -37,13 +38,17 @@ my $cfg_file = $ENV{'HOME'}.'/.kuprc';
my $cfg = new Config::Simple($cfg_file);
if (defined($cfg)) {
- # Update %opt with cfgfile settings (only rsh and host vars)
+ # Update %opt with cfgfile settings (only rsh, subcmd, and host vars)
my %cfg_opt = $cfg->vars();
if (defined($cfg_opt{'default.host'})) {
$opt{'host'} = $cfg_opt{'default.host'};
}
+ if (defined($cfg_opt{'default.subcmd'})) {
+ $opt{'subcmd'} = $cfg_opt{'default.subcmd'};
+ }
+
if (defined($cfg_opt{'default.rsh'})) {
$opt{'rsh'} = $cfg_opt{'default.rsh'};
}
@@ -61,6 +66,9 @@ if (defined $ENV{'KUP_RSH'}) {
if (defined $ENV{'KUP_HOST'}) {
$opt{'host'} = $ENV{'KUP_HOST'};
}
+if (defined $ENV{'KUP_SUBCMD'}) {
+ $opt{'subcmd'} = $ENV{'KUP_SUBCMD'};
+}
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer
# We process the command set twice, once as a dry run and one for real,
@@ -75,10 +83,11 @@ sub usage($) {
print STDERR "Usage: $0 [global options] command [-- command...]\n";
print STDERR "\n";
print STDERR "Global options:\n";
- print STDERR " -b --batch Output command stream to stdout\n";
- print STDERR " -e --rsh=command Send output to command, override KUP_RSH\n";
- print STDERR " -o --host=[user@]host Connect to [user@]host, override KUP_HOST\n";
- print STDERR " -v --verbose Print each command to stderr as it is sent\n";
+ print STDERR " -b --batch Output command stream to stdout\n";
+ print STDERR " -e --rsh=command Send output to command, override KUP_RSH\n";
+ print STDERR " -o --host=[user@]host Connect to [user@]host, override KUP_HOST\n";
+ print STDERR " -c --subcmd=cmd After connecting via ssh, issue this subcommand\n";
+ print STDERR " -v --verbose Print each command to stderr as it is sent\n";
print STDERR "\n";
print STDERR "Commands:\n";
print STDERR " put local_file signature remote_path\n";
@@ -219,6 +228,10 @@ sub parse_global_options()
$opt{'host'} = shift(@ARGV);
} elsif ($arg =~ /^--host=(.+)$/) {
$opt{'host'} = $1;
+ } elsif ($arg eq '-c' || $arg eq '--subcmd') {
+ $opt{'subcmd'} = shift(@ARGV);
+ } elsif ($arg =~ /^--subcmd=(.+)$/) {
+ $opt{'subcmd'} = $1;
} elsif ($arg eq '-v' || $arg eq '--verbose') {
$opt{'verbose'}++;
} elsif ($arg eq '-h' || $arg eq '--help') {
@@ -266,6 +279,13 @@ sub setup_output()
die "$0: suspicious KUP_HOST\n";
}
$rsh .= " \Q$1";
+ if ($opt{'subcmd'}) {
+ if ($opt{'subcmd'} !~ /^([-a-zA-Z0-9_]+)$/) {
+ die "$0: suspicious KUP_SUBCMD\n";
+ }
+ # Add the subcommand for the receiving server
+ $rsh .= " " . $opt{'subcmd'}
+ }
open(STDOUT, '|-', $rsh)
or die "$0: cannot execute rsh command ", $rsh, "\n";
}
diff --git a/kup.1 b/kup.1
index 509deac..811afb3 100644
--- a/kup.1
+++ b/kup.1
@@ -57,6 +57,13 @@ is set by the environment variable
.B KUP_HOST
or if that is not set,
\fIkup.kernel.org\fP.
+.TP
+\fB\-c\fP, \fB\-\-subcmd\fP \fIsubcommand\fP
+After establishing the ssh connection, issue a subcommand in case the remote
+server is used in conjunction with an AuthZ tool like gitolite. Can also be set
+using the env variable
+.B KUP_SUBCMD
+or if not set, no subcommand will be used (default kup-server behavior).
.SH COMMANDS
A series of commands can be specified on a single command line,
separated by a double dash argument (\fB\-\-\fP).
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/kup.git
More information about the Kernel-svn-changes
mailing list