的CentOS-6.8的Perl,v5.10.1(*)爲x86_64的Linux的線程多怎樣才能提供IPC ::通過用戶輸入設置的參數包含嵌入的運行空白
這個問題從內置下降這一個Where is the shell command called which invokes OpenSSL commands?。簡而言之,我正在竊聽用於維護內部私有PKI的非常古老的Perl腳本,以便默認簽名哈希和密鑰大小滿足當前瀏覽器的要求。
我有這些代碼段:
. . .
$args->{keypass} = $self->getPassword("Private key password",1)
unless $args->{keypass};
$self->warn("# Password argument: $args->{keypass}\n") if $ENV{CSPDEBUG};
my $cmd = "-out $args->{keyfile} $args->{keysize}";
$cmd = "-des3 -passout pass:$args->{keypass} ".$cmd if defined($args->{keypass});
$self->{openssl}->cmd('genrsa',$cmd,$args);
. . .
$self->{openssl}->cmd('req',"-x509 $common_args -new -out $cacert",$args);
. . .
use IPC::Run qw(start pump finish timeout new_appender new_chunker);
. . .
sub cmd
{
my $self = shift;
my $cmd = shift;
my $cmdline = shift;
my $args = shift;
my $conf;
my $cfgcmd;
. . .
$self->{_handle}->pump while length ${$self->{_in}};
. . .
如果密碼參數值,所述用戶提供不包含空白然後根據需要此代碼執行。如果它包含嵌入式的空白空間,那麼代碼會自動失敗。如果傳遞給keypass
的參數與開始和結束單引號連接,那麼代碼同樣會失敗。在兩種失敗案例中,腳本都報告成功。
爲什麼?
無論用戶輸入是否包含空格,該代碼是否有效需要進行哪些更改?
讓我只是得到正確的問題,你試圖消除密碼字段中的任何空格,以確保它的工作?或者特別是爲了使其工作,即使密碼中有空格? –
@ user2082599來自上一個問題和這裏的描述,我相信密碼可能包含空格。如果是這樣,程序將失敗,因爲命令行參數中的空白字符會丟失。引用它不起作用。 – simbabque
@詹姆斯,請你突出顯示哪些參數是密碼?我不清楚這一點。 – simbabque