mirror of
https://github.com/matrix-construct/construct
synced 2025-01-01 02:14:13 +01:00
Merge branch 'master' into authd-framework-2
This commit is contained in:
commit
460032e61f
14 changed files with 122 additions and 97 deletions
|
@ -1,8 +1,9 @@
|
||||||
set -v
|
set -v
|
||||||
|
|
||||||
|
export MSYSTEM=MINGW64
|
||||||
export PATH=/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
|
export PATH=/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
|
||||||
|
|
||||||
sh ./autogen.sh
|
sh ./autogen.sh
|
||||||
./configure --prefix=c:/projects/charybdis/build --enable-openssl=/mingw64 --build=x86_64-pc-mingw64 --host=x86_64-pc-mingw64
|
./configure --prefix=c:/projects/charybdis/build --enable-openssl=/mingw64
|
||||||
make -j2
|
make -j2
|
||||||
make install
|
make install
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -34,6 +34,7 @@ librb/aclocal.m4
|
||||||
librb/include/librb_config.h
|
librb/include/librb_config.h
|
||||||
librb/include/librb_config.h.in
|
librb/include/librb_config.h.in
|
||||||
librb/include/librb-config.h
|
librb/include/librb-config.h
|
||||||
|
librb/include/serno.h
|
||||||
librb/librb.pc
|
librb/librb.pc
|
||||||
librb/ltmain.sh
|
librb/ltmain.sh
|
||||||
librb/missing
|
librb/missing
|
||||||
|
|
|
@ -52,7 +52,7 @@ static int _modinit(void);
|
||||||
static void _moddeinit(void);
|
static void _moddeinit(void);
|
||||||
static int eb_or(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type);
|
static int eb_or(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type);
|
||||||
static int eb_and(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type);
|
static int eb_and(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type);
|
||||||
static int eb_combi(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type, int is_and);
|
static int eb_combi(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type, bool is_and);
|
||||||
static int recursion_depth = 0;
|
static int recursion_depth = 0;
|
||||||
|
|
||||||
DECLARE_MODULE_AV2(extb_extended, _modinit, _moddeinit, NULL, NULL, NULL, NULL, NULL, extb_desc);
|
DECLARE_MODULE_AV2(extb_extended, _modinit, _moddeinit, NULL, NULL, NULL, NULL, NULL, extb_desc);
|
||||||
|
@ -76,20 +76,20 @@ _moddeinit(void)
|
||||||
static int eb_or(const char *data, struct Client *client_p,
|
static int eb_or(const char *data, struct Client *client_p,
|
||||||
struct Channel *chptr, long mode_type)
|
struct Channel *chptr, long mode_type)
|
||||||
{
|
{
|
||||||
return eb_combi(data, client_p, chptr, mode_type, FALSE);
|
return eb_combi(data, client_p, chptr, mode_type, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int eb_and(const char *data, struct Client *client_p,
|
static int eb_and(const char *data, struct Client *client_p,
|
||||||
struct Channel *chptr, long mode_type)
|
struct Channel *chptr, long mode_type)
|
||||||
{
|
{
|
||||||
return eb_combi(data, client_p, chptr, mode_type, TRUE);
|
return eb_combi(data, client_p, chptr, mode_type, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int eb_combi(const char *data, struct Client *client_p,
|
static int eb_combi(const char *data, struct Client *client_p,
|
||||||
struct Channel *chptr, long mode_type, int is_and)
|
struct Channel *chptr, long mode_type, bool is_and)
|
||||||
{
|
{
|
||||||
const char *p, *banend;
|
const char *p, *banend;
|
||||||
int have_result = FALSE;
|
bool have_result = false;
|
||||||
int allowed_nodes = 11;
|
int allowed_nodes = 11;
|
||||||
size_t datalen;
|
size_t datalen;
|
||||||
|
|
||||||
|
@ -143,12 +143,12 @@ static int eb_combi(const char *data, struct Client *client_p,
|
||||||
recursion_depth++;
|
recursion_depth++;
|
||||||
|
|
||||||
while (--allowed_nodes) {
|
while (--allowed_nodes) {
|
||||||
int invert = FALSE;
|
bool invert = false;
|
||||||
char *child_data, child_data_buf[BANLEN];
|
char *child_data, child_data_buf[BANLEN];
|
||||||
ExtbanFunc f;
|
ExtbanFunc f;
|
||||||
|
|
||||||
if (*p == '~') {
|
if (*p == '~') {
|
||||||
invert = TRUE;
|
invert = true;
|
||||||
p++;
|
p++;
|
||||||
if (p == banend) {
|
if (p == banend) {
|
||||||
MOD_DEBUG("combo invalid: no data after ~");
|
MOD_DEBUG("combo invalid: no data after ~");
|
||||||
|
@ -164,7 +164,7 @@ static int eb_combi(const char *data, struct Client *client_p,
|
||||||
|
|
||||||
if (*p == ':') {
|
if (*p == ':') {
|
||||||
unsigned int parencount = 0;
|
unsigned int parencount = 0;
|
||||||
int escaped = FALSE, done = FALSE;
|
bool escaped = false, done = false;
|
||||||
char *o;
|
char *o;
|
||||||
|
|
||||||
p++;
|
p++;
|
||||||
|
@ -173,7 +173,7 @@ static int eb_combi(const char *data, struct Client *client_p,
|
||||||
* we already have_result.
|
* we already have_result.
|
||||||
*/
|
*/
|
||||||
o = child_data = child_data_buf;
|
o = child_data = child_data_buf;
|
||||||
while (TRUE) {
|
while (true) {
|
||||||
if (p == banend) {
|
if (p == banend) {
|
||||||
if (parencount) {
|
if (parencount) {
|
||||||
MOD_DEBUG("combo invalid: EOD while in parens");
|
MOD_DEBUG("combo invalid: EOD while in parens");
|
||||||
|
@ -186,11 +186,11 @@ static int eb_combi(const char *data, struct Client *client_p,
|
||||||
if (*p != '(' && *p != ')' && *p != '\\' && *p != ',')
|
if (*p != '(' && *p != ')' && *p != '\\' && *p != ',')
|
||||||
*o++ = '\\';
|
*o++ = '\\';
|
||||||
*o++ = *p++;
|
*o++ = *p++;
|
||||||
escaped = FALSE;
|
escaped = false;
|
||||||
} else {
|
} else {
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case '\\':
|
case '\\':
|
||||||
escaped = TRUE;
|
escaped = true;
|
||||||
break;
|
break;
|
||||||
case '(':
|
case '(':
|
||||||
parencount++;
|
parencount++;
|
||||||
|
@ -208,7 +208,7 @@ static int eb_combi(const char *data, struct Client *client_p,
|
||||||
if (parencount)
|
if (parencount)
|
||||||
*o++ = *p;
|
*o++ = *p;
|
||||||
else
|
else
|
||||||
done = TRUE;
|
done = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
*o++ = *p;
|
*o++ = *p;
|
||||||
|
@ -239,7 +239,7 @@ static int eb_combi(const char *data, struct Client *client_p,
|
||||||
child_result = child_result == EXTBAN_MATCH;
|
child_result = child_result == EXTBAN_MATCH;
|
||||||
|
|
||||||
if (is_and ? !child_result : child_result)
|
if (is_and ? !child_result : child_result)
|
||||||
have_result = TRUE;
|
have_result = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p == banend)
|
if (p == banend)
|
||||||
|
|
|
@ -166,7 +166,9 @@ struct Client
|
||||||
|
|
||||||
struct LocalUser
|
struct LocalUser
|
||||||
{
|
{
|
||||||
rb_dlink_node tnode; /* This is the node for the local list type the client is on*/
|
rb_dlink_node tnode; /* This is the node for the local list type the client is on */
|
||||||
|
rb_dlink_list connids; /* This is the list of connids to free */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following fields are allocated only for local clients
|
* The following fields are allocated only for local clients
|
||||||
* (directly connected to *this* server with a socket.
|
* (directly connected to *this* server with a socket.
|
||||||
|
@ -233,7 +235,6 @@ struct LocalUser
|
||||||
|
|
||||||
time_t next_away; /* Don't allow next away before... */
|
time_t next_away; /* Don't allow next away before... */
|
||||||
time_t last;
|
time_t last;
|
||||||
uint32_t connid;
|
|
||||||
|
|
||||||
/* clients allowed to talk through +g */
|
/* clients allowed to talk through +g */
|
||||||
rb_dlink_list allow_list;
|
rb_dlink_list allow_list;
|
||||||
|
@ -272,7 +273,6 @@ struct LocalUser
|
||||||
|
|
||||||
struct _ssl_ctl *ssl_ctl; /* which ssl daemon we're associate with */
|
struct _ssl_ctl *ssl_ctl; /* which ssl daemon we're associate with */
|
||||||
struct _ssl_ctl *z_ctl; /* second ctl for ssl+zlib */
|
struct _ssl_ctl *z_ctl; /* second ctl for ssl+zlib */
|
||||||
uint32_t zconnid;
|
|
||||||
uint32_t localflags;
|
uint32_t localflags;
|
||||||
struct ZipStats *zipstats; /* zipstats */
|
struct ZipStats *zipstats; /* zipstats */
|
||||||
uint16_t cork_count; /* used for corking/uncorking connections */
|
uint16_t cork_count; /* used for corking/uncorking connections */
|
||||||
|
@ -605,4 +605,8 @@ extern char *generate_uid(void);
|
||||||
void allocate_away(struct Client *);
|
void allocate_away(struct Client *);
|
||||||
void free_away(struct Client *);
|
void free_away(struct Client *);
|
||||||
|
|
||||||
|
uint32_t connid_get(struct Client *client_p);
|
||||||
|
void connid_put(uint32_t id);
|
||||||
|
void client_release_connids(struct Client *client_p);
|
||||||
|
|
||||||
#endif /* INCLUDED_client_h */
|
#endif /* INCLUDED_client_h */
|
||||||
|
|
|
@ -95,11 +95,8 @@ extern void del_from_resv_hash(const char *name, struct ConfItem *aconf);
|
||||||
extern struct ConfItem *hash_find_resv(const char *name);
|
extern struct ConfItem *hash_find_resv(const char *name);
|
||||||
extern void clear_resv_hash(void);
|
extern void clear_resv_hash(void);
|
||||||
|
|
||||||
void add_to_cli_connid_hash(struct Client *client_p);
|
void add_to_cli_connid_hash(struct Client *client_p, uint32_t id);
|
||||||
void del_from_cli_connid_hash(struct Client *client_p);
|
void del_from_cli_connid_hash(uint32_t id);
|
||||||
struct Client *find_cli_connid_hash(uint32_t connid);
|
struct Client *find_cli_connid_hash(uint32_t connid);
|
||||||
|
|
||||||
void add_to_zconnid_hash(struct Client *client_p);
|
|
||||||
void del_from_zconnid_hash(struct Client *client_p);
|
|
||||||
|
|
||||||
#endif /* INCLUDED_hash_h */
|
#endif /* INCLUDED_hash_h */
|
||||||
|
|
|
@ -76,7 +76,7 @@ static rb_bh *pclient_heap = NULL;
|
||||||
static rb_bh *user_heap = NULL;
|
static rb_bh *user_heap = NULL;
|
||||||
static rb_bh *away_heap = NULL;
|
static rb_bh *away_heap = NULL;
|
||||||
static char current_uid[IDLEN];
|
static char current_uid[IDLEN];
|
||||||
static int32_t current_connid = 0;
|
static uint32_t current_connid = 0;
|
||||||
|
|
||||||
rb_dictionary *nd_dict = NULL;
|
rb_dictionary *nd_dict = NULL;
|
||||||
|
|
||||||
|
@ -129,6 +129,78 @@ init_client(void)
|
||||||
nd_dict = rb_dictionary_create("nickdelay", irccmp);
|
nd_dict = rb_dictionary_create("nickdelay", irccmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* connid_get - allocate a connid
|
||||||
|
*
|
||||||
|
* inputs - none
|
||||||
|
* outputs - a connid token which is used to represent a logical circuit
|
||||||
|
* side effects - current_connid is incremented, possibly multiple times.
|
||||||
|
* the association of the connid to it's client is committed.
|
||||||
|
*/
|
||||||
|
uint32_t
|
||||||
|
connid_get(struct Client *client_p)
|
||||||
|
{
|
||||||
|
s_assert(MyClient(client_p));
|
||||||
|
if (!MyClient(client_p))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* find a connid that is available */
|
||||||
|
while (find_cli_connid_hash(++current_connid) != NULL)
|
||||||
|
{
|
||||||
|
/* handle wraparound, current_connid must NEVER be 0 */
|
||||||
|
if (current_connid == 0)
|
||||||
|
++current_connid;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_to_cli_connid_hash(client_p, current_connid);
|
||||||
|
rb_dlinkAddAlloc(RB_UINT_TO_POINTER(current_connid), &client_p->localClient->connids);
|
||||||
|
|
||||||
|
return current_connid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* connid_put - free a connid
|
||||||
|
*
|
||||||
|
* inputs - connid to free
|
||||||
|
* outputs - nothing
|
||||||
|
* side effects - connid bookkeeping structures are freed
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
connid_put(uint32_t id)
|
||||||
|
{
|
||||||
|
struct Client *client_p;
|
||||||
|
|
||||||
|
s_assert(id != 0);
|
||||||
|
if (id == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
client_p = find_cli_connid_hash(id);
|
||||||
|
if (client_p == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
del_from_cli_connid_hash(id);
|
||||||
|
rb_dlinkFindDestroy(RB_UINT_TO_POINTER(id), &client_p->localClient->connids);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* client_release_connids - release any connids still attached to a client
|
||||||
|
*
|
||||||
|
* inputs - client to garbage collect
|
||||||
|
* outputs - none
|
||||||
|
* side effects - client's connids are garbage collected
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
client_release_connids(struct Client *client_p)
|
||||||
|
{
|
||||||
|
rb_dlink_node *ptr, *ptr2;
|
||||||
|
|
||||||
|
s_assert(MyClient(client_p));
|
||||||
|
if (!MyClient(client_p))
|
||||||
|
return;
|
||||||
|
|
||||||
|
RB_DLINK_FOREACH_SAFE(ptr, ptr2, client_p->localClient->connids.head)
|
||||||
|
connid_put(RB_POINTER_TO_UINT(ptr->data));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* make_client - create a new Client struct and set it to initial state.
|
* make_client - create a new Client struct and set it to initial state.
|
||||||
|
@ -160,17 +232,6 @@ make_client(struct Client *from)
|
||||||
|
|
||||||
client_p->localClient->F = NULL;
|
client_p->localClient->F = NULL;
|
||||||
|
|
||||||
if(current_connid+1 == 0)
|
|
||||||
current_connid++;
|
|
||||||
|
|
||||||
client_p->localClient->connid = ++current_connid;
|
|
||||||
|
|
||||||
if(current_connid+1 == 0)
|
|
||||||
current_connid++;
|
|
||||||
|
|
||||||
client_p->localClient->zconnid = ++current_connid;
|
|
||||||
add_to_cli_connid_hash(client_p);
|
|
||||||
|
|
||||||
client_p->preClient = rb_bh_alloc(pclient_heap);
|
client_p->preClient = rb_bh_alloc(pclient_heap);
|
||||||
|
|
||||||
/* as good a place as any... */
|
/* as good a place as any... */
|
||||||
|
@ -229,7 +290,7 @@ free_local_client(struct Client *client_p)
|
||||||
client_p->localClient->listener = 0;
|
client_p->localClient->listener = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
del_from_cli_connid_hash(client_p);
|
client_release_connids(client_p);
|
||||||
if(client_p->localClient->F != NULL)
|
if(client_p->localClient->F != NULL)
|
||||||
{
|
{
|
||||||
rb_close(client_p->localClient->F);
|
rb_close(client_p->localClient->F);
|
||||||
|
@ -1949,7 +2010,7 @@ close_connection(struct Client *client_p)
|
||||||
else
|
else
|
||||||
ServerStats.is_ni++;
|
ServerStats.is_ni++;
|
||||||
|
|
||||||
del_from_cli_connid_hash(client_p);
|
client_release_connids(client_p);
|
||||||
|
|
||||||
if(client_p->localClient->F != NULL)
|
if(client_p->localClient->F != NULL)
|
||||||
{
|
{
|
||||||
|
|
34
ircd/hash.c
34
ircd/hash.c
|
@ -40,7 +40,6 @@
|
||||||
#include "rb_radixtree.h"
|
#include "rb_radixtree.h"
|
||||||
|
|
||||||
rb_dictionary *client_connid_tree = NULL;
|
rb_dictionary *client_connid_tree = NULL;
|
||||||
rb_dictionary *client_zconnid_tree = NULL;
|
|
||||||
rb_radixtree *client_id_tree = NULL;
|
rb_radixtree *client_id_tree = NULL;
|
||||||
rb_radixtree *client_name_tree = NULL;
|
rb_radixtree *client_name_tree = NULL;
|
||||||
|
|
||||||
|
@ -60,7 +59,6 @@ void
|
||||||
init_hash(void)
|
init_hash(void)
|
||||||
{
|
{
|
||||||
client_connid_tree = rb_dictionary_create("client connid", rb_uint32cmp);
|
client_connid_tree = rb_dictionary_create("client connid", rb_uint32cmp);
|
||||||
client_zconnid_tree = rb_dictionary_create("client zconnid", rb_uint32cmp);
|
|
||||||
client_id_tree = rb_radixtree_create("client id", NULL);
|
client_id_tree = rb_radixtree_create("client id", NULL);
|
||||||
client_name_tree = rb_radixtree_create("client name", irccasecanon);
|
client_name_tree = rb_radixtree_create("client name", irccasecanon);
|
||||||
|
|
||||||
|
@ -493,41 +491,19 @@ clear_resv_hash(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_to_zconnid_hash(struct Client *client_p)
|
add_to_cli_connid_hash(struct Client *client_p, uint32_t id)
|
||||||
{
|
{
|
||||||
rb_dictionary_add(client_zconnid_tree, RB_UINT_TO_POINTER(client_p->localClient->zconnid), client_p);
|
rb_dictionary_add(client_connid_tree, RB_UINT_TO_POINTER(id), client_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
del_from_zconnid_hash(struct Client *client_p)
|
del_from_cli_connid_hash(uint32_t id)
|
||||||
{
|
{
|
||||||
rb_dictionary_delete(client_zconnid_tree, RB_UINT_TO_POINTER(client_p->localClient->zconnid));
|
rb_dictionary_delete(client_connid_tree, RB_UINT_TO_POINTER(id));
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
add_to_cli_connid_hash(struct Client *client_p)
|
|
||||||
{
|
|
||||||
rb_dictionary_add(client_connid_tree, RB_UINT_TO_POINTER(client_p->localClient->connid), client_p);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
del_from_cli_connid_hash(struct Client *client_p)
|
|
||||||
{
|
|
||||||
rb_dictionary_delete(client_connid_tree, RB_UINT_TO_POINTER(client_p->localClient->connid));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Client *
|
struct Client *
|
||||||
find_cli_connid_hash(uint32_t connid)
|
find_cli_connid_hash(uint32_t connid)
|
||||||
{
|
{
|
||||||
struct Client *target_p;
|
return rb_dictionary_retrieve(client_connid_tree, RB_UINT_TO_POINTER(connid));
|
||||||
|
|
||||||
target_p = rb_dictionary_retrieve(client_connid_tree, RB_UINT_TO_POINTER(connid));
|
|
||||||
if (target_p != NULL)
|
|
||||||
return target_p;
|
|
||||||
|
|
||||||
target_p = rb_dictionary_retrieve(client_zconnid_tree, RB_UINT_TO_POINTER(connid));
|
|
||||||
if (target_p != NULL)
|
|
||||||
return target_p;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -396,6 +396,7 @@ initialize_server_capabs(void)
|
||||||
* output - none
|
* output - none
|
||||||
* side effects - items in ircd_paths[] array are relocated
|
* side effects - items in ircd_paths[] array are relocated
|
||||||
*/
|
*/
|
||||||
|
#ifdef _WIN32
|
||||||
static void
|
static void
|
||||||
relocate_paths(void)
|
relocate_paths(void)
|
||||||
{
|
{
|
||||||
|
@ -466,6 +467,7 @@ relocate_paths(void)
|
||||||
ircd_paths[IRCD_PATH_BIN] = rb_strdup(workbuf);
|
ircd_paths[IRCD_PATH_BIN] = rb_strdup(workbuf);
|
||||||
ircd_paths[IRCD_PATH_LIBEXEC] = rb_strdup(workbuf);
|
ircd_paths[IRCD_PATH_LIBEXEC] = rb_strdup(workbuf);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* write_pidfile
|
* write_pidfile
|
||||||
|
@ -656,7 +658,7 @@ charybdis_main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ENABLE_FHS_PATHS
|
#ifdef _WIN32
|
||||||
relocate_paths();
|
relocate_paths();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ char linebuf[512];
|
||||||
|
|
||||||
#define YY_INPUT(buf,result,max_size) \
|
#define YY_INPUT(buf,result,max_size) \
|
||||||
if (!(result = conf_fgets(buf, max_size, conf_fbfile_in))) \
|
if (!(result = conf_fgets(buf, max_size, conf_fbfile_in))) \
|
||||||
YY_FATAL_ERROR("input in flex scanner failed");
|
YY_FATAL_ERROR("input in flex scanner failed");
|
||||||
%}
|
%}
|
||||||
|
|
||||||
ws [ \t]*
|
ws [ \t]*
|
||||||
|
@ -101,9 +101,9 @@ include \.include{ws}(\<.*\>|\".*\")
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
yylval.string[yyleng-2] = '\0'; /* remove close
|
yylval.string[yyleng-2] = '\0'; /* remove close
|
||||||
* quote
|
* quote
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (j=i=0 ;yylval.string[i] != '\0'; i++,j++)
|
for (j=i=0 ;yylval.string[i] != '\0'; i++,j++)
|
||||||
{
|
{
|
||||||
if (yylval.string[i] != '\\')
|
if (yylval.string[i] != '\\')
|
||||||
|
@ -113,7 +113,7 @@ include \.include{ws}(\<.*\>|\".*\")
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
if (yylval.string[i] == '\0') /* XXX
|
if (yylval.string[i] == '\0') /* XXX
|
||||||
* should not
|
* should not
|
||||||
* happen
|
* happen
|
||||||
*/
|
*/
|
||||||
|
@ -133,7 +133,7 @@ include \.include{ws}(\<.*\>|\".*\")
|
||||||
|
|
||||||
|
|
||||||
loadmodule { return LOADMODULE; }
|
loadmodule { return LOADMODULE; }
|
||||||
{string} {
|
{string} {
|
||||||
strcpy(yylval.string, yytext);
|
strcpy(yylval.string, yytext);
|
||||||
yylval.string[yyleng] = '\0';
|
yylval.string[yyleng] = '\0';
|
||||||
return STRING;
|
return STRING;
|
||||||
|
@ -148,7 +148,7 @@ loadmodule { return LOADMODULE; }
|
||||||
void ccomment()
|
void ccomment()
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
/* log(L_NOTICE, "got comment"); */
|
/* log(L_NOTICE, "got comment"); */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -157,7 +157,7 @@ void ccomment()
|
||||||
if (c == '*')
|
if (c == '*')
|
||||||
{
|
{
|
||||||
while ((c = input()) == '*');
|
while ((c = input()) == '*');
|
||||||
if (c == '/')
|
if (c == '/')
|
||||||
break;
|
break;
|
||||||
if (c == '\n') ++lineno;
|
if (c == '\n') ++lineno;
|
||||||
}
|
}
|
||||||
|
@ -182,15 +182,15 @@ void cinclude(void)
|
||||||
else
|
else
|
||||||
*strchr(++c, '>') = 0;
|
*strchr(++c, '>') = 0;
|
||||||
|
|
||||||
/* do stacking and co. */
|
/* do stacking and co. */
|
||||||
if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
|
if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
|
||||||
conf_report_error("Includes nested too deep (max is %d)", MAX_INCLUDE_DEPTH);
|
conf_report_error("Includes nested too deep (max is %d)", MAX_INCLUDE_DEPTH);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FILE *tmp_fbfile_in;
|
FILE *tmp_fbfile_in;
|
||||||
|
|
||||||
tmp_fbfile_in = fopen(c, "r");
|
tmp_fbfile_in = fopen(c, "r");
|
||||||
|
|
||||||
if (tmp_fbfile_in == NULL)
|
if (tmp_fbfile_in == NULL)
|
||||||
{
|
{
|
||||||
/* if its not found in PREFIX, look in IRCD_PATH_ETC */
|
/* if its not found in PREFIX, look in IRCD_PATH_ETC */
|
||||||
|
|
|
@ -481,7 +481,7 @@ add_connection(struct Listener *listener, rb_fde_t *F, struct sockaddr *sai, str
|
||||||
free_client(new_client);
|
free_client(new_client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new_client->localClient->ssl_ctl = start_ssld_accept(F, xF[1], new_client->localClient->connid); /* this will close F for us */
|
new_client->localClient->ssl_ctl = start_ssld_accept(F, xF[1], connid_get(new_client)); /* this will close F for us */
|
||||||
if(new_client->localClient->ssl_ctl == NULL)
|
if(new_client->localClient->ssl_ctl == NULL)
|
||||||
{
|
{
|
||||||
free_client(new_client);
|
free_client(new_client);
|
||||||
|
|
|
@ -1157,7 +1157,7 @@ serv_connect_ssl_callback(rb_fde_t *F, int status, void *data)
|
||||||
}
|
}
|
||||||
client_p->localClient->F = xF[0];
|
client_p->localClient->F = xF[0];
|
||||||
|
|
||||||
client_p->localClient->ssl_ctl = start_ssld_connect(F, xF[1], rb_get_fd(xF[0]));
|
client_p->localClient->ssl_ctl = start_ssld_connect(F, xF[1], connid_get(client_p));
|
||||||
if(!client_p->localClient->ssl_ctl)
|
if(!client_p->localClient->ssl_ctl)
|
||||||
{
|
{
|
||||||
serv_connect_callback(client_p->localClient->F, RB_ERROR, data);
|
serv_connect_callback(client_p->localClient->F, RB_ERROR, data);
|
||||||
|
|
|
@ -863,23 +863,11 @@ start_zlib_session(void *data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsSSL(server))
|
|
||||||
{
|
|
||||||
/* tell ssld the new connid for the ssl part*/
|
|
||||||
buf2[0] = 'Y';
|
|
||||||
uint32_to_buf(&buf2[1], rb_get_fd(server->localClient->F));
|
|
||||||
uint32_to_buf(&buf2[5], rb_get_fd(xF2));
|
|
||||||
ssl_cmd_write_queue(server->localClient->ssl_ctl, NULL, 0, buf2, sizeof(buf2));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
F[0] = server->localClient->F;
|
F[0] = server->localClient->F;
|
||||||
F[1] = xF1;
|
F[1] = xF1;
|
||||||
del_from_zconnid_hash(server);
|
|
||||||
server->localClient->F = xF2;
|
server->localClient->F = xF2;
|
||||||
/* need to redo as what we did before isn't valid now */
|
/* need to redo as what we did before isn't valid now */
|
||||||
uint32_to_buf(&buf[1], server->localClient->zconnid);
|
uint32_to_buf(&buf[1], connid_get(server));
|
||||||
add_to_zconnid_hash(server);
|
|
||||||
|
|
||||||
server->localClient->z_ctl = which_ssld();
|
server->localClient->z_ctl = which_ssld();
|
||||||
if(!server->localClient->z_ctl)
|
if(!server->localClient->z_ctl)
|
||||||
|
|
|
@ -95,7 +95,7 @@ mr_starttls(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *sou
|
||||||
sendto_one_numeric(client_p, RPL_STARTTLS, form_str(RPL_STARTTLS));
|
sendto_one_numeric(client_p, RPL_STARTTLS, form_str(RPL_STARTTLS));
|
||||||
send_queued(client_p);
|
send_queued(client_p);
|
||||||
|
|
||||||
ctl = start_ssld_accept(client_p->localClient->F, F[1], client_p->localClient->connid);
|
ctl = start_ssld_accept(client_p->localClient->F, F[1], connid_get(client_p));
|
||||||
if (ctl != NULL)
|
if (ctl != NULL)
|
||||||
{
|
{
|
||||||
client_p->localClient->F = F[0];
|
client_p->localClient->F = F[0];
|
||||||
|
|
|
@ -1067,11 +1067,6 @@ mod_process_cmd_recv(mod_ctl_t * ctl)
|
||||||
process_stats(ctl, ctl_buf);
|
process_stats(ctl, ctl_buf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'Y':
|
|
||||||
{
|
|
||||||
change_connid(ctl, ctl_buf);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
case 'Z':
|
case 'Z':
|
||||||
|
|
Loading…
Reference in a new issue