From cd78d4140a564e1547a072b857536360d6482e91 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Fri, 15 Apr 2016 08:37:33 +0200 Subject: [PATCH] Add global explorers su, sudo and sucmd. --- .../conf/{type/__package_pip => }/explorer/su | 11 ++++- cdist/conf/explorer/sucmd | 46 +++++++++++++++++++ .../{type/__package_pip => }/explorer/sudo | 11 ++++- cdist/conf/type/__package_pip/gencode-remote | 28 ++--------- 4 files changed, 69 insertions(+), 27 deletions(-) rename cdist/conf/{type/__package_pip => }/explorer/su (68%) create mode 100644 cdist/conf/explorer/sucmd rename cdist/conf/{type/__package_pip => }/explorer/sudo (67%) diff --git a/cdist/conf/type/__package_pip/explorer/su b/cdist/conf/explorer/su similarity index 68% rename from cdist/conf/type/__package_pip/explorer/su rename to cdist/conf/explorer/su index f355a1bc..ae164e69 100644 --- a/cdist/conf/type/__package_pip/explorer/su +++ b/cdist/conf/explorer/su @@ -17,11 +17,18 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # +# This explorer returns script code string for running a command with su. +# If no su is found then it returns empty string. +# It uses two arguments, first user and the second command to run. +# If the result string is assigned to foo it is used as: +# $ $foo user command +# which su > /dev/null 2>&1 if [ $? -eq 0 ] then - echo yes + su_func='f() { su -c "$2" $1 ; }' + echo "eval '${su_func}' ; f " else - echo no + echo "" fi diff --git a/cdist/conf/explorer/sucmd b/cdist/conf/explorer/sucmd new file mode 100644 index 00000000..1f16666d --- /dev/null +++ b/cdist/conf/explorer/sucmd @@ -0,0 +1,46 @@ +#!/bin/sh +# +# 2016 Darko Poljak (darko.poljak at gmail.com) +# +# This file is part of cdist. +# +# cdist 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 3 of the License, or +# (at your option) any later version. +# +# cdist 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 cdist. If not, see . +# +# This explorer returns script code string for running a command with su +# or sudo, whichever it founds. If searches the command in the order of +# first sudo and then su if sudo is not found. +# If no sudo nor su is found then it returns string script code to run +# bare command. +# It uses two arguments, first user and the second command to run. +# If the result string is assigned to foo it is used as: +# $ $foo user command +# + +# first check sudo +which sudo > /dev/null 2>&1 +if [ $? -eq 0 ] +then + func='f() { sudo -H -u $1 $2; }' +else + # if no sudo then check su + which su > /dev/null 2>&1 + if [ $? -eq 0 ] + then + func='f() { su -c "$2" $1 ; }' + else + # if no sudo nor su then run bare command + func='f() { $2 ; }' + fi +fi +echo "eval '${func}' ; f " diff --git a/cdist/conf/type/__package_pip/explorer/sudo b/cdist/conf/explorer/sudo similarity index 67% rename from cdist/conf/type/__package_pip/explorer/sudo rename to cdist/conf/explorer/sudo index 7b702bc0..079c570d 100644 --- a/cdist/conf/type/__package_pip/explorer/sudo +++ b/cdist/conf/explorer/sudo @@ -17,11 +17,18 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # +# This explorer returns script code string for running a command with sudo. +# If no sudo is found then it returns empty string. +# It uses two arguments, first user and the second command to run. +# If the result string is assigned to foo it is used as: +# $ $foo user command +# which sudo > /dev/null 2>&1 if [ $? -eq 0 ] then - echo yes + sudo_func='f() { sudo -H -u $1 $2; }' + echo "eval '${sudo_func}' ; f " else - echo no + echo "" fi diff --git a/cdist/conf/type/__package_pip/gencode-remote b/cdist/conf/type/__package_pip/gencode-remote index ccf30f1a..b9a52efc 100644 --- a/cdist/conf/type/__package_pip/gencode-remote +++ b/cdist/conf/type/__package_pip/gencode-remote @@ -45,42 +45,24 @@ runasparam="$__object/parameter/runas" if [ -f "$runasparam" ] then runas=$(cat "$runasparam") - has_sudo=$(cat "$__object/explorer/sudo") - if [ "$has_sudo" = "yes" ] - then - runas_cmd="sudo" - else - has_su=$(cat "$__object/explorer/su") - if [ "$has_su" = "yes" ] - then - runas_cmd="su" - else - runas_cmd="" - fi - fi + runas_cmd=$(cat "$__global/explorer/sucmd") else runas_cmd="" fi case "$state_should" in present) - if [ "$runas_cmd" = "sudo" ] + if [ "$runas_cmd" ] then - echo sudo -H -u $runas $pip install -q "$name" - elif [ "$runas_cmd" = "su" ] - then - echo su $runas -c \"$pip install -q "$name"\" + echo "$runas_cmd $runas \"$pip install -q $name\"" else echo $pip install -q "$name" fi ;; absent) - if [ "$runas_cmd" = "sudo" ] + if [ "$runas_cmd" ] then - echo sudo -H -u $runas $pip uninstall -q -y "$name" - elif [ "$runas_cmd" = "su" ] - then - echo su $runas -c \"$pip uninstall -q -y "$name"\" + echo "$runas_cmd $runas \"$pip uninstall -q -y $name\"" else echo $pip uninstall -q -y "$name" fi