7 NEWS
@@ -1,3 +1,10 @@
-- Noteworthy changes in version 8.2.7 (2015-04-05)
o) Fixed a potential buffer overflow with the BMASK inter-server command
o) Fixed undefined behavior in the HELP command module which could
lead to stack corruption
o) Removed useless help files for inter-server commands


-- Noteworthy changes in version 8.2.6 (2015-03-29)
o) INFO now shows configured values of 'max_watch' and 'stats_m_oper_only'
o) WHOWAS now shows IP addresses to irc operators
@@ -1,7 +1,7 @@
#! /bin/sh
# From configure.ac Id: configure.ac 5617 2015-02-24 20:31:18Z michael .
# From configure.ac Id: configure.ac 5734 2015-03-29 11:00:20Z michael .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for ircd-hybrid 8.2.6.
# Generated by GNU Autoconf 2.69 for ircd-hybrid 8.2.7.
#
# Report bugs to <bugs@ircd-hybrid.org>.
#
@@ -593,8 +593,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ircd-hybrid'
PACKAGE_TARNAME='ircd-hybrid'
PACKAGE_VERSION='8.2.6'
PACKAGE_STRING='ircd-hybrid 8.2.6'
PACKAGE_VERSION='8.2.7'
PACKAGE_STRING='ircd-hybrid 8.2.7'
PACKAGE_BUGREPORT='bugs@ircd-hybrid.org'
PACKAGE_URL=''

