From 37aff202d97ddbfaef4a08d3cf2f6894b2770914 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 15 Aug 2022 17:37:28 +0100 Subject: [PATCH] prefork-interp: New protocol: change env var Signed-off-by: Ian Jackson --- cprogs/prefork-interp.c | 2 +- perl/Prefork.pm | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/cprogs/prefork-interp.c b/cprogs/prefork-interp.c index 11f53d0..338e60e 100644 --- a/cprogs/prefork-interp.c +++ b/cprogs/prefork-interp.c @@ -336,7 +336,7 @@ void become_setup(int sfd, int fake_pair[2]) { if (dup2(null_0, 0)) diee("dup2 /dev/null onto stdin"); if (dup2(2, 1) != 1) die("dup2 stderr onto stdout"); - putenv(m_asprintf("PREFORK_INTERP=%d,%d,%s", + putenv(m_asprintf("PREFORK_INTERP=v1 %d,%d %s", sfd, call_fd, socket_path)); execvp(executor_argv[0], (char**)executor_argv); diff --git a/perl/Prefork.pm b/perl/Prefork.pm index 9137ac8..d79eb5b 100644 --- a/perl/Prefork.pm +++ b/perl/Prefork.pm @@ -119,20 +119,24 @@ sub initialisation_complete { my %opts = @_; # if env var not set, we're not running under prefork-interp - my @env_params = split /,/, ($ENV{$env_name} // return), 5; - croak "$env_name has too few entries" unless @env_params == 5; + my @env_data = split / /, ($ENV{$env_name} // return), 3; + croak "$env_name has the wrong number of words" unless @env_data == 3; + my (@vsns) = split /,/, $env_data[0]; + croak "$env_name doesn't offer protocol v1" unless grep { $_ eq 'v1' } @vsns; + my @env_fds = split /,/, $env_data[1]; + croak "$env_name has too few fds" unless @env_fds >= 3;; + $#env_fds = 1; + $socket_path = $env_data[2]; $num_servers = $opts{max_servers} // 4; #---- setup (pm) [1] ---- - $socket_path = pop @env_params; - foreach (@env_params) { + foreach (@env_fds) { $_ eq ($_+0) or croak "$env_name contains $_, not a number"; } - open LISTEN, "+>&=$env_params[0]" or croak "listen fd: $!"; - open CALL, "+>&=$env_params[1]" or croak "listen fd: $!"; - @call_fds = ($env_params[2], $env_params[3], 2); + open LISTEN, "+>&=$env_fds[0]" or croak "listen fd: $!"; + open CALL, "+>&=$env_fds[1]" or croak "listen fd: $!"; if (!$opts{no_openlog}) { openlog("prefork-interp $0", 'ndelay,nofatal,pid', -- 2.30.2