From 32e362f9d93062fec2817fd7b2d74bd55ef45321 Mon Sep 17 00:00:00 2001 From: Florent Villard Date: Mon, 28 Aug 2006 16:25:19 +0000 Subject: add a new wrapper to run command which needs privileges --- iurt_root_command | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 iurt_root_command (limited to 'iurt_root_command') diff --git a/iurt_root_command b/iurt_root_command new file mode 100644 index 0000000..a6fcedf --- /dev/null +++ b/iurt_root_command @@ -0,0 +1,71 @@ +#!/usr/bin/perl +# +#!/usr/bin/perl +# +# Copyright (C) 2006 Mandriva +# +# Author: Florent Villard +# +# This program 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, or (at your option) +# any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# run commands which needs root privilege +# + +use strict; +my $program_name = 'iurt_root_command'; +use Mkcd::Commandline qw(parseCommandLine usage); + +my $arg = @ARGV; +my (@params, %run); +$run{program_name} = $program_name; + +my %authorized_modules = ( 'unionfs' => 1 ); +my $sudo = '/usr/bin/sudo'; + +$run{todo} = [ ]; +@params = ( + # [ "one letter option", "long name option", "number of args (-X means ´at least X´)", "help text", "function to call", "log info"] + # + # no_rsync, config_help and copy_srpm kept for compatibility reasons + # + [ "", "$program_name", 0, "[--modprobe ]", + "$program_name is a perl script to execute commands which need root privilege, it helps probram which needs occasional root privileges for some commands.", + sub { $arg or usage($program_name, \@params) }, "" ], + [ "", "modprobe", 1, "]", + "$program_name is a perl script to execute commands which need root privilege, it helps probram which needs occasional root privileges for some commands.", + \&modprobe, "" ], +); + +open(my $LOG, ">&STDERR"); +$run{LOG} = $LOG; + +my $todo = parseCommandLine($program_name, \@ARGV, \@params); +@ARGV and usage($program_name, \@params, "@ARGV, too many arguments"); +foreach my $t (@$todo) { + print {$run{LOG}} "$program_name: $t->[2]\n" if $run{verbose} > 5; + &{$t->[0]}(@{$t->[1]}) or print {$run{LOG}} "ERROR: $t->[2]\n"; +} + +exit + +sub modprobe { + my ($run, $module) = @_; + if (!$authorized_modules{$module}) { + print {$run->{LOG}} "ERROR $program_name: unauthorized module $module\n"; + return 0 + } + system($sudo, "/sbin/depmod", "-a"); + !system($sudo, "/sbin/modprobe", "-f", $module) +} -- cgit v1.2.1