repo: ngircd action: commit revision: path_from: revision_from: 51a6a33056486c19da6b8d6e4809dde57be00ece: path_to: revision_to:
commit 51a6a33056486c19da6b8d6e4809dde57be00ece Author: Alexander BartonDate: Sun Jan 22 18:17:28 2012 +0100 New function Client_Reject() to reject clients on connect diff --git a/src/ngircd/client.c b/src/ngircd/client.c
--- 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
--- 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
-----END OF PAGE-----