X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/b4db7c8695aa30e06f266453c3bf0cbc9cb9ee49..refs/tags/shadowircd-6.2.0-beta1:/modules/core/m_join.c diff --git a/modules/core/m_join.c b/modules/core/m_join.c index d411995..82d5d70 100644 --- a/modules/core/m_join.c +++ b/modules/core/m_join.c @@ -21,7 +21,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_join.c 3494 2007-05-27 13:07:27Z jilles $ */ #include "stdinc.h" @@ -96,6 +95,10 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p * me_svsjoin - small function to allow services to forcejoin clients, mainly for ns_ajoin * parv[1] = user to act on (join to a channel) * parv[2] = channel + * This does allow opers to "forcejoin" users to channels with operserv/raw or by writing a + * custom module (where they can make it not log anything), but the former bitches that it's + * being used and the latter...Can probably be done anyway with enough hackyness if this + * command didn't exist so it's not all that bad. */ static int me_svsjoin(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) @@ -108,6 +111,9 @@ me_svsjoin(struct Client *client_p, struct Client *source_p, int parc, const cha if((target_p = find_person(parv[1])) == NULL) return 0; + if(!MyClient(target_p)) + return 0; + user_join(&me, target_p, parv[2], NULL); return 0; } @@ -224,6 +230,9 @@ ms_join(struct Client *client_p, struct Client *source_p, int parc, const char * source_p->servptr->name, chptr->chname, modebuf, parabuf); *omodebuf = *modebuf = *parabuf = '\0'; + + /* since we're dropping our modes, we want to clear the mlock as well. --nenolod */ + set_channel_mlock(client_p, source_p, chptr, NULL, FALSE); } if(!IsMember(source_p, chptr)) @@ -485,6 +494,9 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char /* Update capitalization in channel name, this makes the * capitalization timestamped like modes are -- jilles */ strcpy(chptr->chname, parv[2]); + + /* since we're dropping our modes, we want to clear the mlock as well. --nenolod */ + set_channel_mlock(client_p, source_p, chptr, NULL, FALSE); } if(*modebuf != '\0') @@ -527,7 +539,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char { fl = 0; - for (i = 0; i < 2; i++) + for (i = 0; i < 4; i++) { if(*s == '!') { @@ -687,7 +699,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char para[pargs++] = target_p->name; } } - if(fl & CHFL_CHANOP) + else if(fl & CHFL_CHANOP) { *mbuf++ = 'o'; para[pargs++] = target_p->name; @@ -737,7 +749,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char para[pargs++] = target_p->name; } } - if(fl & CHFL_HALFOP) + else if(fl & CHFL_HALFOP) { *mbuf++ = 'h'; para[pargs++] = target_p->name;