Răsfoiți Sursa

Merge branch 'maint'

* maint:
  Obviously there is a member pointer here
  Use member_getuser here
  do_op: Just pass the member pointer
Bryan Drewery 10 ani în urmă
părinte
comite
9e8a8d1cb3

+ 5 - 8
src/mod/irc.mod/chan.cc

@@ -1223,7 +1223,7 @@ static void check_this_member(struct chanset_t *chan, char *nick, struct flag_re
     /* if (target_priority(chan, m, 1)) */
       add_mode(chan, '-', 'o', m->nick);
   } else if (!chan_hasop(m) && dovoice(chan) && m->user && !u_pass_match(m->user, "-") && chk_autoop(*fr, chan)) {
-    do_op(m->nick, chan, 1, 0);
+    do_op(m, chan, 1, 0);
   }
   if (dovoice(chan)) {
     if (chan_hasvoice(m) && !chan_hasop(m)) {
@@ -2722,10 +2722,8 @@ static int gotjoin(char *from, char *chname)
 //	m->flags |= STOPWHO;
         irc_log(chan, "%s returned from netsplit", m->nick);
 
-
-        if (m && !m->user) {
-          m->user = get_user_by_host(from);
-          m->tried_getuser = 1;
+        if (!m->user) {
+          member_getuser(m);
  
           if (!m->user && !m->userip[0] && doresolv(chan)) {
             if (is_dotted_ip(host)) {
@@ -2749,8 +2747,7 @@ static int gotjoin(char *from, char *chname)
           strlcpy(m->userip, uhost, sizeof(m->userip));
           simple_snprintf(m->fromip, sizeof(m->fromip), "%s!%s", m->nick, m->userip);
         }
-        m->user = get_user_by_host(from);
-        m->tried_getuser = 1;
+        member_getuser(m);
 
         if (!m->userip[0] && doresolv(chan))
           resolve_to_member(chan, nick, host);
@@ -2867,7 +2864,7 @@ static int gotjoin(char *from, char *chname)
           if (!chan_hasop(m) && 
                (op || 
                (common_checks && !u_pass_match(m->user, "-") && chk_autoop(fr, chan)))) {
-            do_op(m->nick, chan, 1, 0);
+            do_op(m, chan, 1, 0);
           }
 
           /* +v or +voice */

+ 2 - 2
src/mod/irc.mod/cmdsirc.cc

@@ -543,7 +543,7 @@ static void cmd_op(int idx, char *par)
     return;
   }
 
-  if (do_op(nick, chan, 0, 1)) {
+  if (do_op(m, chan, 0, 1)) {
     dprintf(idx, "Gave op to %s on %s.\n", nick, chan->dname);
     stats_add(u, 0, 1);
   }
@@ -1235,7 +1235,7 @@ static void cmd_mop(int idx, char *par)
         if (!chan_hasop(m) && !glob_bot(victim) && chk_op(victim, chan)) {
           found = 1;
           dprintf(idx, "Gave op to '%s' as '%s' on %s\n", m->user->handle, m->nick, chan->dname);
-          do_op(m->nick, chan, 0, 0);
+          do_op(m, chan, 0, 0);
         }
       }
     } else {

+ 2 - 2
src/mod/irc.mod/irc.cc

@@ -784,7 +784,7 @@ getin_request(char *botnick, char *code, char *par)
       else
         chan->channel.no_op = 0;
     }
-    do_op(nick, chan, 0, 1);
+    do_op(mem, chan, 0, 1);
 
     putlog(LOG_GETIN, "*", "opreq from %s/%s on %s - Opped", botnick, nick, chan->dname);
   } else if (what[0] == 'i') {
@@ -1694,7 +1694,7 @@ flush_modes()
         m->flags &= ~FULL_DELAY;
         if (chan_sentop(m)) {
           m->flags &= ~SENTOP;
-          do_op(m->nick, chan, 0, 0);
+          do_op(m, chan, 0, 0);
         }
         if (chan_sentvoice(m)) {
           m->flags &= ~SENTVOICE;

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

@@ -85,7 +85,7 @@ static void do_protect(struct chanset_t* chan, const char* reason);
 
 static int detect_offense(memberlist*, struct chanset_t *, char *);
 /* static int target_priority(struct chanset_t *, memberlist *, int); */
-static bool do_op(char *, struct chanset_t *, bool, bool);
+static bool do_op(memberlist *, struct chanset_t *, bool, bool);
 static void request_op(struct chanset_t *);
 static void request_in(struct chanset_t *);
 static bool detect_chan_flood(memberlist *m, const char* from, struct chanset_t *chan, flood_t which, const char *msg = NULL);

+ 5 - 7
src/mod/irc.mod/mode.cc

@@ -93,10 +93,8 @@ static size_t egg_strcatn(char *dst, const char *src, size_t max)
 }
 
 static bool
-do_op(char *nick, struct chanset_t *chan, bool delay, bool force)
+do_op(memberlist *m, struct chanset_t *chan, bool delay, bool force)
 {
-  memberlist *m = ismember(chan, nick);
-
   if (!me_op(chan) || !m || (!force && (chan_hasop(m) || chan_sentop(m))))
     return 0;
 
@@ -106,9 +104,9 @@ do_op(char *nick, struct chanset_t *chan, bool delay, bool force)
   }
 
   if (channel_fastop(chan) || channel_take(chan) || cookies_disabled) {
-    add_mode(chan, '+', 'o', nick);
+    add_mode(chan, '+', 'o', m->nick);
   } else if (!connect_bursting) {
-    add_cookie(chan, nick);
+    add_cookie(chan, m->nick);
   }
   return 1;
 }
@@ -682,7 +680,7 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
         )
        ) {
       /* Then we'll bless the victim */
-      do_op(mv->nick, chan, 0, 0);
+      do_op(mv, chan, 0, 0);
     }
   }
 
