]> CyberLeo.Net >> Repos - CDN/shlib.git/blob - lib/sh/suexec.sh
sh/suexec: deprecate reexec and switch to suexec; that name fits better
[CDN/shlib.git] / lib / sh / suexec.sh
1 # suexec library script
2
3 if [ -z "${__suexec_sh_loaded}" ]
4 then
5   __suexec_sh_loaded=yes
6   
7   # exec a command via sudo/su
8   # Can be used to reexec this process under su/sudo, if run like this from
9   # the top-level:
10   #
11   #  suexec "${0}" "${@}"
12   #
13   # Specify target user name with -u as the first parameter
14   #
15   #  suexec -u user "${0}" "${@}"
16   #
17   # Just as exec, this will replace the current process entirely, and will not
18   # return except upon error.
19   suexec() {
20     user="root"
21     # Set name if user provided
22     if [ "${1}" = "-u" ]
23     then
24       user="${2}"
25       shift 2
26     fi
27     
28     # suexec if needed
29     if [ "$(id -un)" != "${user}" ]
30     then
31       # Find a su/sudo
32       cmd="sudo -u ${user}"
33       [ -x "$(which sudo 2>/dev/null)" ] || cmd="su ${user} -c"
34       exec ${cmd} "${@}"
35     fi
36   }
37 fi