[IRC-Dev CVS] SF.net SVN: irc-dev:[222] ircd/trunk
Brought to you by:
zolty
|
From: <zo...@us...> - 2008-10-26 19:08:35
|
Revision: 222
http://irc-dev.svn.sourceforge.net/irc-dev/?rev=222&view=rev
Author: zolty
Date: 2008-10-26 19:08:25 +0000 (Sun, 26 Oct 2008)
Log Message:
-----------
Reescritura gestion de nicks aleatorios
Modified Paths:
--------------
ircd/trunk/ChangeLog.es
ircd/trunk/TODO.es
ircd/trunk/include/patchlevel.h
ircd/trunk/include/s_user.h
ircd/trunk/ircd/ddb_events.c
ircd/trunk/ircd/m_nick.c
ircd/trunk/ircd/m_svsnick.c
Modified: ircd/trunk/ChangeLog.es
===================================================================
--- ircd/trunk/ChangeLog.es 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/ChangeLog.es 2008-10-26 19:08:25 UTC (rev 222)
@@ -5,6 +5,17 @@
#
# Insertar los nuevos cambios al principio de esta lista de cambios.
#
+2008-01-19 Toni Garc�a <zo...@ir...> 1.0.beta13
+svsmode
+svsjoin
+svspart
+tabla j
+tabla u
+tabla f
+tabla o (pendiente)
+tabla p (pendiente)
+modos usuario ahBXc
+
2008-01-19 Toni Garc�a <zo...@ir...> 1.0.beta12
* Transicion con IRC-Hispano
* Soporte de XMODE JCEA
Modified: ircd/trunk/TODO.es
===================================================================
--- ircd/trunk/TODO.es 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/TODO.es 2008-10-26 19:08:25 UTC (rev 222)
@@ -62,7 +62,6 @@
SIN PRIORIDAD (SERVICES o UNDERNET)
--------------------------------------------------------------------------------------
- [S] Buscar una forma para cifrar IPs con un cambio de clave de cifrado incluido.
- - [S] Comando SVSMODE.
- [S] Comando SVSVHOST para cambiar la virtualhost. Estudiar alguna forma de propagarse
en el burst.
- [S] Comando /IDENTIFY y autentificacion NICK nick clave.
@@ -316,12 +315,10 @@
- Jupe de nicks por tabla j
- mensajes nicks ocupado ERR_NICKNAMEINUSE
- nicklen dinamico
-- tabla d
- SVSMODE
- SVSJOIN, SVSPART
- SNO_SERVICE
- SVSNICK
-- auto +i
- whois a un uline se muestra el servidor
- nick baneado o canal +R/+M sin +r o esta +m no puede cambiar dfe nick
- Reallen 70
Modified: ircd/trunk/include/patchlevel.h
===================================================================
--- ircd/trunk/include/patchlevel.h 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/include/patchlevel.h 2008-10-26 19:08:25 UTC (rev 222)
@@ -20,7 +20,7 @@
* $Id: patchlevel.h,v 1.60 2008-01-19 19:25:58 zolty Exp $
*
*/
-#define PATCHLEVEL "12"
+#define PATCHLEVEL "13"
#define RELEASE "1.0.beta"
Modified: ircd/trunk/include/s_user.h
===================================================================
--- ircd/trunk/include/s_user.h 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/include/s_user.h 2008-10-26 19:08:25 UTC (rev 222)
@@ -115,6 +115,7 @@
extern int verify_pass_nick(char *nick, char *cryptpass, char *pass);
#endif
extern int do_nick_name(char* nick);
+extern char *get_random_nick(struct Client* cptr);
extern int set_nick_name(struct Client* cptr, struct Client* sptr,
const char* nick, int parc, char* parv[], int flags);
extern void send_umode_out(struct Client* cptr, struct Client* sptr,
Modified: ircd/trunk/ircd/ddb_events.c
===================================================================
--- ircd/trunk/ircd/ddb_events.c 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/ircd/ddb_events.c 2008-10-26 19:08:25 UTC (rev 222)
@@ -369,34 +369,13 @@
if (nick_renames)
{
- struct Client *acptr;
- unsigned int v[2], k[2], x[2];
- char newnick[NICKLEN + 2];
+ char *newnick;
char tmp[100];
char *parv[3];
int flags = 0;
+
+ newnick = get_random_nick(cptr);
- k[0] = k[1] = x[0] = x[1] = 0;
-
- v[0] = base64toint(cli_yxx(cptr));
- v[1] = base64toint(cli_yxx(&me));
-
- acptr = cptr;
-
- do
- {
- ircd_tea(v, k, x);
- v[1] += 4096;
-
- if (x[0] >= 4294000000ul)
- continue;
-
- ircd_snprintf(0, newnick, sizeof(newnick), "Guest%.6d",
- (int)(x[0] % 1000000));
- acptr = FindUser(newnick);
- }
- while (acptr);
-
SetRenamed(flags);
parv[0] = cli_name(cptr);
Modified: ircd/trunk/ircd/m_nick.c
===================================================================
--- ircd/trunk/ircd/m_nick.c 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/ircd/m_nick.c 2008-10-26 19:08:25 UTC (rev 222)
@@ -83,6 +83,46 @@
return (ch - nick);
}
+/** Get a random nickname.
+*
+* @param[in] cptr Client's requested nickname.
+* @return A new nick.
+*/
+char *get_random_nick(struct Client* cptr)
+{
+ struct Client* acptr;
+ char* newnick;
+ char nickout[NICKLEN + 1];
+ unsigned int v[2], k[2], x[2];
+
+ k[0] = k[1] = x[0] = x[1] = 0;
+
+ v[0] = base64toint(cli_yxx(cptr));
+ v[1] = base64toint(cli_yxx(&me));
+
+ acptr = cptr;
+
+ do
+ {
+ ircd_tea(v, k, x);
+ v[1] += 4096;
+
+ if (x[0] >= 4294000000ul)
+ continue;
+
+ ircd_snprintf(0, nickout, sizeof(nickout), "Guest%.6d",
+ (int)(x[0] % 1000000));
+
+ nickout[NICKLEN] = '\0';
+ newnick = nickout;
+
+ acptr = FindUser(newnick);
+ }
+ while (acptr);
+
+ return newnick;
+}
+
/** Handle a NICK message from a local connection.
*
* \a parv has the following elements:
@@ -102,6 +142,7 @@
char* s;
const char* client_name;
int flags = 0;
+ int random_nick = 0;
#if defined(DDB)
struct Ddb *ddb;
char *p;
@@ -119,7 +160,7 @@
client_name = (*(cli_name(sptr))) ? cli_name(sptr) : "*";
#if 0
-/*TODO-ZOLTAN: Cosas de JCea, comprobar */
+/* TODO-ZOLTAN: Cosas de JCea, comprobar */
/*
* Not change nick several times BEFORE to have completed your entrance
* in the network.
@@ -162,6 +203,17 @@
#endif /* defined(DDB) */
/*
+ * Special CASE
+ * NICK *
+ * Random nickname
+ */
+ if ((strlen(parv[1]) == 1) && (*parv[1] == '*'))
+ {
+ parv[1] = get_random_nick(sptr);
+ random_nick = 1;
+ }
+
+ /*
* Don't let them send make us send back a really long string of
* garbage
*/
@@ -173,7 +225,7 @@
#if !defined(DDB)
if ((s = strchr(arg, '~')))
*s = '\0';
-#endif
+#endif
strcpy(nick, arg);
@@ -186,24 +238,19 @@
}
#if defined(DDB)
- if (strlen(nick) == 11)
- {
- if ((strcmp(nick, "Guest000000") >= 0) && (strcmp(nick, "Guest999999") <= 0))
- {
- if (FindClient(nick))
- send_reply(sptr, ERR_NICKNAMEINUSE, nick);
- else
- send_reply(sptr, ERR_ERRONEUSNICKNAME, nick);
- return 0; /* NICK message ignored */
- }
- }
-
- ddb = ddb_find_key(DDB_JUPEDB, nick);
- if (ddb)
+ if (!random_nick)
{
- send_reply(sptr, SND_EXPLICIT | ERR_NICKNAMEINUSE, "%s :Nickname is juped: %s",
- nick, ddb_content(ddb));
- return 0; /* NICK message ignored */
+ struct Ddb *regj;
+
+ for (regj = ddb_iterator_first(DDB_JUPEDB); regj; regj = ddb_iterator_next())
+ {
+ if (!match(ddb_key(regj), nick))
+ {
+ send_reply(sptr, SND_EXPLICIT | ERR_NICKNAMEINUSE, "%s :Nickname is juped: %s",
+ nick, ddb_content(regj));
+ return 0; /* NICK message ignored */
+ }
+ }
}
#endif /* defined(DDB) */
@@ -211,7 +258,7 @@
* Check if this is a LOCAL user trying to use a reserved (Juped)
* nick, if so tell him that it's a nick in use...
*/
- if (isNickJuped(nick)) {
+ if (isNickJuped(nick) & !random_nick) {
send_reply(sptr, ERR_NICKNAMEINUSE, nick);
return 0; /* NICK message ignored */
}
Modified: ircd/trunk/ircd/m_svsnick.c
===================================================================
--- ircd/trunk/ircd/m_svsnick.c 2008-10-25 20:36:42 UTC (rev 221)
+++ ircd/trunk/ircd/m_svsnick.c 2008-10-26 19:08:25 UTC (rev 222)
@@ -91,7 +91,8 @@
sendcmdto_serv(sptr, CMD_SVSNICK, cptr, "%s :%s", parv[1], parv[2]);
acptr = findNUser(parv[1]);
-
+ if (!acptr)
+ acptr = FindUser(parv[1]);
if (!acptr || !MyUser(acptr))
return 0;
@@ -114,31 +115,8 @@
return 0;
}
else
- {
- unsigned int v[2], k[2], x[2];
+ strcpy(newnick, get_random_nick(acptr));
- k[0] = k[1] = x[0] = x[1] = 0;
-
- v[0] = base64toint(cli_yxx(acptr));
- v[1] = base64toint(cli_yxx(&me));
-
- bcptr = acptr;
-
- do
- {
- ircd_tea(v, k, x);
- v[1] += 4096;
-
- if (x[0] >= 4294000000ul)
- continue;
-
- ircd_snprintf(0, newnick, sizeof(newnick), "Guest%.6d",
- (int)(x[0] % 1000000));
- bcptr = FindUser(newnick);
- }
- while (bcptr);
- }
-
sendto_opmask(0, SNO_HACK4,
"SVSNICK for %C, new nick %s. From %C", acptr, newnick, sptr);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|