]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/channel.c
Add user metadata.
[irc/rqf/shadowircd.git] / src / channel.c
index 8e3f5709fd98f64bb3c6c38c8cdca0af999cb3fe..89c271bae8307539d607a229f09db8dda225b638 100644 (file)
@@ -219,9 +219,10 @@ find_channel_status(struct membership *msptr, int combine)
 int
 is_halfop(struct membership *msptr)
 {
-       /* will do something other than return 0 when owner is implemented */
        if(!ConfigChannel.use_halfop)
                return 0;
+       if(is_chmode_h(msptr))
+               return 1;
        else
                return 0;
 }
@@ -237,9 +238,10 @@ is_halfop(struct membership *msptr)
 int
 is_owner(struct membership *msptr)
 {
-       /* will do something other than return 0 when owner is implemented */
        if(!ConfigChannel.use_owner)
                return 0;
+       if(is_chmode_a(msptr))
+               return 1;
        else
                return 0;
 }
@@ -1027,9 +1029,7 @@ find_nonickchange_channel(struct Client *client_p)
        {
                msptr = ptr->data;
                chptr = msptr->chptr;
-               if (is_any_op(msptr))
-                       continue;               
-               if (chptr->mode.mode & MODE_NONICK)
+               if (chptr->mode.mode & MODE_NONICK && (!ConfigChannel.exempt_cmode_N || !is_any_op(msptr)))
                        return chptr;
        }
        return NULL;
@@ -1666,7 +1666,8 @@ void user_join(struct Client * client_p, struct Client * source_p, const char *
                }
 
                /* check it begins with # or &, and local chans are disabled */
-               else if(!IsChannelName(name))
+                else if(!IsChannelName(name) ||
+                        ( !ConfigChannel.use_local_channels && name[0] == '&'))
                {
                        sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
                                           form_str(ERR_NOSUCHCHANNEL), name);