#!/bin/bash

#	Bongosurfer Setup
#		- Erlaubte Benutzer abfragen
#		- Einwahlmethode abfragen
#		- sudo konfigurieren
#


if [ $(id -u) -ne 0 ] 
then
	echo
	echo "bongosetup muss als root ausgefuehrt werden"
	echo
	exit
fi

function sudoers_define {
    echo
    echo "Wer darf mit Bongosurfer Internetverbindungen herstellen?"
    echo "Eine durch Komma getrennte Liste von Benutzernamen oder mit"
    echo "mit einem Prozentzeichen davor fuer Gruppen."
    echo
    echo "Bsp: \"%dialout,martin,eva\" fuer die Gruppe dialout und die "
    echo "Benutzer martin und eva"
    echo
    echo "(Enter fr Standard: Gruppe dialout)"
    echo
    echo -n "[Standard \"%dialout\"] "
    
    x=0
    BONGO_ACCOUNTS="${BONGO_ACCOUNTS:=/falscheEingabe}"
    
    until echo "$BONGO_ACCOUNTS" | egrep -q '(^%?[a-zA-Z_0-9-]+(,%?[a-zA-Z_0-9-]+)*$|^$)'
	do
      [ $x -gt 0 ] && echo "Falsche Eingabe, bitte nochmal"
      echo -n "> "
      read BONGO_ACCOUNTS
      ((x++))
    done

}

function sudoers_write {
    if ( ls -l /etc/sudoers |grep -q '^-rw' ); then 
	deb="false"
    else
	deb="true"
    fi
    
    chmod 640 /etc/sudoers
    echo
    echo "Zugelassene Nutzer: ${BONGO_ACCOUNTS:=%dialout}"
    
    echo "Konfiguriere sudo..."
    
# --- /etc/sudoers auf existenz pruefen und ggf. anlegen, sonst backup erstellen
#
    if [ ! -f /etc/sudoers ]; then 
	touch /etc/sudoers
    elif [ ! -e /etc/sudoers.bs.old ]; then
	cp /etc/sudoers /etc/sudoers.bs.old
    fi
    
# --- Alte Eintraege von BONGOSURFER entfernen
#
    echo -n "entferne alte Eintraege von BONGOSURFER in /etc/sudoers... "
    
    sed -rie '/(BONGO|BSISDN)/d' /etc/sudoers && echo OK || echo FEHLER
    
    
# --- SUDO einrichten fuer ISDN+Modem
#
    
    echo -n "Bearbeite /etc/sudoers... "
    COMMAND_ALIAS="Cmnd_Alias BONGO_COMMANDS=/usr/share/bongosurfer/einwaehlen.sh,/usr/share/bongosurfer/modemeinwahl.sh,/usr/share/bongosurfer/capieinwahl.sh,/usr/share/bongosurfer/synchronizeClock.sh"
    
    echo "User_Alias BONGO_ACCOUNTS=$BONGO_ACCOUNTS">>/etc/sudoers
    echo "$COMMAND_ALIAS">>/etc/sudoers
    echo "BONGO_ACCOUNTS ALL=(ALL) NOPASSWD:BONGO_COMMANDS">>/etc/sudoers
    
    if ( grep -q 'BONGO' /etc/sudoers ); then
	echo "OK"
    else
	echo "Fehler!"
    fi
    echo

    if [ "$deb" = "true" ]; then
	chmod 440 /etc/sudoers
    else
	chmod 640 /etc/sudoers
    fi

}
 

# Automatische Konfiguration bei -q
if [ "$1 " == "-q " ]; then
    BONGO_ACCOUNTS="%dialout"
    echo "sudo" > /etc/bs_pppd
    sudoers_write
    exit
fi
			

