actually handle the ip address given in the config
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
24
src/main.cpp
24
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<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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user