stuff
This commit is contained in:
parent
0c523757c6
commit
8ec4bc4ff8
19 changed files with 104 additions and 95 deletions
|
|
@ -36,9 +36,11 @@ client/cli_debug.c\
|
||||||
client/cli_get.c\
|
client/cli_get.c\
|
||||||
client/cli_help.c\
|
client/cli_help.c\
|
||||||
client/cli_ls.c\
|
client/cli_ls.c\
|
||||||
|
client/cli_mkd.c\
|
||||||
client/cli_pasv.c\
|
client/cli_pasv.c\
|
||||||
client/cli_put.c\
|
client/cli_put.c\
|
||||||
client/cli_pwd.c\
|
client/cli_pwd.c\
|
||||||
|
client/cli_rmd.c\
|
||||||
client/cli_user.c\
|
client/cli_user.c\
|
||||||
client/client.c\
|
client/client.c\
|
||||||
client/console_msg.c\
|
client/console_msg.c\
|
||||||
|
|
@ -46,11 +48,13 @@ client/crlf.c\
|
||||||
client/dconn.c\
|
client/dconn.c\
|
||||||
server/cmd_cwd.c\
|
server/cmd_cwd.c\
|
||||||
server/cmd_list.c\
|
server/cmd_list.c\
|
||||||
|
server/cmd_mkd.c\
|
||||||
server/cmd_pasv.c\
|
server/cmd_pasv.c\
|
||||||
server/cmd_port.c\
|
server/cmd_port.c\
|
||||||
server/cmd_pwd.c\
|
server/cmd_pwd.c\
|
||||||
server/cmd_quit.c\
|
server/cmd_quit.c\
|
||||||
server/cmd_retr.c\
|
server/cmd_retr.c\
|
||||||
|
server/cmd_rmd.c\
|
||||||
server/cmd_stor.c\
|
server/cmd_stor.c\
|
||||||
server/cmd_type.c\
|
server/cmd_type.c\
|
||||||
server/cmd_user.c\
|
server/cmd_user.c\
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/01 15:50:56 by jhalford #+# #+# */
|
/* Created: 2017/11/01 15:50:56 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:25:37 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:28:43 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -62,7 +62,6 @@ int ftp_msg(t_ftp *ftp, char **msg);
|
||||||
int ftp_code(t_ftp *ftp);
|
int ftp_code(t_ftp *ftp);
|
||||||
|
|
||||||
int ftp_send(int sock, char *msg, ...);
|
int ftp_send(int sock, char *msg, ...);
|
||||||
int ftp_sendraw(int sock, char *msg, ...);
|
|
||||||
int ftp_recv(int sock, char **msg);
|
int ftp_recv(int sock, char **msg);
|
||||||
int ftp_recvraw(int sock, char **msg);
|
int ftp_recvraw(int sock, char **msg);
|
||||||
|
|
||||||
|
|
@ -79,10 +78,11 @@ int cli_sh(t_ftp *ftp, char **av);
|
||||||
int cli_get(t_ftp *ftp, char **av);
|
int cli_get(t_ftp *ftp, char **av);
|
||||||
int cli_put(t_ftp *ftp, char **av);
|
int cli_put(t_ftp *ftp, char **av);
|
||||||
int cli_cd(t_ftp *ftp, char **av);
|
int cli_cd(t_ftp *ftp, char **av);
|
||||||
|
|
||||||
int cli_help(t_ftp *ftp, char **av);
|
int cli_help(t_ftp *ftp, char **av);
|
||||||
int cli_debug(t_ftp *ftp, char **av);
|
int cli_debug(t_ftp *ftp, char **av);
|
||||||
int cli_local(t_ftp *ftp, char **av);
|
int cli_local(t_ftp *ftp, char **av);
|
||||||
|
int cli_rmd(t_ftp *ftp, char **av);
|
||||||
|
int cli_mkd(t_ftp *ftp, char **av);
|
||||||
|
|
||||||
int cli_pasv(t_ftp *ftp);
|
int cli_pasv(t_ftp *ftp);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/01 15:56:59 by jhalford #+# #+# */
|
/* Created: 2017/11/01 15:56:59 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:41:01 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:21:00 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -69,7 +69,6 @@ extern int g_debug;
|
||||||
extern char g_rootdir[PATH_MAX];
|
extern char g_rootdir[PATH_MAX];
|
||||||
|
|
||||||
int ftp_send(int sock, char *msg, ...);
|
int ftp_send(int sock, char *msg, ...);
|
||||||
int ftp_sendraw(int sock, char *msg, ...);
|
|
||||||
int ftp_recv(int sock, char **msg);
|
int ftp_recv(int sock, char **msg);
|
||||||
int ftp_recvraw(int sock, char **msg);
|
int ftp_recvraw(int sock, char **msg);
|
||||||
int dconn_open(t_ftp *ftp);
|
int dconn_open(t_ftp *ftp);
|
||||||
|
|
@ -86,5 +85,9 @@ int cmd_pasv(t_ftp *ftp, char **av);
|
||||||
int cmd_port(t_ftp *ftp, char **av);
|
int cmd_port(t_ftp *ftp, char **av);
|
||||||
int cmd_type(t_ftp *ftp, char **av);
|
int cmd_type(t_ftp *ftp, char **av);
|
||||||
int cmd_list(t_ftp *ftp, char **av);
|
int cmd_list(t_ftp *ftp, char **av);
|
||||||
|
int cmd_mkd(t_ftp *ftp, char **av);
|
||||||
|
int cmd_mkd(t_ftp *ftp, char **av);
|
||||||
|
int cmd_mkd(t_ftp *ftp, char **av);
|
||||||
|
int cmd_rmd(t_ftp *ftp, char **av);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,32 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/10/07 17:59:28 by jhalford #+# #+# */
|
/* Created: 2017/10/07 17:59:28 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/10/07 18:02:25 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:29:49 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "libft.h"
|
#include "libft.h"
|
||||||
|
|
||||||
int create_client(char *addr, int port, char *protoname)
|
void resolve_host(struct sockaddr *s, char *hostname)
|
||||||
|
{
|
||||||
|
struct addrinfo *result;
|
||||||
|
struct addrinfo hints;
|
||||||
|
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = PF_UNSPEC;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
hints.ai_flags |= AI_CANONNAME;
|
||||||
|
if (getaddrinfo(hostname, NULL, &hints, &result) != 0)
|
||||||
|
{
|
||||||
|
perror("getaddrinfo");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
ft_memcpy(((struct sockaddr_in*)s),
|
||||||
|
result->ai_addr, sizeof(struct sockaddr));
|
||||||
|
freeaddrinfo(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
int create_client(char *host, int port, char *protoname)
|
||||||
{
|
{
|
||||||
int sock;
|
int sock;
|
||||||
struct protoent *proto;
|
struct protoent *proto;
|
||||||
|
|
@ -21,9 +40,9 @@ int create_client(char *addr, int port, char *protoname)
|
||||||
if (!(proto = getprotobyname(protoname)))
|
if (!(proto = getprotobyname(protoname)))
|
||||||
return (-1);
|
return (-1);
|
||||||
sock = socket(PF_INET, SOCK_STREAM, proto->p_proto);
|
sock = socket(PF_INET, SOCK_STREAM, proto->p_proto);
|
||||||
|
resolve_host((struct sockaddr*)&sin, host);
|
||||||
sin.sin_family = AF_INET;
|
sin.sin_family = AF_INET;
|
||||||
sin.sin_port = htons(port);
|
sin.sin_port = htons(port);
|
||||||
sin.sin_addr.s_addr = inet_addr(addr);
|
|
||||||
if (connect(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0)
|
if (connect(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
return (sock);
|
return (sock);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/10/07 17:56:14 by jhalford #+# #+# */
|
/* Created: 2017/10/07 17:56:14 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/10/07 17:56:40 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:39:31 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/03 14:58:18 by jhalford #+# #+# */
|
/* Created: 2016/11/03 14:58:18 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/19 05:50:20 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:03:04 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/10 12:42:21 by jhalford #+# #+# */
|
/* Created: 2017/11/10 12:42:21 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 12:43:44 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:30:55 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,8 +14,6 @@
|
||||||
|
|
||||||
int cli_cd(t_ftp *ftp, char **av)
|
int cli_cd(t_ftp *ftp, char **av)
|
||||||
{
|
{
|
||||||
char *msg;
|
|
||||||
|
|
||||||
(void)av;
|
(void)av;
|
||||||
if (!av[1] || av[2])
|
if (!av[1] || av[2])
|
||||||
{
|
{
|
||||||
|
|
@ -23,7 +21,6 @@ int cli_cd(t_ftp *ftp, char **av)
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
ftp_cmd(ftp, "CWD %s", av[1]);
|
ftp_cmd(ftp, "CWD %s", av[1]);
|
||||||
ftp_recv(ftp->cmd_sock, &msg);
|
ftp_code(ftp);
|
||||||
ft_strdel(&msg);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/10 13:00:28 by jhalford #+# #+# */
|
/* Created: 2017/11/10 13:00:28 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:20:22 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:55:01 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -23,6 +23,7 @@ int cli_get(t_ftp *ftp, char **av)
|
||||||
{
|
{
|
||||||
char *msg;
|
char *msg;
|
||||||
int fd;
|
int fd;
|
||||||
|
int size;
|
||||||
|
|
||||||
if (!av[1] || av[2])
|
if (!av[1] || av[2])
|
||||||
return (console_msg(-1, "usage: get <filename>"));
|
return (console_msg(-1, "usage: get <filename>"));
|
||||||
|
|
@ -33,13 +34,9 @@ int cli_get(t_ftp *ftp, char **av)
|
||||||
ftp_cmd(ftp, "RETR %s", av[1]);
|
ftp_cmd(ftp, "RETR %s", av[1]);
|
||||||
if (dconn_open(ftp) < 0)
|
if (dconn_open(ftp) < 0)
|
||||||
return (cleanup(fd, av[1]));
|
return (cleanup(fd, av[1]));
|
||||||
while (1)
|
size = ftp_recvraw(ftp->d_sock, &msg);
|
||||||
{
|
write(fd, msg, size);
|
||||||
if (ftp_recvraw(ftp->d_sock, &msg))
|
ft_strdel(&msg);
|
||||||
break ;
|
|
||||||
write(fd, msg, ft_strlen(msg));
|
|
||||||
ft_strdel(&msg);
|
|
||||||
}
|
|
||||||
close(fd);
|
close(fd);
|
||||||
dconn_close(ftp);
|
dconn_close(ftp);
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/08 13:43:10 by jhalford #+# #+# */
|
/* Created: 2017/11/08 13:43:10 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 13:00:22 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:39:39 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/10 16:20:14 by jhalford #+# #+# */
|
/* Created: 2017/11/10 16:20:14 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:27:50 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:57:02 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,9 +20,11 @@ int cli_put(t_ftp *ftp, char **av)
|
||||||
|
|
||||||
if (!av[1] || av[2])
|
if (!av[1] || av[2])
|
||||||
return (console_msg(-1, "usage: put <filename>"));
|
return (console_msg(-1, "usage: put <filename>"));
|
||||||
|
|
||||||
if ((fd = open(av[1], O_RDONLY)) < 0 || fstat(fd, &buf) < 0)
|
if ((fd = open(av[1], O_RDONLY)) < 0 || fstat(fd, &buf) < 0)
|
||||||
|
{
|
||||||
|
console_msg(0, "no such file or directory");
|
||||||
return (-1);
|
return (-1);
|
||||||
|
}
|
||||||
if (!buf.st_size || (file = mmap(NULL, buf.st_size, PROT_READ | PROT_WRITE,
|
if (!buf.st_size || (file = mmap(NULL, buf.st_size, PROT_READ | PROT_WRITE,
|
||||||
MAP_PRIVATE, fd, 0)) == MAP_FAILED)
|
MAP_PRIVATE, fd, 0)) == MAP_FAILED)
|
||||||
{
|
{
|
||||||
|
|
@ -42,7 +44,8 @@ int cli_put(t_ftp *ftp, char **av)
|
||||||
munmap(file, buf.st_size);
|
munmap(file, buf.st_size);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
ftp_sendraw(ftp->d_sock, file);
|
send(ftp->d_sock, file, buf.st_size, 0);
|
||||||
|
close(ftp->d_sock);
|
||||||
dconn_close(ftp);
|
dconn_close(ftp);
|
||||||
munmap(file, buf.st_size);
|
munmap(file, buf.st_size);
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/10 12:33:09 by jhalford #+# #+# */
|
/* Created: 2017/11/10 12:33:09 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 12:42:11 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:27:13 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,11 +14,8 @@
|
||||||
|
|
||||||
int cli_pwd(t_ftp *ftp, char **av)
|
int cli_pwd(t_ftp *ftp, char **av)
|
||||||
{
|
{
|
||||||
char *msg;
|
|
||||||
|
|
||||||
(void)av;
|
(void)av;
|
||||||
ftp_cmd(ftp, "PWD");
|
ftp_cmd(ftp, "PWD");
|
||||||
ftp_recv(ftp->cmd_sock, &msg);
|
ftp_code(ftp);
|
||||||
ft_strdel(&msg);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/04/02 19:18:31 by jhalford #+# #+# */
|
/* Created: 2017/04/02 19:18:31 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 16:34:57 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:28:27 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,6 +20,8 @@ t_cmd_map g_cli_cmd[] =
|
||||||
{"get", cli_get, "receive file"},
|
{"get", cli_get, "receive file"},
|
||||||
{"put", cli_put, "send one file"},
|
{"put", cli_put, "send one file"},
|
||||||
{"pwd", cli_pwd, "print working directory on remote machine"},
|
{"pwd", cli_pwd, "print working directory on remote machine"},
|
||||||
|
{"mkdir", cli_mkd, "create a directory on remote machine"},
|
||||||
|
{"rmdir", cli_rmd, "remove a directory from remote machine"},
|
||||||
{"quit", NULL, "terminate ftp session and exit"},
|
{"quit", NULL, "terminate ftp session and exit"},
|
||||||
|
|
||||||
{"?", cli_help, "print local help information"},
|
{"?", cli_help, "print local help information"},
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/08 19:52:07 by jhalford #+# #+# */
|
/* Created: 2017/11/08 19:52:07 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:35:44 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:52:09 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -19,14 +19,23 @@ int ftp_recvraw(int sock, char **msg)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
void *tmp;
|
||||||
|
int size;
|
||||||
|
|
||||||
if ((ret = recv(sock, buf, 1024, 0)) <= 0)
|
tmp = NULL;
|
||||||
return (-1);
|
size = 0;
|
||||||
buf[ret] = 0;
|
while ((ret = recv(sock, buf, 1024, 0)) > 0)
|
||||||
console_msg(2, "recv size=%i", ret);
|
{
|
||||||
console_msg(2, "message '%s'", buf);
|
buf[ret] = 0;
|
||||||
*msg = ft_strdup(buf);
|
*msg = ft_strnew(size + ret);
|
||||||
return (0);
|
ft_memcpy(*msg, tmp, size);
|
||||||
|
ft_memcpy(*msg + size, buf, ret);
|
||||||
|
ft_memdel(&tmp);
|
||||||
|
tmp = *msg;
|
||||||
|
size += ret;
|
||||||
|
}
|
||||||
|
console_msg(2, "raw msg size %i", size);
|
||||||
|
return (size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ftp_recv(int sock, char **msg)
|
int ftp_recv(int sock, char **msg)
|
||||||
|
|
@ -51,23 +60,6 @@ int ftp_recv(int sock, char **msg)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ftp_sendraw(int sock, char *msg, ...)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
char *tmp;
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, msg);
|
|
||||||
ft_vasprintf(&tmp, msg, ap);
|
|
||||||
console_msg(1, "---> %s", tmp);
|
|
||||||
if ((err = send(sock, tmp, ft_strlen(tmp), 0)) < 0)
|
|
||||||
{
|
|
||||||
return (err);
|
|
||||||
}
|
|
||||||
ft_strdel(&tmp);
|
|
||||||
return (ft_atoi(msg));
|
|
||||||
}
|
|
||||||
|
|
||||||
int ftp_send(int sock, char *msg, ...)
|
int ftp_send(int sock, char *msg, ...)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/08 14:55:15 by jhalford #+# #+# */
|
/* Created: 2017/11/08 14:55:15 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 16:40:24 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:20:14 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/02 13:36:24 by jhalford #+# #+# */
|
/* Created: 2017/11/02 13:36:24 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 13:00:01 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:34:43 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
int cmd_cwd(t_ftp *ftp, char **av)
|
int cmd_cwd(t_ftp *ftp, char **av)
|
||||||
{
|
{
|
||||||
char old[1024];
|
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
char old[1024];
|
||||||
|
|
||||||
getcwd(old, 1024);
|
getcwd(old, 1024);
|
||||||
if (chdir(av[1]))
|
if (chdir(av[1]))
|
||||||
|
|
@ -26,9 +26,9 @@ int cmd_cwd(t_ftp *ftp, char **av)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
getcwd(buf, 1024);
|
getcwd(buf, 1024);
|
||||||
if (!ft_strstr(buf, old))
|
if (!ft_strstr(buf, ftp->path))
|
||||||
{
|
{
|
||||||
console_msg(0, "%s -> %s", buf, old);
|
console_msg(0, "%s -> %s", buf, ftp->path);
|
||||||
chdir(old);
|
chdir(old);
|
||||||
ftp_ret(ftp, "550 unauthorized directory");
|
ftp_ret(ftp, "550 unauthorized directory");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/02 15:32:28 by jhalford #+# #+# */
|
/* Created: 2017/11/02 15:32:28 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:32:16 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:54:04 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ int cmd_retr(t_ftp *ftp, char **av)
|
||||||
munmap(file, buf.st_size);
|
munmap(file, buf.st_size);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
ftp_sendraw(ftp->d_sock, file);
|
send(ftp->d_sock, file, buf.st_size, 0);
|
||||||
dconn_close(ftp);
|
dconn_close(ftp);
|
||||||
munmap(file, buf.st_size);
|
munmap(file, buf.st_size);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/02 16:01:54 by jhalford #+# #+# */
|
/* Created: 2017/11/02 16:01:54 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:51:39 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:17:46 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -16,13 +16,14 @@ int cmd_stor(t_ftp *ftp, char **av)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
char *msg;
|
char *msg;
|
||||||
|
int size;
|
||||||
|
|
||||||
if (dconn_open(ftp) < 0)
|
if (dconn_open(ftp) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if ((fd = open(av[1], O_WRONLY | O_TRUNC | O_CREAT, 0644)) < 0)
|
if ((fd = open(av[1], O_WRONLY | O_TRUNC | O_CREAT, 0644)) < 0)
|
||||||
return (ftp_ret(ftp, "550 couldn't open/create file"));
|
return (ftp_ret(ftp, "550 couldn't open/create file"));
|
||||||
ftp_recvraw(ftp->d_sock, &msg);
|
size = ftp_recvraw(ftp->d_sock, &msg);
|
||||||
write(fd, msg, ft_strlen(msg));
|
write(fd, msg, size);
|
||||||
ft_strdel(&msg);
|
ft_strdel(&msg);
|
||||||
close(fd);
|
close(fd);
|
||||||
dconn_close(ftp);
|
dconn_close(ftp);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/11/08 19:52:07 by jhalford #+# #+# */
|
/* Created: 2017/11/08 19:52:07 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/10 17:51:32 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 18:55:45 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -19,13 +19,23 @@ int ftp_recvraw(int sock, char **msg)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
void *tmp;
|
||||||
|
int size;
|
||||||
|
|
||||||
if ((ret = recv(sock, buf, 1024, 0)) <= 0)
|
tmp = NULL;
|
||||||
return (-1);
|
size = 0;
|
||||||
buf[ret] = 0;
|
while ((ret = recv(sock, buf, 1024, 0)) > 0)
|
||||||
console_msg(2, "%-5i<--- raw msg '%s' (%i)", getpid(), buf, ret);
|
{
|
||||||
*msg = ft_strdup(buf);
|
buf[ret] = 0;
|
||||||
return (0);
|
*msg = ft_strnew(size + ret);
|
||||||
|
ft_memcpy(*msg, tmp, size);
|
||||||
|
ft_memcpy(*msg + size, buf, ret);
|
||||||
|
ft_memdel(&tmp);
|
||||||
|
tmp = *msg;
|
||||||
|
size += ret;
|
||||||
|
}
|
||||||
|
console_msg(2, "%-5i<--- raw msg size %i", getpid(), size);
|
||||||
|
return (size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ftp_recv(int sock, char **msg)
|
int ftp_recv(int sock, char **msg)
|
||||||
|
|
@ -53,24 +63,6 @@ int ftp_recv(int sock, char **msg)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ftp_sendraw(int sock, char *msg, ...)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
char *tmp;
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, msg);
|
|
||||||
ft_vasprintf(&tmp, msg, ap);
|
|
||||||
if ((err = send(sock, tmp, ft_strlen(tmp), 0)) < 0)
|
|
||||||
{
|
|
||||||
console_msg(1, "%-5i---> send error '%s'", getpid(), tmp);
|
|
||||||
return (err);
|
|
||||||
}
|
|
||||||
console_msg(0, "%-5i---> %s", getpid(), tmp);
|
|
||||||
ft_strdel(&tmp);
|
|
||||||
return (ft_atoi(msg));
|
|
||||||
}
|
|
||||||
|
|
||||||
int ftp_send(int sock, char *msg, ...)
|
int ftp_send(int sock, char *msg, ...)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/04/02 15:02:48 by jhalford #+# #+# */
|
/* Created: 2017/04/02 15:02:48 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/11/09 10:25:33 by jhalford ### ########.fr */
|
/* Updated: 2017/11/10 19:23:13 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ char g_rootdir[PATH_MAX];
|
||||||
t_ftp_cmd g_ftp_cmd[] =
|
t_ftp_cmd g_ftp_cmd[] =
|
||||||
{
|
{
|
||||||
{"USER", cmd_user, 0},
|
{"USER", cmd_user, 0},
|
||||||
{"QUIT", cmd_quit, 0},
|
{"QUIT", cmd_quit, LOG_YES},
|
||||||
{"RETR", cmd_retr, LOG_YES},
|
{"RETR", cmd_retr, LOG_YES},
|
||||||
{"STOR", cmd_stor, LOG_YES},
|
{"STOR", cmd_stor, LOG_YES},
|
||||||
{"CWD", cmd_cwd, LOG_YES},
|
{"CWD", cmd_cwd, LOG_YES},
|
||||||
|
|
@ -29,6 +29,8 @@ t_ftp_cmd g_ftp_cmd[] =
|
||||||
{"PWD", cmd_pwd, LOG_YES},
|
{"PWD", cmd_pwd, LOG_YES},
|
||||||
{"TYPE", cmd_type, LOG_YES},
|
{"TYPE", cmd_type, LOG_YES},
|
||||||
{"LIST", cmd_list, LOG_YES},
|
{"LIST", cmd_list, LOG_YES},
|
||||||
|
{"MKD", cmd_mkd, LOG_YES},
|
||||||
|
{"RMD", cmd_rmd, LOG_YES},
|
||||||
{0, 0, 0},
|
{0, 0, 0},
|
||||||
};
|
};
|
||||||
int g_debug = 2;
|
int g_debug = 2;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue