Просмотр исходного кода

* Use hops, not servername for getops

svn: 1339
Bryan Drewery 21 лет назад
Родитель
Сommit
011b9e0563
3 измененных файлов с 9 добавлено и 29 удалено
  1. 0 1
      src/chan.h
  2. 6 21
      src/mod/irc.mod/chan.c
  3. 3 7
      src/mod/irc.mod/irc.c

+ 0 - 1
src/chan.h

@@ -20,7 +20,6 @@ typedef struct memstruct {
   unsigned short flags;
   char nick[NICKLEN];
   char userhost[UHOSTLEN];
-  char server[SERVLEN];
 } memberlist;
 
 #define CHANMETA "#&!+"

+ 6 - 21
src/mod/irc.mod/chan.c

@@ -1391,7 +1391,7 @@ static void memberlist_reposition(struct chanset_t *chan, memberlist *target) {
 }
 
 
-static int got352or4(struct chanset_t *chan, char *user, char *host, char *server, char *nick, char *flags, int hops)
+static int got352or4(struct chanset_t *chan, char *user, char *host, char *nick, char *flags, int hops)
 {
   struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0 };
   char userhost[UHOSTLEN] = "";
@@ -1408,23 +1408,8 @@ static int got352or4(struct chanset_t *chan, char *user, char *host, char *serve
   }
   strcpy(m->nick, nick);	/* Store the nick in list */
 
-  if (server) {
-    strncpyz(m->server, server, SERVLEN);
-    /* Propagate server to other channel memlists... might save us a WHO #chan */
-    for (ch = chanset; ch; ch = ch->next) {
-      if (ch != chan) {
-        for (ml = ch->channel.member; ml && ml->nick[0]; ml = ml->next) {
-          if (!strcmp(ml->nick, m->nick)) {
-            strcpy(ml->server, m->server);
-            break;
-          }
-        }
-      }
-    }
-  } else
-    m->server[0] = 0;
-
   m->hops = hops;
+
   /* Propagate hops to other channel memlists... might save us a WHO #chan */
   for (ch = chanset; ch; ch = ch->next) {
     if (ch != chan) {
@@ -1514,16 +1499,16 @@ static int got352(char *from, char *msg)
   chname = newsplit(&msg);	/* Grab the channel */
   chan = findchan(chname);	/* See if I'm on channel */
   if (chan) {			/* Am I? */
-    char *nick = NULL, *user = NULL, *host = NULL, *flags = NULL, *server = NULL, *hops = NULL;
+    char *nick = NULL, *user = NULL, *host = NULL, *flags = NULL, *hops = NULL;
 
     user = newsplit(&msg);	/* Grab the user */
     host = newsplit(&msg);	/* Grab the host */
-    server = newsplit(&msg);    /* And the server */
+    newsplit(&msg);		/* skip the server */
     nick = newsplit(&msg);	/* Grab the nick */
     flags = newsplit(&msg);	/* Grab the flags */
     hops = newsplit(&msg);	/* grab server hops */
     hops++;
-    got352or4(chan, user, host, server, nick, flags, atoi(hops));
+    got352or4(chan, user, host, nick, flags, atoi(hops));
   }
   return 0;
 }
@@ -1547,7 +1532,7 @@ static int got354(char *from, char *msg)
 	flags = newsplit(&msg);	/* Grab the flags */
         hops = newsplit(&msg);  /* yay for hops, does iru even have hops?? */
         hops++;
-	got352or4(chan, user, host, NULL, nick, flags, atoi(hops));
+	got352or4(chan, user, host, nick, flags, atoi(hops));
       }
     }
   }

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

@@ -519,7 +519,6 @@ request_op(struct chanset_t *chan)
   int cnt = OP_BOTS, i2;
   memberlist *ml = NULL;
   memberlist *botops[MAX_BOTS];
-  char myserv[SERVLEN] = "";
   struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0 };
 
   for (i = 0, ml = chan->channel.member; (i < MAX_BOTS) && ml && ml->nick[0]; ml = ml->next) {
@@ -531,9 +530,6 @@ request_op(struct chanset_t *chan)
       if (chk_op(fr, chan))
         botops[i++] = ml;
     }
-    if (!strcmp(ml->nick, botname))
-      if (ml->server)
-        strcpy(myserv, ml->server);
   }
   if (!i) {
     if (channel_active(chan) && !channel_pending(chan))
@@ -546,8 +542,9 @@ request_op(struct chanset_t *chan)
   /* first scan for bots on my server, ask first found for ops */
   sprintf(s, "gi o %s %s", chan->dname, botname);
 
+  /* look for bots 0-1 hops away */
   for (i2 = 0; i2 < i; i2++) {
-    if (botops[i2]->server && (!strcmp(botops[i2]->server, myserv))) {
+    if (botops[i2]->hops < 2) {
       putbot(botops[i2]->user->handle, s);
       chan->opreqtime[first] = n;
       if (l[0]) {
@@ -1071,8 +1068,7 @@ static void
 check_servers(struct chanset_t *chan)
 {
   for (memberlist *m = chan->channel.member; m && m->nick[0]; m = m->next) {
-    if (!match_my_nick(m->nick) && chan_hasop(m) &&
-        (!m->server || (m->server && !m->server[0]) || (m->hops == -1))) {
+    if (!match_my_nick(m->nick) && chan_hasop(m) && (m->hops == -1)) {
       putlog(LOG_DEBUG, "*", "Updating WHO for '%s' because '%s' is missing data.", chan->dname, m->nick);
       dprintf(DP_HELP, "WHO %s\n", chan->name);
       break;                    /* lets just do one chan at a time to save from flooding */