summaryrefslogtreecommitdiffhomepage
path: root/plugins/fcgi/fastcgiprocess.cpp
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2023-02-12 18:54:34 +0100
committerRoland Reichwein <mail@reichwein.it>2023-02-12 18:54:34 +0100
commitaa79e8701d39de2a24b2de7b97d3fc137e87b27b (patch)
tree88af00d49ee97f2d113baed3ecbd17e0305b775d /plugins/fcgi/fastcgiprocess.cpp
parent3282755c3798b695177c961a5745267cda6c21c4 (diff)
Enable multiple arguments for FCGI app when run via webapp-runner
Diffstat (limited to 'plugins/fcgi/fastcgiprocess.cpp')
-rw-r--r--plugins/fcgi/fastcgiprocess.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/plugins/fcgi/fastcgiprocess.cpp b/plugins/fcgi/fastcgiprocess.cpp
index d43fa75..017cab6 100644
--- a/plugins/fcgi/fastcgiprocess.cpp
+++ b/plugins/fcgi/fastcgiprocess.cpp
@@ -61,7 +61,7 @@ FastCGIProcess::~FastCGIProcess()
stop();
}
-void run_fcgi_app(const std::string& command, const std::string& host, unsigned short port)
+void run_fcgi_app(const std::string& command, const std::string& host, unsigned short port, int arg, char* argv[])
{
boost::asio::io_context ioc;
boost::asio::ip::tcp::resolver resolver(ioc);
@@ -81,10 +81,10 @@ void run_fcgi_app(const std::string& command, const std::string& host, unsigned
close(fd);
}
- execl(command.c_str(), command.c_str(), (const char*)nullptr);
+ execv(command.c_str(), argv);
}
-void run_fcgi_app(const std::string& command, const std::filesystem::path& socket_path)
+void run_fcgi_app(const std::string& command, const std::filesystem::path& socket_path, int arg, char* argv[])
{
boost::asio::io_context ioc;
boost::asio::local::stream_protocol::acceptor file_acceptor(ioc);
@@ -103,7 +103,7 @@ void run_fcgi_app(const std::string& command, const std::filesystem::path& socke
close(fd);
}
- execl(command.c_str(), command.c_str(), (const char*)nullptr);
+ execv(command.c_str(), argv);
}
void FastCGIProcess::start()
@@ -116,11 +116,12 @@ void FastCGIProcess::start()
throw std::runtime_error("Fork unsuccessful.");
if (m_pid == 0) { // child process branch
+ char* argv[] {m_command.data(), nullptr};
try {
if (m_socket_path.empty())
- run_fcgi_app(m_command, m_host, m_port);
+ run_fcgi_app(m_command, m_host, m_port, 2, argv);
else
- run_fcgi_app(m_command, m_socket_path);
+ run_fcgi_app(m_command, m_socket_path, 2, argv);
} catch (const std::exception& ex) {
std::cout << "FastCGI process error: " << ex.what() << std::endl;
}