rename
This commit is contained in:
1 parent
184288ce24
commit
cf6a611fae
16 files changed
+347
-119
No files matched your search
+22
-37
@@ -10,6 +10,7 @@
|
||||
#include <time.h>
|
||||
#include <thread>
|
||||
|
||||
#include "main.h"
|
||||
#include "server.h"
|
||||
#include "filer.cpp"
|
||||
#include "util.h"
|
||||
@@ -30,7 +31,7 @@ public:
|
||||
|
||||
Client(int &_sock) {
|
||||
control_sock = _sock;
|
||||
submit(230, "Init");
|
||||
submit(230, config->getValue("main", "server_name", "digFTP Server"));
|
||||
};
|
||||
|
||||
int receive(std::string cmd, std::string argstr) {
|
||||
@@ -44,29 +45,17 @@ public:
|
||||
submit(257, "'"+filer->cwd.string()+"'");
|
||||
} else if (cmd == "CWD") {
|
||||
int rc = filer->traverse(argstr);
|
||||
if (rc == 0) {
|
||||
submit(250, "OK");
|
||||
} else if (rc == -1) {
|
||||
submit(500, "Not found!");
|
||||
} else {
|
||||
submit(500, std::to_string(rc));
|
||||
}
|
||||
if (rc == 0) submit(250, "OK");
|
||||
else submit(431, "No such directory");
|
||||
} else if (cmd == "CDUP") {
|
||||
int rc = filer->traverse("..");
|
||||
if (rc == 0) {
|
||||
submit(250, "OK");
|
||||
} else if (rc == -1) {
|
||||
submit(500, "Not found!");
|
||||
} else {
|
||||
submit(500, std::to_string(rc));
|
||||
}
|
||||
if (rc == 0) submit(250, "OK");
|
||||
else submit(431, "No such directory");
|
||||
} else if (cmd == "MKD") {
|
||||
int rc = filer->createDirectory(argstr);
|
||||
if (rc == 0) {
|
||||
submit(250, "OK");
|
||||
} else {
|
||||
submit(500, std::to_string(rc));
|
||||
}
|
||||
if (rc == 0) submit(257, "\""+filer->relPath(argstr).string()+"\" directory created");
|
||||
else if (rc == -1) submit(521, "Directory already exists");
|
||||
else submit(550, "Access Denied");
|
||||
} else if (cmd == "TYPE") {
|
||||
sscanf(argstr.c_str(), "%c", &(filer->type));
|
||||
submit(226, "OK");
|
||||
@@ -104,10 +93,7 @@ public:
|
||||
}
|
||||
|
||||
if (getsockname(data_fd, (struct sockaddr *)&data_address, &datalen) == 0) {
|
||||
//memcpy(&netaddr[0], &data_address.sin_addr, 4);
|
||||
netaddr[0] = 127;
|
||||
netaddr[1] = netaddr[2] = 0;
|
||||
netaddr[3] = 1;
|
||||
sscanf(config->getValue("net", "listen_address", "127.0.0.1").c_str(), "%d.%d.%d.%d", &netaddr[0], &netaddr[1], &netaddr[2], &netaddr[3]);
|
||||
dataport = ntohs(data_address.sin_port);
|
||||
memcpy(&netport[0], &dataport, 2);
|
||||
printf("[i] D(%i) PASV initialized: %u.%u.%u.%u:%u\n", data_fd, netaddr[0], netaddr[1], netaddr[2], netaddr[3], dataport);
|
||||
@@ -120,7 +106,7 @@ public:
|
||||
char* pasvok;
|
||||
asprintf(
|
||||
&pasvok,
|
||||
"Entering Passive Mode (%u,%u,%u,%u,%u,%u)",
|
||||
"Entering Passive Mode (%u,%u,%u,%u,%u,%u).",
|
||||
netaddr[0],
|
||||
netaddr[1],
|
||||
netaddr[2],
|
||||
@@ -135,7 +121,6 @@ public:
|
||||
if ((data_sock = accept(data_fd, NULL, NULL)) >= 0) {
|
||||
printf("[i] D(%i) PASV accepted: %i\n", data_fd, data_sock);
|
||||
state = 2;
|
||||
//submit(200, "OK");
|
||||
} else {
|
||||
perror("accept() failed");
|
||||
submit(425, "Unknown Error");
|
||||
@@ -177,7 +162,7 @@ public:
|
||||
} else if (cmd == "DELE" || cmd == "RMD") {
|
||||
int ret = filer->deleteFile(argstr);
|
||||
if (ret == 0) {
|
||||
submit(226, "OK");
|
||||
submit(250, "OK");
|
||||
} else {
|
||||
submit(550, "Access Denied "+std::to_string(ret));
|
||||
}
|
||||
@@ -197,13 +182,12 @@ public:
|
||||
if (fd.ecode == 0) {
|
||||
submit(150, "Transferring");
|
||||
data_submit(fd.data, fd.size);
|
||||
free(fd.data);
|
||||
submit(226, "OK");
|
||||
} else {
|
||||
if (fd.ecode == -3) submit(550, "I refuse to transmit in ASCII mode!");
|
||||
else submit(550, "Access Denied");
|
||||
}
|
||||
// Segfault on freeing ASCII data, memory leak on binary.
|
||||
if (filer->type != 'A') free(fd.data);
|
||||
submit(226, "OK");
|
||||
} else if (cmd == "STOR") {
|
||||
unsigned char inbuf[BUFFERSIZE] = {0};
|
||||
submit(150, "Transferring");
|
||||
@@ -232,20 +216,21 @@ public:
|
||||
name = argstr;
|
||||
submit(331, "Password required");
|
||||
} else if (cmd == "PASS") {
|
||||
if (argstr == "123") {
|
||||
if (auth->check(name, argstr)) {
|
||||
printf("[d] (%i) logged in as '%s'\n", control_sock, name.c_str());
|
||||
// We can now set the root safely (I hope).
|
||||
filer->setRoot("/data/ftp-test/"+name);
|
||||
filer->setRoot(auth->getUserDirectory(name));
|
||||
state = 1;
|
||||
submit(230, "Login successful");
|
||||
submit(230, "Login OK");
|
||||
} else {
|
||||
submit(530, "Authentication refused.");
|
||||
return -1;
|
||||
name = "";
|
||||
submit(530, "Invalid Credentials.");
|
||||
}
|
||||
} else if (cmd == "AUTH") {
|
||||
submit(502, "Command not implemented");
|
||||
} else {
|
||||
submit(332, "Login Required");
|
||||
submit(332, "Not Logged In!");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -291,4 +276,4 @@ private:
|
||||
int data_fd;
|
||||
int data_sock;
|
||||
struct sockaddr_in data_address;
|
||||
};
|
||||
};
|
||||
Reference in new issue
Block a user