#!/bin/bash real_file=/etc/sudoers tmp_file=$(mktemp /tmp/XXXXXXX) # fixed sudoers file path in bsd isbsd=$(uname -a | grep -i 'freebsd' &> /dev/null && echo "yes" || echo "no") if [ $isbsd == "yes" ]; then real_file=/usr/local/etc/sudoers fi # Backup sudoers file cp ${real_file} ${tmp_file} # Add Command Aliases add_cmd_alias() { sudo_file=$1 {% for sudo_name, sudo_cmd in sudo_alias.items %} {% if sudo_name != 'ALL' %} if $(grep '^Cmnd_Alias \<{{ sudo_name }}\>' ${sudo_file} &> /dev/null); then if [ $isbsd == "yes" ]; then sed -i .bk 's@^Cmnd_Alias \<{{ sudo_name }}\>.*@Cmnd_Alias {{ sudo_name }} = {{ sudo_cmd }}@g' ${sudo_file} else sed -i 's@^Cmnd_Alias \<{{ sudo_name }}\>.*@Cmnd_Alias {{ sudo_name }} = {{ sudo_cmd }}@g' ${sudo_file} fi else echo "Cmnd_Alias {{ sudo_name }} = {{ sudo_cmd }}" >> ${sudo_file} fi {% endif %} {% endfor %} } # Add Command Aliases to role add_role_chosen() { sudo_file=$1 {% for user, alias in sudo_user.items %} if $(grep '^{{ user }}\>' ${sudo_file} &> /dev/null); then if [ $isbsd == "yes" ]; then sed -i .bk 's@^{{ user }}\>.*@{{ user }} ALL = (root) NOPASSWD: {{ alias }}@g' ${sudo_file} else sed -i 's@^{{ user }}\>.*@{{ user }} ALL = (root) NOPASSWD: {{ alias }}@g' ${sudo_file} fi else echo "{{ user }} ALL = (root) NOPASSWD: {{ alias }}" >> ${sudo_file} fi {% endfor %} } check_syntax(){ /usr/sbin/visudo -c -f $1 } cp $real_file $tmp_file && add_cmd_alias $tmp_file && add_role_chosen $tmp_file || exit 1 check_syntax $tmp_file && add_cmd_alias $real_file && add_role_chosen $real_file && rm -f $tmp_file || exit 2 check_syntax $real_file