commit - d7b5dd1bbf44ff9c8537def6d2083891b4f7d102
commit + eb4f9eac0c35071838c9367f1204db0d0b98ad2e
blob - b60057070f5077bf71c2898368c98b21b795788f
blob + 6a7f63393c6f7177f054b991e72a15009cf6fa1c
--- src/ngircd/conf.c
+++ src/ngircd/conf.c
/**
* Set connection information for specified configured server.
*/
-GLOBAL void
+GLOBAL bool
Conf_SetServer( int ConfServer, CONN_ID Idx )
{
assert( ConfServer > NONE );
if (Conf_Server[ConfServer].conn_id > NONE &&
Conf_Server[ConfServer].conn_id != Idx) {
- Log(LOG_ALERT,
- "Trying to update connection index for already registered server \"%s\": %d/%d - ignored.",
- Conf_Server[ConfServer].name,
- Conf_Server[ConfServer].conn_id, Idx);
- return;
+ Log(LOG_ERR,
+ "Connection %d: Server configuration of \"%s\" already in use by connection %d!",
+ Idx, Conf_Server[ConfServer].name,
+ Conf_Server[ConfServer].conn_id);
+ Conn_Close(Idx, NULL, "Server configuration already in use", true);
+ return false;
}
Conf_Server[ConfServer].conn_id = Idx;
+ return true;
}
/**
blob - 541fdb294c4aac81114f7b8c458dc4e6f81021f2
blob + 7860f019a8928d2959ed0e31e82fc3e18c34149d
--- src/ngircd/conf.h
+++ src/ngircd/conf.h
GLOBAL int Conf_Test PARAMS((void));
GLOBAL void Conf_UnsetServer PARAMS(( CONN_ID Idx ));
-GLOBAL void Conf_SetServer PARAMS(( int ConfServer, CONN_ID Idx ));
+GLOBAL bool Conf_SetServer PARAMS(( int ConfServer, CONN_ID Idx ));
GLOBAL int Conf_GetServer PARAMS(( CONN_ID Idx ));
GLOBAL bool Conf_EnableServer PARAMS(( const char *Name, UINT16 Port ));
blob - 5d086857dcd2f634ab4ec5b506d57ddf3f9d3ce2
blob + 80b085a83e2f3e4b6108ed36c30c8358ff5ac441
--- src/ngircd/conn.c
+++ src/ngircd/conn.c
Client_SetToken( c, TOKEN_OUTBOUND );
/* Register connection */
- Conf_SetServer(Server, new_sock);
+ if (!Conf_SetServer(Server, new_sock))
+ return;
My_Connections[new_sock].sock = new_sock;
My_Connections[new_sock].addr = *dest;
My_Connections[new_sock].client = c;
blob - 79facf5e0ead3a639c475956cc1a34a46aa1d4fc
blob + 02e3ae824e2d9c644e7f009d49db33ac8314a8a0
--- src/ngircd/irc-server.c
+++ src/ngircd/irc-server.c
if (!Client_CheckID(Client, Req->argv[0]))
return DISCONNECTED;
+ /* Mark this connection as belonging to an configured server */
+ if (!Conf_SetServer(i, Client_Conn(Client)))
+ return DISCONNECTED;
+
Client_SetID( Client, Req->argv[0] );
Client_SetHops( Client, 1 );
Client_SetInfo( Client, Req->argv[Req->argc - 1] );
Client_SetToken(Client, atoi(Req->argv[1]));
}
- /* Mark this connection as belonging to an configured server */
- Conf_SetServer(i, Client_Conn(Client));
-
/* Check protocol level */
if (Client_Type(Client) == CLIENT_GOTPASS) {
/* We got a "simple" PASS command, so the peer is