diff --git a/utils/mnetftpd/mnetftpd.c b/utils/mnetftpd/mnetftpd.c index 3c17ce1..79dea2f 100644 --- a/utils/mnetftpd/mnetftpd.c +++ b/utils/mnetftpd/mnetftpd.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -24,12 +25,41 @@ static int client_count = 0; static struct user_t **users; static int user_count = 0; +char *logfile = NULL; + struct dllist { char *data; struct dllist *prev; struct dllist *next; }; +void dolog(char *fmt, ...) { + char buffer[PATH_MAX]; + struct tm time_now; + time_t timen; + FILE *logfptr; + int mypid = getpid(); + + if (logfile == NULL) return; + + timen = time(NULL); + + localtime_r(&timen, &time_now); + + logfptr = fopen(logfile, "a"); + if (!logfptr) { + return; + } + va_list ap; + va_start(ap, fmt); + vsnprintf(buffer, PATH_MAX, fmt, ap); + va_end(ap); + + fprintf(logfptr, "%04d-%02d-%02d %02d:%02d:%02d [%d] %s\n", time_now.tm_year + 1900, time_now.tm_mon + 1, time_now.tm_mday, time_now.tm_hour, time_now.tm_min, time_now.tm_sec, mypid, buffer); + + fclose(logfptr); +} + void sigchld_handler(int s) { // waitpid() might overwrite errno, so we save and restore it: @@ -159,6 +189,8 @@ static int handler(void* user, const char* section, const char* name, const char } else { cfg->ipv6 = 0; } + } else if (strcasecmp(name, "log file") == 0) { + logfile = strdup(value); } } else { newuser = NULL; @@ -321,7 +353,6 @@ void handle_STOR(struct ftpserver *cfg, struct ftpclient *client, char *path) { } } - fprintf(stderr, "FULL PATH %s\n", fullpath); snprintf(fullpathpart, PATH_MAX, "%s.part", fullpath); if (stat(fullpathpart, &s) != 0 && stat(fullpath, &s) != 0) { @@ -479,7 +510,6 @@ void handle_PASV(struct ftpserver *cfg, struct ftpclient *client) { socklen_t file_sock_len = sizeof(struct sockaddr_in); getsockname(client->data_srv_socket, (struct sockaddr*) &file_addr, &file_sock_len); - fprintf(stderr, "%s\n", client->hostip); ipcpy = strdup(client->hostip); ipptr = strtok(ipcpy, "."); @@ -507,10 +537,6 @@ void handle_DELE(struct ftpserver *cfg, struct ftpclient *client, char *file) { newpath = (char *)malloc(PATH_MAX); parse_path(client, file, &newpath); - fprintf(stderr, "NEWPATH %s\n", newpath); - - - if (newpath[0] == '/') { if (strncmp(newpath, "/in", 3) == 0) { snprintf(fullpath, PATH_MAX, "%s/%s", client->current_path, &newpath[4]); @@ -551,9 +577,6 @@ void handle_RETR(struct ftpserver *cfg, struct ftpclient *client, char *file) { newpath = (char *)malloc(PATH_MAX); parse_path(client, file, &newpath); - fprintf(stderr, "NEWPATH %s\n", newpath); - - if (newpath[0] == '/') { if (strncmp(newpath, "/in", 3) == 0) { @@ -570,7 +593,6 @@ void handle_RETR(struct ftpserver *cfg, struct ftpclient *client, char *file) { snprintf(fullpath, PATH_MAX, "%s/%s", client->current_path, newpath); } - fprintf(stderr, "FULL PATH %s\n", fullpath); free(newpath); struct stat s; pid_t pid = fork(); @@ -822,8 +844,6 @@ void handle_CWD(struct ftpserver *cfg, struct ftpclient *client, char *dir) { newpath = (char *)malloc(1024); parse_path(client, dir, &newpath); - fprintf(stderr, "%s\n", newpath); - if (strcasecmp(newpath, "/in") == 0) { client->current_path = client->user->indir; send_msg(client, "250 Okay.\r\n"); @@ -921,8 +941,10 @@ int handle_client(struct ftpserver *cfg, struct ftpclient *client, char *buf, in if (strcmp(cmd, "PASS") == 0) { fprintf(stderr, "command: %s, argument: ****\n", cmd); + dolog("command: %s, argument: ****", cmd); } else { fprintf(stderr, "command: %s, argument: %s\n", cmd, argument); + dolog("command: %s, argument: %s", cmd, argument); } if (strcmp(cmd, "USER") == 0) { diff --git a/utils/mnetftpd/mnetftpd.ini b/utils/mnetftpd/mnetftpd.ini index e13cf8b..e4cdaea 100644 --- a/utils/mnetftpd/mnetftpd.ini +++ b/utils/mnetftpd/mnetftpd.ini @@ -4,6 +4,7 @@ Port = 2121 Min Passive Port = 60000 Max Passive Port = 65000 Enable IPv6 = true +Log File = /Path/to/logfile.txt [andrew] password = secret