mirror of
https://github.com/osmarks/ngircd.git
synced 2025-02-23 12:40:01 +00:00
Merge branch 'bug159-WebircIPA'
* bug159-WebircIPA: Introduce Free_Client() function to free CLIENT structure Save client IP address text for "WebIRC" users
This commit is contained in:
commit
44698e44e8
@ -62,6 +62,8 @@ static CLIENT *New_Client_Struct PARAMS(( void ));
|
||||
static void Generate_MyToken PARAMS(( CLIENT *Client ));
|
||||
static void Adjust_Counters PARAMS(( CLIENT *Client ));
|
||||
|
||||
static void Free_Client PARAMS(( CLIENT **Client ));
|
||||
|
||||
static CLIENT *Init_New_Client PARAMS((CONN_ID Idx, CLIENT *Introducer,
|
||||
CLIENT *TopServer, int Type, const char *ID,
|
||||
const char *User, const char *Hostname, const char *Info,
|
||||
@ -120,18 +122,15 @@ Client_Exit( void )
|
||||
|
||||
cnt = 0;
|
||||
c = My_Clients;
|
||||
while( c )
|
||||
{
|
||||
while(c) {
|
||||
cnt++;
|
||||
next = (CLIENT *)c->next;
|
||||
if (c->account_name)
|
||||
free(c->account_name);
|
||||
if (c->cloaked)
|
||||
free(c->cloaked);
|
||||
free( c );
|
||||
Free_Client(&c);
|
||||
c = next;
|
||||
}
|
||||
if( cnt ) Log( LOG_INFO, "Freed %d client structure%s.", cnt, cnt == 1 ? "" : "s" );
|
||||
if (cnt)
|
||||
Log(LOG_INFO, "Freed %d client structure%s.",
|
||||
cnt, cnt == 1 ? "" : "s");
|
||||
} /* Client_Exit */
|
||||
|
||||
|
||||
@ -322,11 +321,7 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
|
||||
}
|
||||
}
|
||||
|
||||
if (c->account_name)
|
||||
free(c->account_name);
|
||||
if (c->cloaked)
|
||||
free(c->cloaked);
|
||||
free( c );
|
||||
Free_Client(&c);
|
||||
break;
|
||||
}
|
||||
last = c;
|
||||
@ -368,6 +363,27 @@ Client_SetHostname( CLIENT *Client, const char *Hostname )
|
||||
} /* Client_SetHostname */
|
||||
|
||||
|
||||
/**
|
||||
* Set IP address to display for a client.
|
||||
*
|
||||
* @param Client The client.
|
||||
* @param IPAText Textual representation of the IP address or NULL to unset.
|
||||
*/
|
||||
GLOBAL void
|
||||
Client_SetIPAText(CLIENT *Client, const char *IPAText)
|
||||
{
|
||||
assert(Client != NULL);
|
||||
|
||||
if (Client->ipa_text)
|
||||
free(Client->ipa_text);
|
||||
|
||||
if (*IPAText)
|
||||
Client->ipa_text = strndup(IPAText, CLIENT_HOST_LEN - 1);
|
||||
else
|
||||
Client->ipa_text = NULL;
|
||||
}
|
||||
|
||||
|
||||
GLOBAL void
|
||||
Client_SetID( CLIENT *Client, const char *ID )
|
||||
{
|
||||
@ -789,6 +805,21 @@ Client_HostnameDisplayed(CLIENT *Client)
|
||||
return Client->cloaked;
|
||||
}
|
||||
|
||||
GLOBAL const char *
|
||||
Client_IPAText(CLIENT *Client)
|
||||
{
|
||||
assert(Client != NULL);
|
||||
|
||||
/* Not a local client? */
|
||||
if (Client_Conn(Client) <= NONE)
|
||||
return "0.0.0.0";
|
||||
|
||||
if (!Client->ipa_text)
|
||||
return Conn_GetIPAInfo(Client_Conn(Client));
|
||||
else
|
||||
return Client->ipa_text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update (and generate, if necessary) the cloaked hostname of a client.
|
||||
*
|
||||
@ -1370,6 +1401,11 @@ MyCount( CLIENT_TYPE Type )
|
||||
} /* MyCount */
|
||||
|
||||
|
||||
/**
|
||||
* Allocate and initialize new CLIENT strcuture.
|
||||
*
|
||||
* @return Pointer to CLIENT structure or NULL on error.
|
||||
*/
|
||||
static CLIENT *
|
||||
New_Client_Struct( void )
|
||||
{
|
||||
@ -1392,8 +1428,27 @@ New_Client_Struct( void )
|
||||
c->mytoken = -1;
|
||||
|
||||
return c;
|
||||
} /* New_Client */
|
||||
}
|
||||
|
||||
/**
|
||||
* Free a CLIENT structure and its member variables.
|
||||
*/
|
||||
static void
|
||||
Free_Client(CLIENT **Client)
|
||||
{
|
||||
assert(Client != NULL);
|
||||
assert(*Client != NULL);
|
||||
|
||||
if ((*Client)->account_name)
|
||||
free((*Client)->account_name);
|
||||
if ((*Client)->cloaked)
|
||||
free((*Client)->cloaked);
|
||||
if ((*Client)->ipa_text)
|
||||
free((*Client)->ipa_text);
|
||||
|
||||
free(*Client);
|
||||
*Client = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
Generate_MyToken( CLIENT *Client )
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de)
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -49,6 +49,7 @@ typedef struct _CLIENT
|
||||
struct _CLIENT *topserver; /* toplevel servers (only valid if client is a server) */
|
||||
char host[CLIENT_HOST_LEN]; /* hostname of the client */
|
||||
char *cloaked; /* cloaked hostname of the client */
|
||||
char *ipa_text; /* textual representaton of IP address */
|
||||
char user[CLIENT_USER_LEN]; /* user name ("login") */
|
||||
#if defined(PAM) && defined(IDENTAUTH)
|
||||
char orig_user[CLIENT_USER_LEN];/* user name supplied by USER command */
|
||||
@ -114,6 +115,7 @@ GLOBAL char *Client_OrigUser PARAMS(( CLIENT *Client ));
|
||||
GLOBAL char *Client_Hostname PARAMS(( CLIENT *Client ));
|
||||
GLOBAL char *Client_HostnameCloaked PARAMS((CLIENT *Client));
|
||||
GLOBAL char *Client_HostnameDisplayed PARAMS(( CLIENT *Client ));
|
||||
GLOBAL const char *Client_IPAText PARAMS(( CLIENT *Client ));
|
||||
GLOBAL char *Client_Modes PARAMS(( CLIENT *Client ));
|
||||
GLOBAL char *Client_Flags PARAMS(( CLIENT *Client ));
|
||||
GLOBAL CLIENT *Client_Introducer PARAMS(( CLIENT *Client ));
|
||||
@ -131,6 +133,7 @@ GLOBAL bool Client_HasMode PARAMS(( CLIENT *Client, char Mode ));
|
||||
GLOBAL bool Client_HasFlag PARAMS(( CLIENT *Client, char Flag ));
|
||||
|
||||
GLOBAL void Client_SetHostname PARAMS(( CLIENT *Client, const char *Hostname ));
|
||||
GLOBAL void Client_SetIPAText PARAMS(( CLIENT *Client, const char *IPAText ));
|
||||
GLOBAL void Client_SetID PARAMS(( CLIENT *Client, const char *Nick ));
|
||||
GLOBAL void Client_SetUser PARAMS(( CLIENT *Client, const char *User, bool Idented ));
|
||||
GLOBAL void Client_SetOrigUser PARAMS(( CLIENT *Client, const char *User ));
|
||||
|
@ -407,8 +407,8 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
|
||||
(from == c || (!Conf_MorePrivacy && Client_HasMode(from, 'o')))) {
|
||||
/* Client hostname */
|
||||
if (!IRC_WriteStrClient(from, RPL_WHOISHOST_MSG,
|
||||
Client_ID(from), Client_ID(c), Client_Hostname(c),
|
||||
Conn_GetIPAInfo(Client_Conn(c))))
|
||||
Client_ID(from), Client_ID(c),
|
||||
Client_Hostname(c), Client_IPAText(c)))
|
||||
return DISCONNECTED;
|
||||
/* Client modes */
|
||||
if (!IRC_WriteStrClient(from, RPL_WHOISMODES_MSG,
|
||||
|
@ -610,6 +610,8 @@ IRC_WEBIRC(CLIENT *Client, REQUEST *Req)
|
||||
Client_SetUser(Client, Req->argv[1], true);
|
||||
Client_SetOrigUser(Client, Req->argv[1]);
|
||||
Client_SetHostname(Client, Req->argv[2]);
|
||||
Client_SetIPAText(Client, Req->argv[3]);
|
||||
|
||||
return CONNECTED;
|
||||
} /* IRC_WEBIRC */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user