diff --git a/ChangeLog b/ChangeLog index 59c383d..0f1b2ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,9 +4,11 @@ Symbols are: (F) - Fish (fish@dynam.ac) (S) - Shmad (shmad@neostats.net) (HP) - Hybrid Team Patches to Hybrid Source + * NeoIRCd Version 0.9.6 - 31st Oct (Halloween!), 2002 - Fish (HP) - Hybrid Team Halloween Special :) (No suprises this time!) (RC5 Merge) (F) - Initial Support for SSL connections started (and now it works!) +(F) - Added Z umode to identify SSL clients, and added whois reply for SSL clients * NeoIRCd Version 0.9.5 - 12th Oct, 2002 - Fish (S) - Fixed up event.c for a possible serious bug reported by Dianora from hybrid team diff --git a/TODO b/TODO index ffff2b0..56f5ac8 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,9 @@ -$Id: TODO,v 1.12 2002/11/04 08:20:27 fishwaldo Exp $ +$Id: TODO,v 1.13 2002/11/20 14:13:56 fishwaldo Exp $ + /stats g should report when a G line will expire SSL client support modes and channel related stuff +Can't invite non-SSL clients into +S channel /accept by hostmask rip out servlink and make ssl/ziplinks built in... *Umode +a (Services Root) and +N (Network Admin) diff --git a/include/channel_mode.h b/include/channel_mode.h index 05b275b..cf9954a 100644 --- a/include/channel_mode.h +++ b/include/channel_mode.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel_mode.h,v 1.9 2002/09/23 10:47:29 fishwaldo Exp $ + * $Id: channel_mode.h,v 1.10 2002/11/20 14:13:56 fishwaldo Exp $ */ @@ -88,6 +88,7 @@ extern void set_channel_mode_flags( char flags_ptr[4][2], #define MODE_HIDEOPS 0x4000 #define MODE_OPERSONLY 0x8000 #define MODE_REGCHAN 0x10000 +#define MODE_SSLONLY 0x40000 /* * mode flags which take another parameter (With PARAmeterS) diff --git a/include/client.h b/include/client.h index a528566..82d31d4 100644 --- a/include/client.h +++ b/include/client.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: client.h,v 1.11 2002/11/04 08:14:00 fishwaldo Exp $ + * $Id: client.h,v 1.12 2002/11/20 14:13:56 fishwaldo Exp $ */ #ifndef INCLUDED_client_h @@ -408,7 +408,6 @@ struct LocalUser #define FLAGS_SERVLINK 0x10000 /* servlink has servlink process */ #define FLAGS_MARK 0x20000 /* marked client */ #define FLAGS_CANFLOOD 0x40000 /* client has the ability to flood */ -#define FLAGS_SSL 0x80000 /* client is connected via SSL */ /* umodes, settable flags */ #define FLAGS_SERVNOTICE 0x0001 /* server notices such as kill */ @@ -436,6 +435,7 @@ struct LocalUser #define FLAGS_SERVICES 0x200000 /* Is Services */ #define FLAGS_ULINED 0x400000 /* is a ulined server? */ #define FLAGS_REMOTE 0x800000 /* sendto_realops_flags flag to send message to remote servers */ +#define FLAGS_SSL 0x1000000 /* client is connected via SSL */ #define FLAGS_ALL FLAGS_SERVNOTICE @@ -478,7 +478,7 @@ struct LocalUser FLAGS_REJ | FLAGS_SKILL | FLAGS_FULL | FLAGS_SPY | \ FLAGS_NCHANGE | FLAGS_OPERWALL | FLAGS_DEBUG | \ FLAGS_BOTS | FLAGS_EXTERNAL | FLAGS_LOCOPS | \ - FLAGS_UNAUTH | FLAGS_CALLERID | FLAGS_SERVICES | FLAGS_REGNICK) + FLAGS_UNAUTH | FLAGS_CALLERID | FLAGS_SERVICES | FLAGS_REGNICK | FLAGS_SSL) #define FLAGS_ID (FLAGS_NEEDID | FLAGS_GOTID) diff --git a/include/numeric.h b/include/numeric.h index 80e29fb..7d8af54 100644 --- a/include/numeric.h +++ b/include/numeric.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: numeric.h,v 1.9 2002/09/21 06:26:12 fishwaldo Exp $ + * $Id: numeric.h,v 1.10 2002/11/20 14:13:56 fishwaldo Exp $ */ #ifndef INCLUDED_numeric_h @@ -159,6 +159,7 @@ extern const char* form_str(int); #define RPL_LOCALUSERS 265 #define RPL_GLOBALUSERS 266 +#define RPL_USINGSSL 275 #define RPL_VCHANEXIST 276 #define RPL_VCHANLIST 277 #define RPL_VCHANHELP 278 @@ -403,6 +404,7 @@ extern const char* form_str(int); /* ERR_RESTRICTED 484 IRCnet extension */ /* ERR_UNIQOPRIVSNEEDED 485 IRCnet extension */ /* ERR_KILLDENY 485 unreal */ +#define ERR_SSLONLY 486 #define ERR_CHANAPRIVSNEEDED 499 /* ERR_HTMDISABLED 486 unreal */ /* ERR_CHANTOORECENT 487 IRCnet extension (?) */ diff --git a/modules/core/m_sjoin.c b/modules/core/m_sjoin.c index 0e8bed5..59a54e6 100644 --- a/modules/core/m_sjoin.c +++ b/modules/core/m_sjoin.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_sjoin.c,v 1.16 2002/10/16 03:52:48 fishwaldo Exp $ + * $Id: m_sjoin.c,v 1.17 2002/11/20 14:13:57 fishwaldo Exp $ */ #include "stdinc.h" @@ -63,7 +63,7 @@ _moddeinit(void) mod_del_cmd(&sjoin_msgtab); } -const char *_version = "$Revision: 1.16 $"; +const char *_version = "$Revision: 1.17 $"; #endif /* * ms_sjoin @@ -177,6 +177,9 @@ static void ms_sjoin(struct Client *client_p, case 'r': mode.mode |= MODE_REGCHAN; break; +case 'S': + mode.mode |= MODE_SSLONLY; + break; case 'k': strlcpy(mode.key, parv[4 + args], KEYLEN); args++; @@ -592,6 +595,7 @@ struct mode_letter flags[] = { { MODE_HIDEOPS, 'A' }, { MODE_OPERSONLY, 'O' }, { MODE_REGCHAN, 'r' }, + { MODE_SSLONLY, 'S' }, { 0, 0 } }; diff --git a/modules/m_whois.c b/modules/m_whois.c index 3a2f51b..0e8096c 100644 --- a/modules/m_whois.c +++ b/modules/m_whois.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_whois.c,v 1.10 2002/10/15 07:30:08 fishwaldo Exp $ + * $Id: m_whois.c,v 1.11 2002/11/20 14:13:57 fishwaldo Exp $ */ #include "stdinc.h" @@ -76,7 +76,7 @@ _moddeinit(void) mod_del_cmd(&whois_msgtab); } -const char *_version = "$Revision: 1.10 $"; +const char *_version = "$Revision: 1.11 $"; #endif /* ** m_whois @@ -476,6 +476,10 @@ whois_person(struct Client *source_p,struct Client *target_p, int glob) sendto_one(source_p, form_str(RPL_WHOISREGNICK), me.name, source_p->name, target_p->name); } + if (target_p->umodes & FLAGS_SSL) { + sendto_one(source_p, form_str(RPL_USINGSSL), + me.name, source_p->name, target_p->name); + } if ( (glob == 1) || (MyConnect(target_p) && (IsOper(source_p) || !ConfigServerHide.hide_servers)) || (target_p == source_p) ) { diff --git a/src/channel.c b/src/channel.c index 117cee6..8084171 100644 --- a/src/channel.c +++ b/src/channel.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel.c,v 1.14 2002/10/31 13:01:57 fishwaldo Exp $ + * $Id: channel.c,v 1.15 2002/11/20 14:13:57 fishwaldo Exp $ */ #include "stdinc.h" @@ -980,9 +980,31 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) } if (ptr == NULL) return (ERR_INVITEONLYCHAN); - } + } + } + if ((chptr->mode.mode & MODE_SSLONLY) && !IsSSL(source_p)) { + for (lp = source_p->user->invited.head; lp; lp = lp->next) { + if (lp->data == chptr) + break; + } + if (!lp) + { + for (ptr = chptr->invexlist.head; ptr; ptr = ptr->next) + { + invex = ptr->data; + if (match(invex->banstr, src_host) || match(invex->banstr, src_iphost) || match(invex->banstr, src_vhost)) + break; + } + if (ptr == NULL) { + return (ERR_SSLONLY); + } else { + return 0; + } + } else { + return 0; + } + return (ERR_SSLONLY); } - if (*chptr->mode.key && (BadPtr(key) || irccmp(chptr->mode.key, key))) return (ERR_BADCHANNELKEY); diff --git a/src/channel_mode.c b/src/channel_mode.c index d0b844f..c381c4d 100644 --- a/src/channel_mode.c +++ b/src/channel_mode.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel_mode.c,v 1.19 2002/09/26 12:34:45 fishwaldo Exp $ + * $Id: channel_mode.c,v 1.20 2002/11/20 14:13:57 fishwaldo Exp $ */ #include "stdinc.h" @@ -470,6 +470,8 @@ channel_modes(struct Channel *chptr, struct Client *client_p, *mbuf++ = 'A'; if (chptr->mode.mode & MODE_REGCHAN) *mbuf++ = 'r'; + if (chptr->mode.mode & MODE_SSLONLY) + *mbuf++ = 'S'; if (chptr->mode.limit) { @@ -1676,7 +1678,7 @@ static struct ChannelMode ModeTable[255] = {chm_nosuch, NULL}, /* P */ {chm_nosuch, NULL}, /* Q */ {chm_nosuch, NULL}, /* R */ - {chm_nosuch, NULL}, /* S */ + {chm_simple, (void *) MODE_SSLONLY}, /* S */ {chm_nosuch, NULL}, /* T */ {chm_nosuch, NULL}, /* U */ {chm_nosuch, NULL}, /* V */ diff --git a/src/messages.tab b/src/messages.tab index e87c641..60e5f17 100644 --- a/src/messages.tab +++ b/src/messages.tab @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: messages.tab,v 1.8 2002/11/04 08:14:00 fishwaldo Exp $ + * $Id: messages.tab,v 1.9 2002/11/20 14:13:57 fishwaldo Exp $ */ static char * replies[] = { @@ -299,7 +299,7 @@ static char * replies[] = { /* 272 */ NULL, /* 273 */ NULL, /* 274 */ NULL, -/* 275 */ NULL, +/* 275 RPL_USINGSSL, */ ":%s 275 %s %s :is using a secure connection (SSL)", /* 276 RPL_VCHANEXIST, */ ":%s 276 %s %s %d :virtual channels are available for this channel", /* 277 RPL_VCHANLIST, */ ":%s 277 %s %s ", /* 278 RPL_VCHANHELP, */ ":%s 278 %s :Type /%s %s to specify the channel you want", @@ -513,7 +513,7 @@ static char * replies[] = { /* 484 ERR_RESTRICTED, */ ":%s 484 %s :You are restricted", /* 485 ERR_BANNEDNICK, */ ":%s 485 %s :Can't change nick when banned or on a moderated channel (%s)", -/* 486 */ NULL, +/* 486 ERR_SSLONLY */ ":%s 486 %s %s :Cannot join channel, channel allows secure clients only (+S)", /* 487 */ NULL, /* 488 */ NULL, /* 489 */ NULL, diff --git a/src/s_user.c b/src/s_user.c index d95b2d4..2eb16ca 100644 --- a/src/s_user.c +++ b/src/s_user.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: s_user.c,v 1.40 2002/10/31 13:01:58 fishwaldo Exp $ + * $Id: s_user.c,v 1.41 2002/11/20 14:13:57 fishwaldo Exp $ */ #include "stdinc.h" @@ -94,6 +94,7 @@ static struct flag_item user_modes[] = {FLAGS_OPERWALL, 'z'}, {FLAGS_HIDDEN, 'x'}, {FLAGS_REGNICK, 'r'}, + {FLAGS_SSL, 'Z'}, {0, 0} }; @@ -131,7 +132,7 @@ int user_modes_from_c_to_bitmask[] = 0, /* W */ FLAGS_EXTERNAL, /* X */ 0, /* Y */ - 0, /* Z 0x5A */ + FLAGS_SSL, /* Z 0x5A */ 0, 0, 0, 0, 0, /* 0x5F */ /* 0x60 */ 0, 0, /* a */ @@ -475,6 +476,10 @@ register_local_user(struct Client *client_p, struct Client *source_p, } SetClient(source_p); + if (source_p->localClient->ssl) { + SetSSL(source_p); + source_p->umodes |= FLAGS_SSL; + } /* XXX source_p->servptr is &me, since local client */ source_p->servptr = find_server(user->server); @@ -1063,9 +1068,16 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, char *parv } break; + + case 'Z' : + if (MyClient(source_p)) + sendto_one(source_p, "%s NOTICE %s :You can not Un-Set this Mode (%c)", me.name, source_p->name, *m); + break; + /* we may not get these, * but they shouldnt be in default */ + case ' ' : case '\n' : case '\r' :