aboutsummaryrefslogtreecommitdiffstats
path: root/irc.c
diff options
context:
space:
mode:
Diffstat (limited to 'irc.c')
-rw-r--r--irc.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/irc.c b/irc.c
index 2b86aebb..3a09f684 100644
--- a/irc.c
+++ b/irc.c
@@ -73,7 +73,7 @@ irc_t *irc_new( int fd )
char buf[NI_MAXHOST+1];
if( getnameinfo( (struct sockaddr *) &sock, socklen, buf,
- NI_MAXHOST, NULL, -1, 0 ) == 0 )
+ NI_MAXHOST, NULL, 0, 0 ) == 0 )
{
irc->myhost = g_strdup( ipv6_unwrap( buf ) );
}
@@ -84,7 +84,7 @@ irc_t *irc_new( int fd )
char buf[NI_MAXHOST+1];
if( getnameinfo( (struct sockaddr *)&sock, socklen, buf,
- NI_MAXHOST, NULL, -1, 0 ) == 0 )
+ NI_MAXHOST, NULL, 0, 0 ) == 0 )
{
irc->host = g_strdup( ipv6_unwrap( buf ) );
}
@@ -188,7 +188,6 @@ void irc_free(irc_t * irc)
{
account_t *account;
user_t *user, *usertmp;
- help_t *helpnode, *helpnodetmp;
log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd );
@@ -265,16 +264,6 @@ void irc_free(irc_t * irc)
g_hash_table_foreach_remove(irc->watches, irc_free_hashkey, NULL);
g_hash_table_destroy(irc->watches);
- if (irc->help != NULL) {
- helpnode = irc->help;
- while (helpnode != NULL) {
- g_free(helpnode->string);
-
- helpnodetmp = helpnode;
- helpnode = helpnode->next;
- g_free(helpnodetmp);
- }
- }
g_free(irc);
if( global.conf->runmode == RUNMODE_INETD || global.conf->runmode == RUNMODE_FORKDAEMON )
@@ -324,7 +313,10 @@ void irc_process( irc_t *irc )
conv[IRC_MAX_LINE] = 0;
if( do_iconv( cs, "UTF-8", lines[i], conv, 0, IRC_MAX_LINE - 2 ) == -1 )
{
+ /* GLib can do strange things if things are not in the expected charset,
+ so let's be a little bit paranoid here: */
if( irc->status & USTATUS_LOGGED_IN )
+ {
irc_usermsg( irc, "Error: Charset mismatch detected. The charset "
"setting is currently set to %s, so please make "
"sure your IRC client will send and accept text in "
@@ -332,7 +324,18 @@ void irc_process( irc_t *irc )
"expect by changing the charset setting. See "
"`help set charset' for more information. Your "
"message was ignored.", cs );
- *conv = 0;
+ *conv = 0;
+ }
+ else
+ {
+ irc_write( irc, ":%s NOTICE AUTH :%s", irc->myhost,
+ "Warning: invalid (non-UTF8) characters received at login time." );
+
+ strncpy( conv, lines[i], IRC_MAX_LINE );
+ for( temp = conv; *temp; temp ++ )
+ if( *temp & 0x80 )
+ *temp = '?';
+ }
}
lines[i] = conv;
}