#!/bin/bash

PRIV=root
COMMAND=
NEEDS=text


eshell() {
   getent passwd $1 | cut -f7 -d:
}
usage () {
  echo usage: $0 '[-X] [-p <user>] -c <command>' >&2
  echo '-X: command is a X11 program' >&2
  exit 1
}

for i in "$@"; do
   case "$prev" in
     -p)
       PRIV="$i";;
     -c)
       COMMAND="$i";;
     -X) 
       NEEDS="X11";;
   esac
   prev="$i"
done

if [ -z "$COMMAND" ] ; then
   usage;
fi

euid=$(id -u)
privid=$(id -u $PRIV)
if test "$euid" = "$privid"; then
  $COMMAND
else
  case $NEEDS in
  text)
    if test "$euid" != 0; then
      echo About to execute $COMMAND. 
      echo This command needs $PRIV privileges to be executed.
      echo enter $PRIV passwd:
    fi
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
    SHELL=`eshell $PRIV`
    while ! su -p "$PRIV" -c "$COMMAND"; do
      echo -n 'Incorrect password or command failed. Try again? (y/n)'
      read ans
      if test "$ans" != "y" -a "$ans" != "Y"; then
        exit 1
      fi
    done;;
  X11)
    if which gksu >/dev/null 2>&1 ; then
      gksu -u "$PRIV" "$COMMAND"
    elif which kdesu >/dev/null 2>&1 ; then 
      kdesu -u "$PRIV" "$COMMAND"
  # As a last resort, open a new x-terminal-emulator and prompt for the password
  # Do not use -X here!
    else
      x-terminal-emulator -e su-to-root -p "$PRIV" -c "$COMMAND"
    fi;;
  esac
fi
