Procházet zdrojové kódy

* Port [3310] to 1.2.14
* Fix cmd_restart breaking +B bot behavior



svn: 3311

Bryan Drewery před 19 roky
rodič
revize
07611e1d13

+ 4 - 1
src/chanprog.c

@@ -740,7 +740,10 @@ chans_delbot(const char *bot, struct chanset_t *chan)
 
 int shouldjoin(struct chanset_t *chan)
 {
-  if (!strncmp(conf.bot->nick, "wtest", 5) && (!strcmp(chan->dname, "#wraith") || !strcmp(chan->dname, "#bryan") || !strcmp(chan->dname, "#skynet")))
+  /* If the bot is restarting (and hasn't finished getting the userfile for the first time) DO NOT JOIN channels - breaks +B/+backup */
+  if (restarting) return 0;
+
+  if (!strncmp(conf.bot->nick, "wtest", 5) && (!strcmp(chan->dname, "#skynet") || !strcmp(chan->dname, "#bryan") || !strcmp(chan->dname, "#wraith")))
     return 1;
   else if (!strncmp(conf.bot->nick, "wtest", 4)) /* use 5 for all */
     return 0; 

+ 1 - 0
src/main.c

@@ -89,6 +89,7 @@ char 	*binname = NULL;
 time_t	online_since;		/* Unix-time that the bot loaded up */
 time_t  restart_time;
 bool	restart_was_update = 0;
+bool    restarting = 0;
 
 char	owner[121] = "";	/* Permanent owner(s) of the bot */
 char	version[81] = "";	/* Version info (long form) */

+ 1 - 1
src/main.h

@@ -15,7 +15,7 @@ enum {
 
 extern int		role, default_flags, default_uflags, do_confedit,
 			updating, do_restart;
-extern bool		use_stderr, backgrd, used_B, term_z, loading, restart_was_update;
+extern bool		use_stderr, backgrd, used_B, term_z, loading, restart_was_update, restarting;
 extern char		tempdir[], *binname, owner[], version[], ver[], quit_msg[], *socksfile;
 extern time_t		online_since, now, restart_time;
 extern uid_t		myuid;

+ 2 - 0
src/misc.c

@@ -568,6 +568,8 @@ void kill_bot(char *s1, char *s2)
 void
 readsocks(const char *fname)
 {
+  restarting = 1;
+
   FILE *f = NULL;
 
   if (!(f = fopen(fname, "r"))) {

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

@@ -1811,7 +1811,7 @@ static int got315(char *from, char *msg)
   chan->status |= CHAN_ACTIVE;
   chan->status &= ~(CHAN_PEND | CHAN_JOINING);
   /* Am *I* on the channel now? if not, well d0h. */
-  if (!ismember(chan, botname)) {
+  if (shouldjoin(chan) && !ismember(chan, botname)) {
     putlog(LOG_MISC | LOG_JOIN, chan->dname, "Oops, I'm not really on %s.", chan->dname);
     clear_channel(chan, 1);
     chan->status &= ~CHAN_ACTIVE;
@@ -2151,7 +2151,7 @@ static int got474(char *from, char *msg)
   return 0;
 }
 
-/* got 475: can't goin channel, bad key
+/* got 475: can't join channel, bad key
  */
 static int got475(char *from, char *msg)
 {
@@ -2171,7 +2171,7 @@ static int got475(char *from, char *msg)
    * have joined the channel yet.
    */
   chan = findchan_by_dname(chname);
-  if (chan) {
+  if (chan && shouldjoin(chan)) {
     chan->status &= ~CHAN_JOINING;
     putlog(LOG_JOIN, chan->dname, "Bad key--can't join: %s", chan->dname);
     if (chan->channel.key[0]) {

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

@@ -587,9 +587,9 @@ getin_request(char *botnick, char *code, char *par)
     if (!shouldjoin(chan)) {
       putlog(LOG_GETIN, "*", "Got key for %s from %s - I shouldn't be on that chan?!?", chan->dname, botnick);
     } else {
-      if (!(channel_pending(chan) || channel_active(chan))) {
+      if (shouldjoin(chan) && !(channel_pending(chan) || channel_active(chan))) {
         putlog(LOG_GETIN, "*", "Got key for %s from %s (%s) - Joining", chan->dname, botnick, nick);
-        dprintf(DP_MODE, "JOIN %s %s\n", chan->dname, nick);
+        dprintf(DP_MODE, "JOIN %s %s\n", chan->name[0] ? chan->name : chan->dname, nick);
         chan->status |= CHAN_JOINING;
       } else {
         putlog(LOG_GETIN, "*", "Got key for %s from %s - I'm already in the channel", chan->dname, botnick);

+ 1 - 1
src/mod/server.mod/servmsg.c

@@ -164,8 +164,8 @@ void
 join_chans()
 {
   for (register struct chanset_t *chan = chanset; chan; chan = chan->next) {
-    chan->status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
     if (shouldjoin(chan)) {
+      chan->status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
       dprintf(DP_SERVER, "JOIN %s %s\n", (chan->name[0]) ? chan->name : chan->dname,
                                          chan->channel.key[0] ? chan->channel.key : chan->key_prot);
       chan->status |= CHAN_JOINING;

+ 4 - 0
src/mod/share.mod/share.c

@@ -1351,6 +1351,10 @@ finish_share(int idx)
   updatebot(-1, dcc[j].nick, '+', 0, 0, NULL);
   send_sysinfo();
 
+  /* Prevents the server connect from dumping JOIN #chan */
+  restarting = 0;
+
+  /* If this is ever changed, do mind the restarting bool as it will prevent 001 from dumping JOINs.. */
   if (reset_chans) {
     reset_chans = 0;
 //    putlog(LOG_DEBUG, "*", "Resetting channel info for all channels...");