[Pkg-privacy-commits] [msva-perl] 92/356: default to a random available port (you can still explicitly request with MSVA_PORT)

Ximin Luo infinity0 at moszumanska.debian.org
Mon Aug 24 07:41:44 UTC 2015


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch debian
in repository msva-perl.

commit 31302e302066bd58779b41a6c69e1f4b4d381226
Author: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
Date:   Fri Mar 12 00:09:01 2010 -0500

    default to a random available port (you can still explicitly request with MSVA_PORT)
---
 Net/Server/MSVA.pm |  2 +-
 msva-perl          | 32 ++++++++++++++++++++++++++++++--
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/Net/Server/MSVA.pm b/Net/Server/MSVA.pm
index 4e3a404..719487d 100644
--- a/Net/Server/MSVA.pm
+++ b/Net/Server/MSVA.pm
@@ -31,7 +31,7 @@
     my $self = shift;
     # if we got here, then the binding was successful.
     $exit_status = 0;
-    $msva->post_bind_hook(@_);
+    $msva->post_bind_hook($self, @_);
   }
 
   sub set_exit_status {
diff --git a/msva-perl b/msva-perl
index 0485dac..4509a04 100755
--- a/msva-perl
+++ b/msva-perl
@@ -94,13 +94,20 @@ use strict;
   sub new {
     my $class = shift;
 
-    my $port = 8901;
+    my $port = 0;
     if (exists $ENV{MSVA_PORT}) {
       $port = $ENV{MSVA_PORT} + 0;
       die sprintf("not a reasonable port %d", $port) if (($port >= 65536) || $port <= 0);
     }
     # start the server on port 8901
     my $self = $class->SUPER::new($port);
+    if (! exists $ENV{MSVA_PORT}) {
+      # we can't pass port 0 to the constructor because it evaluates
+      # to false, so HTTP::Server::Simple just uses its internal
+      # default of 8080.  But if we want to select an arbitrary open
+      # port, we *can* set it here.
+      $self->port(0);
+    }
 
     $self->{allowed_uids} = {};
     if (exists $ENV{MSVA_ALLOWED_USERS}) {
@@ -411,6 +418,26 @@ use strict;
 
   sub post_bind_hook {
     my $self = shift;
+    my $server = shift;
+
+    my $socketcount = @{ $server->{server}->{sock} };
+    if ( $socketcount != 1 ) {
+      msvalog('error', "%d sockets open; should have been 1.", $socketcount);
+      $server->set_exit_status(10);
+      $server->server_close();
+    }
+    my $port = @{ $server->{server}->{sock} }[0]->sockport();
+    if ((! defined $port) || ($port < 1) || ($port >= 65536)) {
+      msvalog('error', "got nonsense port: %d.", $port);
+      $server->set_exit_status(11);
+      $server->server_close();
+    }
+    if ((exists $ENV{MSVA_PORT}) && (($ENV{MSVA_PORT} + 0) != $port)) {
+      msvalog('error', "Explicitly requested port %d, but got port: %d.", ($ENV{MSVA_PORT}+0), $port);
+      $server->set_exit_status(13);
+      $server->server_close();
+    }
+    $self->port($port);
 
     my $argcount = @ARGV;
     if ($argcount) {
@@ -522,7 +549,8 @@ of local users (by name or user ID) who are allowed to connect.
 =item MSVA_PORT
 
 msva-perl listens on a local TCP socket to facilitate access.  You can
-choose what port to bind to by setting MSVA_PORT.  Default is 8901.
+choose what port to bind to by setting MSVA_PORT.  Default is to bind
+on an arbitrary open port.
 
 =back
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/msva-perl.git



More information about the Pkg-privacy-commits mailing list