The nothing
The nothing

Reputation: 308

Return variable when call from nested backticks with @ARGV

In visudo Ubuntu I whitelist this program (I doing this way for security purpose, parameterized all commands)

myuser ALL=(root) NOPASSWD:/App/Filter_Parameters_Wrap.pm *

In program.pl

my $capture = qx("/usr/bin/sudo /App/Filter_Parameters_Wrap.pm kernel_version");

In the module Filter_Parameters_Wrap:

my $fuction  = $ARGV[0];
print filters_dispatch($fuction) if defined $fuction;

sub filters_dispatch {
    my $filter = shift;

    my $dispatch = {
      kernel_version    => \&filter_kernel_version,
      };

    return $dispatch->{$filter}->();

}

sub filter_kernel_version {
   my $command = '/bin/uname -a';
   my $sudo = App::Sudo::Main_Sudo->root($command);
   utf8::decode($sudo);
   return $sudo;
}

This approach is working , but I have to do print in print filters_dispatch (print directly a variable string), so I can get the output of return of function filter_kernel_version in the variable $capture

In some cases inside the function filter_kernel_version I want to create a hash and return as anonymous hash without print directly, but this way is not working

can you recommend a better approach?

Upvotes: 2

Views: 93

Answers (1)

ikegami
ikegami

Reputation: 386331

No matter what option you use to communicate between processes, you'll be limited to sending a sequence of bytes. This means that you will need to serialize your hash somehow. Encoding it using JSON (e.g. using Cpanel::JSON::XS) might be a simple way of doing that.

Upvotes: 2

Related Questions