のCentOS-6.8のperlが含まれているユーザの入力によって設定された引数でIPC :: Run]を提供しない、v5.10.1(*)はx86_64-linuxのスレッドのマルチがどのように埋め込まれた空白に
のために構築されたこの質問はから下降しますこの1つ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
@Jamesあなたは引数のどれがパスワードであるかを強調表示できますか?それは私には分かりません。 – simbabque