diff options
author | Angelo Naselli <anaselli@linux.it> | 2015-03-16 19:20:40 +0100 |
---|---|---|
committer | Angelo Naselli <anaselli@linux.it> | 2015-03-16 19:20:40 +0100 |
commit | b4e446c21e299af0441ec44db7a86334980b77c2 (patch) | |
tree | ea17c359431cb9e10aeed60346cb7b5a2c7af19d /lib/ManaTools/Privileges.pm | |
parent | fc9772f1f03684e8dab50ff77d2c46c5e0309c7b (diff) | |
download | manatools-b4e446c21e299af0441ec44db7a86334980b77c2.tar manatools-b4e446c21e299af0441ec44db7a86334980b77c2.tar.gz manatools-b4e446c21e299af0441ec44db7a86334980b77c2.tar.bz2 manatools-b4e446c21e299af0441ec44db7a86334980b77c2.tar.xz manatools-b4e446c21e299af0441ec44db7a86334980b77c2.zip |
Moved the tree accordingly
Diffstat (limited to 'lib/ManaTools/Privileges.pm')
-rw-r--r-- | lib/ManaTools/Privileges.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/ManaTools/Privileges.pm b/lib/ManaTools/Privileges.pm new file mode 100644 index 00000000..5833900b --- /dev/null +++ b/lib/ManaTools/Privileges.pm @@ -0,0 +1,61 @@ +# vim: set et ts=4 sw=4: +# Copyright 2012-2015 Matteo Pasotti +# +# This file is part of ManaTools +# +# ManaTools is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# ManaTools is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ManaTools. If not, see <http://www.gnu.org/licenses/>. + +package ManaTools::Privileges; + +use strict; +use warnings; +use diagnostics; +require Exporter; +use base qw(Exporter); +use English qw(-no_match_vars); + +our @EXPORT = qw(is_root_capability_required + ask_for_authentication); + +my $wrappers = { "sudo" => "/usr/bin/sudo", + "pkit" => "/usr/bin/pkexec", + "chlp" => "/usr/bin/consolehelper" + }; + +my $wrapper = 0; + +sub is_root_capability_required { + return $EUID != 0; +} + +sub ask_for_authentication { + my $wrapper_id = shift; + $wrapper = $wrappers->{$wrapper_id} if(defined($wrappers->{$wrapper_id})); + my ($command, @args) = wrap_command($0, @ARGV); + unshift(@args,$command->[1]); + unshift(@args, '-n') if($wrapper_id eq "sudo"); # let sudo die if password is needed + exec { $command->[0] } $command->[1], @args or die ("command %s missing", $command->[0]); +} + +sub wrap_command { + my ($app, @args) = @_; + return ([$wrapper, $app], @args); +} + +sub get_wrapper { + my $id = shift; + return $wrappers->{$id} if(defined($wrappers->{$id})); +} + +1; |