From: Alexander Barton Date: Sun, 22 Jan 2012 17:17:28 +0000 (+0100) Subject: New function Client_Reject() to reject clients on connect X-Git-Tag: rel-19-rc1~21 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git;a=commitdiff_plain;h=51a6a33056486c19da6b8d6e4809dde57be00ece New function Client_Reject() to reject clients on connect --- diff --git a/src/ngircd/client.c b/src/ngircd/client.c index d1f751d4..1aaf687c 100644 --- a/src/ngircd/client.c +++ b/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 ) { diff --git a/src/ngircd/client.h b/src/ngircd/client.h index fecf5d97..7bb230b4 100644 --- a/src/ngircd/client.h +++ b/src/ngircd/client.h @@ -163,6 +163,9 @@ GLOBAL void Client_RegisterWhowas PARAMS(( CLIENT *Client )); 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