[PATCH 1/4] Added check for Linux to use /dev/urandom instead of /dev/random. BSD /dev/random does not block like it does on Linux.

--- src/dh.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/src/dh.c b/src/dh.c index 889c808..f588aeb 100644 --- a/src/dh.c +++ b/src/dh.c @@ -44,7 +44,11 @@ #ifdef __OpenBSD__ #define RAND_SRC "/dev/arandom" #else -#define RAND_SRC "/dev/random" +#ifdef __linux__ +#define RAND_SRC "/dev/urandom" +#else +#define RAND_SRC "/dev/urandom" +#endif #endif -- 1.7.2.5

--- src/send.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/send.c b/src/send.c index 00fcab0..ae7b0fa 100644 --- a/src/send.c +++ b/src/send.c @@ -486,8 +486,10 @@ static inline int prefix_buffer(int remote, aClient *from, char *prefix, char *p; /* temp pointer */ int msglen; /* the length of the message we end up with */ int sidx = 1; /* start at offset 1 */ + va_list vl2; /* copy of vl */ *buffer = ':'; + va_copy(vl2, vl); if(!remote && IsPerson(from)) { @@ -526,9 +528,10 @@ static inline int prefix_buffer(int remote, aClient *from, char *prefix, buffer[sidx++] = *p; } - msglen = ircvsprintf(&buffer[sidx], pattern + 3, vl); + msglen = ircvsprintf(&buffer[sidx], pattern + 3, vl2); msglen += sidx; + va_end(vl2); return msglen; } @@ -1453,7 +1456,8 @@ void sendto_prefix_one(aClient *to, aClient *from, char *pattern, ...) sendto_ops("Send message (%s) to %s[%s] dropped from " "%s(Fake Dir)", temp, to->name, to->from->name, from->name); - va_end(vl); + va_end(vl2); + va_end(vl); return; } @@ -1882,7 +1886,7 @@ void sendto_locops(char *pattern, ...) ircsprintf(nbuf, ":%s NOTICE %s :*** LocOps -- %s", me.name, cptr->name, pattern); vsendto_one(cptr, nbuf, vl2); - va_end(vl); + va_end(vl2); } } va_end(vl); -- 1.7.2.5

--- src/channel.c | 42 +++++++++++++++++++++++++++++------------- 1 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/channel.c b/src/channel.c index 40c14ae..6e1fe7c 100644 --- a/src/channel.c +++ b/src/channel.c @@ -1237,24 +1237,14 @@ static void channel_modes(aClient *cptr, char *mbuf, char *pbuf, if (chptr->mode.limit) { *mbuf++ = 'l'; - if (IsMember(cptr, chptr) || IsServer(cptr) || IsULine(cptr)) + if (IsMember(cptr, chptr) || IsServer(cptr) || IsULine(cptr) || IsOper(cptr)) ircsprintf(pbuf, "%d", chptr->mode.limit); } - if (*chptr->mode.key) - { - *mbuf++ = 'k'; - if (IsMember(cptr, chptr) || IsServer(cptr) || IsULine(cptr)) - { - if(pbuf[0] != '\0') - strcat(pbuf, " "); - strcat(pbuf, chptr->mode.key); - } - } if (chptr->mode.mode & MODE_JOINRATE) { *mbuf++ = 'j'; - if (IsMember(cptr, chptr) || IsServer(cptr) || IsULine(cptr)) + if (IsMember(cptr, chptr) || IsServer(cptr) || IsULine(cptr) || IsOper(cptr)) { char tmp[16]; if(pbuf[0] != '\0') @@ -1269,6 +1259,24 @@ static void channel_modes(aClient *cptr, char *mbuf, char *pbuf, strcat(pbuf, tmp); } } + if (*chptr->mode.key) + { + *mbuf++ = 'k'; + if (IsMember(cptr, chptr) || IsServer(cptr) || IsULine(cptr)) + { + if(pbuf[0] != '\0') + strcat(pbuf, " "); + strcat(pbuf, chptr->mode.key); + } else + { + if (IsOper(cptr)) + { + if (pbuf[0] != '\0') + strcat(pbuf, " "); + strcat(pbuf, "*"); + } + } + } *mbuf++ = '\0'; return; } @@ -3426,7 +3434,15 @@ int m_topic(aClient *cptr, aClient *sptr, int parc, char *parv[]) sendto_one(sptr, err_str(ERR_CHANOPRIVSNEEDED), me.name, parv[0], chptr->chname); return 0; - } + } else + { + //Can't change topic on -t channels if not opped and banned. + if (!(chptr->mode.mode & MODE_TOPICLIMIT) && is_banned(sptr, chptr, NULL) && !is_chan_op(sptr, chptr)) + { + sendto_one(sptr, err_str(ERR_CHANOPRIVSNEEDED), me.name, parv[0], chptr->chname); + return 0; + } + } } else { -- 1.7.2.5

--- src/ircsprintf.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/ircsprintf.c b/src/ircsprintf.c index 45031a7..c784629 100644 --- a/src/ircsprintf.c +++ b/src/ircsprintf.c @@ -124,6 +124,7 @@ inline int irc_printf(char *str, const char *pattern, va_list vl) } } buf[len]=0; + va_end(ap); return len; #ifdef WANT_SNPRINTF } @@ -218,6 +219,7 @@ inline int irc_printf(char *str, const char *pattern, va_list vl) } } buf[len]=0; + va_end(ap); return len; } #endif /* WANT_SNPRINTF */ -- 1.7.2.5
participants (1)
-
Emilio Escobar