CentOS-6.8 Perl, v5.10.1 (*), построенный для x86_64-Linux-нить-мультиКак один обеспечить IPC :: Run с аргументом установленного пользовательского ввода, который содержит встроенный пробельные
Этот вопрос спускается этот Where is the shell command called which invokes OpenSSL commands?. Вкратце, я взламываю очень старый скрипт Perl, используемый для поддержки внутренней частной PKI, так что хэши подписи и размеры ключей по умолчанию соответствуют текущим требованиям браузера.
У меня есть эти фрагменты кода:
. . .
$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