]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_join.c
Log unknown class in auth errors to ircd.log as well.
[irc/rqf/shadowircd.git] / modules / core / m_join.c
index ff4750f335c70c21586231290a18f1d52ba499c4..e9f092d2c9cbda24c35495403231f125822c1fcf 100644 (file)
@@ -125,7 +125,6 @@ check_forward(struct Client *source_p, struct Channel *chptr,
 
 /*
  * m_join
- *      parv[0] = sender prefix
  *      parv[1] = channel
  *      parv[2] = channel password (key)
  */
@@ -137,6 +136,7 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p
        struct ConfItem *aconf;
        char *name;
        char *key = NULL;
+       const char *modes;
        int i, flags = 0;
        char *p = NULL, *p2 = NULL;
        char *chanlist;
@@ -341,17 +341,15 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p
                        chptr->channelts = rb_current_time();
                        chptr->mode.mode |= MODE_TOPICLIMIT;
                        chptr->mode.mode |= MODE_NOPRIVMSGS;
+                       modes = channel_modes(chptr, &me);
 
-                       sendto_channel_local(ONLY_CHANOPS, chptr, ":%s MODE %s +nt",
-                                            me.name, chptr->chname);
+                       sendto_channel_local(ONLY_CHANOPS, chptr, ":%s MODE %s %s",
+                                            me.name, chptr->chname, modes);
 
-                       if(*chptr->chname == '#')
-                       {
-                               sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
-                                             ":%s SJOIN %ld %s +nt :@%s",
-                                             me.id, (long) chptr->channelts,
-                                             chptr->chname, source_p->id);
-                       }
+                       sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
+                                     ":%s SJOIN %ld %s %s :@%s",
+                                     me.id, (long) chptr->channelts,
+                                     chptr->chname, modes, source_p->id);
                }
                else
                {
@@ -389,14 +387,10 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p
 
 /*
  * ms_join
- *
- * inputs      -
- * output      - none
- * side effects        - handles remote JOIN's sent by servers. In TSora
- *               remote clients are joined using SJOIN, hence a 
- *               JOIN sent by a server on behalf of a client is an error.
- *               here, the initial code is in to take an extra parameter
- *               and use it for the TimeStamp on a new channel.
+ *      parv[1] = channel TS
+ *      parv[2] = channel
+ *      parv[3] = "+", formerly channel modes but now unused
+ * alternatively, a single "0" parameter parts all channels
  */
 static int
 ms_join(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
@@ -770,9 +764,6 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
        else
                modes = empty_modes;
 
-       /* working on the presumption eventually itll be more efficient to
-        * build a TS6 buffer without checking its needed..
-        */
        mlen_uid = rb_sprintf(buf_uid, ":%s SJOIN %ld %s %s :",
                              use_id(source_p), (long) chptr->channelts, parv[2], modes);
        ptr_uid = buf_uid + mlen_uid;
@@ -1185,7 +1176,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p)
                                        *mbuf = '\0';
                                        sendto_channel_local(ALL_MEMBERS, chptr,
                                                             ":%s MODE %s %s %s %s %s %s",
-                                                            me.name, chptr->chname,
+                                                            source_p->name, chptr->chname,
                                                             lmodebuf, lpara[0], lpara[1],
                                                             lpara[2], lpara[3]);
 
@@ -1217,7 +1208,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p)
                        *mbuf = '\0';
                        sendto_channel_local(ALL_MEMBERS, chptr,
                                             ":%s MODE %s %s %s %s %s %s",
-                                            me.name, chptr->chname, lmodebuf,
+                                            source_p->name, chptr->chname, lmodebuf,
                                             lpara[0], lpara[1], lpara[2], lpara[3]);
                        mbuf = lmodebuf;
                        *mbuf++ = '-';
@@ -1233,7 +1224,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p)
                *mbuf = '\0';
                sendto_channel_local(ALL_MEMBERS, chptr,
                                     ":%s MODE %s %s %s %s %s %s",
-                                    me.name, chptr->chname, lmodebuf,
+                                    source_p->name, chptr->chname, lmodebuf,
                                     EmptyString(lpara[0]) ? "" : lpara[0],
                                     EmptyString(lpara[1]) ? "" : lpara[1],
                                     EmptyString(lpara[2]) ? "" : lpara[2],