1
0
Эх сурвалжийг харах

* +private fixes

svn: 240
Bryan Drewery 22 жил өмнө
parent
commit
a6a11717de

+ 1 - 1
src/cmds.c

@@ -2128,7 +2128,7 @@ static void cmd_chattr(struct userrec *u, int idx, char *par)
       nfree(tmpchg);
     return;
   }
-    if (chan && channel_private(chan) && !glob_owner(user) && !chan_master(user)) {
+    if (chan && private(user, chan, PRIV_OP)) {
       dprintf(idx, STR("You do not have access to change flags for %s\n"), chan->dname);
       if (tmpchg)
         nfree(tmpchg);

+ 1 - 2
src/mod/channels.mod/channels.c

@@ -615,8 +615,7 @@ static void channels_report(int idx, int details)
   for (chan = chanset; chan; chan = chan->next) {
     if (idx != DP_STDOUT)
       get_user_flagrec(dcc[idx].user, &fr, chan->dname);
-    if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-        ((idx == DP_STDOUT) || glob_master(fr) || chan_master(fr))) {
+    if (!private(fr, chan, PRIV_OP) && ((idx == DP_STDOUT) || glob_master(fr) || chan_master(fr))) {
       s[0] = 0;
       if (channel_bitch(chan))
 	strcat(s, "bitch, ");

+ 3 - 13
src/mod/irc.mod/irc.c

@@ -1510,8 +1510,8 @@ static void irc_report(int idx, int details)
   for (chan = chanset; chan; chan = chan->next) {
     if (idx != DP_STDOUT)
       get_user_flagrec(dcc[idx].user, &fr, chan->dname);
-
-    if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
+     
+    if (!private(fr, chan, PRIV_OP) &&
         (idx == DP_STDOUT || glob_master(fr) || chan_master(fr))) {
       p = NULL;
       if (!channel_inactive(chan)) {
@@ -1655,16 +1655,6 @@ static cmd_t irc_bot[] = {
   {0, 0, 0, 0}
 };
 
-static void channel_check_locked(struct chanset_t * chan) {
-  /* Kick one random nonop */
-  if (!chan) return;
-  if (!me_op(chan))
-    return;
-  if (!strchr(getchanmode(chan), 'i'))
-    dprintf(DP_MODE, STR("MODE %s +i\n"), chan->name);
-  priority_do(chan, 0, PRIO_KICK);
-}
-
 
 static void getin_3secondly()
 {
@@ -1684,7 +1674,7 @@ static void irc_10secondly() {
 
   for (ch=chanset;ch;ch=ch->next)
     if (channel_closed(ch))
-      channel_check_locked(ch);
+      enforce_closed(ch);
 }
 
 EXPORT_SCOPE char *irc_start();

+ 0 - 1
src/mod/irc.mod/irc.h

@@ -50,7 +50,6 @@ static void flush_mode(struct chanset_t *, int);
 				       (chan)->invites, global_invites, 'I')
 
 static int target_priority(struct chanset_t *, memberlist *, int);
-static void channel_check_locked(struct chanset_t *);
 static void request_op(struct chanset_t *);
 static void request_in(struct chanset_t *);
 static void reset_chan_info(struct chanset_t *);

+ 5 - 8
src/mod/irc.mod/mode.c

@@ -500,13 +500,10 @@ Context;
     /* and it isn't a server op */
 	   nick[0]) {
     /* Channis is +bitch, and the opper isn't a global master or a bot */
-
-    if ((channel_bitch(chan) || channel_closed(chan) || channel_take(chan)) && 
-      ((!channel_private(chan) && !glob_op(victim) && !chan_op(victim)) || 
-      (channel_private(chan) && !glob_bot(victim) && !chan_op(victim) && !glob_owner(victim)))) {
-      if (target_priority(chan, m, 1))
-        add_mode(chan, '-', 'o', who);
-    } else if (chan_deop(victim) || (glob_deop(victim) && !chan_op(victim))) {
+    /* deop if they are +d or it is +bitch */
+    if (chk_deop(victim, chan) ||
+        (channel_bitch(chan) && !chk_op(victim, chan))		/* chk_op covers +private */
+       ) {
       if (target_priority(chan, m, 1))
         add_mode(chan, '-', 'o', who);
     } else if (reversing) {
@@ -517,7 +514,7 @@ Context;
   if (!nick[0] && me_op(chan) && !match_my_nick(who)) {
 
 Context;
-    if (chan_deop(victim) || (glob_deop(victim) && !chan_op(victim))) {
+    if (chk_deop(victim, chan)) {
       m->flags |= FAKEOP;
       add_mode(chan, '-', 'o', who);
     } else if (snm > 0 && snm < 7 && !((0 || 0 ||

+ 15 - 33
src/mod/irc.mod/msgcmds.c

@@ -260,8 +260,7 @@ static int msg_op(char *nick, char *host, struct userrec *u, char *par)
         chan = findchan_by_dname(par);
         if (chan && channel_active(chan)) {
           get_user_flagrec(u, &fr, par);
-          if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-             (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+          if (chk_op(fr, chan)) {
             stats_add(u, 0, 1);
             do_op(nick, chan, 1);
           }
@@ -272,8 +271,7 @@ static int msg_op(char *nick, char *host, struct userrec *u, char *par)
       } else {
         for (chan = chanset; chan; chan = chan->next) {
           get_user_flagrec(u, &fr, chan->dname);
-          if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-             (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+          if (chk_op(fr, chan)) {
             stats_add(u, 0, 1);
             do_op(nick, chan, 1);
           }
@@ -304,8 +302,7 @@ static int msg_voice(char *nick, char *host, struct userrec *u, char *par)
 	chan = findchan_by_dname(par);
 	if (chan && channel_active(chan)) {
 	  get_user_flagrec(u, &fr, par);
-	  if ((!channel_private(chan) || (channel_private(chan) && (chan_voice(fr) || glob_owner(fr)))) &&
-              (chan_voice(fr) || glob_voice(fr) || chan_op(fr) || glob_op(fr))) {
+          if (chk_voice(fr, chan)) {
 	    add_mode(chan, '+', 'v', nick);
 	    putlog(LOG_CMDS, "*", "(%s!%s) !%s! VOICE %s",
 		   nick, host, u->handle, par);
@@ -317,8 +314,7 @@ static int msg_voice(char *nick, char *host, struct userrec *u, char *par)
       } else {
 	for (chan = chanset; chan; chan = chan->next) {
 	  get_user_flagrec(u, &fr, chan->dname);
-	  if ((!channel_private(chan) || (channel_private(chan) && (chan_voice(fr) || glob_owner(fr)))) &&
-              (chan_voice(fr) || glob_voice(fr) || chan_op(fr) || glob_op(fr)))
+          if (chk_voice(fr, chan)) {
 	    add_mode(chan, '+', 'v', nick);
 	}
 	putlog(LOG_CMDS, "*", "(%s!%s) !%s! VOICE", nick, host, u->handle);
@@ -413,9 +409,7 @@ static int msg_invite(char *nick, char *host, struct userrec *u, char *par)
     if (par[0] == '*') {
       for (chan = chanset; chan; chan = chan->next) {
 	get_user_flagrec(u, &fr, chan->dname);
-	if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-            (chan_op(fr) || (glob_op(fr) && !chan_deop(fr))) &&
-	    (chan->channel.mode & CHANINV))
+        if (chk_op(fr, chan) && (chan->channel.mode & CHANINV)) {
 	  dprintf(DP_SERVER, "INVITE %s %s\n", nick, chan->name);
       }
       putlog(LOG_CMDS, "*", "(%s!%s) !%s! INVITE ALL", nick, host,
@@ -433,8 +427,7 @@ static int msg_invite(char *nick, char *host, struct userrec *u, char *par)
     }
     /* We need to check access here also (dw 991002) */
     get_user_flagrec(u, &fr, par);
-    if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-       (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) { 
+    if (chk_op(fr, chan)) {
       dprintf(DP_SERVER, "INVITE %s %s\n", nick, chan->name);
       putlog(LOG_CMDS, "*", "(%s!%s) !%s! INVITE %s", nick, host,
 	     u->handle, par);
@@ -530,8 +523,7 @@ static int msgc_op(char *nick, char *host, struct userrec *u, char *par, char *c
       chan = findchan_by_dname(par);
     if (chan && channel_active(chan)) {
       get_user_flagrec(u, &fr, chan->dname);
-      if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-         (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+      if (chk_op(fr, chan)) {
         stats_add(u, 0, 1);
         do_op(nick, chan, force);
       }
@@ -541,8 +533,7 @@ static int msgc_op(char *nick, char *host, struct userrec *u, char *par, char *c
     for (chan = chanset; chan; chan = chan->next) {
       int op = 0;
       get_user_flagrec(u, &fr, chan->dname);
-      if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-         (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+      if (chk_op(fr, chan)) {
         if (!op) 
           stats_add(u, 0, 1);
         op = 1;
@@ -587,8 +578,7 @@ static int msgc_voice(char *nick, char *host, struct userrec *u, char *par, char
       chan = findchan_by_dname(par);
     if (chan && channel_active(chan)) {
       get_user_flagrec(u, &fr, chan->dname);
-      if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-         (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+      if (chk_voice(fr, chan)) {
         add_mode(chan, '+', 'v', nick);
       }
       return 1;
@@ -596,8 +586,7 @@ static int msgc_voice(char *nick, char *host, struct userrec *u, char *par, char
   } else {
     for (chan = chanset; chan; chan = chan->next) {
       get_user_flagrec(u, &fr, chan->dname);
-      if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-         (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+      if (chk_voice(fr, chan)) {
         add_mode(chan, '+', 'v', nick);
       }
     }
@@ -618,8 +607,9 @@ static int msgc_channels(char *nick, char *host, struct userrec *u, char *par, c
   list[0] = 0;
   for (chan = chanset; chan; chan = chan->next) {
     get_user_flagrec(u, &fr, chan->dname);
-    if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-       (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+    if (chk_op(fr, chan)) {
+      if (me_op(chan)) 
+        strcat(list, "@");
       strcat(list, chan->dname);
       strcat(list, " ");
     }
@@ -652,13 +642,7 @@ static int msgc_getkey(char *nick, char *host, struct userrec *u, char *par, cha
   chan = findchan_by_dname(par);
   if (chan && channel_active(chan) && !channel_pending(chan)) {
     get_user_flagrec(u, &fr, chan->dname);
-/*    if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-       (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) { */
     if (chk_op(fr, chan)) {
-/*      char buf[512];
-      if (chan->key_prot[0])
-        snprintf(buf, sizeof buf, "Enforcing +k %s", chan->key_prot); */
-
       if (chan->channel.key[0]) {
         dprintf(DP_HELP, "NOTICE %s :Key for %s is: %s\n", nick, chan->dname, chan->channel.key);
       } else {
@@ -707,8 +691,7 @@ static int msgc_invite(char *nick, char *host, struct userrec *u, char *par, cha
     if (chan && channel_active(chan) && !ismember(chan, nick)) {
       if ((!(chan->channel.mode & CHANINV) && force) || (chan->channel.mode & CHANINV)) {
         get_user_flagrec(u, &fr, chan->dname);
-        if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-           (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+        if (chk_op(fr, chan)) {
           dprintf(DP_SERVER, "INVITE %s %s\n", nick, chan->name);
         }
         return 1;
@@ -719,8 +702,7 @@ static int msgc_invite(char *nick, char *host, struct userrec *u, char *par, cha
       if (channel_active(chan) && !ismember(chan, nick)) {
         if ((!(chan->channel.mode & CHANINV) && force) || (chan->channel.mode & CHANINV)) {
           get_user_flagrec(u, &fr, chan->dname);
-          if ((!channel_private(chan) || (channel_private(chan) && (chan_op(fr) || glob_owner(fr)))) &&
-             (chan_op(fr) || (glob_op(fr) && !chan_deop(fr)))) {
+          if (chk_op(fr, chan)) {
             dprintf(DP_SERVER, "INVITE %s %s\n", nick, chan->name);
           }
         }