88 *
99 * SPDX-License-Identifier: MIT
1010 **************************************************************************/
11+ // Some portions generated by Copilot (Sonnet 4.6).
1112
1213
1314/**************************************************************************/
@@ -81,7 +82,8 @@ NX_CALLER_CHECKING_EXTERNS
8182#define NX_FTP_CODE_BAD_NAME "553" /* Requested action not taken, File name not allowed. */
8283
8384static VOID _nx_ftp_server_number_to_ascii (UCHAR * buffer_ptr , UINT buffer_size , UINT number , UCHAR pad );
84-
85+ static VOID _nx_ftp_server_logout_client (NX_FTP_SERVER * ftp_server_ptr , NX_FTP_CLIENT_REQUEST * client_request_ptr );
86+
8587/**************************************************************************/
8688/* */
8789/* FUNCTION RELEASE */
@@ -1445,6 +1447,7 @@ ULONG events;
14451447/* nx_tcp_socket_transmit_configure Configure data transer socket */
14461448/* _nx_utility_uint_to_string Convert number to string */
14471449/* _nx_ftp_server_data_socket_cleanup Clean up data socket */
1450+ /* _nx_ftp_server_logout_client Logout the client */
14481451/* */
14491452/* CALLED BY */
14501453/* */
@@ -1720,41 +1723,8 @@ ULONG block_size;
17201723 /* Increment the number of disconnection requests. */
17211724 ftp_server_ptr -> nx_ftp_server_disconnection_requests ++ ;
17221725
1723- /* Check if this client login. */
1724- if (client_req_ptr -> nx_ftp_client_request_login )
1725- {
1726-
1727- /* Call the logout function. */
1728-
1729- #ifndef NX_DISABLE_IPV4
1730- /* Does this server have an IPv4 login function? */
1731- if (ftp_server_ptr -> nx_ftp_logout_ipv4 )
1732- {
1733-
1734- /* Call the logout which takes IPv4 address input. */
1735- (ftp_server_ptr -> nx_ftp_logout_ipv4 )(ftp_server_ptr ,
1736- client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_ip .nxd_ip_address .v4 ,
1737- client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_port ,
1738- client_req_ptr -> nx_ftp_client_request_username ,
1739- client_req_ptr -> nx_ftp_client_request_password , NX_NULL );
1740- }
1741- #endif /* NX_DISABLE_IPV4 */
1742- if (ftp_server_ptr -> nx_ftp_logout )
1743- {
1744-
1745- /* Call the 'duo' logout function which takes IPv6 or IPv4 IP addresses. */
1746- (ftp_server_ptr -> nx_ftp_logout )(ftp_server_ptr , & (client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_ip ),
1747- client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_port ,
1748- client_req_ptr -> nx_ftp_client_request_username ,
1749- client_req_ptr -> nx_ftp_client_request_password , NX_NULL );
1750- }
1751-
1752- /* Set the login as FALSE. */
1753- client_req_ptr -> nx_ftp_client_request_login = NX_FALSE ;
1754- }
1755-
1756- /* Clear authentication. */
1757- client_req_ptr -> nx_ftp_client_request_authenticated = NX_FALSE ;
1726+ /* Logout the client. */
1727+ _nx_ftp_server_logout_client (ftp_server_ptr , client_req_ptr );
17581728
17591729 /* Now send a successful response to the client. */
17601730 _nx_ftp_server_response (& (client_req_ptr -> nx_ftp_client_request_control_socket ), packet_ptr ,
@@ -4554,6 +4524,7 @@ NX_FTP_SERVER *server_ptr;
45544524/* fx_file_close Close file */
45554525/* nx_ftp_packet_allocate Allocate a packet */
45564526/* _nx_ftp_server_data_socket_cleanup Clean up data socket */
4527+ /* _nx_ftp_server_logout_client Logout the client */
45574528/* */
45584529/* CALLED BY */
45594530/* */
@@ -5133,6 +5104,7 @@ NX_FTP_SERVER *server_ptr;
51335104/* nx_tcp_server_socket_unaccept Unaccept server connection */
51345105/* nx_tcp_socket_disconnect Disconnect socket */
51355106/* _nx_ftp_server_data_socket_cleanup Clean up data socket */
5107+ /* _nx_ftp_server_logout_client Logout the client */
51365108/* */
51375109/* CALLED BY */
51385110/* */
@@ -5187,6 +5159,9 @@ NX_FTP_CLIENT_REQUEST *client_req_ptr;
51875159 /* Reset the block bytes. */
51885160 client_req_ptr -> nx_ftp_client_request_block_bytes = 0 ;
51895161
5162+ /* Logout the client. */
5163+ _nx_ftp_server_logout_client (ftp_server_ptr , client_req_ptr );
5164+
51905165 /* Now disconnect the command socket. */
51915166 nx_tcp_socket_disconnect (& (client_req_ptr -> nx_ftp_client_request_control_socket ), NX_NO_WAIT );
51925167
@@ -5324,9 +5299,6 @@ NX_FTP_CLIENT_REQUEST *client_req_ptr;
53245299 /* Increment the number of disconnection requests. */
53255300 ftp_server_ptr -> nx_ftp_server_disconnection_requests ++ ;
53265301
5327- /* Clear authentication. */
5328- client_req_ptr -> nx_ftp_client_request_authenticated = NX_FALSE ;
5329-
53305302 /* Disable the client request activity timeout. */
53315303 client_req_ptr -> nx_ftp_client_request_activity_timeout = 0 ;
53325304
@@ -5344,38 +5316,8 @@ NX_FTP_CLIENT_REQUEST *client_req_ptr;
53445316 /* Reset the block bytes. */
53455317 client_req_ptr -> nx_ftp_client_request_block_bytes = 0 ;
53465318
5347- /* Check if this client login. */
5348- if (client_req_ptr -> nx_ftp_client_request_login )
5349- {
5350-
5351- /* Call the logout function. */
5352-
5353- #ifndef NX_DISABLE_IPV4
5354- /* Does this server have an IPv4 login function? */
5355- if (ftp_server_ptr -> nx_ftp_logout_ipv4 )
5356- {
5357-
5358- /* Call the logout which takes IPv4 address input. */
5359- (ftp_server_ptr -> nx_ftp_logout_ipv4 )(ftp_server_ptr ,
5360- client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_ip .nxd_ip_address .v4 ,
5361- client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_port ,
5362- client_req_ptr -> nx_ftp_client_request_username ,
5363- client_req_ptr -> nx_ftp_client_request_password , NX_NULL );
5364- }
5365- #endif /* NX_DISABLE_IPV4 */
5366- if (ftp_server_ptr -> nx_ftp_logout )
5367- {
5368-
5369- /* Call the 'duo' logout function which takes IPv6 or IPv4 IP addresses. */
5370- (ftp_server_ptr -> nx_ftp_logout )(ftp_server_ptr , & (client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_ip ),
5371- client_req_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_port ,
5372- client_req_ptr -> nx_ftp_client_request_username ,
5373- client_req_ptr -> nx_ftp_client_request_password , NX_NULL );
5374- }
5375-
5376- /* Set the login as FALSE. */
5377- client_req_ptr -> nx_ftp_client_request_login = NX_FALSE ;
5378- }
5319+ /* Logout the client. */
5320+ _nx_ftp_server_logout_client (ftp_server_ptr , client_req_ptr );
53795321
53805322 /* Now disconnect the command socket. */
53815323 nx_tcp_socket_disconnect (& (client_req_ptr -> nx_ftp_client_request_control_socket ), NX_FTP_SERVER_TIMEOUT );
@@ -6498,6 +6440,85 @@ UINT size;
64986440 }
64996441}
65006442
6443+ /**************************************************************************/
6444+ /* */
6445+ /* FUNCTION RELEASE */
6446+ /* */
6447+ /* _nx_ftp_server_logout_client PORTABLE C */
6448+ /* 6.4.3 */
6449+ /* AUTHOR */
6450+ /* */
6451+ /* Yuxin Zhou */
6452+ /* Valentin Batz */
6453+ /* */
6454+ /* DESCRIPTION */
6455+ /* */
6456+ /* This function logs out the client if it was previously logged in */
6457+ /* and resets the authenticated flag so the next connection on this */
6458+ /* socket slot must perform a fresh login. */
6459+ /* */
6460+ /* INPUT */
6461+ /* */
6462+ /* ftp_server_ptr Pointer to FTP server */
6463+ /* client_request_ptr Pointer to FTP client */
6464+ /* */
6465+ /* OUTPUT */
6466+ /* */
6467+ /* None */
6468+ /* */
6469+ /* CALLS */
6470+ /* */
6471+ /* None */
6472+ /* */
6473+ /* CALLED BY */
6474+ /* _nx_ftp_server_control_disconnect_processing */
6475+ /* Disconnect processing */
6476+ /* _nx_ftp_server_command_process */
6477+ /* QUIT command */
6478+ /* _nx_ftp_server_timeout_processing */
6479+ /* Timeout processing */
6480+ /* */
6481+ /**************************************************************************/
6482+
6483+ static VOID _nx_ftp_server_logout_client (NX_FTP_SERVER * ftp_server_ptr , NX_FTP_CLIENT_REQUEST * client_request_ptr )
6484+ {
6485+ /* Check if this client login. */
6486+ if (client_request_ptr -> nx_ftp_client_request_login )
6487+ {
6488+
6489+ /* Call the logout function. */
6490+
6491+ #ifndef NX_DISABLE_IPV4
6492+ /* Does this server have an IPv4 logout function? */
6493+ if (ftp_server_ptr -> nx_ftp_logout_ipv4 )
6494+ {
6495+
6496+ /* Call the logout which takes IPv4 address input. */
6497+ (ftp_server_ptr -> nx_ftp_logout_ipv4 )(ftp_server_ptr ,
6498+ client_request_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_ip .nxd_ip_address .v4 ,
6499+ client_request_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_port ,
6500+ client_request_ptr -> nx_ftp_client_request_username ,
6501+ client_request_ptr -> nx_ftp_client_request_password , NX_NULL );
6502+ }
6503+ #endif /* NX_DISABLE_IPV4 */
6504+ if (ftp_server_ptr -> nx_ftp_logout )
6505+ {
6506+
6507+ /* Call the 'duo' logout function which takes IPv6 or IPv4 IP addresses. */
6508+ (ftp_server_ptr -> nx_ftp_logout )(ftp_server_ptr , & (client_request_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_ip ),
6509+ client_request_ptr -> nx_ftp_client_request_control_socket .nx_tcp_socket_connect_port ,
6510+ client_request_ptr -> nx_ftp_client_request_username ,
6511+ client_request_ptr -> nx_ftp_client_request_password , NX_NULL );
6512+ }
6513+
6514+ /* Clear the login flag. */
6515+ client_request_ptr -> nx_ftp_client_request_login = NX_FALSE ;
6516+ }
6517+
6518+ /* Always clear authenticated so the next connection on this socket slot
6519+ must perform a fresh USER/PASS exchange. */
6520+ client_request_ptr -> nx_ftp_client_request_authenticated = NX_FALSE ;
6521+ }
65016522
65026523/**************************************************************************/
65036524/* */
0 commit comments