mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-30 21:06:37 +02:00
Major changes to the way +I works
This commit is contained in:
@@ -597,7 +597,7 @@
|
||||
- Fixed some more -Wall warnings
|
||||
- ./update now checks when you specify wget if it exists, if not it tries lynx
|
||||
- Cached MOTDs are now dynamically allocated (saves alot of memory)
|
||||
- Made aClient->passwd dynamically allocated (saves 32bytes per user/server) [may need debugging]
|
||||
- Made aClient->passwd dynamically allocated (saves 32bytes per user/server)
|
||||
- Fixed a NOTICE crash bug, reported by EJ
|
||||
- Removed a excessive va_end in send.c
|
||||
- Fixed a bug when running the ircd with -h
|
||||
@@ -615,3 +615,8 @@
|
||||
- Fixed a bug where +K could be set when +i was not (reported by rapta)
|
||||
- Made it so if you set -i on a channel that is +K it sets -iK
|
||||
- Fixed whowas so it no longer reports away messages
|
||||
- Made major changes to +I (may need debugging)
|
||||
- When you set +I while on a chan it sends a PART to the rest of the channel
|
||||
- When you set -I which on a chan it sends a JOIN to the rest of the channel
|
||||
- Net/TechAdmins now receive a JOIN/PART when you JOIN/PART a channel
|
||||
- Net/TechAdmins can now see +I users in /names
|
||||
|
||||
+9
-1
@@ -2975,6 +2975,8 @@ int m_join(cptr, sptr, parc, parv)
|
||||
sendto_serv_butone_token(&me, me.name, MSG_SMO,
|
||||
TOK_SMO, "A :[+I] %s invisible joined %s",
|
||||
sptr->name, chptr->chname);
|
||||
sendto_channel_ntadmins(sptr, chptr, ":%s JOIN :%s",
|
||||
sptr->name, chptr->chname);
|
||||
}
|
||||
}
|
||||
else if (chptr->mode.mode & MODE_AUDITORIUM)
|
||||
@@ -3110,6 +3112,12 @@ int m_part(cptr, sptr, parc, parv)
|
||||
me.name, MSG_SMO, TOK_SMO,
|
||||
"A :[+I] %s invisible parted %s",
|
||||
sptr->name, chptr->chname);
|
||||
if (parc < 3)
|
||||
sendto_channel_ntadmins(sptr, chptr, ":%s PART %s",
|
||||
sptr->name, chptr->chname);
|
||||
else
|
||||
sendto_channel_ntadmins(sptr, chptr, ":%s PART %s :%s",
|
||||
sptr->name, chptr->chname, comment);
|
||||
}
|
||||
if (MyClient(sptr))
|
||||
/* awful hack .. */
|
||||
@@ -4183,7 +4191,7 @@ int m_names(cptr, sptr, parc, parv)
|
||||
acptr = cm->value.cptr;
|
||||
if (IsInvisible(acptr) && !member)
|
||||
continue;
|
||||
if (IsHiding(acptr) && acptr != sptr)
|
||||
if (IsHiding(acptr) && acptr != sptr && !(IsNetAdmin(sptr) || IsTechAdmin(sptr)))
|
||||
continue;
|
||||
if (chptr->mode.mode & MODE_AUDITORIUM)
|
||||
if (!is_chan_op(sptr, chptr)
|
||||
|
||||
+13
-10
@@ -1574,11 +1574,11 @@ int m_nick(cptr, sptr, parc, parv)
|
||||
*
|
||||
* Generate a random string for them to pong with.
|
||||
*/
|
||||
#ifndef _WIN32
|
||||
#ifndef _WIN32
|
||||
sptr->nospoof = 1+(int) (9000000.0*random()/(RAND_MAX+80000000.0));
|
||||
#else
|
||||
sptr->nospoof = 1+(int) (9000000.0*rand()/(RAND_MAX+80000000.0));
|
||||
#endif
|
||||
#else
|
||||
sptr->nospoof = 1+(int) (9000000.0*rand()/(RAND_MAX+80000000.0));
|
||||
#endif
|
||||
/*
|
||||
* If on the odd chance it comes out zero, make it something
|
||||
* non-zero.
|
||||
@@ -3474,15 +3474,15 @@ int m_mkpasswd(cptr, sptr, parc, parv)
|
||||
return 0;
|
||||
}
|
||||
srandom(time(0));
|
||||
#ifndef _WIN32
|
||||
#ifndef _WIN32
|
||||
salt[0] = saltChars[random() % 64];
|
||||
salt[1] = saltChars[random() % 64];
|
||||
salt[2] = 0;
|
||||
#else
|
||||
salt[0] = saltChars[rand() % 64];
|
||||
salt[1] = saltChars[rand() % 64];
|
||||
salt[2] = 0;
|
||||
#endif
|
||||
#else
|
||||
salt[0] = saltChars[rand() % 64];
|
||||
salt[1] = saltChars[rand() % 64];
|
||||
salt[2] = 0;
|
||||
#endif
|
||||
if ((strchr(saltChars, salt[0]) == NULL)
|
||||
|| (strchr(saltChars, salt[1]) == NULL))
|
||||
{
|
||||
@@ -4390,6 +4390,7 @@ int m_umode(cptr, sptr, parc, parv)
|
||||
sendto_serv_butone(cptr,
|
||||
":%s SMO A :[+I] Activated total invisibility mode on %s",
|
||||
me.name, sptr->name);
|
||||
sendto_channels_inviso_part(sptr);
|
||||
}
|
||||
if (!(sptr->umodes & (UMODE_HIDING)))
|
||||
{
|
||||
@@ -4401,6 +4402,8 @@ int m_umode(cptr, sptr, parc, parv)
|
||||
sendto_serv_butone(cptr,
|
||||
":%s SMO A :[+I] De-activated total invisibility mode on %s",
|
||||
me.name, sptr->name);
|
||||
sendto_channels_inviso_join(sptr);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+77
-4
@@ -87,13 +87,13 @@ static int dead_link(to, notice)
|
||||
DBufClear(&to->recvQ);
|
||||
DBufClear(&to->sendQ);
|
||||
if (!IsPerson(to) && !IsUnknown(to) && !(to->flags & FLAGS_CLOSING))
|
||||
(void)sendto_failops_whoare_opers(notice, get_client_name(to, FALSE),
|
||||
(void)sendto_failops_whoare_opers(notice, get_client_name(to, FALSE),
|
||||
#ifndef _WIN32
|
||||
strerror(errno));
|
||||
strerror(errno));
|
||||
#else
|
||||
strerror(WSAGetLastError()));
|
||||
strerror(WSAGetLastError()));
|
||||
#endif
|
||||
|
||||
|
||||
Debug((DEBUG_ERROR, notice, get_client_name(to, FALSE)));
|
||||
return -1;
|
||||
}
|
||||
@@ -1737,3 +1737,76 @@ void sendto_message_one(aClient *to, aClient *from, char *sender,
|
||||
sendto_prefix_one(to, from, ":%s %s %s :%s",
|
||||
sender, cmd, nick, msg);
|
||||
}
|
||||
|
||||
/* The following functions are for +/-I -- codemastr */
|
||||
|
||||
void sendto_channels_inviso_join(aClient *user)
|
||||
{
|
||||
Link *channels;
|
||||
Link *users;
|
||||
aClient *cptr;
|
||||
|
||||
memset((char *)sentalong, '\0', sizeof(sentalong));
|
||||
if (user->fd >= 0)
|
||||
sentalong[user->fd] = 1;
|
||||
if (user->user)
|
||||
for (channels = user->user->channel; channels; channels = channels->next)
|
||||
for (users = channels->value.chptr->members; users; users = users->next)
|
||||
{
|
||||
cptr = users->value.cptr;
|
||||
if (!MyConnect(cptr) || IsTechAdmin(cptr) || IsNetAdmin(cptr) || sentalong[cptr->fd] || cptr == user)
|
||||
continue;
|
||||
sentalong[cptr->fd]++;
|
||||
sendto_one(cptr, ":%s!%s@%s JOIN :%s", user->name, user->user->username,
|
||||
(IsHidden(user) ? user->user->virthost : user->user->realhost), channels->value.chptr->chname);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void sendto_channels_inviso_part(aClient *user)
|
||||
{
|
||||
Link *channels;
|
||||
Link *users;
|
||||
aClient *cptr;
|
||||
|
||||
memset((char *)sentalong, '\0', sizeof(sentalong));
|
||||
if (user->fd >= 0)
|
||||
sentalong[user->fd] = 1;
|
||||
if (user->user)
|
||||
for (channels = user->user->channel; channels; channels = channels->next)
|
||||
for (users = channels->value.chptr->members; users; users = users->next)
|
||||
{
|
||||
cptr = users->value.cptr;
|
||||
if (!MyConnect(cptr) || IsTechAdmin(cptr) || IsNetAdmin(cptr) || sentalong[cptr->fd] || cptr == user)
|
||||
continue;
|
||||
sentalong[cptr->fd]++;
|
||||
sendto_one(cptr, ":%s!%s@%s PART :%s", user->name, user->user->username, (IsHidden(user) ? user->user->virthost : user->user->realhost), channels->value.chptr->chname);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void sendto_channel_ntadmins(aClient *from, aChannel *chptr, char *pattern, ...)
|
||||
{
|
||||
va_list vl;
|
||||
Link *lp;
|
||||
aClient *acptr;
|
||||
int i;
|
||||
|
||||
va_start(vl, pattern);
|
||||
++sentalong_marker;
|
||||
for (lp = chptr->members; lp; lp = lp->next)
|
||||
{
|
||||
acptr = lp->value.cptr;
|
||||
if (acptr->from == from || !(IsNetAdmin(acptr) || IsTechAdmin(acptr)) || (IsDeaf(acptr) && !(sendanyways == 1)))
|
||||
continue;
|
||||
if (MyConnect(acptr)) /* (It is always a client) */
|
||||
vsendto_prefix_one(acptr, from, pattern, vl);
|
||||
else if (sentalong[(i = acptr->from->fd)] != sentalong_marker)
|
||||
{
|
||||
sentalong[i] = sentalong_marker;
|
||||
vsendto_prefix_one(acptr, from, pattern, vl);
|
||||
}
|
||||
}
|
||||
va_end(vl);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user