Do not allow ports below 1024; More verbosity for udp_open_socket()

This commit is contained in:
zicodxx 2012-05-16 00:59:14 +02:00
parent ffeddf4db6
commit eb87ed15e1
2 changed files with 20 additions and 13 deletions

View file

@ -2,7 +2,7 @@ D1X-Rebirth Changelog
20120515 20120515
-------- --------
main/net_udp.c: Do not send endlevel packets to disconnected (but still saved) clients main/net_udp.c: Do not send endlevel packets to disconnected (but still saved) clients; Do not allow ports below 1024; More verbosity for udp_open_socket()
20120514 20120514
-------- --------

View file

@ -223,8 +223,8 @@ int udp_open_socket(int socknum, int port)
memset( &sAddr, '\0', sizeof( sAddr ) ); memset( &sAddr, '\0', sizeof( sAddr ) );
if ((UDP_Socket[socknum] = socket (_af, SOCK_DGRAM, 0)) < 0) { if ((UDP_Socket[socknum] = socket (_af, SOCK_DGRAM, 0)) < 0) {
con_printf(CON_URGENT,"udp_open_socket: socket creation failed\n"); con_printf(CON_URGENT,"udp_open_socket: socket creation failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not create socket"); nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not create socket.", port);
return -1; return -1;
} }
@ -243,8 +243,8 @@ int udp_open_socket(int socknum, int port)
if (bind (UDP_Socket[socknum], (struct sockaddr *) &sAddr, sizeof (struct sockaddr)) < 0) if (bind (UDP_Socket[socknum], (struct sockaddr *) &sAddr, sizeof (struct sockaddr)) < 0)
{ {
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed\n"); con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not bind name to socket"); nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not bind name to socket.", port);
udp_close_socket(socknum); udp_close_socket(socknum);
return -1; return -1;
} }
@ -284,21 +284,23 @@ int udp_open_socket(int socknum, int port)
{ {
// ai_family is not identic // ai_family is not identic
freeaddrinfo (res); freeaddrinfo (res);
con_printf(CON_URGENT,"udp_open_socket: ai_family not identic (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nai_family_not identic.", port);
return -1; return -1;
} }
if ((UDP_Socket[socknum] = socket (sres->ai_family, SOCK_DGRAM, 0)) < 0) if ((UDP_Socket[socknum] = socket (sres->ai_family, SOCK_DGRAM, 0)) < 0)
{ {
con_printf(CON_URGENT,"udp_open_socket: socket creation failed\n"); con_printf(CON_URGENT,"udp_open_socket: socket creation failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not create socket"); nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not create socket.", port);
freeaddrinfo (res); freeaddrinfo (res);
return -1; return -1;
} }
if ((err = bind (UDP_Socket[socknum], sres->ai_addr, sres->ai_addrlen)) < 0) if ((err = bind (UDP_Socket[socknum], sres->ai_addr, sres->ai_addrlen)) < 0)
{ {
con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed\n"); con_printf(CON_URGENT,"udp_open_socket: bind name to socket failed (port %i)\n", port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not bind name to socket"); nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not bind name to socket.", port);
udp_close_socket(socknum); udp_close_socket(socknum);
freeaddrinfo (res); freeaddrinfo (res);
return -1; return -1;
@ -308,8 +310,8 @@ int udp_open_socket(int socknum, int port)
} }
else { else {
UDP_Socket[socknum] = -1; UDP_Socket[socknum] = -1;
con_printf(CON_URGENT,"udp_open_socket (getaddrinfo):%s\n", gai_strerror (err)); con_printf(CON_URGENT,"udp_open_socket (getaddrinfo):%s failed. port %i\n", gai_strerror (err), port);
nm_messagebox(TXT_ERROR,1,TXT_OK,"Could not get address information:\n%s",gai_strerror (err)); nm_messagebox(TXT_ERROR,1,TXT_OK,"Port: %i\nCould not get address information:\n%s", port, gai_strerror (err));
} }
setsockopt( UDP_Socket[socknum], SOL_SOCKET, SO_BROADCAST, &bcast, sizeof(bcast) ); setsockopt( UDP_Socket[socknum], SOL_SOCKET, SO_BROADCAST, &bcast, sizeof(bcast) );
#endif #endif
@ -369,11 +371,16 @@ int udp_receive_packet(int socknum, ubyte *text, int len, struct _sockaddr *send
/* Tracker initialization */ /* Tracker initialization */
int udp_tracker_init() int udp_tracker_init()
{ {
int tracker_port = d_rand() % 0xffff;
while (tracker_port <= 1024)
tracker_port = d_rand() % 0xffff;
// Zero it out // Zero it out
memset( &TrackerSocket, 0, sizeof( TrackerSocket ) ); memset( &TrackerSocket, 0, sizeof( TrackerSocket ) );
// Open the socket // Open the socket
udp_open_socket( 2, d_rand() % 0xffff ); udp_open_socket( 2, tracker_port );
// Fill the address // Fill the address
if( udp_dns_filladdr( (char *)GameArg.MplTrackerAddr, GameArg.MplTrackerPort, &TrackerSocket ) < 0 ) if( udp_dns_filladdr( (char *)GameArg.MplTrackerAddr, GameArg.MplTrackerPort, &TrackerSocket ) < 0 )
@ -588,7 +595,7 @@ static int manual_join_game_handler(newmenu *menu, d_event *event, direct_join *
{ {
int sockres = -1; int sockres = -1;
if ((atoi(UDP_MyPort)) < 0 ||(atoi(UDP_MyPort)) > 65535) if ((atoi(UDP_MyPort)) <= 1024 ||(atoi(UDP_MyPort)) > 65535)
{ {
snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT); snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT);
nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port"); nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port");