[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. |