diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index 3c5350cc0a8ad312438a3c5576be6bd2cdfa4e11..e25129735882b37ef4d5c46660e42f3916b4564a 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -1268,7 +1268,7 @@ static void filexfer(union xp_sockaddr* addr, SOCKET ctrl_sock, CRYPT_SESSION ct addr_len = sizeof(server_addr); if((result=getsockname(ctrl_sock, &server_addr.addr,&addr_len))!=0) { - lprintf(LOG_ERR,"%04d <%s> !DATA ERROR %d (%d) getting address/port of command socket (%u)" + lprintf(LOG_CRIT,"%04d <%s> !DATA ERROR %d (%d) getting address/port of command socket (%u)" ,ctrl_sock, user->alias,result,ERROR_VALUE,pasv_sock); return; } @@ -1324,7 +1324,7 @@ static void filexfer(union xp_sockaddr* addr, SOCKET ctrl_sock, CRYPT_SESSION ct if(startup->options&FTP_OPT_DEBUG_DATA) { addr_len=sizeof(*addr); if((result=getsockname(pasv_sock, &addr->addr,&addr_len))!=0) - lprintf(LOG_ERR,"%04d <%s> PASV !DATA ERROR %d (%d) getting address/port of passive socket (%u)" + lprintf(LOG_CRIT,"%04d <%s> PASV !DATA ERROR %d (%d) getting address/port of passive socket (%u)" ,ctrl_sock, user->alias,result,ERROR_VALUE,pasv_sock); else lprintf(LOG_DEBUG,"%04d <%s> PASV DATA socket %d listening on %s port %u" @@ -2221,7 +2221,7 @@ static void ctrl_thread(void* arg) /* Default data port is ctrl port-1 */ data_port = inet_addrport(&data_addr)-1; - lprintf(LOG_DEBUG,"%04d CTRL thread started", sock); + lprintf(LOG_DEBUG,"%04d Session thread started", sock); free(arg); @@ -2249,23 +2249,36 @@ static void ctrl_thread(void* arg) inet_addrtop(&ftp.client_addr, host_ip, sizeof(host_ip)); - lprintf(LOG_INFO,"%04d CTRL connection accepted from: %s port %u" - ,sock, host_ip, inet_addrport(&ftp.client_addr)); + union xp_sockaddr local_addr; + memset(&local_addr, 0, sizeof(local_addr)); + addr_len = sizeof(local_addr); + if(getsockname(sock, (struct sockaddr *)&local_addr, &addr_len) != 0) { + lprintf(LOG_CRIT,"%04d [%s] !ERROR %d getting local address/port of socket" + ,sock, host_ip, ERROR_VALUE); + ftp_close_socket(&sock,&sess,__LINE__); + thread_down(); + return; + } + char local_ip[INET6_ADDRSTRLEN]; + inet_addrtop(&local_addr, local_ip, sizeof local_ip); + + lprintf(LOG_INFO,"%04d [%s] Connection accepted on %s port %u from port %u" + ,sock, host_ip, local_ip, inet_addrport(&local_addr), inet_addrport(&ftp.client_addr)); SAFECOPY(host_name, STR_NO_HOSTNAME); if(!(startup->options&FTP_OPT_NO_HOST_LOOKUP)) { getnameinfo(&ftp.client_addr.addr, sizeof(ftp.client_addr), host_name, sizeof(host_name), NULL, 0, NI_NAMEREQD); - lprintf(LOG_INFO,"%04d Hostname: %s [%s]", sock, host_name, host_ip); + lprintf(LOG_INFO,"%04d [%s] Hostname: %s", sock, host_ip, host_name); } ulong banned = loginBanned(&scfg, startup->login_attempt_list, sock, host_name, startup->login_attempt, &attempted); if(banned || trashcan(&scfg,host_ip,"ip")) { if(banned) { char ban_duration[128]; - lprintf(LOG_NOTICE, "%04d !TEMPORARY BAN of %s (%lu login attempts, last: %s) - remaining: %s" + lprintf(LOG_NOTICE, "%04d [%s] !TEMPORARY BAN (%lu login attempts, last: %s) - remaining: %s" ,sock, host_ip, attempted.count-attempted.dupes, attempted.user, seconds_to_str(banned, ban_duration)); } else - lprintf(LOG_NOTICE,"%04d !CLIENT BLOCKED in ip.can: %s", sock, host_ip); + lprintf(LOG_NOTICE,"%04d [%s] !CLIENT BLOCKED in ip.can", sock, host_ip); sockprintf(sock,sess,"550 Access denied."); ftp_close_socket(&sock,&sess,__LINE__); thread_down(); @@ -2273,7 +2286,7 @@ static void ctrl_thread(void* arg) } if(trashcan(&scfg,host_name,"host")) { - lprintf(LOG_NOTICE,"%04d !CLIENT BLOCKED in host.can: %s", sock, host_name); + lprintf(LOG_NOTICE,"%04d [%s] !CLIENT BLOCKED in host.can: %s", sock, host_ip, host_name); sockprintf(sock,sess,"550 Access denied."); ftp_close_socket(&sock,&sess,__LINE__); thread_down(); @@ -2283,7 +2296,7 @@ static void ctrl_thread(void* arg) /* For PASV mode */ addr_len=sizeof(pasv_addr); if((result=getsockname(sock, &pasv_addr.addr,&addr_len))!=0) { - lprintf(LOG_ERR,"%04d !ERROR %d (%d) getting address/port", sock, result, ERROR_VALUE); + lprintf(LOG_CRIT,"%04d !ERROR %d (%d) getting address/por of socket", sock, result, ERROR_VALUE); sockprintf(sock,sess,"425 Error %d getting address/port",ERROR_VALUE); ftp_close_socket(&sock,&sess,__LINE__); thread_down(); @@ -2973,7 +2986,7 @@ static void ctrl_thread(void* arg) addr_len=sizeof(addr); if((result=getsockname(pasv_sock, &addr.addr,&addr_len))!=0) { - lprintf(LOG_ERR,"%04d <%s> !PASV ERROR %d (%d) getting address/port" + lprintf(LOG_CRIT,"%04d <%s> !PASV ERROR %d (%d) getting address/port of socket" ,sock, user.alias, result, ERROR_VALUE); sockprintf(sock,sess,"425 Error %d getting address/port",ERROR_VALUE); ftp_close_socket(&pasv_sock,&pasv_sess,__LINE__); @@ -4889,8 +4902,8 @@ static void ctrl_thread(void* arg) int32_t threads = thread_down(); update_clients(); - lprintf(LOG_INFO,"%04d CTRL thread terminated (%d clients and %d threads remain, %lu served)" - ,sock, clients, threads, served); + lprintf(LOG_INFO,"%04d [%s] Session thread terminated (%d clients and %d threads remain, %lu served)" + ,sock, host_ip, clients, threads, served); } } diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index c683348619a68834fb09cb2fee2e87fd733e568e..b68fd8c24512fc9eff4018c57f72c9fdb1d145e3 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -1050,7 +1050,7 @@ static bool pop3_client_thread(pop3_t* pop3) socklen_t addr_len = sizeof(server_addr); if((i=getsockname(socket, &server_addr.addr, &addr_len))!=0) { - lprintf(LOG_CRIT,"%04d %s !ERROR %d (%d) getting address/port" + lprintf(LOG_CRIT,"%04d %s !ERROR %d (%d) getting local address/port of socket" ,socket, client.protocol, i, ERROR_VALUE); return false; } @@ -1059,7 +1059,7 @@ static bool pop3_client_thread(pop3_t* pop3) inet_addrtop(&server_addr, server_ip, sizeof(server_ip)); if(startup->options&MAIL_OPT_DEBUG_POP3) - lprintf(LOG_INFO,"%04d %s [%s] connection accepted on %s port %u from port %u" + lprintf(LOG_INFO,"%04d %s [%s] Connection accepted on %s port %u from port %u" ,socket, client.protocol, host_ip, server_ip, inet_addrport(&server_addr), inet_addrport(&pop3->client_addr)); SAFECOPY(host_name, STR_NO_HOSTNAME); @@ -1738,7 +1738,7 @@ static bool pop3_client_thread(pop3_t* pop3) { int32_t remain = thread_down(); if(startup->options&MAIL_OPT_DEBUG_POP3) - lprintf(LOG_DEBUG,"%04d %s [%s] session thread terminated (%u threads remain, %lu clients served)" + lprintf(LOG_DEBUG,"%04d %s [%s] Session thread terminated (%u threads remain, %lu clients served)" ,socket, client.protocol, host_ip, remain, ++stats.pop3_served); } return true; @@ -2945,7 +2945,7 @@ static bool smtp_client_thread(smtp_t* smtp) addr_len=sizeof(server_addr); if((i=getsockname(socket, &server_addr.addr, &addr_len))!=0) { - lprintf(LOG_CRIT, "%04d %s !ERROR %d (%d) getting address/port" + lprintf(LOG_CRIT, "%04d %s !ERROR %d (%d) getting address/port of socket" ,socket, client.protocol, i, ERROR_VALUE); return false; } diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 171de80fd7a6b91a288cb8b4434d3fab3e6f6197..9379198e39518365d93aef95c5b40a2f8bff6e89 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -3452,7 +3452,7 @@ bool sbbs_t::init() addr_len=sizeof(addr); if((result=getsockname(client_socket, &addr.addr, &addr_len))!=0) { - lprintf(LOG_ERR,"!ERROR %d (%d) getting address/port" + lprintf(LOG_CRIT,"!ERROR %d (%d) getting local address/port of socket" ,result, ERROR_VALUE); return(false); } @@ -3471,8 +3471,6 @@ bool sbbs_t::init() fprintf(fp, "local_port=%u\n", (uint)inet_addrport(&addr)); fclose(fp); } - lprintf(LOG_INFO,"socket %u attached to local interface %s port %u" - ,client_socket, local_addr, inet_addrport(&addr)); spymsg("Connected"); } @@ -5299,14 +5297,26 @@ NO_SSH: continue; } + #ifdef USE_CRYPTLIB client.protocol=rlogin ? "RLogin":(ssh ? "SSH" : "Telnet"); #else client.protocol=rlogin ? "RLogin":"Telnet"; #endif - lprintf(LOG_INFO,"%04d %s connection accepted from: %s port %u" - ,client_socket, client.protocol - , host_ip, inet_addrport(&client_addr)); + union xp_sockaddr local_addr; + memset(&local_addr, 0, sizeof(local_addr)); + socklen_t addr_len = sizeof(local_addr); + if(getsockname(client_socket, (struct sockaddr *)&local_addr, &addr_len) != 0) { + lprintf(LOG_CRIT,"%04d %s [%s] !ERROR %d getting local address/port of socket" + ,client_socket, client.protocol, host_ip, ERROR_VALUE); + close_socket(client_socket); + continue; + } + char local_ip[INET6_ADDRSTRLEN]; + inet_addrtop(&local_addr, local_ip, sizeof local_ip); + + lprintf(LOG_INFO,"%04d %s [%s] Connection accepted on %s port %u from port %u" + ,client_socket, client.protocol, host_ip, local_ip, inet_addrport(&local_addr), inet_addrport(&client_addr)); if(startup->max_concurrent_connections > 0) { int ip_len = strlen(host_ip)+1; @@ -5331,11 +5341,11 @@ NO_SSH: if(banned || sbbs->trashcan(host_ip,"ip")) { if(banned) { char ban_duration[128]; - lprintf(LOG_NOTICE, "%04d %s !TEMPORARY BAN of %s (%lu login attempts%s%s) - remaining: %s" + lprintf(LOG_NOTICE, "%04d %s [%s] !TEMPORARY BAN (%lu login attempts%s%s) - remaining: %s" ,client_socket, client.protocol, host_ip, attempted.count-attempted.dupes ,attempted.user[0] ? ", last: " : "", attempted.user, seconds_to_str(banned, ban_duration)); } else - lprintf(LOG_NOTICE,"%04d %s !CLIENT BLOCKED in ip.can: %s", client_socket, client.protocol, host_ip); + lprintf(LOG_NOTICE,"%04d %s [%s] !CLIENT BLOCKED in ip.can", client_socket, client.protocol, host_ip); close_socket(client_socket); continue; } @@ -5410,7 +5420,7 @@ NO_SSH: i=cryptGetAttributeString(sbbs->ssh_session, CRYPT_SESSINFO_SSH_CHANNEL_TYPE, tname, &tnamelen); GCESS(i, client_socket, sbbs->ssh_session, "getting channel type"); if (tnamelen != 7 || strnicmp(tname, "session", 7)) { - lprintf(LOG_NOTICE, "%04d SSH active channel '%.*s' is not 'session', disconnecting.", client_socket, tnamelen, tname); + lprintf(LOG_NOTICE, "%04d SSH [%s] active channel '%.*s' is not 'session', disconnecting.", client_socket, host_ip, tnamelen, tname); sbbs->badlogin(/* user: */NULL, /* passwd: */NULL, "SSH", &client_addr, /* delay: */false); // Fail because there's no session. ssh_failed = 3; @@ -5422,7 +5432,7 @@ NO_SSH: else { GCESS(i, client_socket, sbbs->ssh_session, "getting channel id"); if (i == CRYPT_ERROR_PERMISSION) - lprintf(LOG_ERR, "!ERROR Your cryptlib build is obsolete, please update"); + lprintf(LOG_CRIT, "!Your cryptlib build is obsolete, please update"); } break; } @@ -5434,7 +5444,7 @@ NO_SSH: } } if(ssh_failed) { - lprintf(LOG_INFO, "%04d SSH session establishment failed", client_socket); + lprintf(LOG_NOTICE, "%04d SSH [%s] session establishment failed", client_socket, host_ip); SSH_END(client_socket); close_socket(client_socket); continue; @@ -5459,12 +5469,7 @@ NO_SSH: sbbs->autoterm=0; sbbs->cols = startup->default_term_width; - union xp_sockaddr local_addr; - memset(&local_addr, 0, sizeof(local_addr)); - socklen_t addr_len=sizeof(local_addr); - if(getsockname(client_socket, (struct sockaddr *)&local_addr, &addr_len) == 0 - && (inet_addrport(&local_addr) == startup->pet40_port - || inet_addrport(&local_addr) == startup->pet80_port)) { + if (inet_addrport(&local_addr) == startup->pet40_port || inet_addrport(&local_addr) == startup->pet80_port) { sbbs->autoterm = PETSCII; sbbs->cols = inet_addrport(&local_addr) == startup->pet40_port ? 40 : 80; sbbs->outcom(PETSCII_UPPERLOWER); @@ -5478,14 +5483,14 @@ NO_SSH: sbbs->bprintf("Resolving hostname..."); getnameinfo(&client_addr.addr, client_addr_len, host_name, sizeof(host_name), NULL, 0, NI_NAMEREQD); sbbs->putcom(crlf); - lprintf(LOG_INFO,"%04d %s Hostname: %s [%s]", client_socket, client.protocol, host_name, host_ip); + lprintf(LOG_INFO,"%04d %s [%s] Hostname: %s", client_socket, client.protocol, host_ip, host_name); } if(sbbs->trashcan(host_name,"host")) { SSH_END(client_socket); close_socket(client_socket); - lprintf(LOG_NOTICE,"%04d %s !CLIENT BLOCKED in host.can: %s" - ,client_socket, client.protocol, host_name); + lprintf(LOG_NOTICE,"%04d %s [%s] !CLIENT BLOCKED in host.can: %s" + ,client_socket, client.protocol, host_ip, host_name); continue; } @@ -5494,13 +5499,13 @@ NO_SSH: sbbs->bprintf("Resolving identity..."); /* ToDo: Make ident timeout configurable */ if(identify(&client_addr, inet_addrport(&client_addr), str, sizeof(str)-1, /* timeout: */1)) { - lprintf(LOG_DEBUG,"%04d %s Ident Response: %s",client_socket, client.protocol, str); + lprintf(LOG_DEBUG,"%04d %s [%s] Ident Response: %s",client_socket, client.protocol, host_ip, str); identity=strrchr(str,':'); if(identity!=NULL) { identity++; /* skip colon */ SKIP_WHITESPACE(identity); if(*identity) - lprintf(LOG_INFO,"%04d %s Identity: %s",client_socket, client.protocol, identity); + lprintf(LOG_INFO,"%04d %s [%s] Identity: %s",client_socket, client.protocol, host_ip, identity); } } sbbs->putcom(crlf); @@ -5545,7 +5550,7 @@ NO_SSH: } if(i>last_node) { - lprintf(LOG_WARNING,"%04d %s !No nodes available for login.", client_socket, client.protocol); + lprintf(LOG_WARNING,"%04d %s [%s] !No nodes available for login.", client_socket, client.protocol, host_ip); SAFEPRINTF(str,"%snonodes.txt",scfg.text_dir); if(fexist(str)) sbbs->printfile(str,P_NOABORT); @@ -5560,6 +5565,8 @@ NO_SSH: continue; } + lprintf(LOG_INFO, "%04d %s [%s] Attaching to Node %d", client_socket, client.protocol, host_ip, i); + // Load the configuration files for this node, only if/when needed/updated scfg_t* cfg = &node_scfg[i - 1]; if(cfg->size != sizeof(*cfg) || (node.misc & NODE_RRUN)) { @@ -5690,7 +5697,7 @@ NO_SSH: tmp_addr_len=sizeof(tmp_addr); if(getsockname(tmp_sock, (struct sockaddr *)&tmp_addr, &tmp_addr_len)) { - lprintf(LOG_ERR,"Node %d !ERROR %d getting passthru listener address" + lprintf(LOG_CRIT,"Node %d !ERROR %d getting passthru listener address/port of socket" ,new_node->cfg.node_num, ERROR_VALUE); close_socket(tmp_sock); goto NO_PASSTHRU; diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 3e601cb68243c96126c7ca74853d952a27eb4906..56174cbb5537513637c0346583cac20d14dcc518 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -1042,31 +1042,30 @@ static void js_service_thread(void* arg) socket=service_client.socket; service=service_client.service; + inet_addrtop(&service_client.addr, client.addr, sizeof(client.addr)); if(service->log_level >= LOG_DEBUG) - lprintf(LOG_DEBUG,"%04d %s JavaScript service thread started", socket, service->protocol); + lprintf(LOG_DEBUG,"%04d %s [%s] JavaScript service thread started", socket, service->protocol, client.addr); SetThreadName("sbbs/jsService"); thread_up(TRUE /* setuid */); sbbs_srand(); /* Seed random number generator */ protected_uint32_adjust(&threads_pending_start, -1); - inet_addrtop(&service_client.addr, client.addr, sizeof(client.addr)); - /* Host name lookup and filtering */ SAFECOPY(host_name, STR_NO_HOSTNAME); if(!(service->options&BBS_OPT_NO_HOST_LOOKUP) && !(startup->options&BBS_OPT_NO_HOST_LOOKUP)) { getnameinfo(&service_client.addr.addr, xp_sockaddr_len(&service_client), host_name, sizeof(host_name), NULL, 0, NI_NAMEREQD); if(service->log_level >= LOG_INFO) - lprintf(LOG_INFO,"%04d %s Hostname: %s [%s]" - ,socket, service->protocol, host_name, client.addr); + lprintf(LOG_INFO,"%04d %s [%s] Hostname: %s" + ,socket, service->protocol, client.addr, host_name); } if(trashcan(&scfg,host_name,"host")) { if(service->log_level >= LOG_NOTICE) - lprintf(LOG_NOTICE,"%04d %s !CLIENT BLOCKED in host.can: %s" - ,socket, service->protocol, host_name); + lprintf(LOG_NOTICE,"%04d %s [%s] !CLIENT BLOCKED in host.can: %s" + ,socket, service->protocol, client.addr, host_name); close_socket(socket); protected_uint32_adjust(&service->clients, -1); thread_down(); @@ -1160,7 +1159,7 @@ static void js_service_thread(void* arg) if(startup->login_attempt.throttle && (login_attempts=loginAttempts(startup->login_attempt_list, &service_client.addr)) > 1) { if(service->log_level >= LOG_DEBUG) - lprintf(LOG_DEBUG,"%04d %s Throttling suspicious connection from: %s (%lu login attempts)" + lprintf(LOG_DEBUG,"%04d %s [%s] Throttling suspicious connection (%lu login attempts)" ,socket, service->protocol, client.addr, login_attempts); mswait(login_attempts*startup->login_attempt.throttle); } @@ -1215,8 +1214,8 @@ static void js_service_thread(void* arg) if(service_client.subscan!=NULL) putmsgptrs(&scfg, &service_client.user, service_client.subscan); if(service->log_level >= LOG_INFO) - lprintf(LOG_INFO,"%04d %s Logging out %s" - ,socket, service->protocol, service_client.user.alias); + lprintf(LOG_INFO,"%04d %s [%s] Logging out %s" + ,socket, service->protocol, client.addr, service_client.user.alias); logoutuserdat(&scfg,&service_client.user,time(NULL),service_client.logintime); #ifdef _WIN32 @@ -1238,8 +1237,8 @@ static void js_service_thread(void* arg) thread_down(); if(service->log_level >= LOG_INFO) - lprintf(LOG_INFO,"%04d %s service thread terminated (%lu clients remain, %lu total, %lu served)" - ,socket, service->protocol, remain, active_clients(), service->served); + lprintf(LOG_INFO,"%04d %s [%s] JavaScript service thread terminated (%lu clients remain, %lu total, %lu served)" + ,socket, service->protocol, client.addr, remain, active_clients(), service->served); client_off(socket); close_socket(socket); @@ -1346,7 +1345,7 @@ static void js_static_service_thread(void* arg) thread_down(); if(service->log_level >= LOG_INFO) - lprintf(LOG_INFO,"%s service thread terminated (%lu clients served)" + lprintf(LOG_INFO,"%s static JavaScript service thread terminated (%lu clients served)" , service->protocol, service->served); xpms_destroy(service->set, close_socket_cb, service); @@ -1422,7 +1421,7 @@ static void native_static_service_thread(void* arg) thread_down(); if(inst.service->log_level >= LOG_INFO) - lprintf(LOG_INFO,"%04d %s service thread terminated (%lu clients served)" + lprintf(LOG_INFO,"%04d %s static service thread terminated (%lu clients served)" ,inst.socket, service->protocol, service->served); close_socket(inst.socket); @@ -1462,8 +1461,8 @@ static void native_service_thread(void* arg) if(!(service->options&BBS_OPT_NO_HOST_LOOKUP) && !(startup->options&BBS_OPT_NO_HOST_LOOKUP)) { getnameinfo(&service_client.addr.addr, xp_sockaddr_len(&service_client), host_name, sizeof(host_name), NULL, 0, NI_NAMEREQD); - lprintf(LOG_INFO,"%04d %s Hostname: %s [%s]" - ,socket, service->protocol, host_name, client.addr); + lprintf(LOG_INFO,"%04d %s [%s] Hostname: %s" + ,socket, service->protocol, client.addr, host_name); #if 0 /* gethostbyaddr() is apparently not (always) thread-safe and getnameinfo() doesn't return alias information */ for(i=0;host!=NULL && host->h_aliases!=NULL @@ -1474,8 +1473,8 @@ static void native_service_thread(void* arg) } if(trashcan(&scfg,host_name,"host")) { - lprintf(LOG_NOTICE,"%04d %s !CLIENT BLOCKED in host.can: %s" - ,socket, service->protocol, host_name); + lprintf(LOG_NOTICE,"%04d %s [%s] !CLIENT BLOCKED in host.can: %s" + ,socket, service->protocol, client.addr, host_name); close_socket(socket); protected_uint32_adjust(&service->clients, -1); thread_down(); @@ -2302,10 +2301,27 @@ void services_thread(void* arg) continue; } + union xp_sockaddr local_addr; + memset(&local_addr, 0, sizeof(local_addr)); + socklen_t addr_len = sizeof(local_addr); + if(getsockname(client_socket, (struct sockaddr *)&local_addr, &addr_len) != 0) { + lprintf(LOG_CRIT,"%04d %s [%s] !ERROR %d getting local address/port of socket" + ,client_socket, service[i].protocol, host_ip, ERROR_VALUE); + FREE_AND_NULL(udp_buf); + close_socket(client_socket); + continue; + } + char local_ip[INET6_ADDRSTRLEN]; + inet_addrtop(&local_addr, local_ip, sizeof local_ip); + if(service[i].log_level >= LOG_INFO) - lprintf(LOG_INFO,"%04d %s connection accepted from: %s port %u" + lprintf(LOG_INFO,"%04d %s [%s] Connection accepted on %s port %u from port %u" ,client_socket - ,service[i].protocol, host_ip, inet_addrport(&client_addr)); + ,service[i].protocol + ,host_ip + ,local_ip + ,inet_addrport(&local_addr) + ,inet_addrport(&client_addr)); if(service[i].max_clients && protected_uint32_value(service[i].clients) + 1 > service[i].max_clients) { FREE_AND_NULL(udp_buf); @@ -2320,10 +2336,10 @@ void services_thread(void* arg) if(banned || trashcan(&scfg,host_ip,"ip")) { if(banned) { char ban_duration[128]; - lprintf(LOG_NOTICE, "%04d !TEMPORARY BAN of %s (%lu login attempts, last: %s) - remaining: %s" + lprintf(LOG_NOTICE, "%04d [%s] !TEMPORARY BAN (%lu login attempts, last: %s) - remaining: %s" ,client_socket, host_ip, attempted.count-attempted.dupes, attempted.user, seconds_to_str(banned, ban_duration)); } else - lprintf(LOG_NOTICE,"%04d %s !CLIENT BLOCKED in ip.can: %s" + lprintf(LOG_NOTICE,"%04d %s [%s] !CLIENT BLOCKED in ip.can" ,client_socket, service[i].protocol, host_ip); FREE_AND_NULL(udp_buf); close_socket(client_socket); diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index ce0b7a704643ac69a3bad0e385110ab2dbd0f860..fc617e153c88585d0942f3efabb0a2ea8c9e4412 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -6680,11 +6680,11 @@ void http_session_thread(void* arg) if(banned || trashcan(&scfg,session.host_ip,"ip")) { if(banned) { char ban_duration[128]; - lprintf(LOG_NOTICE, "%04d %s !TEMPORARY BAN of %s (%lu login attempts, last: %s) - remaining: %s" + lprintf(LOG_NOTICE, "%04d %s [%s] !TEMPORARY BAN (%lu login attempts, last: %s) - remaining: %s" ,session.socket, session.client.protocol ,session.host_ip, attempted.count-attempted.dupes, attempted.user, seconds_to_str(banned, ban_duration)); } else - lprintf(LOG_NOTICE, "%04d %s !CLIENT BLOCKED in ip.can: %s", session.socket, session.client.protocol, session.host_ip); + lprintf(LOG_NOTICE, "%04d %s [%s] !CLIENT BLOCKED in ip.can", session.socket, session.client.protocol, session.host_ip); close_session_socket(&session); sem_wait(&session.output_thread_terminated); sem_destroy(&session.output_thread_terminated); @@ -7363,14 +7363,26 @@ void web_server(void* arg) continue; } + union xp_sockaddr local_addr; + memset(&local_addr, 0, sizeof(local_addr)); + socklen_t addr_len = sizeof(local_addr); + if(getsockname(client_socket, (struct sockaddr *)&local_addr, &addr_len) != 0) { + lprintf(LOG_CRIT,"%04d %s !ERROR %d getting local address/port of socket" + ,client_socket, session->is_tls ? "HTTPS":"HTTP", ERROR_VALUE); + close_socket(&client_socket); + continue; + } + char local_ip[INET6_ADDRSTRLEN]; + inet_addrtop(&local_addr, local_ip, sizeof local_ip); + host_port=inet_addrport(&client_addr); if (acc_type != NULL && !strcmp(acc_type, "TLS")) session->is_tls=TRUE; - lprintf(LOG_INFO,"%04d %s connection accepted from: %s port %u" + lprintf(LOG_INFO,"%04d %s [%s] Connection accepted on %s port %u from port %u" ,client_socket ,session->is_tls ? "HTTPS":"HTTP" - ,host_ip, host_port); + ,host_ip, local_ip, inet_addrport(&local_addr), host_port); SAFECOPY(session->host_ip,host_ip); memcpy(&session->addr, &client_addr, sizeof(session->addr));