@@ -1369,7 +1369,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures ircd-hybrid 8.2.6 to adapt to many kinds of systems.
\`configure' configures ircd-hybrid 8.2.7 to adapt to many kinds of systems.

Usage: $0 [OPTION]... [VAR=VALUE]...

@@ -1439,7 +1439,7 @@ fi

if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of ircd-hybrid 8.2.6:";;
short | recursive ) echo "Configuration of ircd-hybrid 8.2.7:";;
esac
cat <<\_ACEOF

@@ -1572,7 +1572,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
ircd-hybrid configure 8.2.6
ircd-hybrid configure 8.2.7
generated by GNU Autoconf 2.69

Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2041,7 +2041,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by ircd-hybrid $as_me 8.2.6, which was
It was created by ircd-hybrid $as_me 8.2.7, which was
generated by GNU Autoconf 2.69. Invocation command line was

$ $0 $@
@@ -2915,7 +2915,7 @@ fi

# Define the identity of the package.
PACKAGE='ircd-hybrid'
VERSION='8.2.6'
VERSION='8.2.7'


cat >>confdefs.h <<_ACEOF
@@ -17108,7 +17108,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by ircd-hybrid $as_me 8.2.6, which was
This file was extended by ircd-hybrid $as_me 8.2.7, which was
generated by GNU Autoconf 2.69. Invocation command line was

CONFIG_FILES = $CONFIG_FILES
@@ -17174,7 +17174,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
ircd-hybrid config.status 8.2.6
ircd-hybrid config.status 8.2.7
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

@@ -4,7 +4,7 @@
AC_REVISION([$Id$])

AC_PREREQ(2.69)
AC_INIT([ircd-hybrid], [8.2.6], [bugs@ircd-hybrid.org])
AC_INIT([ircd-hybrid], [8.2.7], [bugs@ircd-hybrid.org])
AM_INIT_AUTOMAKE(1.13.1 subdir-objects)
AM_MAINTAINER_MODE
AC_CONFIG_MACRO_DIR([m4])
@@ -5,14 +5,12 @@ helpfdir = $(pkgdatadir)/help
dist_helpf_DATA = accept \
admin \
away \
capab \
challenge \
close \
cmode \
connect \
die \
dline \
eob \
error \
etrace \
gline \
@@ -49,12 +47,9 @@ dist_helpf_DATA = accept \
rehash \
restart \
resv \
server \
set \
sjoin \
squit \
stats \
svinfo \
time \
topic \
trace \
@@ -313,14 +313,12 @@ helpfdir = $(pkgdatadir)/help
dist_helpf_DATA = accept \
admin \
away \
capab \
challenge \
close \
cmode \
connect \
die \
dline \
eob \
error \
etrace \
gline \
@@ -357,12 +355,9 @@ dist_helpf_DATA = accept \
rehash \
restart \
resv \
server \
set \
sjoin \
squit \
stats \
svinfo \
time \
topic \
trace \

This file was deleted.

This file was deleted.

@@ -1,19 +1,18 @@
Available HELP topics (some of them are only accessible to IRC operators):

ACCEPT ADMIN AWAY CAPAB
CHALLENGE CLOSE CMODE CONNECT
DIE DLINE EOB ERROR
ETRACE GLINE GUNGLINE HASH
HELP INFO INVITE ISON
JOIN KICK KILL KLINE
KNOCK LINKS LIST LOCOPS
LUSERS MAP MODULE MOTD
NAMES NICK NOTICE OPER
PART PASS PING PONG
POST PRIVMSG QUIT REHASH
RESTART RESV SERVER SET
SJOIN SQUIT STATS SVINFO
TIME TOPIC TRACE UMODE
UNDLINE UNKLINE UNRESV UNXLINE
USER USERHOST VERSION WALLOPS
WHO WHOIS WHOWAS XLINE
ACCEPT ADMIN AWAY CHALLENGE
CLOSE CMODE CONNECT DIE
DLINE ERROR ETRACE GLINE
GUNGLINE HASH HELP INF
INVITE ISON JOIN KICK
KILL KLINE KNOCK LINKS
LIST LOCOPS LUSERS MAP
MODULE MOTD NAMES NICK
NOTICE OPER PART PASS
PING PONG POST PRIVMSG
QUIT REHASH RESTART RESV
SET SQUIT STATS TIME
TOPIC TRACE UMODE UNDLINE
UNKLINE UNRESV UNXLINE USER
USERHOST VERSION WALLOPS WHO
WHOIS WHOWAS XLINE

This file was deleted.

This file was deleted.

This file was deleted.

@@ -103,10 +103,10 @@ struct Membership
struct Ban
{
dlink_node node;
char *name;
char *user;
char *host;
char *who;
char name[NICKLEN + 1];
char user[USERLEN + 1];
char host[HOSTLEN + 1];
char who[NICKLEN + USERLEN + HOSTLEN + 3];
size_t len;
time_t when;
struct irc_ssaddr addr;
@@ -90,9 +90,6 @@ struct MaskItem;
*/
#define TS_CURRENT 6 /**< Current TS protocol version */
#define TS_MIN 6 /**< Minimum supported TS protocol version */
#define TS_DOESTS 0x20000000
#define DoesTS(x) ((x)->tsinfo == TS_DOESTS)



#define CAP_MULTI_PREFIX 0x00000001U
@@ -367,7 +367,7 @@ extern void conf_free(struct MaskItem *);
extern void yyerror(const char *);
extern void conf_error_report(const char *);
extern void cleanup_tklines(void *);
extern int conf_rehash(int);
extern void conf_rehash(int);
extern void lookup_confhost(struct MaskItem *);
extern void conf_add_class_to_conf(struct MaskItem *, const char *);

@@ -25,5 +25,5 @@
*/

#ifndef PATCHLEVEL
#define PATCHLEVEL "hybrid-8.2.6"
#define PATCHLEVEL "hybrid-8.2.7"
#endif
@@ -87,7 +87,7 @@ extern int valid_servname(const char *);
extern int check_server(const char *, struct Client *);
extern int hunt_server(struct Client *, const char *, const int, const int, char *[]);
extern void add_capability(const char *, int, int);
extern int delete_capability(const char *);
extern void delete_capability(const char *);
extern int unsigned find_capability(const char *);
extern void send_capabilities(struct Client *, int);
extern void write_links_file(void *);
@@ -107,6 +107,9 @@ ms_bmask(struct Client *source_p, int parc, char *parv[])

if (tlen && *s != ':' && add_id(source_p, chptr, s, mode_type))
{
/* add_id can modify 's' */
tlen = strlen(s);

/* this new one wont fit.. */
if (mbuf - modebuf + 2 + pbuf - parabuf + tlen > IRCD_BUFSIZE - 2 ||
modecount >= MAXMODEPARAMS)
@@ -344,7 +344,7 @@ uid_from_server(struct Client *source_p, int parc, char *parv[])
client_p->hopcount = atoi(parv[2]);
client_p->tsinfo = atol(parv[3]);

strlcpy(client_p->account, (parc == 11 ? parv[9] : "0"), sizeof(client_p->account));
strlcpy(client_p->account, (parc == 11 ? parv[9] : "*"), sizeof(client_p->account));
strlcpy(client_p->name, parv[1], sizeof(client_p->name));
strlcpy(client_p->id, parv[8], sizeof(client_p->id));
strlcpy(client_p->sockhost, parv[7], sizeof(client_p->sockhost));
@@ -101,15 +101,15 @@ sendnick_TS(struct Client *client_p, struct Client *target_p)
}

if (IsCapable(client_p, CAP_SVS))
sendto_one(client_p, ":%s UID %s %d %lu %s %s %s %s %s %s :%s",
sendto_one(client_p, ":%s UID %s %u %lu %s %s %s %s %s %s :%s",
target_p->servptr->id,
target_p->name, target_p->hopcount + 1,
(unsigned long) target_p->tsinfo,
ubuf, target_p->username, target_p->host,
target_p->sockhost, target_p->id,
target_p->account, target_p->info);
else
sendto_one(client_p, ":%s UID %s %d %lu %s %s %s %s %s :%s",
sendto_one(client_p, ":%s UID %s %u %lu %s %s %s %s %s :%s",
target_p->servptr->id,
target_p->name, target_p->hopcount + 1,
(unsigned long) target_p->tsinfo,
@@ -409,7 +409,7 @@ server_estab(struct Client *client_p)
if (IsMe(target_p) || target_p->from == client_p)
continue;

sendto_one(client_p, ":%s SID %s %d %s :%s%s",
sendto_one(client_p, ":%s SID %s %u %s :%s%s",
target_p->servptr->id, target_p->name, target_p->hopcount+1,
target_p->id, IsHidden(target_p) ? "(H) " : "",
target_p->info);
@@ -474,21 +474,6 @@ mr_server(struct Client *source_p, int parc, char *parv[])
return 0;
}

/*
* Reject a direct nonTS server connection if we're TS_ONLY -orabidoo
*/
if (!DoesTS(source_p))
{
sendto_realops_flags(UMODE_ALL, L_ADMIN, SEND_NOTICE,
"Unauthorized server connection attempt from %s: Non-TS server "
"for server %s", get_client_name(source_p, HIDE_IP), name);
sendto_realops_flags(UMODE_ALL, L_OPER, SEND_NOTICE,
"Unauthorized server connection attempt from %s: Non-TS server "
"for server %s", get_client_name(source_p, MASK_IP), name);
exit_client(source_p, "Non-TS server");
return 0;
}

if (!valid_servname(name))
{
sendto_realops_flags(UMODE_ALL, L_ADMIN, SEND_NOTICE,
@@ -809,7 +794,7 @@ ms_sid(struct Client *source_p, int parc, char *parv[])
hash_add_client(target_p);
hash_add_id(target_p);

sendto_server(client_p, 0, 0, ":%s SID %s %d %s :%s%s",
sendto_server(client_p, 0, 0, ":%s SID %s %u %s :%s%s",
source_p->id, target_p->name, target_p->hopcount + 1,
target_p->id, IsHidden(target_p) ? "(H) " : "", target_p->info);
sendto_realops_flags(UMODE_EXTERNAL, L_ALL, SEND_NOTICE,
@@ -370,7 +370,7 @@ ms_sjoin(struct Client *source_p, int parc, char *parv[])
uid_ptr = uid_buf + buflen;
}

uid_ptr += sprintf(uid_ptr, "%s%s ", uid_prefix, target_p->id);
uid_ptr += sprintf(uid_ptr, "%s%s ", uid_prefix, target_p->id);

if (!IsMember(target_p, chptr))
{
@@ -168,8 +168,8 @@ mo_dline(struct Client *source_p, int parc, char *parv[])
return 0;
}

if (parse_aline("DLINE", source_p, parc, parv, AWILD, &dlhost,
NULL, &tkline_time, &target_server, &reason) < 0)
if (!parse_aline("DLINE", source_p, parc, parv, AWILD, &dlhost,
NULL, &tkline_time, &target_server, &reason))
return 0;

if (target_server)
@@ -382,8 +382,8 @@ mo_gline(struct Client *source_p, int parc, char *parv[])
return 0;
}

if (parse_aline("GLINE", source_p, parc, parv, AWILD,
&user, &host, NULL, NULL, &reason) < 0)
if (!parse_aline("GLINE", source_p, parc, parv, AWILD,
&user, &host, NULL, NULL, &reason))
return 0;

if ((p = strchr(host, '/')))
@@ -496,8 +496,8 @@ mo_gungline(struct Client *source_p, int parc, char *parv[])
return 0;
}

if (parse_aline("GUNGLINE", source_p, parc, parv, 0, &user,
&host, NULL, NULL, &reason) < 0)
if (!parse_aline("GUNGLINE", source_p, parc, parv, 0, &user,
&host, NULL, NULL, &reason))
return 0;

do_sungline(source_p, user, host, reason, 1);