if [ " $BONGO_ACCOUNTS" == " " ]; then 
    echo
    echo "BongoSurfer Setup"
    echo "================="
    echo
    echo "BongoSurfer kann auf 2 verschiedene Weisen ausreichende"
    echo "Rechte bekommen, um Internetverbindungen herzustellen."
    echo
    echo
    echo "1) Die erste Methode ist die Verwendung von sudo und das Editieren"
    echo "der Datei /etc/sudoers. Es kann so ganz genau definiert werden,"
    echo "welche User eine Internetverbindung herstellen drfen."
    echo "Diese Methode ist am restriktivsten und wird daher empfohlen."
    echo
    echo "2) Die zweite Methode ist das setzen eines suid-bits auf"
    echo "/usr/sbin/pppd. Dieser verleiht Usern der Gruppe dialout bzw."
    echo "dip eingeschrnkte aber ausreichende Rechte ber pppd."
    echo "mit dieser Methode ist eine Einwahl ber ISDN mit dem Hysax-"
    echo "Treiber (I4L) nicht mglich und die Zeitsynchronisierungs-"
    echo "Funktion wird nicht verfuegbar sein, falls die (selber definier-"
    echo "baren) Kommandos hierfr root-Rechte bentigen ."
    echo
    echo -n "weiter: beliebige Taste... "
    read -n 1
    echo
    echo
    echo "Welche Metode soll verwendet werden? ([1] wird empfohlen)"
    echo
    echo "1: sudo"
    echo "2: suid-bit auf pppd"
    echo
    
    while [[ ! ("$methode" = "1" || "$methode" = "2") ]]; do
	read -n 1 methode
	if [[ ! ("$methode" = "1" || "$methode" = "2") ]]; then
	    echo "falsche Eingabe, nochmal!"
	fi
    done
    echo
    echo
    if [ "$methode" = "1" ]; then
	echo "sudo" > /etc/bs_pppd
	if [ -u `which pppd` ]; then
	
	    echo "suid-Bit auf "`which pppd`" entfernen? (j/n)"
	    echo "(chmod -s "`which pppd`")"
	    echo
	    while [[ ! ("$entf" = "j" || "$entf" = "n") ]]; do
		read -n 1 entf
		if [[ ! ("$entf" = "j" || "$entf" = "n") ]]; then
		    echo "falsche Eingabe, nochmal!"
		fi
	    done
	    echo
	    echo
	    if [ "$entf" = "j" ]; then
		echo -n "suid-Bit auf pppd wird entfernt... "
		chmod -s `which pppd` && echo "OK" || echo "Fehler!"
		echo
	    fi
	fi	
	if [ -u `which chat` ]; then
	
	    echo "suid-Bit auf "`which chat`" entfernen ? (j/n)"
	    echo "(chmod -s "`which chat`")"
	    echo
	    while [[ ! ("$entf" = "j" || "$entf" = "n") ]]; do
		read -n 1 entf
		if [[ ! ("$entf" = "j" || "$entf" = "n") ]]; then
		    echo "falsche Eingabe, nochmal!"
		fi
	    done
	    echo
	    echo
	    if [ "$entf" = "j" ]; then
		echo -n "suid-Bit auf chat wird entfernt... "
		chmod -s `which chat` && echo "OK" || echo "Fehler!"
		echo
	    fi
	fi	

	sudoers_define
	sudoers_write

    else
	echo "suid" > /etc/bs_pppd
	echo -n "setze suid-bit auf "`which pppd`"... " 
	chmod +s `which pppd` && echo "OK" || echo "Fehler!"
	if [ -f /etc/sudoers ]; then 
	    echo -n "entferne alte Eintraege von BONGOSURFER in /etc/sudoers... "
	    # --- Alte Eintraege von BONGOSURFER in /etc/sudoers entfernen
	    if ( ls -l /etc/sudoers |grep -q '^-rw' ); then 
		deb="false"
	    else
		deb="true"
	    fi	    
	    chmod 640 /etc/sudoers
 	    sed -rie '/(BONGO|BSISDN)/d' /etc/sudoers && echo OK || echo FEHLER
	    if [ "$deb" = "true" ]; then
		chmod 440 /etc/sudoers
	    else
		chmod 640 /etc/sudoers
	    fi

	fi
	echo
    fi
    echo "bongosetup beendet. Starten Sie bongoSurfer neu, falls es noch laueft."
    echo
fi

###eof
	
