diff options
author | Angelo Naselli <anaselli@linux.it> | 2014-01-27 18:20:30 +0100 |
---|---|---|
committer | Angelo Naselli <anaselli@linux.it> | 2014-01-27 18:20:30 +0100 |
commit | 1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b (patch) | |
tree | 1363e3d3bdcfa5b2ff3111a41b2c700a5a922140 /lib/AdminPanel/Privileges.pm | |
parent | f519e47d15103514585a272c6308467ac41ce551 (diff) | |
download | manatools-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar manatools-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar.gz manatools-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar.bz2 manatools-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar.xz manatools-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.zip |
Project structure change
Diffstat (limited to 'lib/AdminPanel/Privileges.pm')
-rw-r--r-- | lib/AdminPanel/Privileges.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/AdminPanel/Privileges.pm b/lib/AdminPanel/Privileges.pm new file mode 100644 index 00000000..73f20984 --- /dev/null +++ b/lib/AdminPanel/Privileges.pm @@ -0,0 +1,61 @@ +# vim: set et ts=4 sw=4: +# Copyright 2012-2013 Matteo Pasotti +# +# This file is part of AdminPanel +# +# AdminPanel 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. +# +# AdminPanel 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 AdminPanel. If not, see <http://www.gnu.org/licenses/>. + +package AdminPanel::Privileges; + +use strict; +use warnings; +use diagnostics; +require Exporter; +use base qw(Exporter); +use English qw(-no_match_vars); + +our @EXPORT = qw(require_root_capability + ask_for_authentication); + +my $wrappers = { "sudo" => "sudo", + "pkit" => "pkexec", + "chlp" => "consolehelper" + }; + +my $wrapper = 0; + +sub require_root_capability { + 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; |