You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Using sudo=true in an INI file as in the example for Rex::Group::Lookup::INI does not use sudo because it checks if the value is == 1, but this is a numeric comparison so "true" == 1 is false.
How to reproduce it
Steps to reproduce the behavior:
Shortest code example that demonstrates the bug:
# [= Rexfile =]use Rex -feature=> ['1.4','use_server_auth'];
use Rex::Group::Lookup::INI;
groups_file 'server-min.ini';
desc 'Install cpanminus';
task 'cpanminus', group=>'instr', sub {
pkg "cpanminus", ensure=>"present";
};
; [= server-min.ini =][instr];;; The below works without any Perl warnings
instrument-remote sudo=1
;;; Using the below instead says;;;;;; Argument "true" isn't numeric in numeric eq (==);;; at Rex/Interface/Connection/OpenSSH.pm;;; on the line;;;;;; if ( $self->{is_sudo} && $self->{is_sudo} == 1 ) {;;;;;; and;;;;;; Argument "true" isn't numeric in numeric eq (==);;; at Rex.pm;;; on the line;;;;;; if ( exists $CONNECTION_STACK[-1]->{server}->{auth}->{sudo};;; && $CONNECTION_STACK[-1]->{server}->{auth}->{sudo} == 1 );;;; instrument-remote sudo=true
Expected behavior
Should use sudo when sudo=true is in the INI file.
[ FErki[m]] at first glance, one possible fix might be the following:
[ FErki[m]] - change the test at https://github.com/RexOps/Rex/blob/master/t/ini.t#L100 to check for
the value being `1`
[ FErki[m]] - change https://github.com/RexOps/Rex/blob/master/lib/Rex/Group/Entry/Server.pm#L78-L81
to recognize the `"true"` string, and assign the value of `1` to the internal
`$self->{auth}->{sudo}` (and perhaps add logic to recognize `"false"` as 0 as well)
[ FErki[m]] alternatively, we could clarify the docs (and the tests) that the value should be 0 or 1,
but `true/false` seems to be more human-friendly to me in the context of auth info inside
INI files
[ FErki[m]] a good next step could be to open a formal bug report as a GitHub issue to make it more
visible for others (including the workaround) and to further discuss/design actual fixing
steps
Circumstances
Rex version: (R)?ex 1.13.5
Perl version: perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux
OS running rex: Debian GNU/Linux 5.15.0 amd64
OS managed by rex: Debian GNU/Linux 5.10.17 armv7l
How rex was installed: CPAN client
Debug log
The text was updated successfully, but these errors were encountered:
I'll take a look at the tests and related code + docs to see how it's best to address this.
If I find it possible without breaking any backwards compatibility, I'll probably go for supporting true and yes as 1, and false and no as 0 values, while passing anything else as-is.
It's unlikely, but if something blocks this, I'll update the docs instead.
Describe the bug
Using
sudo=true
in an INI file as in the example forRex::Group::Lookup::INI
does not usesudo
because it checks if the value is== 1
, but this is a numeric comparison so"true" == 1
is false.How to reproduce it
Steps to reproduce the behavior:Shortest code example that demonstrates the bug:
Expected behavior
Should use
sudo
whensudo=true
is in the INI file.Per discussion on IRC with @ferki:
Circumstances
Debug logThe text was updated successfully, but these errors were encountered: