mirror of
https://github.com/osmarks/ngircd.git
synced 2024-12-12 18:00:28 +00:00
Implement user mode "x": hostname cloaking (closes: #102)
When a client has user mode "x" set, its real hostname is cloaked by substituting it with the server name (as configured in ngircd.conf). Restricted clients (user mode "r") aren't allowed to change mode "x". Please note that hostname cloaking is only in effect in server-client communication! The server still uses the real hostname for its own logging and for all server-server communication -- therefore all servers in the network must support user mode "x" to prevent older servers from leaking the real hostname of a cloaked client!
This commit is contained in:
parent
575485eb82
commit
2a4bf67aac
@ -80,7 +80,7 @@
|
|||||||
#define RECONNECT_DELAY 3 /* Time to delay re-connect attempts
|
#define RECONNECT_DELAY 3 /* Time to delay re-connect attempts
|
||||||
in seconds. */
|
in seconds. */
|
||||||
|
|
||||||
#define USERMODES "aciorsw" /* Supported user modes. */
|
#define USERMODES "aciorswx" /* Supported user modes. */
|
||||||
#define CHANMODES "biIklmnoPstvz" /* Supported channel modes. */
|
#define CHANMODES "biIklmnoPstvz" /* Supported channel modes. */
|
||||||
|
|
||||||
#define CONNECTED true /* Internal status codes. */
|
#define CONNECTED true /* Internal status codes. */
|
||||||
|
@ -185,6 +185,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
|||||||
ERR_NOPRIVILEGES_MSG,
|
ERR_NOPRIVILEGES_MSG,
|
||||||
Client_ID(Origin));
|
Client_ID(Origin));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'o': /* IRC operator (only unsettable!) */
|
case 'o': /* IRC operator (only unsettable!) */
|
||||||
if(( ! set ) || ( Client_Type( Client ) == CLIENT_SERVER ))
|
if(( ! set ) || ( Client_Type( Client ) == CLIENT_SERVER ))
|
||||||
{
|
{
|
||||||
@ -199,6 +200,15 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
|||||||
else ok = IRC_WriteStrClient( Origin, ERR_RESTRICTED_MSG, Client_ID( Origin ));
|
else ok = IRC_WriteStrClient( Origin, ERR_RESTRICTED_MSG, Client_ID( Origin ));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'x': /* Cloak hostname */
|
||||||
|
if (Client_HasMode(Client, 'r'))
|
||||||
|
IRC_WriteStrClient(Origin,
|
||||||
|
ERR_RESTRICTED_MSG,
|
||||||
|
Client_ID(Origin));
|
||||||
|
else
|
||||||
|
x[0] = 'x';
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\"!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ));
|
Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\"!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ));
|
||||||
if( Client_Type( Client ) != CLIENT_SERVER ) ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
|
if( Client_Type( Client ) != CLIENT_SERVER ) ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
|
||||||
|
Loading…
Reference in New Issue
Block a user