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);
|
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);
|
||||||
|
|
||||||
|
|||||||
24
src/main.cpp
24
src/main.cpp
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user