#endif
/* Make callbacks for nick changes. Do this with new nick in
- * place because that is slightly more useful.
+ * place because that is slightly more useful. Stop if the user
+ * gets killed by any of the hooks, so that later hooks do not get
+ * confused by the user having disappeared.
*/
- for (nn=0; nn<ncf2_used; nn++)
+ for (nn=0; (nn<ncf2_used) && !user->dead; nn++)
ncf2_list[nn](user, old_nick);
user->timestamp = now;
if (IsLocal(user) && !no_announce)
}
void
-call_account_func(struct userNode *user, const char *stamp)
+call_account_func(struct userNode *user, const char *stamp, unsigned long timestamp, unsigned long serial)
{
/* We've received an account stamp for a user; notify
NickServ, which registers the sole account_func
P10 Protocol violation if (user->modes & FLAGS_STAMPED) here.
*/
if (account_func)
- account_func(user, stamp);
+ account_func(user, stamp, timestamp, serial);
#ifdef WITH_PROTOCOL_P10
/* Mark the user so we don't stamp it again. */
}
void
-StampUser(struct userNode *user, const char *stamp)
+StampUser(struct userNode *user, const char *stamp, unsigned long timestamp, unsigned long serial)
{
#ifdef WITH_PROTOCOL_P10
/* The P10 protocol says we can't stamp users who already
return;
#endif
- irc_account(user, stamp);
+ irc_account(user, stamp, timestamp, serial);
user->modes |= FLAGS_STAMPED;
}
mNode->channel = channel;
mNode->user = user;
mNode->modes = 0;
- mNode->oplevel = -1;
+ mNode->oplevel = MAXOPLEVEL;
mNode->idle_since = now;
/* Add modeNode to channel and to user.
&& !(channel->modes & MODE_APASS))
mNode->modes |= MODE_CHANOP;
- for (n=0; n<jf_used; n++) {
+ if (IsLocal(user)) {
+ irc_join(user, channel);
+ }
+
+ for (n=0; (n<jf_used) && !user->dead; n++) {
/* Callbacks return true if they kick or kill the user,
* and we can continue without removing mNode. */
if (jf_list[n](mNode))
return NULL;
}
- if (IsLocal(user))
- irc_join(user, channel);
-
return mNode;
}
irc_topic(user, channel, topic);
} else {
for (n=0; n<tf_used; n++)
+ /* A topic change handler can return non-zero to indicate
+ * that it has reverted the topic change, and that further
+ * hooks should not be called.
+ */
if (tf_list[n](user, channel, old_topic))
break;
}