SSL umode +S and SSLONLY channel mode +S implemented...
This commit is contained in:
parent
2c435557d2
commit
c54e7b3ad5
11 changed files with 71 additions and 20 deletions
|
@ -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
4
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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 (?) */
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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) )
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
16
src/s_user.c
16
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' :
|
||||
|
|
Reference in a new issue