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);
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<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]),
static_cast<unsigned int>(netport[1]),
static_cast<unsigned int>(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);

View File

@@ -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<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
);
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");

View File

@@ -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;