| #! /usr/bin/env bash |
| # source: readline-test.sh |
| # Copyright Gerhard Rieger and contributors (see file CHANGES) |
| # Published under the GNU General Public License V.2, see file COPYING |
| |
| # script that simulates a simple program with authentication. |
| # is just for testing the readline features |
| # perform the test with something like: |
| # ./socat readline,history=$HOME/.history,noecho='^Password: ' system:./readline-test.sh,pty,setsid,ctty,stderr,sigint,sigquit,echo=0,raw |
| |
| |
| BANNER='readline feature test program' |
| USERPROMPT='Authentication required\nUsername: ' |
| PWDPROMPT='Password: ' |
| PROMPT='prog> ' |
| |
| # degenerated user database |
| CREDUSER="user" |
| CREDPASS="password" |
| |
| if [ $(echo "x\c") = "x" ]; then ECHO="echo" |
| elif [ $(echo -e "x\c") = "x" ]; then ECHO="echo -e" |
| fi |
| |
| #trap "$ECHO $0 got SIGINT" INT |
| trap "$ECHO $0 got SIGINT" INT |
| trap "$ECHO $0 got SIGQUIT" QUIT |
| |
| # print banner |
| $ECHO "$BANNER" |
| |
| # on (some) ksh read -p does not mean prompt |
| $ECHO "$USERPROMPT\c"; read -r USERNAME |
| $ECHO "$PWDPROMPT\c"; read -rs PASSWORD |
| $ECHO |
| |
| if [ "$USERNAME" != "$CREDUSER" -o "$PASSWORD" != "$CREDPASS" ]; then |
| $ECHO "Authentication failed" >&2 |
| exit -1 |
| fi |
| |
| while $ECHO "$PROMPT\c"; read -r COMMAND; do |
| if [ "$COMMAND" = "exit" ]; then |
| break; |
| fi |
| $ECHO "executing $COMMAND" |
| done |