The apache server under which eBox runs, and any Perl script that uses the eBox API run under a dedicated user id, the user is typically called “ebox”. eBox modules need to execute certain commands and write certain files with root privileges, this is done using sudo
You can invoke any command using the
root()
function within the EBox::Sudo Perl module. If the
command fails, root() throws an
EBox::Exceptions::Sudo::Command exception, so make sure you catch it if it is OK for the command to
fail or if you want to inform the user in a different
way. Anyway, you can use
the output,
error and
exitValue exception methods
to gather more information about the command failure.
In the rare cases when the sudo program itself fails the
exception raised is one of the
EBox::Exceptions::Sudo::Wrapper kind
and the last methods are not available.
Example 3.2. Using EBox::Sudo::root()
try {
EBox::Sudo::root("/usr/bin/eject -t");
}
catch EBox::Exceptions::Sudo::Wrapper with {
throw EBox::Exceptions::Internal("sudo program failed");
}
catch EBox::Exceptions::Sudo::Command with {
my ($ex) = @_;
EBox::debug("/usr/bin/eject failed. Stderr was " . (join "\n", @{ $ex->error() })) ;
throw EBox::Exceptions::External("Cannot close CD-ROM tray. Please close it manually" );
}
EBox::Sudo also provides
wrappers for frequent used
commands executed with root
privileges. stat provides a
statistic wrapper, useful to get file system information
for any file. If you need a more concise file
information you can use
fileTest to check files for
simples queries like /usr/bin/test does.