mirror of
https://github.com/mtheall/ftpd.git
synced 2024-11-23 09:39:43 +00:00
Add some advanced logging
This commit is contained in:
parent
c763e2d52f
commit
6d042c525a
9
delog.py
Executable file
9
delog.py
Executable file
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
if __name__ == '__main__':
|
||||
regex = re.compile('\x1b\[[0-9]*;[0-9]*H')
|
||||
for line in sys.stdin:
|
||||
print(regex.sub('', line).strip())
|
@ -33,4 +33,7 @@ void console_set_status(const char *fmt, ...);
|
||||
__attribute__((format(printf,1,2)))
|
||||
void console_print(const char *fmt, ...);
|
||||
|
||||
__attribute__((format(printf,1,2)))
|
||||
void debug_print(const char *fmt, ...);
|
||||
|
||||
void console_render(void);
|
||||
|
@ -12,6 +12,9 @@
|
||||
static PrintConsole status_console;
|
||||
static PrintConsole main_console;
|
||||
static PrintConsole tcp_console;
|
||||
#if ENABLE_LOGGING
|
||||
static bool disable_logging = false;
|
||||
#endif
|
||||
|
||||
/*! initialize console subsystem */
|
||||
void
|
||||
@ -61,11 +64,29 @@ console_print(const char *fmt, ...)
|
||||
va_start(ap, fmt);
|
||||
vprintf(fmt, ap);
|
||||
#ifdef ENABLE_LOGGING
|
||||
vfprintf(stderr, fmt, ap);
|
||||
if(!disable_logging)
|
||||
vfprintf(stderr, fmt, ap);
|
||||
#endif
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*! print debug message
|
||||
*
|
||||
* @param[in] fmt format string
|
||||
* @param[in] ... format arguments
|
||||
*/
|
||||
void
|
||||
debug_print(const char *fmt, ...)
|
||||
{
|
||||
#ifdef ENABLE_LOGGING
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*! print tcp tables */
|
||||
static void
|
||||
print_tcp_table(void)
|
||||
@ -75,6 +96,10 @@ print_tcp_table(void)
|
||||
size_t i;
|
||||
int rc, lines = 0;
|
||||
|
||||
#ifdef ENABLE_LOGGING
|
||||
disable_logging = true;
|
||||
#endif
|
||||
|
||||
consoleSelect(&tcp_console);
|
||||
console_print("\x1b[0;0H\x1b[K");
|
||||
optlen = sizeof(tcp_entries);
|
||||
@ -148,6 +173,10 @@ print_tcp_table(void)
|
||||
console_print("\x1b[2J");
|
||||
|
||||
consoleSelect(&main_console);
|
||||
|
||||
#ifdef ENABLE_LOGGING
|
||||
disable_logging = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*! draw console to screen */
|
||||
@ -190,6 +219,17 @@ console_print(const char *fmt, ...)
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
debug_print(const char *fmt, ...)
|
||||
{
|
||||
#ifdef ENABLE_LOGGING
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
#endif
|
||||
}
|
||||
|
||||
void console_render(void)
|
||||
{
|
||||
}
|
||||
|
48
source/ftp.c
48
source/ftp.c
@ -968,7 +968,10 @@ ftp_session_new(int listen_fd)
|
||||
/* send initiator response */
|
||||
rc = ftp_send_response(session, 220, "Hello!\r\n");
|
||||
if(rc <= 0)
|
||||
{
|
||||
debug_print("failed to send initiator response\n");
|
||||
ftp_session_destroy(session);
|
||||
}
|
||||
}
|
||||
|
||||
/*! accept PASV connection for ftp session
|
||||
@ -1175,6 +1178,7 @@ ftp_session_read_command(ftp_session_t *session,
|
||||
if(rc == 0)
|
||||
{
|
||||
/* peer closed connection */
|
||||
debug_print("peer closed connection\n");
|
||||
ftp_session_close_cmd(session);
|
||||
return;
|
||||
}
|
||||
@ -1386,7 +1390,10 @@ ftp_session_poll(ftp_session_t *session)
|
||||
|
||||
/* we need to read a new command */
|
||||
if(pollinfo[0].revents & (POLLERR|POLLHUP))
|
||||
{
|
||||
debug_print("cmd revents=0x%x\n", pollinfo[0].revents);
|
||||
ftp_session_close_cmd(session);
|
||||
}
|
||||
else if(pollinfo[0].revents & (POLLIN | POLLPRI))
|
||||
ftp_session_read_command(session, pollinfo[0].revents);
|
||||
}
|
||||
@ -1449,6 +1456,7 @@ ftp_session_poll(ftp_session_t *session)
|
||||
return session->next;
|
||||
|
||||
/* disconnected from peer; destroy it and return next session */
|
||||
debug_print("disconnected from peer\n");
|
||||
return ftp_session_destroy(session);
|
||||
}
|
||||
|
||||
@ -1504,6 +1512,9 @@ update_status(void)
|
||||
{
|
||||
#ifdef _3DS
|
||||
console_set_status("\n" GREEN STATUS_STRING " "
|
||||
#ifdef ENABLE_LOGGING
|
||||
"DEBUG "
|
||||
#endif
|
||||
CYAN "%s:%u" RESET,
|
||||
inet_ntoa(serv_addr.sin_addr),
|
||||
ntohs(serv_addr.sin_port));
|
||||
@ -1528,6 +1539,9 @@ update_status(void)
|
||||
}
|
||||
|
||||
console_set_status(GREEN STATUS_STRING " "
|
||||
#ifdef ENABLE_LOGGING
|
||||
"DEBUG "
|
||||
#endif
|
||||
YELLOW "IP:" CYAN "%s "
|
||||
YELLOW "Port:" CYAN "%u"
|
||||
RESET,
|
||||
@ -1623,23 +1637,6 @@ ftp_init(void)
|
||||
|
||||
console_print(GREEN "Ready!\n" RESET);
|
||||
|
||||
#ifdef ENABLE_LOGGING
|
||||
/* open log file */
|
||||
FILE *fp = freopen("/ftpd.log", "wb", stderr);
|
||||
if(fp == NULL)
|
||||
{
|
||||
console_print(RED "freopen: 0x%08X\n" RESET, errno);
|
||||
goto log_fail;
|
||||
}
|
||||
|
||||
/* truncate log file */
|
||||
if(ftruncate(fileno(fp), 0) != 0)
|
||||
{
|
||||
console_print(RED "ftruncate: 0x%08X\n" RESET, errno);
|
||||
goto ftruncate_fail;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* allocate buffer for SOC service */
|
||||
SOCU_buffer = (u32*)memalign(SOCU_ALIGN, SOCU_BUFFERSIZE);
|
||||
if(SOCU_buffer == NULL)
|
||||
@ -1722,13 +1719,6 @@ soc_fail:
|
||||
SOCU_buffer = NULL;
|
||||
|
||||
memalign_fail:
|
||||
#ifdef ENABLE_LOGGING
|
||||
ftruncate_fail:
|
||||
if(fclose(stderr) != 0)
|
||||
console_print(RED "fclose: 0x%08X\n" RESET, errno);
|
||||
|
||||
log_fail:
|
||||
#endif
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
@ -1741,6 +1731,8 @@ ftp_exit(void)
|
||||
Result ret;
|
||||
#endif
|
||||
|
||||
debug_print("exiting ftp server\n");
|
||||
|
||||
/* clean up all sessions */
|
||||
while(sessions != NULL)
|
||||
ftp_session_destroy(sessions);
|
||||
@ -1761,14 +1753,6 @@ ftp_exit(void)
|
||||
console_print(RED "socExit: 0x%08X\n" RESET, (unsigned int)ret);
|
||||
free(SOCU_buffer);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_LOGGING
|
||||
/* close log file */
|
||||
if(fclose(stderr) != 0)
|
||||
console_print(RED "fclose: 0x%08X\n" RESET, errno);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
#include <errno.h>
|
||||
#include <malloc.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#ifdef _3DS
|
||||
#include <3ds.h>
|
||||
#endif
|
||||
@ -78,7 +80,33 @@ main(int argc,
|
||||
|
||||
/* initialize console subsystem */
|
||||
console_init();
|
||||
console_set_status("\n" GREEN STATUS_STRING RESET);
|
||||
|
||||
#ifdef ENABLE_LOGGING
|
||||
/* open log file */
|
||||
#ifdef _3DS
|
||||
FILE *fp = freopen("/ftpd.log", "wb", stderr);
|
||||
#else
|
||||
FILE *fp = freopen("ftpd.log", "wb", stderr);
|
||||
#endif
|
||||
if(fp == NULL)
|
||||
{
|
||||
console_print(RED "freopen: 0x%08X\n" RESET, errno);
|
||||
goto log_fail;
|
||||
}
|
||||
|
||||
/* truncate log file */
|
||||
if(ftruncate(fileno(fp), 0) != 0)
|
||||
{
|
||||
console_print(RED "ftruncate: 0x%08X\n" RESET, errno);
|
||||
goto log_fail;
|
||||
}
|
||||
#endif
|
||||
|
||||
console_set_status("\n" GREEN STATUS_STRING
|
||||
#ifdef ENABLE_LOGGING
|
||||
" DEBUG"
|
||||
#endif
|
||||
RESET);
|
||||
|
||||
while(status == LOOP_RESTART)
|
||||
{
|
||||
@ -97,6 +125,15 @@ main(int argc,
|
||||
|
||||
#ifdef _3DS
|
||||
console_print("Press B to exit\n");
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_LOGGING
|
||||
log_fail:
|
||||
if(fclose(stderr) != 0)
|
||||
console_print(RED "fclose(%d): 0x%08X\n" RESET, fileno(stderr), errno);
|
||||
#endif
|
||||
|
||||
#ifdef _3DS
|
||||
loop(wait_for_b);
|
||||
|
||||
/* deinitialize 3DS services */
|
||||
|
Loading…
Reference in New Issue
Block a user