commit 51a6a33056486c19da6b8d6e4809dde57be00ece from: Alexander Barton date: Sun Jan 22 17:17:28 2012 UTC New function Client_Reject() to reject clients on connect commit - 6e28f4a7d13a81db99196da23958e81f2bb8418e commit + 51a6a33056486c19da6b8d6e4809dde57be00ece blob - d1f751d4adff0d3c52e7fa269a82df70479af02c blob + 1aaf687ce6995e8f958daf7d4b98860084234d9a --- src/ngircd/client.c +++ src/ngircd/client.c @@ -1097,6 +1097,39 @@ Client_StartTime(CLIENT *Client) } /* Client_Uptime */ +/** + * Reject a client when logging in. + * + * This function is called when a client isn't allowed to connect to this + * server. Possible reasons are bad server password, bad PAM password, + * or that the client is G/K-Line'd. + * + * After calling this function, the client isn't connected any more. + * + * @param Client The client to reject. + * @param Reason The reason why the client has been rejected. + * @param InformClient If true, send the exact reason to the client. + */ +GLOBAL void +Client_Reject(CLIENT *Client, const char *Reason, bool InformClient) +{ + char info[COMMAND_LEN]; + + assert(Client != NULL); + assert(Reason != NULL); + + if (InformClient) + snprintf(info, sizeof(info), "Access denied: %s", Reason); + else + strcpy(info, "Access denied: Bad password?"); + + Log(LOG_ERR, + "User \"%s\" rejected (connection %d): %s!", + Client_Mask(Client), Client_Conn(Client), Reason); + Conn_Close(Client_Conn(Client), Reason, info, true); +} + + static unsigned long Count( CLIENT_TYPE Type ) { blob - fecf5d9798d97a03d5d12482a9becbfe0764b16f blob + 7bb230b49d23edcb0d02fd3ea29ed48dbbd368d1 --- src/ngircd/client.h +++ src/ngircd/client.h @@ -163,6 +163,9 @@ GLOBAL void Client_RegisterWhowas PARAMS(( CLIENT *Cli GLOBAL const char *Client_TypeText PARAMS((CLIENT *Client)); +GLOBAL void Client_Reject PARAMS((CLIENT *Client, const char *Reason, + bool InformClient)); + #ifdef DEBUG GLOBAL void Client_DebugDump PARAMS((void)); #endif