From 836e0fa2062316cceb7cf42d163f8f17fc01494a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 19 May 2021 00:59:40 +0200 Subject: [PATCH] accept multiple commands on stdin --- client/src/proxmark3.c | 15 +++++++-------- tools/pm3_tests.sh | 6 ++++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index 0541e1d41..80a1ea331 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -309,7 +309,7 @@ check_script: } else { // If there is a script command if (execCommand) { - prompt_ctx = PROXPROMPT_CTX_SCRIPTCMD; + prompt_ctx = stdinOnPipe ? PROXPROMPT_CTX_STDIN : PROXPROMPT_CTX_SCRIPTCMD; cmd = str_dup(script_cmd); if (cmd != NULL) @@ -329,8 +329,6 @@ check_script: // if there is a pipe from stdin if (stdinOnPipe) { - prompt_ctx = PROXPROMPT_CTX_STDIN; - // clear array memset(script_cmd_buf, 0, sizeof(script_cmd_buf)); // get @@ -338,13 +336,14 @@ check_script: PrintAndLogEx(ERR, "STDIN unexpected end, exit..."); break; } + execCommand = true; + stayInCommandLoop = true; + script_cmd = script_cmd_buf; + script_cmd_len = strlen(script_cmd); + strcreplace(script_cmd, script_cmd_len, ';', '\0'); // remove linebreaks strcleanrn(script_cmd_buf, sizeof(script_cmd_buf)); - - cmd = str_dup(script_cmd_buf); - if (cmd != NULL) - printprompt = true; - + goto check_script; } else { #ifdef HAVE_READLINE rl_event_hook = check_comm; diff --git a/tools/pm3_tests.sh b/tools/pm3_tests.sh index c820d611d..0f57d1a09 100755 --- a/tools/pm3_tests.sh +++ b/tools/pm3_tests.sh @@ -351,6 +351,12 @@ while true; do if ! CheckExecute "proxmark help text ISO7816" "$CLIENTBIN -t 2>&1" "ISO7816"; then break; fi if ! CheckExecute "proxmark help text hardnested" "$CLIENTBIN -t 2>&1" "hardnested"; then break; fi if ! CheckExecute "proxmark full help dump" "$CLIENTBIN --fulltext 2>&1" "Full help dump done"; then break; fi + if ! CheckExecute "proxmark multi cmds 1/2" "$CLIENTBIN -c 'rem foo;rem bar'" "remark: foo"; then break; fi + if ! CheckExecute "proxmark multi cmds 2/2" "$CLIENTBIN -c 'rem foo;rem bar'" "remark: bar"; then break; fi + if ! CheckExecute "proxmark multi stdin 1/4" "echo 'rem foo;rem bar;quit' |$CLIENTBIN" "remark: foo"; then break; fi + if ! CheckExecute "proxmark multi stdin 2/4" "echo 'rem foo;rem bar;quit' |$CLIENTBIN" "remark: bar"; then break; fi + if ! CheckExecute "proxmark multi stdin 3/4" "echo -e 'rem foo\nrem bar;quit' |$CLIENTBIN" "remark: foo"; then break; fi + if ! CheckExecute "proxmark multi stdin 4/4" "echo -e 'rem foo\nrem bar;quit' |$CLIENTBIN" "remark: bar"; then break; fi echo -e "\n${C_BLUE}Testing data manipulation:${C_NC}" if ! CheckExecute "reveng readline test" "$CLIENTBIN -c 'reveng -h;reveng -D'" "CRC-64/GO-ISO"; then break; fi