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)
(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

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
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)

View file

@ -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)

View file

@ -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)

View file

@ -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 (?) */

View file

@ -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 }
};

View file

@ -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) )
{

View file

@ -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"
@ -982,7 +982,29 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key)
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);

View file

@ -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 */

View file

@ -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 <key> 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,

View file

@ -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' :