actually handle the ip address given in the config

This commit is contained in:
2025-01-01 22:18:19 -06:00
parent af78831af0
commit 0f4fe29aa5
3 changed files with 27 additions and 25 deletions

View File

@@ -208,7 +208,7 @@ public:
socklen_t datalen = sizeof(data_address); socklen_t datalen = sizeof(data_address);
data_address.sin_family = AF_INET; 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; data_address.sin_port = 0;
if (bind(data_fd, (struct sockaddr *)&data_address, sizeof(data_address)) < 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) { if (getsockname(data_fd, (struct sockaddr *)&data_address, &datalen) == 0) {
dataport = ntohs(data_address.sin_port); dataport = ntohs(data_address.sin_port);
memcpy(&netport[0], &dataport, 2); 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 { } else {
perror("pasv getpeername() failed"); perror("pasv getpeername() failed");
close(data_fd); close(data_fd);
return 1; return 1;
} }
char* pasvok; submit(
asprintf( 227,
&pasvok, std::format(
"Entering Passive Mode (%u,%u,%u,%u,%u,%u).", "Entering Passive Mode ({},{},{},{},{},{})",
server_address[0], static_cast<unsigned int>(server_address[0]),
server_address[1], static_cast<unsigned int>(server_address[1]),
server_address[2], static_cast<unsigned int>(server_address[2]),
server_address[3], static_cast<unsigned int>(server_address[3]),
netport[1], static_cast<unsigned int>(netport[1]),
netport[0] static_cast<unsigned int>(netport[0])
)
); );
submit(227, std::string(pasvok));
free(pasvok);
if ((data_sock = accept(data_fd, NULL, NULL)) >= 0) { if ((data_sock = accept(data_fd, NULL, NULL)) >= 0) {
logger->print(LOGLEVEL_INFO, "dataline {} PASV accepted on socket {}", data_fd, data_sock); logger->print(LOGLEVEL_INFO, "dataline {} PASV accepted on socket {}", data_fd, data_sock);

View File

@@ -66,6 +66,15 @@ int main(int argc , char *argv[]) {
&server_port &server_port
); );
asprintf(
&address_str,
"%u.%u.%u.%u",
server_address[0],
server_address[1],
server_address[2],
server_address[3]
);
logger = new Logger(); logger = new Logger();
std::string mainLogFile = config->getValue("logging", "all", ""); std::string mainLogFile = config->getValue("logging", "all", "");
logger->openFileOnLevel(LOGLEVEL_MAX, mainLogFile.c_str()); 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_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); ctrl_address.sin_port = htons(server_port);
if ((src = bind(master_socket, (struct sockaddr *)&ctrl_address, sizeof(ctrl_address))) < 0) { if ((src = bind(master_socket, (struct sockaddr *)&ctrl_address, sizeof(ctrl_address))) < 0) {
logger->print( logger->print(LOGLEVEL_CRITICAL, "Bind to {}:{} failed", address_str, server_port);
LOGLEVEL_CRITICAL,
"Bind to {}.{}.{}.{}:{} failed",
static_cast<unsigned int>(server_address[0]),
static_cast<unsigned int>(server_address[1]),
static_cast<unsigned int>(server_address[2]),
static_cast<unsigned int>(server_address[3]),
server_port
);
close(master_socket); close(master_socket);
return src; return src;
} } else
logger->print(LOGLEVEL_INFO, "Binded to {}:{}", address_str, server_port);
if ((src = listen(master_socket, 3)) < 0) { if ((src = listen(master_socket, 3)) < 0) {
logger->print(LOGLEVEL_CRITICAL, "Unable to listen to socket"); logger->print(LOGLEVEL_CRITICAL, "Unable to listen to socket");

View File

@@ -16,6 +16,7 @@
#include "plugin_manager.h" #include "plugin_manager.h"
unsigned char* server_address = new unsigned char[127]; unsigned char* server_address = new unsigned char[127];
char* address_str;
uint16_t server_port = 21; uint16_t server_port = 21;
std::string server_name; std::string server_name;
std::string motd; std::string motd;