/oper autojoin channel added. Fixed a server mode bug. Fixed a Hidden Host issues
This commit is contained in:
parent
04a07e95a7
commit
35485ff7c5
11 changed files with 122 additions and 29 deletions
|
@ -4,6 +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.2 - 17th Sept, 2002 - Fish
|
||||||
|
(F) - Fixed a problem with servers setting modes
|
||||||
|
(F) - Fixed a problem with sethost I think (wasn't setting on other servers correctly)
|
||||||
|
(F) - OperAutoJoin is now a new option when you /oper up, you will be autojoined to a channel.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* NeoIRCd Version 0.9.1 - 12th August, 2002 - Fish
|
* NeoIRCd Version 0.9.1 - 12th August, 2002 - Fish
|
||||||
|
@ -52,4 +57,4 @@ Symbols are:
|
||||||
(F) - Added SWHOIS to whois. Opers and servers can set swhois
|
(F) - Added SWHOIS to whois. Opers and servers can set swhois
|
||||||
(F) - Fixed a hook api issue with hooks not getting added correctly (Patch sent to hybird team)
|
(F) - Fixed a hook api issue with hooks not getting added correctly (Patch sent to hybird team)
|
||||||
(F) - Fixed a chanadmin bug that eggy found (Duh), Stupid Bug
|
(F) - Fixed a chanadmin bug that eggy found (Duh), Stupid Bug
|
||||||
(F) - Admin mode is now represented by ¤
|
(F) - Admin mode is now represented by ¤
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* ported from Hybrid7 by fish
|
* ported from Hybrid7 by fish
|
||||||
*
|
*
|
||||||
* $Id: example.conf,v 1.4 2002/09/16 04:57:20 fishwaldo Exp $
|
* $Id: example.conf,v 1.5 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* IMPORTANT NOTES:
|
/* IMPORTANT NOTES:
|
||||||
|
@ -135,6 +135,7 @@ class {
|
||||||
number_per_ip = 10;
|
number_per_ip = 10;
|
||||||
max_number = 100;
|
max_number = 100;
|
||||||
sendq = 100kbytes;
|
sendq = 100kbytes;
|
||||||
|
auto_join="#ircop";
|
||||||
};
|
};
|
||||||
|
|
||||||
class {
|
class {
|
||||||
|
@ -505,6 +506,13 @@ general {
|
||||||
*/
|
*/
|
||||||
default_floodcount = 10;
|
default_floodcount = 10;
|
||||||
|
|
||||||
|
/* autojoin: when anyone opers up, they will automatically be
|
||||||
|
* joined to this channel.
|
||||||
|
* if the channel doesn't exist, it will be set +ntO
|
||||||
|
*/
|
||||||
|
autojoin = "#ircops";
|
||||||
|
|
||||||
|
|
||||||
/* failed oper notice: send a notice to all opers on the server when
|
/* failed oper notice: send a notice to all opers on the server when
|
||||||
* someone tries to OPER and uses the wrong password, host or ident.
|
* someone tries to OPER and uses the wrong password, host or ident.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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: class.h,v 1.3 2002/09/13 06:50:06 fishwaldo Exp $
|
* $Id: class.h,v 1.4 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INCLUDED_class_h
|
#ifndef INCLUDED_class_h
|
||||||
|
@ -31,6 +31,7 @@ struct Client;
|
||||||
struct Class {
|
struct Class {
|
||||||
struct Class* next; /* list node pointer */
|
struct Class* next; /* list node pointer */
|
||||||
char* className;
|
char* className;
|
||||||
|
char* autojoin;
|
||||||
int type;
|
int type;
|
||||||
int conFreq;
|
int conFreq;
|
||||||
int pingFreq;
|
int pingFreq;
|
||||||
|
@ -69,7 +70,7 @@ extern int get_client_ping (struct Client *);
|
||||||
extern void check_class(void);
|
extern void check_class(void);
|
||||||
extern void initclass(void);
|
extern void initclass(void);
|
||||||
extern void free_class(struct Class* );
|
extern void free_class(struct Class* );
|
||||||
extern void add_class (char *, int, int, int, long);
|
extern void add_class(char *, int, int, int, long);
|
||||||
extern void fix_class (struct ConfItem *, struct ConfItem *);
|
extern void fix_class (struct ConfItem *, struct ConfItem *);
|
||||||
extern void report_classes (struct Client *);
|
extern void report_classes (struct Client *);
|
||||||
|
|
||||||
|
|
|
@ -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: config.h,v 1.5 2002/09/16 07:36:01 fishwaldo Exp $
|
* $Id: config.h,v 1.6 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INCLUDED_config_h
|
#ifndef INCLUDED_config_h
|
||||||
|
@ -32,7 +32,6 @@
|
||||||
#define DEBUG
|
#define DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef DEBUG
|
|
||||||
/*
|
/*
|
||||||
* NeoIRCd COMPILE TIME CONFIGURATION OPTIONS
|
* NeoIRCd COMPILE TIME CONFIGURATION OPTIONS
|
||||||
*
|
*
|
||||||
|
|
|
@ -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_conf.h,v 1.5 2002/09/13 06:50:06 fishwaldo Exp $
|
* $Id: s_conf.h,v 1.6 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INCLUDED_s_conf_h
|
#ifndef INCLUDED_s_conf_h
|
||||||
|
@ -178,6 +178,8 @@ struct config_file_entry
|
||||||
char* network_name;
|
char* network_name;
|
||||||
char* network_desc;
|
char* network_desc;
|
||||||
|
|
||||||
|
char operautojoin[CHANNELLEN+1];
|
||||||
|
|
||||||
char fname_operlog[MAXPATHLEN];
|
char fname_operlog[MAXPATHLEN];
|
||||||
char fname_userlog[MAXPATHLEN];
|
char fname_userlog[MAXPATHLEN];
|
||||||
char fname_foperlog[MAXPATHLEN];
|
char fname_foperlog[MAXPATHLEN];
|
||||||
|
|
|
@ -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_swhois.c,v 1.1 2002/09/14 16:00:20 fishwaldo Exp $
|
* $Id: m_swhois.c,v 1.2 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
#include "stdinc.h"
|
#include "stdinc.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
@ -70,14 +70,14 @@ _moddeinit(void)
|
||||||
mod_del_cmd(&swhois_msgtab);
|
mod_del_cmd(&swhois_msgtab);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *_version = "$Revision: 1.1 $";
|
const char *_version = "$Revision: 1.2 $";
|
||||||
|
|
||||||
/* show a whois notice
|
/* show a whois notice
|
||||||
source_p does a /whois on client_p */
|
source_p does a /whois on client_p */
|
||||||
int
|
int
|
||||||
send_swhois(struct hook_mfunc_data *data)
|
send_swhois(struct hook_mfunc_data *data)
|
||||||
{
|
{
|
||||||
if (data->client_p->swhois)
|
if (strlen(data->client_p->swhois) > 1)
|
||||||
sendto_one(data->source_p, form_str(RPL_SWHOIS), me.name, data->source_p->name, data->client_p->name, data->client_p->swhois);
|
sendto_one(data->source_p, form_str(RPL_SWHOIS), me.name, data->source_p->name, data->client_p->name, data->client_p->swhois);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.14 2002/09/16 09:31:20 fishwaldo Exp $
|
* $Id: channel_mode.c,v 1.15 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdinc.h"
|
#include "stdinc.h"
|
||||||
|
@ -1696,7 +1696,7 @@ get_channel_access(struct Client *source_p, struct Channel *chptr)
|
||||||
{
|
{
|
||||||
/* Let hacked servers in for now... */
|
/* Let hacked servers in for now... */
|
||||||
|
|
||||||
if (IsUlined(source_p) || IsServices(source_p))
|
if (!MyClient(source_p) || IsServices(source_p))
|
||||||
return CHACCESS_ADMIN;
|
return CHACCESS_ADMIN;
|
||||||
|
|
||||||
if (is_chan_admin(chptr, source_p))
|
if (is_chan_admin(chptr, source_p))
|
||||||
|
|
|
@ -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: class.c,v 1.3 2002/09/13 06:50:08 fishwaldo Exp $
|
* $Id: class.c,v 1.4 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdinc.h"
|
#include "stdinc.h"
|
||||||
|
@ -169,6 +169,7 @@ int get_con_freq(struct Class *clptr)
|
||||||
* - connection frequency
|
* - connection frequency
|
||||||
* - maximum links
|
* - maximum links
|
||||||
* - max sendq
|
* - max sendq
|
||||||
|
- autojoin channel
|
||||||
* output - NONE
|
* output - NONE
|
||||||
* side effects -
|
* side effects -
|
||||||
* When adding a class, check to see if it is already present first.
|
* When adding a class, check to see if it is already present first.
|
||||||
|
|
|
@ -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: ircd_lexer.l,v 1.5 2002/09/13 06:50:08 fishwaldo Exp $
|
* $Id: ircd_lexer.l,v 1.6 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
%option case-insensitive
|
%option case-insensitive
|
||||||
|
@ -137,6 +137,7 @@ administrator { return ADMIN; }
|
||||||
aftype { return AFTYPE; }
|
aftype { return AFTYPE; }
|
||||||
auth { return AUTH; }
|
auth { return AUTH; }
|
||||||
autoconn { return AUTOCONN; }
|
autoconn { return AUTOCONN; }
|
||||||
|
autojoin { return OPERAUTOJOIN; }
|
||||||
caller_id_wait { return CALLER_ID_WAIT; }
|
caller_id_wait { return CALLER_ID_WAIT; }
|
||||||
channel { return CHANNEL; }
|
channel { return CHANNEL; }
|
||||||
cipher_preference { return CIPHER_PREFERENCE; }
|
cipher_preference { return CIPHER_PREFERENCE; }
|
||||||
|
|
|
@ -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: ircd_parser.y,v 1.5 2002/09/13 06:50:08 fishwaldo Exp $
|
* $Id: ircd_parser.y,v 1.6 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
%{
|
%{
|
||||||
|
@ -99,6 +99,7 @@ int class_redirport_var;
|
||||||
%token ANTI_SPAM_EXIT_MESSAGE_TIME
|
%token ANTI_SPAM_EXIT_MESSAGE_TIME
|
||||||
%token AUTH
|
%token AUTH
|
||||||
%token AUTOCONN
|
%token AUTOCONN
|
||||||
|
%token OPERAUTOJOIN
|
||||||
%token BYTES KBYTES MBYTES GBYTES TBYTES
|
%token BYTES KBYTES MBYTES GBYTES TBYTES
|
||||||
%token CALLER_ID_WAIT
|
%token CALLER_ID_WAIT
|
||||||
%token CHANNEL
|
%token CHANNEL
|
||||||
|
@ -889,7 +890,7 @@ class_entry: CLASS
|
||||||
|
|
||||||
add_class(class_name_var,class_ping_time_var,
|
add_class(class_name_var,class_ping_time_var,
|
||||||
class_number_per_ip_var, class_max_number_var,
|
class_number_per_ip_var, class_max_number_var,
|
||||||
class_sendq_var );
|
class_sendq_var);
|
||||||
|
|
||||||
MyFree(class_name_var);
|
MyFree(class_name_var);
|
||||||
class_name_var = NULL;
|
class_name_var = NULL;
|
||||||
|
@ -1883,6 +1884,7 @@ general_item: general_failed_oper_notice |
|
||||||
general_compression_level | general_client_flood |
|
general_compression_level | general_client_flood |
|
||||||
general_throttle_time | general_havent_read_conf |
|
general_throttle_time | general_havent_read_conf |
|
||||||
general_dot_in_ip6_addr | general_ping_cookie |
|
general_dot_in_ip6_addr | general_ping_cookie |
|
||||||
|
general_oper_autojoin |
|
||||||
error;
|
error;
|
||||||
|
|
||||||
general_failed_oper_notice: FAILED_OPER_NOTICE '=' TYES ';'
|
general_failed_oper_notice: FAILED_OPER_NOTICE '=' TYES ';'
|
||||||
|
@ -1895,6 +1897,27 @@ general_failed_oper_notice: FAILED_OPER_NOTICE '=' TYES ';'
|
||||||
ConfigFileEntry.failed_oper_notice = 0;
|
ConfigFileEntry.failed_oper_notice = 0;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
general_oper_autojoin: OPERAUTOJOIN '=' QSTRING ';'
|
||||||
|
{
|
||||||
|
if (strlen(yylval.string) > CHANNELLEN) {
|
||||||
|
sendto_realops_flags(FLAGS_ALL, L_ALL, "Invalid autojoin Channel %s", yylval.string);
|
||||||
|
ilog(L_ERROR, "Invalid autojoin channel '%s'", yylval.string);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!check_channel_name(yylval.string) || !IsChannelName(yylval.string)) {
|
||||||
|
sendto_realops_flags(FLAGS_ALL, L_ALL, "Invalid Autojoin Channelname %s", yylval.string);
|
||||||
|
ilog(L_ERROR, "Invalid autojoin Channelname %s", yylval.string);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (*yylval.string == '&') {
|
||||||
|
sendto_realops_flags(FLAGS_ALL, L_ALL, "Cannot set Autojoin Channel to a local channel");
|
||||||
|
ilog(L_ERROR, "Cannot set Autojoin Channel to a local channel");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strlcpy(ConfigFileEntry.operautojoin, yylval.string,
|
||||||
|
CHANNELLEN);
|
||||||
|
} ;
|
||||||
|
|
||||||
general_anti_nick_flood: ANTI_NICK_FLOOD '=' TYES ';'
|
general_anti_nick_flood: ANTI_NICK_FLOOD '=' TYES ';'
|
||||||
{
|
{
|
||||||
ConfigFileEntry.anti_nick_flood = 1;
|
ConfigFileEntry.anti_nick_flood = 1;
|
||||||
|
|
79
src/s_user.c
79
src/s_user.c
|
@ -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.12 2002/09/13 16:30:05 fishwaldo Exp $
|
* $Id: s_user.c,v 1.13 2002/09/17 06:09:35 fishwaldo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdinc.h"
|
#include "stdinc.h"
|
||||||
|
@ -1055,10 +1055,8 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, char *parv
|
||||||
}
|
}
|
||||||
strncpy(target_p->vhost, target_p->host, HOSTLEN);
|
strncpy(target_p->vhost, target_p->host, HOSTLEN);
|
||||||
}
|
}
|
||||||
break;
|
sendto_server(NULL, target_p, NULL, NOCAPS, NOCAPS, LL_ICLIENT, ":%s SETHOST %s :%s", me.name, target_p->name, target_p->vhost);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* we may not get these,
|
/* we may not get these,
|
||||||
* but they shouldnt be in default
|
* but they shouldnt be in default
|
||||||
|
@ -1135,14 +1133,6 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, char *parv
|
||||||
*/
|
*/
|
||||||
send_umode_out(client_p, target_p, setflags);
|
send_umode_out(client_p, target_p, setflags);
|
||||||
|
|
||||||
/*
|
|
||||||
* only send out a sethost if +x mode was added
|
|
||||||
*/
|
|
||||||
if (!(setflags & FLAGS_HIDDEN) && IsHidden(target_p)) {
|
|
||||||
sendto_server(NULL, target_p, NULL, NOCAPS, NOCAPS, LL_ICLIENT, ":%s SETHOST %s :%s", target_p->name, target_p->name, target_p->vhost);
|
|
||||||
ilog(L_WARN, "Sending sethost for %s", target_p->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1368,6 +1358,9 @@ oper_up( struct Client *source_p, struct ConfItem *aconf )
|
||||||
dlink_node *ptr;
|
dlink_node *ptr;
|
||||||
struct ConfItem *found_aconf;
|
struct ConfItem *found_aconf;
|
||||||
dlink_node *m;
|
dlink_node *m;
|
||||||
|
struct Channel *chptr = NULL;
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
|
||||||
SetOper(source_p);
|
SetOper(source_p);
|
||||||
if((int)aconf->hold)
|
if((int)aconf->hold)
|
||||||
|
@ -1422,6 +1415,66 @@ oper_up( struct Client *source_p, struct ConfItem *aconf )
|
||||||
sendto_one(source_p, ":%s NOTICE %s :*** Oper privs are %s", me.name,
|
sendto_one(source_p, ":%s NOTICE %s :*** Oper privs are %s", me.name,
|
||||||
source_p->name, operprivs);
|
source_p->name, operprivs);
|
||||||
SendMessageFile(source_p, &ConfigFileEntry.opermotd);
|
SendMessageFile(source_p, &ConfigFileEntry.opermotd);
|
||||||
|
|
||||||
|
/* autojoin them to a channel if its defined */
|
||||||
|
if (ConfigFileEntry.operautojoin) {
|
||||||
|
sendto_one(source_p, "%s NOTICE %s :Autojoining you to %s", me.name, source_p->name, ConfigFileEntry.operautojoin);
|
||||||
|
if ((chptr = hash_find_channel(ConfigFileEntry.operautojoin)) != NULL) {
|
||||||
|
if (IsMember(source_p, chptr))
|
||||||
|
return(1);
|
||||||
|
if (chptr->users = 0)
|
||||||
|
flags = CHFL_ADMIN;
|
||||||
|
} else {
|
||||||
|
flags = CHFL_ADMIN;
|
||||||
|
if (!ServerInfo.hub) {
|
||||||
|
/* lazy links */
|
||||||
|
if (uplink && IsCapable(uplink, CAP_LL)) {
|
||||||
|
sendto_one(uplink, ":%s CBURST %s %s %s", me.name, ConfigFileEntry.operautojoin, source_p->name, "");
|
||||||
|
/* and wait */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* no point doing it fi I already have it */
|
||||||
|
if (chptr == NULL)
|
||||||
|
chptr = get_or_create_channel(source_p, ConfigFileEntry.operautojoin, NULL);
|
||||||
|
|
||||||
|
/* now add the user to the channel */
|
||||||
|
add_user_to_channel(chptr, source_p, flags);
|
||||||
|
|
||||||
|
/* propogate out to the other servers */
|
||||||
|
|
||||||
|
if (flags & CHFL_ADMIN) {
|
||||||
|
chptr->channelts = CurrentTime;
|
||||||
|
sendto_server(NULL, source_p, chptr, NOCAPS, NOCAPS, LL_ICLIENT, ":%s SJOIN %lu %s + :¤%s", me.name, (unsigned long) chptr->channelts, chptr->chname, source_p->name);
|
||||||
|
} else {
|
||||||
|
sendto_server(NULL, source_p, chptr, NOCAPS, NOCAPS, LL_ICLIENT, ":%s SJOIN %lu %s + :%s", me.name, (unsigned long) chptr->channelts, chptr->chname, source_p->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* notify all local clients */
|
||||||
|
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN :%s", source_p->name, source_p->username, source_p->vhost, chptr->chname);
|
||||||
|
/* set the modes */
|
||||||
|
if (flags & CHFL_ADMIN) {
|
||||||
|
chptr->mode.mode |= MODE_TOPICLIMIT;
|
||||||
|
chptr->mode.mode |= MODE_NOPRIVMSGS;
|
||||||
|
chptr->mode.mode |= MODE_OPERSONLY;
|
||||||
|
sendto_channel_local(ONLY_CHANOPS_HALFOPS, chptr, ":%s MODE %s +ntO", me.name, chptr->chname);
|
||||||
|
sendto_server(NULL, source_p, chptr, NOCAPS, NOCAPS, LL_ICLIENT, ":%s MODE %s +ntO", me.name, chptr->chname);
|
||||||
|
}
|
||||||
|
/* send the topic */
|
||||||
|
if (chptr->topic != NULL) {
|
||||||
|
sendto_one(source_p, form_str(RPL_TOPIC), me.name, source_p->name, chptr->chname, chptr->topic);
|
||||||
|
/* hide who topic and time in hideops mode? */
|
||||||
|
if (!(chptr->mode.mode & MODE_HIDEOPS) || (flags & CHFL_CHANOP) || (flags & CHFL_HALFOP) || (flags & CHFL_ADMIN)) {
|
||||||
|
sendto_one(source_p, form_str(RPL_TOPICWHOTIME), me.name, source_p->name, chptr->chname, chptr->topic_info, chptr->topic_time);
|
||||||
|
} else { /* hide from non ops */
|
||||||
|
sendto_one(source_p, form_str(RPL_TOPICWHOTIME), me.name, source_p->name, chptr->chname, me.name, chptr->topic_time);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
channel_member_names(source_p, chptr, chptr->chname, 1);
|
||||||
|
source_p->localClient->last_join_time = CurrentTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue