SSL umode +S and SSLONLY channel mode +S implemented...

This commit is contained in:
fishwaldo 2002-11-20 14:13:57 +00:00
parent 2c435557d2
commit c54e7b3ad5
11 changed files with 71 additions and 20 deletions

View file

@ -4,9 +4,11 @@ Symbols are:
(F) - Fish (fish@dynam.ac) (F) - Fish (fish@dynam.ac)
(S) - Shmad (shmad@neostats.net) (S) - Shmad (shmad@neostats.net)
(HP) - Hybrid Team Patches to Hybrid Source (HP) - Hybrid Team Patches to Hybrid Source
* NeoIRCd Version 0.9.6 - 31st Oct (Halloween!), 2002 - Fish * NeoIRCd Version 0.9.6 - 31st Oct (Halloween!), 2002 - Fish
(HP) - Hybrid Team Halloween Special :) (No suprises this time!) (RC5 Merge) (HP) - Hybrid Team Halloween Special :) (No suprises this time!) (RC5 Merge)
(F) - Initial Support for SSL connections started (and now it works!) (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 * 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 (S) - Fixed up event.c for a possible serious bug reported by Dianora from hybrid team

4
TODO
View file

@ -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 /stats g should report when a G line will expire
SSL client support modes and channel related stuff SSL client support modes and channel related stuff
Can't invite non-SSL clients into +S channel
/accept by hostmask /accept by hostmask
rip out servlink and make ssl/ziplinks built in... rip out servlink and make ssl/ziplinks built in...
*Umode +a (Services Root) and +N (Network Admin) *Umode +a (Services Root) and +N (Network Admin)

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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_HIDEOPS 0x4000
#define MODE_OPERSONLY 0x8000 #define MODE_OPERSONLY 0x8000
#define MODE_REGCHAN 0x10000 #define MODE_REGCHAN 0x10000
#define MODE_SSLONLY 0x40000
/* /*
* mode flags which take another parameter (With PARAmeterS) * mode flags which take another parameter (With PARAmeterS)

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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 #ifndef INCLUDED_client_h
@ -408,7 +408,6 @@ struct LocalUser
#define FLAGS_SERVLINK 0x10000 /* servlink has servlink process */ #define FLAGS_SERVLINK 0x10000 /* servlink has servlink process */
#define FLAGS_MARK 0x20000 /* marked client */ #define FLAGS_MARK 0x20000 /* marked client */
#define FLAGS_CANFLOOD 0x40000 /* client has the ability to flood */ #define FLAGS_CANFLOOD 0x40000 /* client has the ability to flood */
#define FLAGS_SSL 0x80000 /* client is connected via SSL */
/* umodes, settable flags */ /* umodes, settable flags */
#define FLAGS_SERVNOTICE 0x0001 /* server notices such as kill */ #define FLAGS_SERVNOTICE 0x0001 /* server notices such as kill */
@ -436,6 +435,7 @@ struct LocalUser
#define FLAGS_SERVICES 0x200000 /* Is Services */ #define FLAGS_SERVICES 0x200000 /* Is Services */
#define FLAGS_ULINED 0x400000 /* is a ulined server? */ #define FLAGS_ULINED 0x400000 /* is a ulined server? */
#define FLAGS_REMOTE 0x800000 /* sendto_realops_flags flag to send message to remote servers */ #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 #define FLAGS_ALL FLAGS_SERVNOTICE
@ -478,7 +478,7 @@ struct LocalUser
FLAGS_REJ | FLAGS_SKILL | FLAGS_FULL | FLAGS_SPY | \ FLAGS_REJ | FLAGS_SKILL | FLAGS_FULL | FLAGS_SPY | \
FLAGS_NCHANGE | FLAGS_OPERWALL | FLAGS_DEBUG | \ FLAGS_NCHANGE | FLAGS_OPERWALL | FLAGS_DEBUG | \
FLAGS_BOTS | FLAGS_EXTERNAL | FLAGS_LOCOPS | \ 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) #define FLAGS_ID (FLAGS_NEEDID | FLAGS_GOTID)

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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 #ifndef INCLUDED_numeric_h
@ -159,6 +159,7 @@ extern const char* form_str(int);
#define RPL_LOCALUSERS 265 #define RPL_LOCALUSERS 265
#define RPL_GLOBALUSERS 266 #define RPL_GLOBALUSERS 266
#define RPL_USINGSSL 275
#define RPL_VCHANEXIST 276 #define RPL_VCHANEXIST 276
#define RPL_VCHANLIST 277 #define RPL_VCHANLIST 277
#define RPL_VCHANHELP 278 #define RPL_VCHANHELP 278
@ -403,6 +404,7 @@ extern const char* form_str(int);
/* ERR_RESTRICTED 484 IRCnet extension */ /* ERR_RESTRICTED 484 IRCnet extension */
/* ERR_UNIQOPRIVSNEEDED 485 IRCnet extension */ /* ERR_UNIQOPRIVSNEEDED 485 IRCnet extension */
/* ERR_KILLDENY 485 unreal */ /* ERR_KILLDENY 485 unreal */
#define ERR_SSLONLY 486
#define ERR_CHANAPRIVSNEEDED 499 #define ERR_CHANAPRIVSNEEDED 499
/* ERR_HTMDISABLED 486 unreal */ /* ERR_HTMDISABLED 486 unreal */
/* ERR_CHANTOORECENT 487 IRCnet extension (?) */ /* ERR_CHANTOORECENT 487 IRCnet extension (?) */

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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" #include "stdinc.h"
@ -63,7 +63,7 @@ _moddeinit(void)
mod_del_cmd(&sjoin_msgtab); mod_del_cmd(&sjoin_msgtab);
} }
const char *_version = "$Revision: 1.16 $"; const char *_version = "$Revision: 1.17 $";
#endif #endif
/* /*
* ms_sjoin * ms_sjoin
@ -177,6 +177,9 @@ static void ms_sjoin(struct Client *client_p,
case 'r': case 'r':
mode.mode |= MODE_REGCHAN; mode.mode |= MODE_REGCHAN;
break; break;
case 'S':
mode.mode |= MODE_SSLONLY;
break;
case 'k': case 'k':
strlcpy(mode.key, parv[4 + args], KEYLEN); strlcpy(mode.key, parv[4 + args], KEYLEN);
args++; args++;
@ -592,6 +595,7 @@ struct mode_letter flags[] = {
{ MODE_HIDEOPS, 'A' }, { MODE_HIDEOPS, 'A' },
{ MODE_OPERSONLY, 'O' }, { MODE_OPERSONLY, 'O' },
{ MODE_REGCHAN, 'r' }, { MODE_REGCHAN, 'r' },
{ MODE_SSLONLY, 'S' },
{ 0, 0 } { 0, 0 }
}; };

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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" #include "stdinc.h"
@ -76,7 +76,7 @@ _moddeinit(void)
mod_del_cmd(&whois_msgtab); mod_del_cmd(&whois_msgtab);
} }
const char *_version = "$Revision: 1.10 $"; const char *_version = "$Revision: 1.11 $";
#endif #endif
/* /*
** m_whois ** 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), sendto_one(source_p, form_str(RPL_WHOISREGNICK),
me.name, source_p->name, target_p->name); 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) || if ( (glob == 1) || (MyConnect(target_p) && (IsOper(source_p) ||
!ConfigServerHide.hide_servers)) || (target_p == source_p) ) !ConfigServerHide.hide_servers)) || (target_p == source_p) )
{ {

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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" #include "stdinc.h"
@ -980,9 +980,31 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key)
} }
if (ptr == NULL) if (ptr == NULL)
return (ERR_INVITEONLYCHAN); 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))) if (*chptr->mode.key && (BadPtr(key) || irccmp(chptr->mode.key, key)))
return (ERR_BADCHANNELKEY); return (ERR_BADCHANNELKEY);

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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" #include "stdinc.h"
@ -470,6 +470,8 @@ channel_modes(struct Channel *chptr, struct Client *client_p,
*mbuf++ = 'A'; *mbuf++ = 'A';
if (chptr->mode.mode & MODE_REGCHAN) if (chptr->mode.mode & MODE_REGCHAN)
*mbuf++ = 'r'; *mbuf++ = 'r';
if (chptr->mode.mode & MODE_SSLONLY)
*mbuf++ = 'S';
if (chptr->mode.limit) if (chptr->mode.limit)
{ {
@ -1676,7 +1678,7 @@ static struct ChannelMode ModeTable[255] =
{chm_nosuch, NULL}, /* P */ {chm_nosuch, NULL}, /* P */
{chm_nosuch, NULL}, /* Q */ {chm_nosuch, NULL}, /* Q */
{chm_nosuch, NULL}, /* R */ {chm_nosuch, NULL}, /* R */
{chm_nosuch, NULL}, /* S */ {chm_simple, (void *) MODE_SSLONLY}, /* S */
{chm_nosuch, NULL}, /* T */ {chm_nosuch, NULL}, /* T */
{chm_nosuch, NULL}, /* U */ {chm_nosuch, NULL}, /* U */
{chm_nosuch, NULL}, /* V */ {chm_nosuch, NULL}, /* V */

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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[] = { static char * replies[] = {
@ -299,7 +299,7 @@ static char * replies[] = {
/* 272 */ NULL, /* 272 */ NULL,
/* 273 */ NULL, /* 273 */ NULL,
/* 274 */ 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", /* 276 RPL_VCHANEXIST, */ ":%s 276 %s %s %d :virtual channels are available for this channel",
/* 277 RPL_VCHANLIST, */ ":%s 277 %s %s ", /* 277 RPL_VCHANLIST, */ ":%s 277 %s %s ",
/* 278 RPL_VCHANHELP, */ ":%s 278 %s :Type /%s %s <key> to specify the channel you want", /* 278 RPL_VCHANHELP, */ ":%s 278 %s :Type /%s %s <key> to specify the channel you want",
@ -513,7 +513,7 @@ static char * replies[] = {
/* 484 ERR_RESTRICTED, */ ":%s 484 %s :You are restricted", /* 484 ERR_RESTRICTED, */ ":%s 484 %s :You are restricted",
/* 485 ERR_BANNEDNICK, */ /* 485 ERR_BANNEDNICK, */
":%s 485 %s :Can't change nick when banned or on a moderated channel (%s)", ":%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, /* 487 */ NULL,
/* 488 */ NULL, /* 488 */ NULL,
/* 489 */ NULL, /* 489 */ NULL,

View file

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA * 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" #include "stdinc.h"
@ -94,6 +94,7 @@ static struct flag_item user_modes[] =
{FLAGS_OPERWALL, 'z'}, {FLAGS_OPERWALL, 'z'},
{FLAGS_HIDDEN, 'x'}, {FLAGS_HIDDEN, 'x'},
{FLAGS_REGNICK, 'r'}, {FLAGS_REGNICK, 'r'},
{FLAGS_SSL, 'Z'},
{0, 0} {0, 0}
}; };
@ -131,7 +132,7 @@ int user_modes_from_c_to_bitmask[] =
0, /* W */ 0, /* W */
FLAGS_EXTERNAL, /* X */ FLAGS_EXTERNAL, /* X */
0, /* Y */ 0, /* Y */
0, /* Z 0x5A */ FLAGS_SSL, /* Z 0x5A */
0, 0, 0, 0, 0, /* 0x5F */ 0, 0, 0, 0, 0, /* 0x5F */
/* 0x60 */ 0, /* 0x60 */ 0,
0, /* a */ 0, /* a */
@ -475,6 +476,10 @@ register_local_user(struct Client *client_p, struct Client *source_p,
} }
SetClient(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 */ /* XXX source_p->servptr is &me, since local client */
source_p->servptr = find_server(user->server); 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; 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, /* we may not get these,
* but they shouldnt be in default * but they shouldnt be in default
*/ */
case ' ' : case ' ' :
case '\n' : case '\n' :
case '\r' : case '\r' :