From ed5186759be7652f6942d3a35f4ed6553a528bc6 Mon Sep 17 00:00:00 2001 From: Dulana Peiris Date: Tue, 17 Oct 2023 14:51:02 +0530 Subject: [PATCH] Added one way pipe communication and argument passing --- CMakeLists.txt | 2 +- src/usr/usr.cpp | 89 +++++++++++++++++++++++++++++++++++------------- test/bin/hpsh | Bin 17320 -> 18128 bytes 3 files changed, 67 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fec3fbf3..0319c611 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,7 @@ target_link_libraries(hpcore add_custom_command(TARGET hpcore POST_BUILD # COMMAND strip ./build/hpcore - COMMAND cp ./test/bin/hpws ./test/bin/hpfs ./test/bin/hpsh ./build/ + COMMAND rm -f ./build/hpws ./build/hpfs ./build/hpsh && cp ./test/bin/hpws ./test/bin/hpfs ./test/bin/hpsh ./build/ ) target_precompile_headers(hpcore PUBLIC src/pchheader.hpp) diff --git a/src/usr/usr.cpp b/src/usr/usr.cpp index d1af77a5..c661600e 100644 --- a/src/usr/usr.cpp +++ b/src/usr/usr.cpp @@ -274,35 +274,78 @@ namespace usr } else if (msg_type == msg::usrmsg::MSGTYPE_CONTRACT_SHELL_INPUT) { - // char const **argv_pass = NULL; - // argv_pass[0] = "./" + conf::ctx.hpsh_exe_path.data(); - // // argv_pass[1] = conf::ctx.hpsh_exe_path.data(); - - - std::string id, content; if (parser.extract_shell_input(id, content) != -1) { - LOG_INFO << "Received Shell Input."; - LOG_INFO << "User PubKey:" << user.pubkey; - LOG_INFO << "ID:" << id; - LOG_INFO << "Content:" << content; - int pid = fork(); - if (pid == 0) + + int fd[2]; + if (pipe(fd) == -1) { - // int socket[2] = {-1, -1}; - // // Create the socket of given type. - // if (socket(AF_UNIX, SOCK_STREAM, 0, socket) == -1) - // { - // LOG_ERROR << errno << ": Error when creating domain socket."; - // return -1; - // } - // char *args[] = {conf::ctx.hpsh_exe_path.data(), socket, NULL}; - char *args[] = {conf::ctx.hpsh_exe_path.data() , NULL}; - if (execv(conf::ctx.hpsh_exe_path.data(), args) == -1) + perror("Error when creating pipe"); + return 1; + } + pid_t pid = -1; + + pid = fork(); + + if (pid < 0) + { + perror("Error occurred when forking"); + return -1; + } + else if (pid != 0) + { + // parent process + close(fd[0]); + LOG_INFO << "parent: Received Shell Input.\n"; + LOG_INFO << "parent: User PubKey:" << user.pubkey << "\n"; + LOG_INFO << "parent: ID:" << id << "\n"; + LOG_INFO << "parent: Content:" << content << "\n"; + LOG_INFO << "parent: writing content to pipe\n"; + ssize_t bytes_written = write(fd[1], content.c_str(), content.size()); + if (bytes_written == -1) { - perror("execv inside hpsh"); + perror("write to pipe failed"); + // handle the error appropriately } + + LOG_INFO << "parent: closing pipe\n"; + close(fd[1]); + LOG_INFO << "parent: closed\n"; + } + else + { + // child process + close(fd[1]); + std::string receivedContent; + LOG_INFO << "child: reading from pipe:\n"; + const int BUFFER_SIZE = 1024; + char buffer[BUFFER_SIZE]; + + ssize_t bytes_read = read(fd[0], buffer, BUFFER_SIZE); + if (bytes_read == -1) + { + perror("read from pipe failed"); + // handle the error appropriately + } + else + { + buffer[bytes_read] = '\0'; // Null-terminate the string + receivedContent = buffer; + LOG_INFO << "child: Content:" << receivedContent << "\n"; + } + + receivedContent = "\"" + receivedContent + "\""; + + char *passed_command = new char[receivedContent.length() + 1]; + std::strcpy(passed_command, receivedContent.c_str()); + + char *args[] = {const_cast(conf::ctx.hpsh_exe_path.c_str()), passed_command, NULL}; + if (execv(conf::ctx.hpsh_exe_path.c_str(), args) == -1) + { + perror("Error when executing HPSH"); + } + close(fd[0]); } return 0; diff --git a/test/bin/hpsh b/test/bin/hpsh index d74fbc228ba26e50cf538d7f21807acfa3116a28..70e195a73e3cb47c638c08f540cefa8f24722b48 100755 GIT binary patch literal 18128 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 W{tP59Ibo!`&G+GM+g+4x^M3(zpEQdA