@@ -1315,7 +1313,7 @@ gotmode(char *from, char *msg)
         } else if (!chan_hasop(m) && !channel_nodesynch(chan)) {
           if (u && u->bot && chk_op(user, chan)) {
             putlog(LOG_MODES, ch, "Mode change by friendly non-chanop on %s!  Opping...", ch);
-            do_op(m->nick, chan, 0, 0);
+            do_op(m, chan, 0, 0);
           } else {
             putlog(LOG_MODES, ch, "Mode change by non-chanop on %s!  Reversing...", ch);
             dprintf(DP_MODE, "KICK %s %s :%sAbusing desync\n", ch, m->nick, kickprefix);

+ 6 - 2
src/mod/irc.mod/msgcmds.cc

@@ -157,12 +157,15 @@ static int msg_op(char *nick, char *host, struct userrec *u, char *par)
 
   if (u_pass_match(u, pass)) {
     if (!u_pass_match(u, "-")) {
+      memberlist *m = NULL;
+
       if (par[0]) {
         chan = findchan_by_dname(par);
         if (chan && channel_active(chan)) {
+          m = ismember(chan, nick);
           get_user_flagrec(u, &fr, par, chan);
           if (chk_op(fr, chan)) {
-            if (do_op(nick, chan, 0, 1)) {
+            if (do_op(m, chan, 0, 1)) {
               stats_add(u, 0, 1);
               putlog(LOG_CMDS, "*", "(%s!%s) !%s! OP %s", nick, host, u->handle, par);
               if (manop_warn && chan->manop) {
@@ -176,9 +179,10 @@ static int msg_op(char *nick, char *host, struct userrec *u, char *par)
       } else {
         int stats = 0;
         for (chan = chanset; chan; chan = chan->next) {
+          m = ismember(chan, nick);
           get_user_flagrec(u, &fr, chan->dname, chan);
           if (chk_op(fr, chan)) {
-            if (do_op(nick, chan, 0, 1)) {
+            if (do_op(m, chan, 0, 1)) {
               stats++;
               if (manop_warn && chan->manop) {
                 msg = bd::String::printf("%s is currently set to punish for manual op.", chan->dname);