From 0f4fe29aa50e4ad7ebed20144bd7e983acf43ab2 Mon Sep 17 00:00:00 2001 From: Wirlaburla Date: Wed, 1 Jan 2025 22:18:19 -0600 Subject: [PATCH] actually handle the ip address given in the config --- src/client.cpp | 27 +++++++++++++-------------- src/main.cpp | 24 +++++++++++++----------- src/main.h | 1 + 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 2617e5a..26ee74c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -208,7 +208,7 @@ public: socklen_t datalen = sizeof(data_address); data_address.sin_family = AF_INET; - data_address.sin_addr.s_addr = INADDR_ANY; + data_address.sin_addr.s_addr = inet_addr(address_str); data_address.sin_port = 0; if (bind(data_fd, (struct sockaddr *)&data_address, sizeof(data_address)) < 0) { @@ -226,27 +226,26 @@ public: if (getsockname(data_fd, (struct sockaddr *)&data_address, &datalen) == 0) { dataport = ntohs(data_address.sin_port); memcpy(&netport[0], &dataport, 2); - logger->print(LOGLEVEL_DEBUG, "client {} initialized PASV on dataline {}: {}.{}.{}.{}:{}", control_sock, data_fd, server_address[0], server_address[1], server_address[2], server_address[3], dataport); + logger->print(LOGLEVEL_DEBUG, "client {} initialized PASV on dataline {}: {}:{}", control_sock, data_fd, address_str, dataport); } else { perror("pasv getpeername() failed"); close(data_fd); return 1; } - char* pasvok; - asprintf( - &pasvok, - "Entering Passive Mode (%u,%u,%u,%u,%u,%u).", - server_address[0], - server_address[1], - server_address[2], - server_address[3], - netport[1], - netport[0] + submit( + 227, + std::format( + "Entering Passive Mode ({},{},{},{},{},{})", + static_cast(server_address[0]), + static_cast(server_address[1]), + static_cast(server_address[2]), + static_cast(server_address[3]), + static_cast(netport[1]), + static_cast(netport[0]) + ) ); - submit(227, std::string(pasvok)); - free(pasvok); if ((data_sock = accept(data_fd, NULL, NULL)) >= 0) { logger->print(LOGLEVEL_INFO, "dataline {} PASV accepted on socket {}", data_fd, data_sock); diff --git a/src/main.cpp b/src/main.cpp index f80e3bc..04bd7d6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -66,6 +66,15 @@ int main(int argc , char *argv[]) { &server_port ); + asprintf( + &address_str, + "%u.%u.%u.%u", + server_address[0], + server_address[1], + server_address[2], + server_address[3] + ); + logger = new Logger(); std::string mainLogFile = config->getValue("logging", "all", ""); logger->openFileOnLevel(LOGLEVEL_MAX, mainLogFile.c_str()); @@ -178,22 +187,15 @@ int main(int argc , char *argv[]) { } ctrl_address.sin_family = AF_INET; - ctrl_address.sin_addr.s_addr = INADDR_ANY; + ctrl_address.sin_addr.s_addr = inet_addr(address_str); ctrl_address.sin_port = htons(server_port); if ((src = bind(master_socket, (struct sockaddr *)&ctrl_address, sizeof(ctrl_address))) < 0) { - logger->print( - LOGLEVEL_CRITICAL, - "Bind to {}.{}.{}.{}:{} failed", - static_cast(server_address[0]), - static_cast(server_address[1]), - static_cast(server_address[2]), - static_cast(server_address[3]), - server_port - ); + logger->print(LOGLEVEL_CRITICAL, "Bind to {}:{} failed", address_str, server_port); close(master_socket); return src; - } + } else + logger->print(LOGLEVEL_INFO, "Binded to {}:{}", address_str, server_port); if ((src = listen(master_socket, 3)) < 0) { logger->print(LOGLEVEL_CRITICAL, "Unable to listen to socket"); diff --git a/src/main.h b/src/main.h index 7be20d0..8b48326 100644 --- a/src/main.h +++ b/src/main.h @@ -16,6 +16,7 @@ #include "plugin_manager.h" unsigned char* server_address = new unsigned char[127]; +char* address_str; uint16_t server_port = 21; std::string server_name; std::string motd;