? ../ircu2.10.06/patch.dbh13 ? ../ircu2.10.06/patch.xmode2 ? ../ircu2.10.06/patch.dbh14 ? ../ircu2.10.06/patch.db31 ? ../ircu2.10.06/patch.db32 ? ../ircu2.10.06/patch.indent Index: ../ircu2.10.06/Makefile.in =================================================================== RCS file: /cvsroot/ircd/Makefile.in,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** ../ircu2.10.06/Makefile.in 1999/10/08 10:33:10 1.2 --- ../ircu2.10.06/Makefile.in 1999/10/15 08:24:24 1.3 *************** *** 119,124 **** # Indent all headers and source files: indent: ! @test "`indent --version`" = "GNU indent 2.1.0" || \ ! (echo "You need GNU indent 2.1.0; See doc/readme.indent" && exit -1); VERSION_CONTROL=none indent include/*.h ircd/*.c --- 119,124 ---- # Indent all headers and source files: indent: ! @test "`indent --version`" = "GNU indent 2.2.3" || \ ! (echo "You need GNU indent 2.2.3; See doc/readme.indent" && exit -1); VERSION_CONTROL=none indent include/*.h ircd/*.c Index: ../ircu2.10.06/include/numeric.h =================================================================== RCS file: /cvsroot/ircd/include/numeric.h,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** ../ircu2.10.06/include/numeric.h 1999/10/08 10:46:43 1.8 --- ../ircu2.10.06/include/numeric.h 1999/10/15 08:24:24 1.9 *************** *** 103,109 **** #define ERR_BANNEDFROMCHAN 474 #define ERR_BADCHANNELKEY 475 #define ERR_BADCHANMASK 476 /* Undernet extension */ ! #define ERR_NEEDREGGEDNICK 477 /* DalNet Extention */ #define ERR_BANLISTFULL 478 /* Undernet extension */ /* #define ERR_BADCHANNAME 479 EFNet extension */ --- 103,109 ---- #define ERR_BANNEDFROMCHAN 474 #define ERR_BADCHANNELKEY 475 #define ERR_BADCHANMASK 476 /* Undernet extension */ ! #define ERR_NEEDREGGEDNICK 477 /* DalNet Extention */ #define ERR_BANLISTFULL 478 /* Undernet extension */ /* #define ERR_BADCHANNAME 479 EFNet extension */ *************** *** 138,145 **** #define RPL_NOWAWAY 306 #if defined(DB_HISPANO) || defined(DB_ESNET) ! #define RPL_WHOISREGNICK 307 /* Hispano extension */ ! #define RPL_WHOISHELPOP 310 /* Hispano extension */ #else #define RPL_USERIP 307 /* Undernet extension */ #endif --- 138,145 ---- #define RPL_NOWAWAY 306 #if defined(DB_HISPANO) || defined(DB_ESNET) ! #define RPL_WHOISREGNICK 307 /* Hispano extension */ ! #define RPL_WHOISHELPOP 310 /* Hispano extension */ #else #define RPL_USERIP 307 /* Undernet extension */ #endif Index: ../ircu2.10.06/include/s_bsd.h =================================================================== RCS file: /cvsroot/ircd/include/s_bsd.h,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** ../ircu2.10.06/include/s_bsd.h 1999/10/08 10:46:43 1.7 --- ../ircu2.10.06/include/s_bsd.h 1999/10/15 08:24:24 1.8 *************** *** 185,197 **** #if defined(DB_HISPANO) || defined(DB_ESNET) /* Bits de los modos hispano */ ! #define HMODE_NICKREGISTERED 0x00000001 /* Nick is registered (HISPANO/ESNET) */ ! #define HMODE_SOCKS 0x00000004 /* se esta chekeando socks */ ! #define HMODE_WRSOCKS 0x00000008 /* se tiene ke escribir en socks */ ! #define HMODE_HELPOP 0x00000010 /* Es un oper con modo +h */ ! #define HMODE_SERVICESBOT 0x00000020 /* Es un bot de canales */ ! #define HMODE_HIDDEN 0x00000040 /* Ip Oculta */ ! #define HMODE_HIDDENVIEWER 0x00000080 /* Ip Oculta */ /* Modos hispano a propagar */ #define SEND_HMODES \ --- 185,197 ---- #if defined(DB_HISPANO) || defined(DB_ESNET) /* Bits de los modos hispano */ ! #define HMODE_NICKREGISTERED 0x00000001 /* Nick is registered (HISPANO/ESNET) */ ! #define HMODE_SOCKS 0x00000004 /* se esta chekeando socks */ ! #define HMODE_WRSOCKS 0x00000008 /* se tiene ke escribir en socks */ ! #define HMODE_HELPOP 0x00000010 /* Es un oper con modo +h */ ! #define HMODE_SERVICESBOT 0x00000020 /* Es un bot de canales */ ! #define HMODE_HIDDEN 0x00000040 /* Ip Oculta */ ! #define HMODE_HIDDENVIEWER 0x00000080 /* Ip Oculta */ /* Modos hispano a propagar */ #define SEND_HMODES \ Index: ../ircu2.10.06/include/s_serv.h =================================================================== RCS file: /cvsroot/ircd/include/s_serv.h,v retrieving revision 1.5 retrieving revision 1.6 diff -c -r1.5 -r1.6 *** ../ircu2.10.06/include/s_serv.h 1999/10/13 21:42:15 1.5 --- ../ircu2.10.06/include/s_serv.h 1999/10/15 08:24:24 1.6 *************** *** 72,85 **** #endif #if defined(DB_ESNET) || defined(DB_HISPANO) ! extern int tabla_residente [DBH_MAX_TABLA]; ! extern unsigned long tabla_cuantos [DBH_MAX_TABLA]; ! extern struct dbh_reg *tabla_datos [DBH_MAX_TABLA][DBH_HASH_SIZE]; ! extern unsigned long tabla_version [DBH_MAX_TABLA]; ! extern unsigned long tabla_serie [DBH_MAX_TABLA]; ! extern void tea(unsigned long v[],unsigned long k[],unsigned long x[]); ! extern struct dbh_reg * dbh_buscar_registro_local(char tabla, char *clave); int dbh_es_miembro(char tabla, char *clave, char *subcadena); #endif --- 72,85 ---- #endif #if defined(DB_ESNET) || defined(DB_HISPANO) ! extern int tabla_residente[DBH_MAX_TABLA]; ! extern unsigned long tabla_cuantos[DBH_MAX_TABLA]; ! extern struct dbh_reg *tabla_datos[DBH_MAX_TABLA][DBH_HASH_SIZE]; ! extern unsigned long tabla_version[DBH_MAX_TABLA]; ! extern unsigned long tabla_serie[DBH_MAX_TABLA]; ! extern void tea(unsigned long v[], unsigned long k[], unsigned long x[]); ! extern struct dbh_reg *dbh_buscar_registro_local(char tabla, char *clave); int dbh_es_miembro(char tabla, char *clave, char *subcadena); #endif Index: ../ircu2.10.06/include/s_socks.h =================================================================== RCS file: /cvsroot/ircd/include/s_socks.h,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** ../ircu2.10.06/include/s_socks.h 1999/10/08 10:44:40 1.1 --- ../ircu2.10.06/include/s_socks.h 1999/10/15 08:24:24 1.2 *************** *** 5,14 **** * SOCKS4 / SOCKS4A pks */ struct socks4 { ! unsigned char vn; ! unsigned char cd; ! unsigned short dstport; ! unsigned int dstip; }; --- 5,14 ---- * SOCKS4 / SOCKS4A pks */ struct socks4 { ! unsigned char vn; ! unsigned char cd; ! unsigned short dstport; ! unsigned int dstip; }; Index: ../ircu2.10.06/include/s_user.h =================================================================== RCS file: /cvsroot/ircd/include/s_user.h,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** ../ircu2.10.06/include/s_user.h 1999/10/08 15:14:14 1.8 --- ../ircu2.10.06/include/s_user.h 1999/10/15 08:24:24 1.9 *************** *** 59,65 **** extern int m_ison(aClient *cptr, aClient *sptr, int parc, char *parv[]); extern char *umode_str(aClient *cptr); #if defined(DB_HISPANO) || defined(DB_ESNET) ! extern void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask, int oldh, int sendhmask); #else extern void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask); #endif --- 59,66 ---- extern int m_ison(aClient *cptr, aClient *sptr, int parc, char *parv[]); extern char *umode_str(aClient *cptr); #if defined(DB_HISPANO) || defined(DB_ESNET) ! extern void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask, ! int oldh, int sendhmask); #else extern void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask); #endif Index: ../ircu2.10.06/include/struct.h =================================================================== RCS file: /cvsroot/ircd/include/struct.h,v retrieving revision 1.16 retrieving revision 1.17 diff -c -r1.16 -r1.17 *** ../ircu2.10.06/include/struct.h 1999/10/14 12:31:39 1.16 --- ../ircu2.10.06/include/struct.h 1999/10/15 08:24:24 1.17 *************** *** 78,84 **** int marker; /* /who processing marker */ unsigned int flags; /* client flags */ #if defined(DB_HISPANO) || defined(DB_ESNET) ! unsigned int hmodes; /* HISPANO user modes (flag extensions) */ #endif struct Client *from; /* == self, if Local Client, *NEVER* NULL! */ int fd; /* >= 0, for local clients */ --- 78,84 ---- int marker; /* /who processing marker */ unsigned int flags; /* client flags */ #if defined(DB_HISPANO) || defined(DB_ESNET) ! unsigned int hmodes; /* HISPANO user modes (flag extensions) */ #endif struct Client *from; /* == self, if Local Client, *NEVER* NULL! */ int fd; /* >= 0, for local clients */ *************** *** 141,152 **** time_t timestamp; /* Remotely determined connect try time */ time_t ghost; /* Local time at which a new server caused a Ghost */ ! unsigned short prot; /* Major protocol */ unsigned short nn_last; /* Last numeric nick for p9 servers only */ ! unsigned int nn_mask; /* [Remote] FD_SETSIZE - 1 */ ! char nn_capacity[4]; /* numeric representation of server capacity */ #ifdef DB_ESNET ! unsigned long esnet_db; /* Mascara de grifo abierto para cada BDD */ #endif #ifdef LIST_DEBUG struct Client *bcptr; --- 141,152 ---- time_t timestamp; /* Remotely determined connect try time */ time_t ghost; /* Local time at which a new server caused a Ghost */ ! unsigned short prot; /* Major protocol */ unsigned short nn_last; /* Last numeric nick for p9 servers only */ ! unsigned int nn_mask; /* [Remote] FD_SETSIZE - 1 */ ! char nn_capacity[4]; /* numeric representation of server capacity */ #ifdef DB_ESNET ! unsigned long esnet_db; /* Mascara de grifo abierto para cada BDD */ #endif #ifdef LIST_DEBUG struct Client *bcptr; *************** *** 177,183 **** #ifdef DB_ESNET struct DB_nick { ! char nick[8*((NICKLEN+8)/8)]; /* El +8 es para que siempre sea multiplo entero de 8 */ unsigned long clave[2]; struct DB_nick *siguiente; }; --- 177,183 ---- #ifdef DB_ESNET struct DB_nick { ! char nick[8 * ((NICKLEN + 8) / 8)]; /* El +8 es para que siempre sea multiplo entero de 8 */ unsigned long clave[2]; struct DB_nick *siguiente; }; *************** *** 210,222 **** }; struct dbh_reg { ! char *destino; ! char *clave; ! char *valor; ! char local; ! char borrado; ! char compactado; ! struct dbh_reg *next, *prev; }; #endif /* DB_ESNET || DB_HISPANO */ --- 210,222 ---- }; struct dbh_reg { ! char *destino; ! char *clave; ! char *valor; ! char local; ! char borrado; ! char compactado; ! struct dbh_reg *next, *prev; }; #endif /* DB_ESNET || DB_HISPANO */ Index: ../ircu2.10.06/ircd/IPcheck.c =================================================================== RCS file: /cvsroot/ircd/ircd/IPcheck.c,v retrieving revision 1.4 retrieving revision 1.5 diff -c -r1.4 -r1.5 *** ../ircu2.10.06/ircd/IPcheck.c 1999/10/13 19:30:09 1.4 --- ../ircu2.10.06/ircd/IPcheck.c 1999/10/15 08:24:25 1.5 *************** *** 481,491 **** } #if defined(DB_ESNET) && defined(ESNET_CLONES) ! int IPbusca_clones(char *host) { ! struct dbh_reg *reg; ! reg=dbh_buscar_registro_local(ESNET_CLONESDB,host); ! if(reg==NULL) return -1; return atoi(reg->valor); } #endif --- 481,494 ---- } #if defined(DB_ESNET) && defined(ESNET_CLONES) ! int IPbusca_clones(char *host) ! { ! struct dbh_reg *reg; ! reg = dbh_buscar_registro_local(ESNET_CLONESDB, host); ! if (reg == NULL) ! return -1; return atoi(reg->valor); } + #endif Index: ../ircu2.10.06/ircd/channel.c =================================================================== RCS file: /cvsroot/ircd/ircd/channel.c,v retrieving revision 1.16 retrieving revision 1.17 diff -c -r1.16 -r1.17 *** ../ircu2.10.06/ircd/channel.c 1999/10/13 22:25:42 1.16 --- ../ircu2.10.06/ircd/channel.c 1999/10/15 08:24:25 1.17 *************** *** 376,382 **** #ifndef DBH_VIP s = make_nick_user_host(cptr->name, cptr->user->username, cptr->user->host); #endif ! for (tmp = chptr->banlist; tmp; tmp = tmp->next) { if ((tmp->flags & CHFL_BAN_IPMASK)) --- 376,382 ---- #ifndef DBH_VIP s = make_nick_user_host(cptr->name, cptr->user->username, cptr->user->host); #endif ! for (tmp = chptr->banlist; tmp; tmp = tmp->next) { if ((tmp->flags & CHFL_BAN_IPMASK)) *************** *** 389,404 **** else #ifdef DBH_VIP { ! s = make_nick_user_host(cptr->name, cptr->user->username, cptr->user->host); #endif ! if (match(tmp->value.ban.banstr, s) == 0) ! break; #ifdef DB_HISPANO ! if(IsHidden(cptr)) { ! s = make_nick_user_host(cptr->name, cptr->user->username, get_virtualhost(cptr)); ! if (match(tmp->value.ban.banstr, s) == 0) ! break; ! } } #endif } --- 389,409 ---- else #ifdef DBH_VIP { ! s = ! make_nick_user_host(cptr->name, cptr->user->username, ! cptr->user->host); #endif ! if (match(tmp->value.ban.banstr, s) == 0) ! break; #ifdef DB_HISPANO ! if (IsHidden(cptr)) ! { ! s = ! make_nick_user_host(cptr->name, cptr->user->username, ! get_virtualhost(cptr)); ! if (match(tmp->value.ban.banstr, s) == 0) ! break; ! } } #endif } *************** *** 533,540 **** Reg1 Link *lp; #if defined(DB_HISPANO) || defined(DB_ESNET) ! if( IsServicesBot(cptr) ) ! return 0; /* siempre pueden */ #endif lp = IsMember(cptr, chptr); --- 538,545 ---- Reg1 Link *lp; #if defined(DB_HISPANO) || defined(DB_ESNET) ! if (IsServicesBot(cptr)) ! return 0; /* siempre pueden */ #endif lp = IsMember(cptr, chptr); *************** *** 584,590 **** *mbuf++ = 'A'; if (SecureOpChannel(chptr)) *mbuf++ = 'S'; ! #endif /* DB_HISPANO || DB_ESNET */ if (chptr->mode.limit) { *mbuf++ = 'l'; --- 589,595 ---- *mbuf++ = 'A'; if (SecureOpChannel(chptr)) *mbuf++ = 'S'; ! #endif /* DB_HISPANO || DB_ESNET */ if (chptr->mode.limit) { *mbuf++ = 'l'; *************** *** 821,835 **** char *botname; struct dbh_reg *r; ! if(!IsServer(cptr)) ! return 0; /* Now, try to find the channel in question */ if (parc > 3) { chptr = FindChannel(parv[2]); if (chptr == NullChn) ! return 0; /* m_botumode(cptr, sptr, parc, parv); */ } else return 0; --- 826,840 ---- char *botname; struct dbh_reg *r; ! if (!IsServer(cptr)) ! return 0; /* Now, try to find the channel in question */ if (parc > 3) { chptr = FindChannel(parv[2]); if (chptr == NullChn) ! return 0; /* m_botumode(cptr, sptr, parc, parv); */ } else return 0; *************** *** 853,881 **** return 0; } ! badop=0; ! r=dbh_buscar_registro_local(DBH_BOTSDB, parv[1]); ! if(r && r->valor) ! botname=r->valor; else ! botname=me.name; ! if (strlen(modebuf) > (size_t) 1 || sendts > 0) { ! if (strlen(modebuf) > (size_t) 1) ! sendto_channel_butserv(chptr, NULL, ":%s MODE %s %s %s", ! botname, chptr->chname, modebuf, parabuf); ! if (IsLocalChannel(chptr->chname)) ! return 0; ! ! sendto_lowprot_butone(cptr, 9, ":%s BMODE %s %s %s %s", ! parv[0], parv[1], chptr->chname, modebuf, parabuf); ! sendto_highprot_butone(cptr, 10, ":%s BMODE %s %s %s %s", ! parv[0], parv[1], chptr->chname, modebuf, nparabuf); } return 0; } #endif /* --- 858,887 ---- return 0; } ! badop = 0; ! r = dbh_buscar_registro_local(DBH_BOTSDB, parv[1]); ! if (r && r->valor) ! botname = r->valor; else ! botname = me.name; ! if (strlen(modebuf) > (size_t)1 || sendts > 0) { ! if (strlen(modebuf) > (size_t)1) ! sendto_channel_butserv(chptr, NULL, ":%s MODE %s %s %s", ! botname, chptr->chname, modebuf, parabuf); ! if (IsLocalChannel(chptr->chname)) ! return 0; ! ! sendto_lowprot_butone(cptr, 9, ":%s BMODE %s %s %s %s", ! parv[0], parv[1], chptr->chname, modebuf, parabuf); ! sendto_highprot_butone(cptr, 10, ":%s BMODE %s %s %s %s", ! parv[0], parv[1], chptr->chname, modebuf, nparabuf); } return 0; } + #endif /* *************** *** 1107,1119 **** */ #if defined(DB_HISPANO) || defined(DB_ESNET) static int set_mode(aClient *cptr, aClient *sptr, aChannel *chptr, ! int botmode, ! int parc, char *parv[], char *mbuf, char *pbuf, ! char *npbuf, int *badop) #else static int set_mode(aClient *cptr, aClient *sptr, aChannel *chptr, ! int parc, char *parv[], char *mbuf, char *pbuf, ! char *npbuf, int *badop) #endif { static Link chops[MAXPARA - 2]; /* This size is only needed when a broken --- 1113,1123 ---- */ #if defined(DB_HISPANO) || defined(DB_ESNET) static int set_mode(aClient *cptr, aClient *sptr, aChannel *chptr, ! int botmode, ! int parc, char *parv[], char *mbuf, char *pbuf, char *npbuf, int *badop) #else static int set_mode(aClient *cptr, aClient *sptr, aChannel *chptr, ! int parc, char *parv[], char *mbuf, char *pbuf, char *npbuf, int *badop) #endif { static Link chops[MAXPARA - 2]; /* This size is only needed when a broken *************** *** 1153,1159 **** ** fijar parametros pase lo que pase. ** jcea@argo.es - 03/Feb/98 */ ! int jcea_xmode_esnet=0; *mbuf = *pbuf = *npbuf = *bmbuf = *bpbuf = *nbpbuf = '\0'; *badop = 0; --- 1157,1163 ---- ** fijar parametros pase lo que pase. ** jcea@argo.es - 03/Feb/98 */ ! int jcea_xmode_esnet = 0; *mbuf = *pbuf = *npbuf = *bmbuf = *bpbuf = *nbpbuf = '\0'; *badop = 0; *************** *** 1379,1448 **** if (whatt == MODE_DEL) while ((lp = chptr->invites)) del_invite(lp->value.cptr, chptr); ! goto def; /* Porque insertamos codigo */ #if defined(DB_HISPANO) || defined(DB_ESNET) ! /* el modo r no se cambia */ case 'r': ! break; #endif #ifdef XMODE_ESNET case 'x': ! /* ! ** Si somos IRCOPs y hemos puesto el flag X, podemos ! ** fijar parametros pase lo que pase. ! ** jcea@argo.es - 03/Feb/98 ! */ ! if(IsOper(sptr) #ifndef OPER_XMODE_ESNET ! && IsServer(cptr) #endif ! ) { ! if(!is_chan_op(sptr,chptr)) jcea_xmode_esnet=!0; ! break; ! } #endif #if defined(DB_HISPANO) && (defined(DBH_OPER_HACK) || defined(DBH_CHAN_HACK)) ! { ! struct dbh_reg *reg; ! reg=dbh_buscar_registro_local(DBH_CHANDB,chptr->chname); #ifdef DBH_OPER_HACK ! /* ! * Los miembros de la BD de OPERs pueden usar los modos X ! * Si hack ONLYREG, solo en los canales registrados. ! * 1999/06/30 savage@apostols.org ! */ ! if( #ifdef DBH_OPER_HACK_ONLYREG ! reg && #endif ! IsNickRegistered(sptr) && ! dbh_buscar_registro_local(DBH_OPERDB,sptr->name)) ! { ! if(!is_chan_op(sptr,chptr)) ! jcea_xmode_esnet=!0; ! break; ! } #endif #ifdef DBH_OPER_HACK ! /* ! * El fundador de un canal puede usar los modos X en su canal ! * 1999/06/30 savage@apostols.org ! */ ! if(IsNickRegistered(sptr) && ! dbh_es_miembro(DBH_CHANDB, chptr->chname,sptr->name)==1) ! { ! if(!is_chan_op(sptr,chptr)) ! jcea_xmode_esnet=!0; ! break; ! } #endif /* DBH_CHAN_HACK */ ! } #endif /* DB_HISPANO && (DBH_OPER_HACK || DBH_CHAN_HACK) */ ! ! def: default: for (ip = flags; *ip; ip += 2) if (*(ip + 1) == *curr) --- 1383,1454 ---- if (whatt == MODE_DEL) while ((lp = chptr->invites)) del_invite(lp->value.cptr, chptr); ! goto def; /* Porque insertamos codigo */ #if defined(DB_HISPANO) || defined(DB_ESNET) ! /* el modo r no se cambia */ case 'r': ! break; #endif #ifdef XMODE_ESNET case 'x': ! /* ! ** Si somos IRCOPs y hemos puesto el flag X, podemos ! ** fijar parametros pase lo que pase. ! ** jcea@argo.es - 03/Feb/98 ! */ ! if (IsOper(sptr) #ifndef OPER_XMODE_ESNET ! && IsServer(cptr) #endif ! ) ! { ! if (!is_chan_op(sptr, chptr)) ! jcea_xmode_esnet = !0; ! break; ! } #endif #if defined(DB_HISPANO) && (defined(DBH_OPER_HACK) || defined(DBH_CHAN_HACK)) ! { ! struct dbh_reg *reg; ! reg = dbh_buscar_registro_local(DBH_CHANDB, chptr->chname); #ifdef DBH_OPER_HACK ! /* ! * Los miembros de la BD de OPERs pueden usar los modos X ! * Si hack ONLYREG, solo en los canales registrados. ! * 1999/06/30 savage@apostols.org ! */ ! if ( #ifdef DBH_OPER_HACK_ONLYREG ! reg && #endif ! IsNickRegistered(sptr) && ! dbh_buscar_registro_local(DBH_OPERDB, sptr->name)) ! { ! if (!is_chan_op(sptr, chptr)) ! jcea_xmode_esnet = !0; ! break; ! } #endif #ifdef DBH_OPER_HACK ! /* ! * El fundador de un canal puede usar los modos X en su canal ! * 1999/06/30 savage@apostols.org ! */ ! if (IsNickRegistered(sptr) && ! dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name) == 1) ! { ! if (!is_chan_op(sptr, chptr)) ! jcea_xmode_esnet = !0; ! break; ! } #endif /* DBH_CHAN_HACK */ ! } #endif /* DB_HISPANO && (DBH_OPER_HACK || DBH_CHAN_HACK) */ ! ! def: default: for (ip = flags; *ip; ip += 2) if (*(ip + 1) == *curr) *************** *** 1558,1567 **** bounce = (*badop == 1 || *badop == 2 || is_deopped(sptr, chptr)) ? 1 : 0; #if defined(DB_HISPANO) || defined(DB_ESNET) ! if(IsServicesBot(sptr) || botmode) { ! bounce=0; ! *badop=0; } #endif --- 1564,1573 ---- bounce = (*badop == 1 || *badop == 2 || is_deopped(sptr, chptr)) ? 1 : 0; #if defined(DB_HISPANO) || defined(DB_ESNET) ! if (IsServicesBot(sptr) || botmode) { ! bounce = 0; ! *badop = 0; } #endif *************** *** 1572,1582 **** */ whatt = 0; ! if(jcea_xmode_esnet) { ! bounce=0; whatt = MODE_ADD; ! *mbuf++='+'; ! *mbuf++='x'; } for (ip = flags; *ip; ip += 2) --- 1578,1589 ---- */ whatt = 0; ! if (jcea_xmode_esnet) ! { ! bounce = 0; whatt = MODE_ADD; ! *mbuf++ = '+'; ! *mbuf++ = 'x'; } for (ip = flags; *ip; ip += 2) *************** *** 2016,2026 **** } /* if (opcnt) */ /* evitemos que quede solo el modo +x */ ! if(jcea_xmode_esnet && *(mbuf-2)=='+' && *(mbuf-1)=='x') { ! *(mbuf--)='\0'; ! *(mbuf--)='\0'; } ! *mbuf++ = '\0'; *bmbuf++ = '\0'; --- 2023,2034 ---- } /* if (opcnt) */ /* evitemos que quede solo el modo +x */ ! if (jcea_xmode_esnet && *(mbuf - 2) == '+' && *(mbuf - 1) == 'x') ! { ! *(mbuf--) = '\0'; ! *(mbuf--) = '\0'; } ! *mbuf++ = '\0'; *bmbuf++ = '\0'; *************** *** 2087,2097 **** sptr->name, chptr->chname) - sendbuf; else #ifdef DBH_VIP ! /* We rely on IsRegistered(sptr) being true for MODE */ psblen = sprintf_irc(sendbuf, ":%s!%s@%s MODE %s -b", sptr->name, sptr->user->username, get_virtualhost(sptr), chptr->chname) - sendbuf; #else ! /* We rely on IsRegistered(sptr) being true for MODE */ psblen = sprintf_irc(sendbuf, ":%s!%s@%s MODE %s -b", sptr->name, sptr->user->username, sptr->user->host, chptr->chname) - sendbuf; #endif --- 2095,2105 ---- sptr->name, chptr->chname) - sendbuf; else #ifdef DBH_VIP ! /* We rely on IsRegistered(sptr) being true for MODE */ psblen = sprintf_irc(sendbuf, ":%s!%s@%s MODE %s -b", sptr->name, sptr->user->username, get_virtualhost(sptr), chptr->chname) - sendbuf; #else ! /* We rely on IsRegistered(sptr) being true for MODE */ psblen = sprintf_irc(sendbuf, ":%s!%s@%s MODE %s -b", sptr->name, sptr->user->username, sptr->user->host, chptr->chname) - sendbuf; #endif *************** *** 2187,2202 **** */ #ifdef OPER_JOIN_GOD_ESNET ! if((IsOper(sptr)) && (!BadPtr(key)) && (!compall("GOD", key))) ! return 0; #endif ! #if defined(DB_HISPANO) && (defined(DBH_OPER_HACK) || defined(DBH_CHAN_HACK)) ! if( !BadPtr(key) ) ! { ! struct dbh_reg *reg; ! reg=dbh_buscar_registro_local(DBH_CHANDB, (char*)chptr->chname); #ifdef DBH_OPER_HACK /* * El hack de la base de datos de opers permite que estos dispongan --- 2195,2210 ---- */ #ifdef OPER_JOIN_GOD_ESNET ! if ((IsOper(sptr)) && (!BadPtr(key)) && (!compall("GOD", key))) ! return 0; #endif ! #if defined(DB_HISPANO) && (defined(DBH_OPER_HACK) || defined(DBH_CHAN_HACK)) ! if (!BadPtr(key)) ! { ! struct dbh_reg *reg; ! reg = dbh_buscar_registro_local(DBH_CHANDB, (char *)chptr->chname); #ifdef DBH_OPER_HACK /* * El hack de la base de datos de opers permite que estos dispongan *************** *** 2204,2217 **** * Si activamos el hack ONLYREG, solo funcionara en canales registrados. * 1999/06/30 savage@apostols.org */ ! if( #ifdef DBH_OPER_HACK_ONLYREG ! reg && #endif ! IsNickRegistered(sptr) && ! dbh_buscar_registro_local(DBH_OPERDB, sptr->name) ! && (!compall("OPER", key)) ) ! return 0; #endif #ifdef DBH_CHAN_HACK --- 2212,2225 ---- * Si activamos el hack ONLYREG, solo funcionara en canales registrados. * 1999/06/30 savage@apostols.org */ ! if ( #ifdef DBH_OPER_HACK_ONLYREG ! reg && #endif ! IsNickRegistered(sptr) && ! dbh_buscar_registro_local(DBH_OPERDB, sptr->name) ! && (!compall("OPER", key))) ! return 0; #endif #ifdef DBH_CHAN_HACK *************** *** 2221,2236 **** * pero la clave es FUNDADOR * 1999/06/30 savage@apostols.org */ ! ! if( (!BadPtr(key)) && IsNickRegistered(sptr) ! && dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name)==1 ! && (!compall("FUNDADOR", key)) ) ! return 0; #endif ! } ! if( RestrictedChannel(chptr) && !IsNickRegistered(sptr) ) ! return ERR_NEEDREGGEDNICK; #endif /* DB_HISPANO && (DBH_OPER_HACK || DBH_CHAN_HACK) */ --- 2229,2244 ---- * pero la clave es FUNDADOR * 1999/06/30 savage@apostols.org */ ! ! if ((!BadPtr(key)) && IsNickRegistered(sptr) ! && dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name) == 1 ! && (!compall("FUNDADOR", key))) ! return 0; #endif ! } ! if (RestrictedChannel(chptr) && !IsNickRegistered(sptr)) ! return ERR_NEEDREGGEDNICK; #endif /* DB_HISPANO && (DBH_OPER_HACK || DBH_CHAN_HACK) */ *************** *** 2593,2599 **** sendcreate = 1; } ! if (!IsChannelService(sptr) && (sptr->user->joined >= MAXCHANNELSPERUSER)) { chptr = get_channel(sptr, name, !CREATE); sendto_one(sptr, err_str(ERR_TOOMANYCHANNELS), --- 2601,2608 ---- sendcreate = 1; } ! if (!IsChannelService(sptr) ! && (sptr->user->joined >= MAXCHANNELSPERUSER)) { chptr = get_channel(sptr, name, !CREATE); sendto_one(sptr, err_str(ERR_TOOMANYCHANNELS), *************** *** 2605,2612 **** } chptr = get_channel(sptr, name, CREATE); #if defined(DB_HISPANO) || defined(DB_ESNET) ! if( chptr && dbh_buscar_registro_local(DBH_CHANDB, name) ) ! chptr->mode.mode |= MODE_REGCHAN; /* Aki debo implantar los modos por defecto sacados de la DBH */ #endif if (chptr && (lp = find_user_link(chptr->members, sptr))) --- 2614,2621 ---- } chptr = get_channel(sptr, name, CREATE); #if defined(DB_HISPANO) || defined(DB_ESNET) ! if (chptr && dbh_buscar_registro_local(DBH_CHANDB, name)) ! chptr->mode.mode |= MODE_REGCHAN; /* Aki debo implantar los modos por defecto sacados de la DBH */ #endif if (chptr && (lp = find_user_link(chptr->members, sptr))) *************** *** 2651,2663 **** { sendto_one(sptr, err_str(i), me.name, parv[0], chptr->chname); continue; ! } #if defined(DB_HISPANO) || defined(DB_ESNET) ! /* asi ya lo meto en el canal con el OP puesto a nivel local */ ! if( AutoOpChannel(chptr) && ! IsNickRegistered(sptr) && ! dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name) ) ! flags = CHFL_CHANOP; #endif } /* --- 2660,2672 ---- { sendto_one(sptr, err_str(i), me.name, parv[0], chptr->chname); continue; ! } #if defined(DB_HISPANO) || defined(DB_ESNET) ! /* asi ya lo meto en el canal con el OP puesto a nivel local */ ! if (AutoOpChannel(chptr) && ! IsNickRegistered(sptr) && ! dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name)) ! flags = CHFL_CHANOP; #endif } /* *************** *** 2741,2775 **** { /* send a TS? */ sendto_serv_butone(cptr, ":%s MODE %s + " TIME_T_FMT, me.name, chptr->chname, chptr->creationtime); /* ok, send TS */ ! chptr->mode.mode &= ~MODE_SENDTS; /* reset flag */ ! } #if defined(DB_HISPANO) || defined(DB_ESNET) ! /* ! * solo seria necesario si no se ha creado ! * el canal, pero no tengo datos ... ! */ ! if( chptr && AutoOpChannel(chptr) ! && IsNickRegistered(sptr) ! && dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name) ) ! { ! struct dbh_reg *r; ! char *botname; ! ! if( (r=dbh_buscar_registro_local(DBH_BOTSDB, DBH_CHANSERV)) != NULL) ! botname=r->valor; ! else ! botname=me.name; ! ! /* queridos remotos, ahora os comereis un modo OP */ ! sendto_lowprot_butone(cptr, 9, ":%s BMODE %s %s +o %s", ! me.name, DBH_CHANSERV, chptr->chname, sptr->name ); ! sendto_highprot_butone(cptr, 10, "%s BMODE %s %s +o %s%s", ! NumServ(&me), DBH_CHANSERV, chptr->chname, NumNick(sptr) ); ! ! /* queridos usuarios, ahora os tomo el pelo como a chinos */ ! sendto_channel_butserv(chptr, NULL, ":%s MODE %s +o %s", ! botname, chptr->chname, sptr->name ); ! } #endif } } --- 2750,2784 ---- { /* send a TS? */ sendto_serv_butone(cptr, ":%s MODE %s + " TIME_T_FMT, me.name, chptr->chname, chptr->creationtime); /* ok, send TS */ ! chptr->mode.mode &= ~MODE_SENDTS; /* reset flag */ ! } #if defined(DB_HISPANO) || defined(DB_ESNET) ! /* ! * solo seria necesario si no se ha creado ! * el canal, pero no tengo datos ... ! */ ! if (chptr && AutoOpChannel(chptr) ! && IsNickRegistered(sptr) ! && dbh_es_miembro(DBH_CHANDB, chptr->chname, sptr->name)) ! { ! struct dbh_reg *r; ! char *botname; ! ! if ((r = dbh_buscar_registro_local(DBH_BOTSDB, DBH_CHANSERV)) != NULL) ! botname = r->valor; ! else ! botname = me.name; ! ! /* queridos remotos, ahora os comereis un modo OP */ ! sendto_lowprot_butone(cptr, 9, ":%s BMODE %s %s +o %s", ! me.name, DBH_CHANSERV, chptr->chname, sptr->name); ! sendto_highprot_butone(cptr, 10, "%s BMODE %s %s +o %s%s", ! NumServ(&me), DBH_CHANSERV, chptr->chname, NumNick(sptr)); ! ! /* queridos usuarios, ahora os tomo el pelo como a chinos */ ! sendto_channel_butserv(chptr, NULL, ":%s MODE %s +o %s", ! botname, chptr->chname, sptr->name); ! } #endif } } *************** *** 3288,3294 **** break; } #if defined(DB_HISPANO) || defined(DB_ESNET) ! case 'R': { register int tmp; prev_mode &= ~MODE_REGNICKS; --- 3297,3303 ---- break; } #if defined(DB_HISPANO) || defined(DB_ESNET) ! case 'R': { register int tmp; prev_mode &= ~MODE_REGNICKS; *************** *** 3302,3308 **** modebuf[mblen2++] = 'R'; break; } ! case 'A': { register int tmp; prev_mode &= ~MODE_AUTOOP; --- 3311,3317 ---- modebuf[mblen2++] = 'R'; break; } ! case 'A': { register int tmp; prev_mode &= ~MODE_AUTOOP; *************** *** 3316,3322 **** modebuf[mblen2++] = 'A'; break; } ! case 'S': { register int tmp; prev_mode &= ~MODE_SECUREOP; --- 3325,3331 ---- modebuf[mblen2++] = 'A'; break; } ! case 'S': { register int tmp; prev_mode &= ~MODE_SECUREOP; *************** *** 3331,3337 **** break; } #endif /* DB_HISPANO || DB_ESNET */ ! case 'n': { register int tmp; prev_mode &= ~MODE_NOPRIVMSGS; --- 3340,3346 ---- break; } #endif /* DB_HISPANO || DB_ESNET */ ! case 'n': { register int tmp; prev_mode &= ~MODE_NOPRIVMSGS; *************** *** 3976,3984 **** { if (who->from != cptr && #if defined(DB_HISPANO) || defined(DB_ESNET) ! !IsServicesBot(sptr) && #endif ! ((lp2 && (lp2->flags & CHFL_DEOPPED)) || (!lp2 && IsUser(sptr)))) { /* * Bounce here: --- 3985,3993 ---- { if (who->from != cptr && #if defined(DB_HISPANO) || defined(DB_ESNET) ! !IsServicesBot(sptr) && #endif ! ((lp2 && (lp2->flags & CHFL_DEOPPED)) || (!lp2 && IsUser(sptr)))) { /* * Bounce here: *************** *** 4132,4138 **** chptr = NULL; #if defined(DB_HISPANO) || defined(DB_ESNET) if (!IsChannelName(name) || !(chptr = FindChannel(name)) || ! (!IsServicesBot(sptr) && ((topic || SecretChannel(chptr)) && !IsMember(sptr, chptr)))) #else if (!IsChannelName(name) || !(chptr = FindChannel(name)) || ((topic || SecretChannel(chptr)) && !IsMember(sptr, chptr))) --- 4141,4148 ---- chptr = NULL; #if defined(DB_HISPANO) || defined(DB_ESNET) if (!IsChannelName(name) || !(chptr = FindChannel(name)) || ! (!IsServicesBot(sptr) && ((topic || SecretChannel(chptr)) ! && !IsMember(sptr, chptr)))) #else if (!IsChannelName(name) || !(chptr = FindChannel(name)) || ((topic || SecretChannel(chptr)) && !IsMember(sptr, chptr))) *************** *** 4164,4173 **** chptr->topic_nick, chptr->topic_time); } } - else if (((chptr->mode.mode & MODE_TOPICLIMIT) == 0 || #if defined(DB_HISPANO) || defined(DB_ESNET) ! is_chan_op(sptr, chptr) || IsServicesBot(sptr)) && topic) #else is_chan_op(sptr, chptr)) && topic) #endif { --- 4174,4184 ---- chptr->topic_nick, chptr->topic_time); } } #if defined(DB_HISPANO) || defined(DB_ESNET) ! else if (((chptr->mode.mode & MODE_TOPICLIMIT) == 0 || ! is_chan_op(sptr, chptr) || IsServicesBot(sptr)) && topic) #else + else if (((chptr->mode.mode & MODE_TOPICLIMIT) == 0 || is_chan_op(sptr, chptr)) && topic) #endif { Index: ../ircu2.10.06/ircd/crule.c =================================================================== RCS file: /cvsroot/ircd/ircd/crule.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ../ircu2.10.06/ircd/crule.c 1999/10/08 10:33:10 1.3 --- ../ircu2.10.06/ircd/crule.c 1999/10/15 08:24:25 1.4 *************** *** 182,192 **** --- 182,194 ---- } return (0); } + #else static int crule_connected(int UNUSED(numargs), void **UNUSED(crulearg)) { return (0); } + #endif #if !defined(CR_DEBUG) && !defined(CR_CHKCONF) *************** *** 206,216 **** --- 208,220 ---- } return (0); } + #else static int crule_directcon(int UNUSED(numargs), void **UNUSED(crulearg)) { return (0); } + #endif #if !defined(CR_DEBUG) && !defined(CR_CHKCONF) *************** *** 231,241 **** --- 235,247 ---- } return (0); } + #else static int crule_via(int UNUSED(numargs), void **UNUSED(crulearg)) { return (0); } + #endif static int crule_directop(int UNUSED(numargs), void **UNUSED(crulearg)) *************** *** 287,292 **** --- 293,299 ---- return (((crule_treeptr) rule)->funcptr (((crule_treeptr) rule)->numargs, ((crule_treeptr) rule)->arg)); } + #endif static int crule_gettoken(int *next_tokp, char **ruleptr) Index: ../ircu2.10.06/ircd/hash.c =================================================================== RCS file: /cvsroot/ircd/ircd/hash.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** ../ircu2.10.06/ircd/hash.c 1999/10/08 10:08:47 1.2 --- ../ircu2.10.06/ircd/hash.c 1999/10/15 08:24:25 1.3 *************** *** 560,566 **** */ int dbh_hash_registro(char *clave) { ! return (unsigned int)( strhash(clave) & (DBH_HASH_SIZE-1) ); } - #endif --- 560,566 ---- */ int dbh_hash_registro(char *clave) { ! return (unsigned int)(strhash(clave) & (DBH_HASH_SIZE - 1)); } + #endif Index: ../ircu2.10.06/ircd/ircd.c =================================================================== RCS file: /cvsroot/ircd/ircd/ircd.c,v retrieving revision 1.9 retrieving revision 1.10 diff -c -r1.9 -r1.10 *** ../ircu2.10.06/ircd/ircd.c 1999/10/10 01:10:29 1.9 --- ../ircu2.10.06/ircd/ircd.c 1999/10/15 08:24:25 1.10 *************** *** 346,356 **** (now - cptr->firsttime) >= ping)) { #ifdef PROXY_PROTECTION ! if (!IsRegistered(cptr) && (DoingDNS(cptr) || DoingAuth(cptr) || DoingSocks(cptr))) { Debug((DEBUG_NOTICE, "%s/%s/%s timeout %s", DoingDNS(cptr) ? "DNS" : "", ! DoingAuth(cptr) ? "AUTH" : "", DoingSocks(cptr) ? "SOCKS" : "", ! get_client_name(cptr, TRUE))); #else if (!IsRegistered(cptr) && (DoingDNS(cptr) || DoingAuth(cptr))) { --- 346,357 ---- (now - cptr->firsttime) >= ping)) { #ifdef PROXY_PROTECTION ! if (!IsRegistered(cptr) && (DoingDNS(cptr) || DoingAuth(cptr) ! || DoingSocks(cptr))) { Debug((DEBUG_NOTICE, "%s/%s/%s timeout %s", DoingDNS(cptr) ? "DNS" : "", ! DoingAuth(cptr) ? "AUTH" : "", DoingSocks(cptr) ? "SOCKS" : "", ! get_client_name(cptr, TRUE))); #else if (!IsRegistered(cptr) && (DoingDNS(cptr) || DoingAuth(cptr))) { *************** *** 373,382 **** close(cptr->socksfd); cptr->socksfd = -1; } ! ClearSocks(cptr); ! ClearWrSocks(cptr); #endif ! SetAccess(cptr); cptr->firsttime = now; cptr->lasttime = now; continue; --- 374,383 ---- close(cptr->socksfd); cptr->socksfd = -1; } ! ClearSocks(cptr); ! ClearWrSocks(cptr); #endif ! SetAccess(cptr); cptr->firsttime = now; cptr->lasttime = now; continue; *************** *** 412,420 **** "ftp://ftp.undernet.org/pub/irc/clients", me.name, ERR_BADPING, cptr->name); } ! exit_client_msg(cptr, cptr, &me, "Ping timeout for %s", #ifdef DBH_VIP ! IsHidden(cptr)?cptr->name: #endif get_client_name(cptr, FALSE)); } --- 413,421 ---- "ftp://ftp.undernet.org/pub/irc/clients", me.name, ERR_BADPING, cptr->name); } ! exit_client_msg(cptr, cptr, &me, "Ping timeout for %s", #ifdef DBH_VIP ! IsHidden(cptr) ? cptr->name : #endif get_client_name(cptr, FALSE)); } Index: ../ircu2.10.06/ircd/list.c =================================================================== RCS file: /cvsroot/ircd/ircd/list.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ../ircu2.10.06/ircd/list.c 1999/10/08 10:43:57 1.3 --- ../ircu2.10.06/ircd/list.c 1999/10/15 08:24:25 1.4 *************** *** 59,64 **** --- 59,65 ---- memset(&classs, 0, sizeof(classs)); memset(&aconfs, 0, sizeof(aconfs)); } + #endif void outofmemory(void) Index: ../ircu2.10.06/ircd/opercmds.c =================================================================== RCS file: /cvsroot/ircd/ircd/opercmds.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** ../ircu2.10.06/ircd/opercmds.c 1999/10/13 23:29:46 1.7 --- ../ircu2.10.06/ircd/opercmds.c 1999/10/15 08:24:25 1.8 *************** *** 647,679 **** count_memory(sptr, parv[0]); break; #if defined(DB_HISPANO) || defined(DB_ESNET) ! case 'B': ! case 'b': #ifdef DB_HISPANO ! for(i=DBH_PRIMERA_TABLA;i<=DBH_ULTIMA_TABLA;i++) { ! if(tabla_serie[i]) ! if(tabla_residente[i]) ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :V=%lu S=%lu R=%lu", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_version[i], tabla_serie[i], ! tabla_cuantos[i]); ! else ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :V=%lu S=%lu NoResidente", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_version[i], tabla_serie[i] ); } #endif /* DB_HISPANO */ #ifdef DB_ESNET ! for(i=ESNET_BDD;i<=ESNET_BDD_END;i++) { ! if(tabla_serie[i]) ! if(tabla_residente[i]) ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :S=%lu R=%lu", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_serie[i], tabla_cuantos[i]); ! else ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :S=%lu NoResidente", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_serie[i] ); } #endif break; --- 647,679 ---- count_memory(sptr, parv[0]); break; #if defined(DB_HISPANO) || defined(DB_ESNET) ! case 'B': ! case 'b': #ifdef DB_HISPANO ! for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) ! { ! if (tabla_serie[i]) ! if (tabla_residente[i]) ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :V=%lu S=%lu R=%lu", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_version[i], tabla_serie[i], tabla_cuantos[i]); ! else ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :V=%lu S=%lu NoResidente", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_version[i], tabla_serie[i]); } #endif /* DB_HISPANO */ #ifdef DB_ESNET ! for (i = ESNET_BDD; i <= ESNET_BDD_END; i++) ! { ! if (tabla_serie[i]) ! if (tabla_residente[i]) ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :S=%lu R=%lu", ! me.name, RPL_STATSDEBUG, parv[0], stat, ! i, tabla_serie[i], tabla_cuantos[i]); ! else ! sendto_one(sptr, ":%s %d %s %c Tabla '%c' :S=%lu NoResidente", ! me.name, RPL_STATSDEBUG, parv[0], stat, i, tabla_serie[i]); } #endif break; *************** *** 1176,1181 **** --- 1176,1182 ---- #endif return rehash(cptr, (parc > 1) ? ((*parv[1] == 'q') ? 2 : 0) : 0); } + #endif #if defined(OPER_RESTART) || defined(LOCOP_RESTART) *************** *** 1204,1209 **** --- 1205,1211 ---- server_reboot(); return 0; } + #endif /* *************** *** 1223,1232 **** int cnt = 0, wilds, dow; #ifdef DBH_VIP ! if( !IsAnOper(cptr) && !IsHelpOp(cptr) && !IsServer(cptr) ) ! return 0; /* no puedes */ #endif ! if (parc < 2 || BadPtr(parv[1])) { /* just "TRACE" without parameters. Must be from local client */ --- 1225,1234 ---- int cnt = 0, wilds, dow; #ifdef DBH_VIP ! if (!IsAnOper(cptr) && !IsHelpOp(cptr) && !IsServer(cptr)) ! return 0; /* no puedes */ #endif ! if (parc < 2 || BadPtr(parv[1])) { /* just "TRACE" without parameters. Must be from local client */ *************** *** 1500,1505 **** --- 1502,1508 ---- #endif return 0; } + #endif static void add_gline(aClient *sptr, int ip_mask, char *host, char *comment, Index: ../ircu2.10.06/ircd/res.c =================================================================== RCS file: /cvsroot/ircd/ircd/res.c,v retrieving revision 1.5 retrieving revision 1.6 diff -c -r1.5 -r1.6 *** ../ircu2.10.06/ircd/res.c 1999/10/08 11:09:09 1.5 --- ../ircu2.10.06/ircd/res.c 1999/10/15 08:24:25 1.6 *************** *** 359,369 **** case ASYNC_CLIENT: ClearDNS(cptr); #ifdef PROXY_PROTECTION ! if (!DoingAuth(cptr) && !DoingSocks(cptr)) #else ! if (!DoingAuth(cptr)) #endif ! SetAccess(cptr); break; case ASYNC_PING: sendto_ops("Host %s unknown", rptr->name); --- 359,369 ---- case ASYNC_CLIENT: ClearDNS(cptr); #ifdef PROXY_PROTECTION ! if (!DoingAuth(cptr) && !DoingSocks(cptr)) #else ! if (!DoingAuth(cptr)) #endif ! SetAccess(cptr); break; case ASYNC_PING: sendto_ops("Host %s unknown", rptr->name); Index: ../ircu2.10.06/ircd/runmalloc.c =================================================================== RCS file: /cvsroot/ircd/ircd/runmalloc.c,v retrieving revision 1.4 retrieving revision 1.5 diff -c -r1.4 -r1.5 *** ../ircu2.10.06/ircd/runmalloc.c 1999/10/08 11:09:09 1.4 --- ../ircu2.10.06/ircd/runmalloc.c 1999/10/15 08:24:25 1.5 *************** *** 70,75 **** --- 70,76 ---- } return hash; } + #endif #ifdef MEMMAGICNUMS *************** *** 451,456 **** --- 452,458 ---- { return mem_size; } + #endif #endif /* DEBUGMALLOC */ Index: ../ircu2.10.06/ircd/s_auth.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_auth.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** ../ircu2.10.06/ircd/s_auth.c 1999/10/08 10:43:57 1.2 --- ../ircu2.10.06/ircd/s_auth.c 1999/10/15 08:24:25 1.3 *************** *** 92,98 **** #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); ircstp->is_abad++; return; } --- 92,98 ---- #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); ircstp->is_abad++; return; } *************** *** 134,140 **** #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); return; } alarm((unsigned)0); --- 134,140 ---- #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); return; } alarm((unsigned)0); *************** *** 192,198 **** #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); } cptr->flags &= ~FLAGS_WRAUTH; return; --- 192,198 ---- #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); } cptr->flags &= ~FLAGS_WRAUTH; return; *************** *** 267,273 **** #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); if (len > 0) Debug((DEBUG_INFO, "ident reply: [%s]", cptr->buffer)); --- 267,273 ---- #else if (!DoingDNS(cptr)) #endif /* PROXY_PROTECTION */ ! SetAccess(cptr); if (len > 0) Debug((DEBUG_INFO, "ident reply: [%s]", cptr->buffer)); Index: ../ircu2.10.06/ircd/s_bsd.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_bsd.c,v retrieving revision 1.13 retrieving revision 1.14 diff -c -r1.13 -r1.14 *** ../ircu2.10.06/ircd/s_bsd.c 1999/10/13 19:30:09 1.13 --- ../ircu2.10.06/ircd/s_bsd.c 1999/10/15 08:24:25 1.14 *************** *** 437,442 **** --- 437,443 ---- return 0; } + #endif /* *************** *** 684,693 **** */ enum AuthorizationCheckResult check_client(aClient *cptr) { ! char buf[HOSTLEN+1+1024]; ! char host_buf[HOSTLEN+1]; int num_clones; ! int iline=0; static char sockname[HOSTLEN + 1]; Reg2 struct hostent *hp = NULL; Reg3 const char *hname; --- 685,694 ---- */ enum AuthorizationCheckResult check_client(aClient *cptr) { ! char buf[HOSTLEN + 1 + 1024]; ! char host_buf[HOSTLEN + 1]; int num_clones; ! int iline = 0; static char sockname[HOSTLEN + 1]; Reg2 struct hostent *hp = NULL; Reg3 const char *hname; *************** *** 726,767 **** #if defined(DB_ESNET) && defined(ESNET_CLONES) ! if(hp) { ! for (i = 0, hname = hp->h_name; hname; hname = hp->h_aliases[i++]) { ! strncpy(host_buf,hname,HOSTLEN); ! host_buf[HOSTLEN]='\0'; ! num_clones=IPbusca_clones(host_buf); ! if(num_clones!=-1) break; /* Tenemos un HIT! */ } /* ** Nos quedamos con el nombre canonico */ ! strncpy(host_buf,hp->h_name,HOSTLEN); ! host_buf[HOSTLEN]='\0'; ! } else { ! strcpy(host_buf,inetntoa(cptr->ip)); ! num_clones=IPbusca_clones(host_buf); } /* ** Clones permitidos para los ** clientes en general, sin Iline. */ ! if(num_clones==-1) { ! num_clones=IPbusca_clones("."); ! iline=0; ! } else iline=!0; /* Tiene Iline */ ! if((num_clones!=-1) && (IPcheck_nr(cptr)>num_clones)) { ! sprintf_irc(buf,":%s NOTICE %s :En esta red solo se permiten %d clones para tu IP (%s)", ! me.name,cptr->name,num_clones,host_buf); ! sendto_one(cptr,buf); /* ** Si tiene Iline no debemos permitir ** Throttle, ya que se supone que es ** un usuario legitimo de multiples ** conexiones */ ! if(iline) IPcheck_connect_fail(cptr); return ACR_TOO_MANY_FROM_IP; } --- 727,779 ---- #if defined(DB_ESNET) && defined(ESNET_CLONES) ! if (hp) ! { ! for (i = 0, hname = hp->h_name; hname; hname = hp->h_aliases[i++]) ! { ! strncpy(host_buf, hname, HOSTLEN); ! host_buf[HOSTLEN] = '\0'; ! num_clones = IPbusca_clones(host_buf); ! if (num_clones != -1) ! break; /* Tenemos un HIT! */ } /* ** Nos quedamos con el nombre canonico */ ! strncpy(host_buf, hp->h_name, HOSTLEN); ! host_buf[HOSTLEN] = '\0'; ! } ! else ! { ! strcpy(host_buf, inetntoa(cptr->ip)); ! num_clones = IPbusca_clones(host_buf); } /* ** Clones permitidos para los ** clientes en general, sin Iline. */ ! if (num_clones == -1) ! { ! num_clones = IPbusca_clones("."); ! iline = 0; ! } ! else ! iline = !0; /* Tiene Iline */ ! if ((num_clones != -1) && (IPcheck_nr(cptr) > num_clones)) ! { ! sprintf_irc(buf, ! ":%s NOTICE %s :En esta red solo se permiten %d clones para tu IP (%s)", ! me.name, cptr->name, num_clones, host_buf); ! sendto_one(cptr, buf); /* ** Si tiene Iline no debemos permitir ** Throttle, ya que se supone que es ** un usuario legitimo de multiples ** conexiones */ ! if (iline) ! IPcheck_connect_fail(cptr); return ACR_TOO_MANY_FROM_IP; } *************** *** 991,996 **** --- 1003,1009 ---- Debug((DEBUG_DNS, "sv_cl: access ok: %s[%s]", name, cptr->sockhost)); return 0; } + #undef CFLAG #undef NFLAG *************** *** 1044,1050 **** my_name_for_link(me.name, aconf), me.serv->timestamp, newts, MAJOR_PROTOCOL, NumServCap(&me), me.info); #ifdef DB_ESNET ! sendto_one(cptr,"%s DB * 0 J %lu 2",NumServ(&me),tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO --- 1057,1064 ---- my_name_for_link(me.name, aconf), me.serv->timestamp, newts, MAJOR_PROTOCOL, NumServCap(&me), me.info); #ifdef DB_ESNET ! sendto_one(cptr, "%s DB * 0 J %lu 2", NumServ(&me), ! tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO *************** *** 1059,1087 **** * Hub->Hub : Las mando todas, que remedio ... * 1999/06/30 savage@apostols.org */ ! { ! int es_hub=0; ! if(find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub=1; ! for(i=DBH_PRIMERA_TABLA; i<=DBH_ULTIMA_TABLA; i++) ! { #ifndef HUB ! /* Ok, soy un LEAF node */ ! if(!tabla_residente[i]) ! continue; /* Nodo->Hub: solo residentes */ #endif /* !HUB */ ! sendto_one(cptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, (char)i, tabla_version[i], tabla_serie[i]); ! } } #endif /* DB_HISPANO */ #ifdef PROXY_PROTECTION ! if (!IsDead(cptr)) { ! start_auth(cptr); ! start_socks(cptr); ! } #else if (!IsDead(cptr)) start_auth(cptr); --- 1073,1102 ---- * Hub->Hub : Las mando todas, que remedio ... * 1999/06/30 savage@apostols.org */ ! { ! int es_hub = 0; ! if (find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub = 1; ! for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) ! { #ifndef HUB ! /* Ok, soy un LEAF node */ ! if (!tabla_residente[i]) ! continue; /* Nodo->Hub: solo residentes */ #endif /* !HUB */ ! sendto_one(cptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, (char)i, tabla_version[i], tabla_serie[i]); } + } #endif /* DB_HISPANO */ #ifdef PROXY_PROTECTION ! if (!IsDead(cptr)) ! { ! start_auth(cptr); ! start_socks(cptr); ! } #else if (!IsDead(cptr)) start_auth(cptr); *************** *** 1467,1475 **** } #ifdef PROXY_PROTECTION ! if(IsUserPort(acptr)) { ! start_auth(acptr); ! start_socks(acptr); } #else start_auth(acptr); --- 1482,1491 ---- } #ifdef PROXY_PROTECTION ! if (IsUserPort(acptr)) ! { ! start_auth(acptr); ! start_socks(acptr); } #else start_auth(acptr); *************** *** 1520,1525 **** --- 1536,1542 ---- SetAccess(acptr); return; } + #endif /* *************** *** 1669,1677 **** #ifndef NOFLOODCONTROL if (IsUser(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD #ifdef CS_NO_FLOOD_ESNET ! && !IsChannelService(cptr) #endif ! ) return exit_client(cptr, cptr, &me, "Excess Flood"); #endif --- 1686,1694 ---- #ifndef NOFLOODCONTROL if (IsUser(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD #ifdef CS_NO_FLOOD_ESNET ! && !IsChannelService(cptr) #endif ! ) return exit_client(cptr, cptr, &me, "Excess Flood"); #endif *************** *** 2081,2091 **** continue; #ifdef USE_POLL #ifdef PROXY_PROTECTION ! if (DoingSocks(cptr) || DoingDNS(cptr) || DoingAuth(cptr) || !(cptr = loc_clients[LOC_FD(i)])) #else if (DoingDNS(cptr) || DoingAuth(cptr) || !(cptr = loc_clients[LOC_FD(i)])) ! #endif /* PROXY_PROTECTION */ ! continue; #endif /* USE_POLL */ #ifdef DEBUGMODE if (IsLog(cptr)) --- 2098,2109 ---- continue; #ifdef USE_POLL #ifdef PROXY_PROTECTION ! if (DoingSocks(cptr) || DoingDNS(cptr) || DoingAuth(cptr) ! || !(cptr = loc_clients[LOC_FD(i)])) #else if (DoingDNS(cptr) || DoingAuth(cptr) || !(cptr = loc_clients[LOC_FD(i)])) ! #endif /* PROXY_PROTECTION */ ! continue; #endif /* USE_POLL */ #ifdef DEBUGMODE if (IsLog(cptr)) *************** *** 2162,2171 **** else exit_client_msg(cptr, cptr, &me, "Read error to %s: %s", #ifdef DBH_VIP ! IsHidden(cptr)?cptr->name: #endif get_client_name(cptr, FALSE), (length < 0) ? ! strerror(get_sockerr(cptr)) : "EOF from client"); } return 0; } --- 2180,2189 ---- else exit_client_msg(cptr, cptr, &me, "Read error to %s: %s", #ifdef DBH_VIP ! IsHidden(cptr) ? cptr->name : #endif get_client_name(cptr, FALSE), (length < 0) ? ! strerror(get_sockerr(cptr)) : "EOF from client"); } return 0; } *************** *** 2748,2756 **** del_queries((char *)cptr); ClearDNS(cptr); #ifdef PROXY_PROTECTION ! if (!DoingSocks(cptr) && !DoingAuth(cptr)) #else ! if (!DoingAuth(cptr)) #endif SetAccess(cptr); cptr->hostp = hp; --- 2766,2774 ---- del_queries((char *)cptr); ClearDNS(cptr); #ifdef PROXY_PROTECTION ! if (!DoingSocks(cptr) && !DoingAuth(cptr)) #else ! if (!DoingAuth(cptr)) #endif SetAccess(cptr); cptr->hostp = hp; Index: ../ircu2.10.06/ircd/s_conf.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_conf.c,v retrieving revision 1.6 retrieving revision 1.7 diff -c -r1.6 -r1.7 *** ../ircu2.10.06/ircd/s_conf.c 1999/10/08 11:09:09 1.6 --- ../ircu2.10.06/ircd/s_conf.c 1999/10/15 08:24:25 1.7 *************** *** 1395,1400 **** --- 1395,1401 ---- } return 0; } + #endif /* Index: ../ircu2.10.06/ircd/s_debug.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_debug.c,v retrieving revision 1.54 retrieving revision 1.55 diff -c -r1.54 -r1.55 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/14 12:31:39 1.54 --- ../ircu2.10.06/ircd/s_debug.c 1999/10/15 08:24:25 1.55 *************** *** 378,383 **** --- 378,384 ---- writeb[5], writeb[6], writeb[7], writeb[8], writeb[9]); return; } + #endif /* DEBUGMODE */ void count_memory(aClient *cptr, char *nick) Index: ../ircu2.10.06/ircd/s_misc.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_misc.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** ../ircu2.10.06/ircd/s_misc.c 1999/10/08 19:25:35 1.7 --- ../ircu2.10.06/ircd/s_misc.c 1999/10/15 08:24:25 1.8 *************** *** 341,347 **** { sprintf_irc(sendbuf, ":%s NOTICE * :*** Notice -- Client exiting: %s (%s@%s) [%s] [%s]", ! me.name, bcptr->name, bcptr->user->username, bcptr->user->host, comment, inetntoa(bcptr->ip)); sendbufto_op_mask(SNO_CONNEXIT); } --- 341,347 ---- { sprintf_irc(sendbuf, ":%s NOTICE * :*** Notice -- Client exiting: %s (%s@%s) [%s] [%s]", ! me.name, bcptr->name, bcptr->user->username, bcptr->user->host, comment, inetntoa(bcptr->ip)); sendbufto_op_mask(SNO_CONNEXIT); } Index: ../ircu2.10.06/ircd/s_serv.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_serv.c,v retrieving revision 1.36 retrieving revision 1.37 diff -c -r1.36 -r1.37 *** ../ircu2.10.06/ircd/s_serv.c 1999/10/14 12:31:39 1.36 --- ../ircu2.10.06/ircd/s_serv.c 1999/10/15 08:24:25 1.37 *************** *** 62,74 **** /* * Las tablas con los registros, serie, version ... */ ! int tabla_residente [DBH_MAX_TABLA]; ! unsigned long tabla_cuantos [DBH_MAX_TABLA]; ! struct dbh_reg *tabla_datos [DBH_MAX_TABLA][DBH_HASH_SIZE]; ! unsigned long tabla_version [DBH_MAX_TABLA]; ! unsigned long tabla_serie [DBH_MAX_TABLA]; ! unsigned long tabla_hash_hi [DBH_MAX_TABLA]; ! unsigned long tabla_hash_lo [DBH_MAX_TABLA]; #endif /* DB_ESNET || DB_HISPANO */ --- 62,74 ---- /* * Las tablas con los registros, serie, version ... */ ! int tabla_residente[DBH_MAX_TABLA]; ! unsigned long tabla_cuantos[DBH_MAX_TABLA]; ! struct dbh_reg *tabla_datos[DBH_MAX_TABLA][DBH_HASH_SIZE]; ! unsigned long tabla_version[DBH_MAX_TABLA]; ! unsigned long tabla_serie[DBH_MAX_TABLA]; ! unsigned long tabla_hash_hi[DBH_MAX_TABLA]; ! unsigned long tabla_hash_lo[DBH_MAX_TABLA]; #endif /* DB_ESNET || DB_HISPANO */ *************** *** 739,745 **** cptr->serv->prot = prot; cptr->serv->ghost = ghost; #ifdef DB_ESNET ! cptr->serv->esnet_db=0; /* De momento exigimos un BURST de la base de datos */ #endif SetServerYXX(cptr, cptr, parv[6]); if (start_timestamp > 780000000) --- 739,745 ---- cptr->serv->prot = prot; cptr->serv->ghost = ghost; #ifdef DB_ESNET ! cptr->serv->esnet_db = 0; /* De momento exigimos un BURST de la base de datos */ #endif SetServerYXX(cptr, cptr, parv[6]); if (start_timestamp > 780000000) *************** *** 832,866 **** cptr->serv->timestamp, MAJOR_PROTOCOL, NumServCap(&me), (me.info[0]) ? (me.info) : "IRCers United"); #ifdef DB_ESNET ! sendto_one(cptr,"%s DB * 0 J %lu 2",NumServ(&me),tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO ! /* ! * Cuando se nos conectan enviamos una linea 'DBH * 0 J' para cada una ! * de las posibles tablas (A..Z), esto hace un pelin mas largo el ! * netburst, pero nos ayuda a actualizar todas las tablas. ! * 1999/06/20 savage@apostols.org ! * OPTIMIZACION a implementar: ! * Nodo->Hub: Solo mando relacion de las residentes ! * Hub->Nodo: No mando ninguna (el nodo NO ha de actualizarme) ! * Hub->Hub : Las mando todas, que remedio ... ! * 1999/06/30 savage@apostols.org ! */ ! { ! int es_hub=0; ! if(find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub=1; ! for(i=DBH_PRIMERA_TABLA; i<=DBH_ULTIMA_TABLA; i++) ! { #ifndef HUB ! /* soy un LEAF node */ ! if(!tabla_residente[i]) ! continue; /* Nodo->Hub: solo residentes */ #endif /* !HUB */ ! sendto_one(cptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, (char)i, tabla_version[i], tabla_serie[i]); ! } } #endif /* DB_HISPANO */ --- 832,867 ---- cptr->serv->timestamp, MAJOR_PROTOCOL, NumServCap(&me), (me.info[0]) ? (me.info) : "IRCers United"); #ifdef DB_ESNET ! sendto_one(cptr, "%s DB * 0 J %lu 2", NumServ(&me), ! tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO ! /* ! * Cuando se nos conectan enviamos una linea 'DBH * 0 J' para cada una ! * de las posibles tablas (A..Z), esto hace un pelin mas largo el ! * netburst, pero nos ayuda a actualizar todas las tablas. ! * 1999/06/20 savage@apostols.org ! * OPTIMIZACION a implementar: ! * Nodo->Hub: Solo mando relacion de las residentes ! * Hub->Nodo: No mando ninguna (el nodo NO ha de actualizarme) ! * Hub->Hub : Las mando todas, que remedio ... ! * 1999/06/30 savage@apostols.org ! */ ! { ! int es_hub = 0; ! if (find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub = 1; ! for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) ! { #ifndef HUB ! /* soy un LEAF node */ ! if (!tabla_residente[i]) ! continue; /* Nodo->Hub: solo residentes */ #endif /* !HUB */ ! sendto_one(cptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, (char)i, tabla_version[i], tabla_serie[i]); ! } } #endif /* DB_HISPANO */ *************** *** 1024,1034 **** acptr->user->username, acptr->user->host, acptr->user->server->name, acptr->info); #if defined(DB_HISPANO) || defined(DB_ESNET) ! send_umode(cptr, acptr, 0, SEND_UMODES, 0, SEND_HMODES); #else ! send_umode(cptr, acptr, 0, SEND_UMODES); #endif ! send_user_joins(cptr, acptr); } else { --- 1025,1035 ---- acptr->user->username, acptr->user->host, acptr->user->server->name, acptr->info); #if defined(DB_HISPANO) || defined(DB_ESNET) ! send_umode(cptr, acptr, 0, SEND_UMODES, 0, SEND_HMODES); #else ! send_umode(cptr, acptr, 0, SEND_UMODES); #endif ! send_user_joins(cptr, acptr); } else { *************** *** 1187,1232 **** * Se cifra v[0]^x[0], v[1]^x[1], para poder hacer CBC facilmente. * */ ! void tea(unsigned long v[],unsigned long k[],unsigned long x[]) { ! unsigned long y=v[0]^x[0],z=v[1]^x[1],sum=0,delta=0x9E3779B9; ! unsigned long a=k[0],b=k[1],n=32; ! unsigned long c=0,d=0; ! while(n-->0) ! { ! sum += delta; ! y += (z << 4)+a ^ z+sum ^ (z >> 5)+b; ! z += (y << 4)+c ^ y+sum ^ (y >> 5)+d; ! } ! x[0]=y; x[1]=z; } ! void actualiza_hash(char *registro,char que_bdd) { ! unsigned long buffer[129*sizeof(unsigned long)]; ! unsigned long *p=buffer; ! unsigned long x[2],v[2],k[2]; ! char *p2; /* ** Calculamos el HASH */ ! memset(buffer,0,sizeof(buffer)); ! strncpy((char *)buffer,registro,sizeof(buffer)-1); ! while((p2=strchr((char *)buffer,'\n'))) *p2='\0'; ! while((p2=strchr((char *)buffer,'\r'))) *p2='\0'; ! k[0]=k[1]=0; ! x[0]=tabla_hash_hi[que_bdd]; ! x[1]=tabla_hash_lo[que_bdd]; ! while(*p) { ! v[0]=ntohl(*p++); ! v[1]=ntohl(*p++); ! tea(v,k,x); } ! tabla_hash_hi[que_bdd]=x[0]; ! tabla_hash_lo[que_bdd]=x[1]; } /* --- 1188,1237 ---- * Se cifra v[0]^x[0], v[1]^x[1], para poder hacer CBC facilmente. * */ ! void tea(unsigned long v[], unsigned long k[], unsigned long x[]) { ! unsigned long y = v[0] ^ x[0], z = v[1] ^ x[1], sum = 0, delta = 0x9E3779B9; ! unsigned long a = k[0], b = k[1], n = 32; ! unsigned long c = 0, d = 0; ! while (n-- > 0) ! { ! sum += delta; ! y += (z << 4) + a ^ z + sum ^ (z >> 5) + b; ! z += (y << 4) + c ^ y + sum ^ (y >> 5) + d; ! } ! x[0] = y; ! x[1] = z; } ! void actualiza_hash(char *registro, char que_bdd) { ! unsigned long buffer[129 * sizeof(unsigned long)]; ! unsigned long *p = buffer; ! unsigned long x[2], v[2], k[2]; ! char *p2; /* ** Calculamos el HASH */ ! memset(buffer, 0, sizeof(buffer)); ! strncpy((char *)buffer, registro, sizeof(buffer) - 1); ! while ((p2 = strchr((char *)buffer, '\n'))) ! *p2 = '\0'; ! while ((p2 = strchr((char *)buffer, '\r'))) ! *p2 = '\0'; ! k[0] = k[1] = 0; ! x[0] = tabla_hash_hi[que_bdd]; ! x[1] = tabla_hash_lo[que_bdd]; ! while (*p) ! { ! v[0] = ntohl(*p++); ! v[1] = ntohl(*p++); ! tea(v, k, x); } ! tabla_hash_hi[que_bdd] = x[0]; ! tabla_hash_lo[que_bdd] = x[1]; } /* *************** *** 1237,1267 **** */ void dbh_eliminar_borrados(char tabla) { ! FILE *f; ! struct dbh_reg *reg; ! int i; ! tabla_cuantos[tabla]=0; ! ! for(i=0;inext) ! if(reg->borrado) ! { ! if(reg->prev) ! reg->prev->next=reg->next; ! else ! tabla_datos[tabla][i]=reg->next; /* era el primero */ ! if(reg->next) ! reg->next->prev=reg->prev; ! if(reg->clave) ! RunFree(reg->clave); ! if(reg->valor) ! RunFree(reg->valor); ! RunFree(reg); ! } else ! tabla_cuantos[tabla]++; ! ! return; } /* --- 1242,1273 ---- */ void dbh_eliminar_borrados(char tabla) { ! FILE *f; ! struct dbh_reg *reg; ! int i; ! ! tabla_cuantos[tabla] = 0; ! ! for (i = 0; i < DBH_HASH_SIZE; i++) ! for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) ! if (reg->borrado) ! { ! if (reg->prev) ! reg->prev->next = reg->next; ! else ! tabla_datos[tabla][i] = reg->next; /* era el primero */ ! if (reg->next) ! reg->next->prev = reg->prev; ! if (reg->clave) ! RunFree(reg->clave); ! if (reg->valor) ! RunFree(reg->valor); ! RunFree(reg); ! } ! else ! tabla_cuantos[tabla]++; ! return; } /* *************** *** 1272,1319 **** */ void dbh_eliminar_registro(char tabla, char *clave) { ! struct dbh_reg *reg; ! int hashi, i=0; ! char *c; ! ! c=RunMalloc(strlen(clave)+1); ! if(c==NULL) ! return; ! strcpy(c,clave); ! /* paso a minusculas */ ! while( c[i] != 0 ) { ! c[i]=toLower(c[i]); ! i++; ! } ! ! hashi=dbh_hash_registro(c); ! ! for(reg=tabla_datos[tabla][hashi];reg!=NULL;reg=reg->next) ! if(!strcmp(reg->clave,c)) ! { ! /* ! sendto_ops("Elimino T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); ! */ ! if(reg->prev) ! reg->prev->next=reg->next; ! else ! tabla_datos[tabla][hashi]=reg->next; /* era el primero */ ! ! if(reg->next) ! reg->next->prev=reg->prev; ! ! if(reg->clave) ! RunFree(reg->clave); ! if(reg->valor) ! RunFree(reg->valor); ! RunFree(reg); ! tabla_cuantos[tabla]--; ! break; ! } ! ! RunFree(c); return; } /* --- 1278,1326 ---- */ void dbh_eliminar_registro(char tabla, char *clave) { ! struct dbh_reg *reg; ! int hashi, i = 0; ! char *c; + c = RunMalloc(strlen(clave) + 1); + if (c == NULL) return; + strcpy(c, clave); + /* paso a minusculas */ + while (c[i] != 0) + { + c[i] = toLower(c[i]); + i++; + } + + hashi = dbh_hash_registro(c); + + for (reg = tabla_datos[tabla][hashi]; reg != NULL; reg = reg->next) + if (!strcmp(reg->clave, c)) + { + /* + sendto_ops("Elimino T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); + */ + if (reg->prev) + reg->prev->next = reg->next; + else + tabla_datos[tabla][hashi] = reg->next; /* era el primero */ + + if (reg->next) + reg->next->prev = reg->prev; + + if (reg->clave) + RunFree(reg->clave); + if (reg->valor) + RunFree(reg->valor); + RunFree(reg); + tabla_cuantos[tabla]--; + break; + } + + RunFree(c); + + return; } /* *************** *** 1324,1400 **** */ void dbh_insertar_registro(char tabla, char *destino, char *clave, char *valor) { ! struct dbh_reg *reg, *rh; ! int hashi; ! char *c, *v, *d; ! aClient *acptr; ! int i=0; ! ! /* lo borro primero, por si es un cambio */ ! dbh_eliminar_registro(tabla, clave); ! ! c=RunMalloc(strlen(clave)+1); ! if(!c) return; ! v=RunMalloc(strlen(valor)+1); ! if(!v) { ! RunFree(c); ! return; ! } ! d=RunMalloc(strlen(destino)+1); ! if(!d) { ! RunFree(c); ! RunFree(v); ! return; ! } ! ! reg=RunMalloc(sizeof(struct dbh_reg)); ! if(!reg) { ! RunFree(c); ! RunFree(v); ! RunFree(d); ! return; ! } ! ! strcpy(c,clave); ! strcpy(v,valor); ! strcpy(d,destino); ! ! /* paso a minusculas */ ! while( c[i] != 0 ) { ! c[i]=toLower(c[i]); ! i++; ! } ! ! /* creo el registro */ ! reg->clave=c; ! reg->valor=v; ! reg->destino=d; ! reg->next=reg->prev=NULL; ! reg->borrado=0; ! reg->compactado=0; ! ! /* marco como local si es para mi o broadcast */ ! if( *d=='*' || ((acptr=find_match_server(d)) && (IsMe(acptr))) ) ! reg->local=1; ! else ! reg->local=0; ! /* busco hash */ ! hashi=dbh_hash_registro(reg->clave); ! /* sendto_ops("Inserto T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); ! */ ! rh=tabla_datos[tabla][hashi]; ! tabla_datos[tabla][hashi]=reg; ! reg->next=rh; ! if(rh) ! rh->prev=reg; ! tabla_cuantos[tabla]++; ! return; } /* --- 1331,1412 ---- */ void dbh_insertar_registro(char tabla, char *destino, char *clave, char *valor) { ! struct dbh_reg *reg, *rh; ! int hashi; ! char *c, *v, *d; ! aClient *acptr; ! int i = 0; ! /* lo borro primero, por si es un cambio */ ! dbh_eliminar_registro(tabla, clave); ! c = RunMalloc(strlen(clave) + 1); ! if (!c) ! return; ! v = RunMalloc(strlen(valor) + 1); ! if (!v) ! { ! RunFree(c); ! return; ! } ! d = RunMalloc(strlen(destino) + 1); ! if (!d) ! { ! RunFree(c); ! RunFree(v); ! return; ! } ! ! reg = RunMalloc(sizeof(struct dbh_reg)); ! if (!reg) ! { ! RunFree(c); ! RunFree(v); ! RunFree(d); ! return; ! } ! ! strcpy(c, clave); ! strcpy(v, valor); ! strcpy(d, destino); ! ! /* paso a minusculas */ ! while (c[i] != 0) ! { ! c[i] = toLower(c[i]); ! i++; ! } ! ! /* creo el registro */ ! reg->clave = c; ! reg->valor = v; ! reg->destino = d; ! reg->next = reg->prev = NULL; ! reg->borrado = 0; ! reg->compactado = 0; ! ! /* marco como local si es para mi o broadcast */ ! if (*d == '*' || ((acptr = find_match_server(d)) && (IsMe(acptr)))) ! reg->local = 1; ! else ! reg->local = 0; ! ! /* busco hash */ ! hashi = dbh_hash_registro(reg->clave); ! ! /* sendto_ops("Inserto T='%c' C='%s' H=%u",tabla, reg->clave, hashi ); ! */ ! rh = tabla_datos[tabla][hashi]; ! tabla_datos[tabla][hashi] = reg; ! reg->next = rh; ! if (rh) ! rh->prev = reg; ! tabla_cuantos[tabla]++; ! return; } /* *************** *** 1403,1438 **** * busca un registro en memoria ... * 1999/06/23 savage@apostols.org */ ! struct dbh_reg * dbh_buscar_registro(char tabla, char *clave) { ! struct dbh_reg *reg; ! int hashi, i=0; ! char *c; ! ! c=RunMalloc(strlen(clave)+1); ! if(c==NULL) ! return; ! strcpy(c,clave); ! /* paso a minusculas */ ! while( c[i] != 0 ) { ! c[i]=toLower(c[i]); ! i++; ! } ! /* busco hash */ ! hashi=dbh_hash_registro(c); ! /* sendto_ops("Busco T='%c' C='%s' H=%u",tabla, c, hashi ); ! */ ! ! for(reg=tabla_datos[tabla][hashi];reg!=NULL;reg=reg->next) ! if(!strcmp(reg->clave,c)) { ! RunFree(c); ! return reg; ! } ! RunFree(c); ! return NULL; } /* --- 1415,1452 ---- * busca un registro en memoria ... * 1999/06/23 savage@apostols.org */ ! struct dbh_reg *dbh_buscar_registro(char tabla, char *clave) { ! struct dbh_reg *reg; ! int hashi, i = 0; ! char *c; ! ! c = RunMalloc(strlen(clave) + 1); ! if (c == NULL) ! return; ! strcpy(c, clave); ! /* paso a minusculas */ ! while (c[i] != 0) ! { ! c[i] = toLower(c[i]); ! i++; ! } ! /* busco hash */ ! hashi = dbh_hash_registro(c); ! /* sendto_ops("Busco T='%c' C='%s' H=%u",tabla, c, hashi ); ! */ ! ! for (reg = tabla_datos[tabla][hashi]; reg != NULL; reg = reg->next) ! if (!strcmp(reg->clave, c)) ! { ! RunFree(c); ! return reg; ! } ! RunFree(c); ! return NULL; } /* *************** *** 1441,1458 **** * busca un registro local en memoria ... * 1999/06/23 savage@apostols.org */ ! struct dbh_reg * dbh_buscar_registro_local(char tabla, char *clave) { ! struct dbh_reg *reg; ! reg=dbh_buscar_registro(tabla,clave); ! if(!reg) ! return NULL; ! if(reg->local) ! return reg; ! else ! return NULL; } /* --- 1455,1472 ---- * busca un registro local en memoria ... * 1999/06/23 savage@apostols.org */ ! struct dbh_reg *dbh_buscar_registro_local(char tabla, char *clave) { ! struct dbh_reg *reg; ! reg = dbh_buscar_registro(tabla, clave); ! if (!reg) ! return NULL; ! if (reg->local) ! return reg; ! else ! return NULL; } /* *************** *** 1464,1492 **** */ int dbh_es_miembro(char tabla, char *clave, char *subcadena) { ! int j,i=0; ! char *buff, *f, *s=NULL; ! struct dbh_reg *reg; ! if( (reg=dbh_buscar_registro_local(tabla,clave)) == NULL ) ! return 0; ! buff=RunMalloc(strlen(reg->valor)+1); ! if(!buff) ! return 0; ! strcpy(buff,reg->valor); ! for(f=strtoken(&s,buff,","); f!=NULL; f=strtoken(&s,NULL,",")) { ! j++; ! if(!strCasediff(f,subcadena)) { ! i++; ! break; ! } } ! RunFree(buff); ! return i; } #endif /* defined(DB_ESNET) || defined(DB_HISPANO) */ --- 1478,1507 ---- */ int dbh_es_miembro(char tabla, char *clave, char *subcadena) { ! int j, i = 0; ! char *buff, *f, *s = NULL; ! struct dbh_reg *reg; ! if ((reg = dbh_buscar_registro_local(tabla, clave)) == NULL) ! return 0; ! buff = RunMalloc(strlen(reg->valor) + 1); ! if (!buff) ! return 0; ! strcpy(buff, reg->valor); ! for (f = strtoken(&s, buff, ","); f != NULL; f = strtoken(&s, NULL, ",")) ! { ! j++; ! if (!strCasediff(f, subcadena)) { ! i++; ! break; } + } ! RunFree(buff); ! return i; } #endif /* defined(DB_ESNET) || defined(DB_HISPANO) */ *************** *** 1498,1519 **** * Lee un registro de la base de datos. * */ ! int leer_db(struct tabla_en_memoria *mapeo,char *buf) { ! int cont=0; ! int estado; ! char *p=mapeo->posicion+mapeo->len; ! ! while(mapeo->puntero_rpuntero_r++); ! if(*buf=='\r') continue; ! if((*buf++=='\n')) { ! *--buf='\0'; return cont; } ! if(cont++>500) break; } ! *buf='\0'; return -1; } --- 1513,1538 ---- * Lee un registro de la base de datos. * */ ! int leer_db(struct tabla_en_memoria *mapeo, char *buf) { ! int cont = 0; ! int estado; ! char *p = mapeo->posicion + mapeo->len; ! ! while (mapeo->puntero_r < p) ! { ! *buf = *(mapeo->puntero_r++); ! if (*buf == '\r') ! continue; ! if ((*buf++ == '\n')) ! { ! *--buf = '\0'; return cont; } ! if (cont++ > 500) ! break; } ! *buf = '\0'; return -1; } *************** *** 1523,1561 **** * Se mueve hasta un registro de la base de datos * */ ! int abrir_db(unsigned long registro,char *buf,char bdd,struct tabla_en_memoria *mapeo) { ! int handle; ! int cont; ! char path[1024]; ! struct stat estado; ! *buf='\0'; ! sprintf_irc(path,"%s/tabla.%c",DBPATH,bdd); alarm(3); ! handle=open(path, O_RDONLY, S_IRUSR | S_IWUSR); ! fstat(handle,&estado); ! mapeo->len=estado.st_size; ! mapeo->posicion=mmap(NULL,mapeo->len, ! PROT_READ,MAP_SHARED | MAP_NORESERVE,handle,0); close(handle); alarm(0); ! mapeo->puntero_r= ! mapeo->puntero_w= ! mapeo->posicion; ! if((handle==-1)||(mapeo->posicion==MAP_FAILED)) return -1; ! do { ! cont=leer_db(mapeo,buf); ! if(cont==-1) { ! *buf='\0'; return -1; } ! } while(atol(buf)<=registro); return handle; } ! void cerrar_db(struct tabla_en_memoria *mapeo) { ! munmap(mapeo->posicion,mapeo->len); } /* --- 1542,1584 ---- * Se mueve hasta un registro de la base de datos * */ ! int abrir_db(unsigned long registro, char *buf, char bdd, ! struct tabla_en_memoria *mapeo) { ! int handle; ! int cont; ! char path[1024]; ! struct stat estado; ! *buf = '\0'; ! sprintf_irc(path, "%s/tabla.%c", DBPATH, bdd); alarm(3); ! handle = open(path, O_RDONLY, S_IRUSR | S_IWUSR); ! fstat(handle, &estado); ! mapeo->len = estado.st_size; ! mapeo->posicion = mmap(NULL, mapeo->len, ! PROT_READ, MAP_SHARED | MAP_NORESERVE, handle, 0); close(handle); alarm(0); ! mapeo->puntero_r = mapeo->puntero_w = mapeo->posicion; ! if ((handle == -1) || (mapeo->posicion == MAP_FAILED)) ! return -1; ! do ! { ! cont = leer_db(mapeo, buf); ! if (cont == -1) ! { ! *buf = '\0'; return -1; } ! } ! while (atol(buf) <= registro); return handle; } ! void cerrar_db(struct tabla_en_memoria *mapeo) ! { ! munmap(mapeo->posicion, mapeo->len); } /* *************** *** 1566,1584 **** ** "BDD HASH\n" ** En total, cada linea mide 15 bytes. */ ! void almacena_hash(char que_bdd) { ! char path[1024]; ! char hash[20]; ! int db_file; ! ! sprintf_irc(path,"%s/hashes",DBPATH); ! inttobase64(hash,tabla_hash_hi[que_bdd],6); ! inttobase64(hash+6,tabla_hash_lo[que_bdd],6); alarm(3); ! db_file=open(path,O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); ! sprintf_irc(path,"%c %s\n",que_bdd,hash); ! lseek(db_file,15*(que_bdd-ESNET_BDD),SEEK_SET); ! write(db_file,path,strlen(path)); close(db_file); alarm(0); } --- 1589,1608 ---- ** "BDD HASH\n" ** En total, cada linea mide 15 bytes. */ ! void almacena_hash(char que_bdd) ! { ! char path[1024]; ! char hash[20]; ! int db_file; ! ! sprintf_irc(path, "%s/hashes", DBPATH); ! inttobase64(hash, tabla_hash_hi[que_bdd], 6); ! inttobase64(hash + 6, tabla_hash_lo[que_bdd], 6); alarm(3); ! db_file = open(path, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); ! sprintf_irc(path, "%c %s\n", que_bdd, hash); ! lseek(db_file, 15 * (que_bdd - ESNET_BDD), SEEK_SET); ! write(db_file, path, strlen(path)); close(db_file); alarm(0); } *************** *** 1586,1609 **** /* ** lee_hash */ ! void lee_hash(char que_bdd,unsigned long *hi,unsigned long *lo) { ! char path[1024]; ! char c; ! int db_file; ! sprintf_irc(path,"%s/hashes",DBPATH); alarm(3); ! db_file=open(path,O_RDONLY); ! lseek(db_file,15*(que_bdd-ESNET_BDD)+2,SEEK_SET); ! read(db_file,path,12); close(db_file); alarm(0); ! path[12]='\0'; ! c=path[6]; ! path[6]='\0'; ! *hi=base64toint(path); ! path[6]=c; ! *lo=base64toint(path+6); } /* --- 1610,1634 ---- /* ** lee_hash */ ! void lee_hash(char que_bdd, unsigned long *hi, unsigned long *lo) ! { ! char path[1024]; ! char c; ! int db_file; ! sprintf_irc(path, "%s/hashes", DBPATH); alarm(3); ! db_file = open(path, O_RDONLY); ! lseek(db_file, 15 * (que_bdd - ESNET_BDD) + 2, SEEK_SET); ! read(db_file, path, 12); close(db_file); alarm(0); ! path[12] = '\0'; ! c = path[6]; ! path[6] = '\0'; ! *hi = base64toint(path); ! path[6] = c; ! *lo = base64toint(path + 6); } /* *************** *** 1615,1645 **** * modificado para usar las hash con funciones dbh_* * 1999/06/30 savage@apostols.org */ ! void db_alta(char *registro,char que_bdd,int guarda_hash) { ! char *p0, *p1, *p2, *p3, *p4; ! actualiza_hash(registro,que_bdd); ! if(guarda_hash) almacena_hash(que_bdd); ! p0=strtok(registro," "); /* serie */ ! p1=strtok(NULL, " "); /* destino */ ! p2=strtok(NULL, " "); /* tabla */ ! p3=strtok(NULL, " \r\n"); /* clave */ ! p4=strtok(NULL, "\r\n"); /* valor (opcional) */ ! if(p3==NULL) ! return; /* registro incompleto */ ! tabla_serie[que_bdd]=atol(p0); ! if(tabla_residente[que_bdd]) { ! if(p4==NULL) /* Borrado */ ! dbh_eliminar_registro(que_bdd, p3); ! else ! dbh_insertar_registro(que_bdd, p1, p3, p4); ! } } /* --- 1640,1672 ---- * modificado para usar las hash con funciones dbh_* * 1999/06/30 savage@apostols.org */ ! void db_alta(char *registro, char que_bdd, int guarda_hash) { ! char *p0, *p1, *p2, *p3, *p4; ! actualiza_hash(registro, que_bdd); ! if (guarda_hash) ! almacena_hash(que_bdd); ! p0 = strtok(registro, " "); /* serie */ ! p1 = strtok(NULL, " "); /* destino */ ! p2 = strtok(NULL, " "); /* tabla */ ! p3 = strtok(NULL, " \r\n"); /* clave */ ! p4 = strtok(NULL, "\r\n"); /* valor (opcional) */ ! if (p3 == NULL) ! return; /* registro incompleto */ ! tabla_serie[que_bdd] = atol(p0); ! if (tabla_residente[que_bdd]) ! { ! if (p4 == NULL) /* Borrado */ ! dbh_eliminar_registro(que_bdd, p3); ! else ! dbh_insertar_registro(que_bdd, p1, p3, p4); ! } } /* *************** *** 1651,1698 **** ** Se invoca cuando re recibe un CheckPoint, y el ** formato es "serie destino id * texto" */ ! void db_pack(char *registro,char que_bdd) { ! int db_file; ! char path[1024]; ! char *map; ! char *lectura,*escritura,*p; ! char *clave,*valor; ! char c; ! unsigned long len,len2; ! struct stat estado; ! struct dbh_reg *reg; /* ** El primer valor es el numero de serie actual */ ! tabla_serie[que_bdd]=atol(registro); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); alarm(3); ! db_file=open(path,O_RDWR | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); ! fstat(db_file,&estado); ! len=estado.st_size; ! map=mmap(NULL,len,PROT_READ | PROT_WRITE, ! MAP_SHARED | MAP_NORESERVE,db_file,0); alarm(0); ! if(!tabla_residente[que_bdd]) { /* No residente -> No pack */ ! escritura=map+len; goto fin; } ! tabla_hash_hi[que_bdd]=0; ! tabla_hash_lo[que_bdd]=0; ! p=lectura=escritura=map; ! while(lectura No pack */ ! escritura = map + len; goto fin; } ! tabla_hash_hi[que_bdd] = 0; ! tabla_hash_lo[que_bdd] = 0; ! p = lectura = escritura = map; ! while (lectura < map + len) ! { ! p = strchr(p, ' ') + 1; /* Destino */ ! p = strchr(p, ' ') + 1; /* BDD */ ! valor = clave = p = strchr(p, ' ') + 1; /* Clave */ ! while ((p < map + len) && (*p != '\n') && (*p != '\r')) ! p++; ! while ((*valor != ' ') && (valor < p)) ! valor++; ! valor++; /* Nos saltamos el espacio */ /* ** Los registros "*" son borrados automaticamente *************** *** 1702,1754 **** ** Solo se mantiene el nuevo, porque es ** el que se graba tras la compactacion */ ! if(valorvalor); ! if((valor+len2==p)&& ! (!strncmp(valor,reg->valor,len2))) { /* !!El mismo!! */ /* ** Actualizamos HASH */ ! if((*p=='\n')||(*p=='\r')) { ! c=*p; ! *p='\0'; ! actualiza_hash(lectura,que_bdd); ! *p=c; ! } else { /* Estamos al final y no hay retorno de carro */ ! memcpy(path,lectura,p-lectura); ! path[p-lectura]='\0'; ! actualiza_hash(path,que_bdd); ! } ! ! while((pvalor); ! if ((valor + len2 == p) && (!strncmp(valor, reg->valor, len2))) ! { /* !!El mismo!! */ /* ** Actualizamos HASH */ ! if ((*p == '\n') || (*p == '\r')) ! { ! c = *p; ! *p = '\0'; ! actualiza_hash(lectura, que_bdd); ! *p = c; ! } ! else ! { /* Estamos al final y no hay retorno de carro */ ! memcpy(path, lectura, p - lectura); ! path[p - lectura] = '\0'; ! actualiza_hash(path, que_bdd); ! } ! ! while ((p < map + len) && ((*p == '\n') || (*p == '\r'))) ! p++; ! memcpy(escritura, lectura, p - lectura); ! escritura += p - lectura; ! lectura = p; ! continue; /* MUY IMPORTANTE */ ! } /* Hay otro mas moderno que este */ ! } /* El registro fue borrado */ ! } /* Es un borrado */ ! while ((p < map + len) && ((*p == '\n') || (*p == '\r'))) ! p++; ! lectura = p; } fin: ! ! munmap(map, len); alarm(3); ! ftruncate(db_file, escritura - map); ! lseek(db_file, 0, SEEK_END); ! write(db_file, registro, strlen(registro)); /* CheckPoint */ close(db_file); alarm(0); ! actualiza_hash(registro, que_bdd); almacena_hash(que_bdd); } *************** *** 1761,1818 **** */ void borrar_db(char que_bdd) { ! int i; ! struct dbh_reg *reg; ! for(i=0;inext) ! reg->borrado=1; /* Error introducido en DBH ** BUGFIX! */ ! tabla_serie[que_bdd]=0; ! tabla_cuantos[que_bdd]=0; ! tabla_hash_hi[que_bdd]=0; ! tabla_hash_lo[que_bdd]=0; } ! static void corta_si_multiples_hubs(aClient *cptr,char que_bdd) { ! char buf[1024]; ! Dlink *lp; ! int num_hubs=0; ! aClient *acptr; ! for(lp = me.serv->down; lp; lp = lp->next) { ! if(find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name,CONF_HUB)!=NULL) num_hubs++; } ! if(num_hubs>=2) { /* ** No podemos simplemente hace el bucle, porque ** el "exit_client()" modifica la estructura */ ! corta: ! if(num_hubs-->1) { /* Deja un HUB conectado */ ! for(lp = me.serv->down; lp; lp = lp->next) { ! acptr=lp->value.cptr; /* ** Si se especifica que se desea mantener un HUB ** en concreto, respeta esa peticion */ ! if((acptr!=cptr) && ! find_conf_host(acptr->confs, ! acptr->name,CONF_HUB)!=NULL) { ! sprintf_irc(buf, ! "BDD '%c' inconsistente. Resincronizando...", ! que_bdd); ! exit_client(acptr,acptr, ! &me,buf); ! goto corta; ! } } } } --- 1799,1859 ---- */ void borrar_db(char que_bdd) { ! int i; ! struct dbh_reg *reg; ! for (i = 0; i < DBH_HASH_SIZE; i++) ! for (reg = tabla_datos[que_bdd][i]; reg != NULL; reg = reg->next) ! reg->borrado = 1; /* Error introducido en DBH ** BUGFIX! */ ! tabla_serie[que_bdd] = 0; ! tabla_cuantos[que_bdd] = 0; ! tabla_hash_hi[que_bdd] = 0; ! tabla_hash_lo[que_bdd] = 0; } ! static void corta_si_multiples_hubs(aClient *cptr, char que_bdd) ! { ! char buf[1024]; ! Dlink *lp; ! int num_hubs = 0; ! aClient *acptr; ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name, CONF_HUB) != NULL) num_hubs++; } ! if (num_hubs >= 2) ! { /* ** No podemos simplemente hace el bucle, porque ** el "exit_client()" modifica la estructura */ ! corta: ! if (num_hubs-- > 1) ! { /* Deja un HUB conectado */ ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! acptr = lp->value.cptr; /* ** Si se especifica que se desea mantener un HUB ** en concreto, respeta esa peticion */ ! if ((acptr != cptr) && ! find_conf_host(acptr->confs, acptr->name, CONF_HUB) != NULL) ! { ! sprintf_irc(buf, ! "BDD '%c' inconsistente. Resincronizando...", que_bdd); ! exit_client(acptr, acptr, &me, buf); ! goto corta; ! } } } } *************** *** 1826,1849 **** */ void initdb2(char que_bdd) { ! unsigned long hi,lo; ! char buf[1024]; ! char path[1024]; ! int db_file; ! Dlink *lp; ! struct tabla_en_memoria mapeo; borrar_db(que_bdd); ! db_file=abrir_db(0,buf,que_bdd,&mapeo); ! if(db_file!=-1) do { ! /* db_alta modifica la cadena */ ! if(tabla_residente[que_bdd]) { ! db_alta(buf,que_bdd,0); ! } else { ! actualiza_hash(buf,que_bdd); } ! } while(leer_db(&mapeo,buf)!=-1); cerrar_db(&mapeo); dbh_eliminar_borrados(que_bdd); --- 1867,1896 ---- */ void initdb2(char que_bdd) { ! unsigned long hi, lo; ! char buf[1024]; ! char path[1024]; ! int db_file; ! Dlink *lp; ! struct tabla_en_memoria mapeo; borrar_db(que_bdd); ! db_file = abrir_db(0, buf, que_bdd, &mapeo); ! if (db_file != -1) ! do ! { ! /* db_alta modifica la cadena */ ! if (tabla_residente[que_bdd]) ! { ! db_alta(buf, que_bdd, 0); ! } ! else ! { ! actualiza_hash(buf, que_bdd); ! } } ! while (leer_db(&mapeo, buf) != -1); cerrar_db(&mapeo); dbh_eliminar_borrados(que_bdd); *************** *** 1852,1866 **** ** Ahora comprueba que el HASH de la BDD ** cargada se corresponda con el HASH almacenado */ ! lee_hash(que_bdd,&hi,&lo); ! if((tabla_hash_hi[que_bdd]!=hi) || ! (tabla_hash_lo[que_bdd]!=lo)) { sendto_ops("ATENCION - Base de Datos " ! "'%c' aparentemente corrupta. Borrando...",que_bdd); borrar_db(que_bdd); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); alarm(3); ! db_file=open(path,O_TRUNC,S_IRUSR | S_IWUSR); close(db_file); alarm(0); --- 1899,1913 ---- ** Ahora comprueba que el HASH de la BDD ** cargada se corresponda con el HASH almacenado */ ! lee_hash(que_bdd, &hi, &lo); ! if ((tabla_hash_hi[que_bdd] != hi) || (tabla_hash_lo[que_bdd] != lo)) ! { sendto_ops("ATENCION - Base de Datos " ! "'%c' aparentemente corrupta. Borrando...", que_bdd); borrar_db(que_bdd); ! sprintf_irc(path, "%s/tabla.%c", DBPATH, que_bdd); alarm(3); ! db_file = open(path, O_TRUNC, S_IRUSR | S_IWUSR); close(db_file); alarm(0); *************** *** 1868,1917 **** ** Solucion temporal ** Corta conexiones con los HUBs */ ! for(lp = me.serv->down; lp; lp = lp->next) { ! if(find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name,CONF_HUB)!=NULL) { ! sprintf_irc(buf, ! "BDD '%c' inconsistente. Resincronizando...", ! que_bdd); ! exit_client(lp->value.cptr,lp->value.cptr, ! &me,buf); } } /* ** Fin solucion temporal */ ! corta_si_multiples_hubs(NULL,que_bdd); sendto_ops("Solicitando actualizacion BDD '%c' " ! "a los nodos vecinos.",que_bdd); /* ** Solo pide a los HUBs, porque no se ** aceptan datos de leafs. */ ! for(lp = me.serv->down; lp; lp = lp->next) { ! if(find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name,CONF_HUB)!=NULL) { ! sendto_one(lp->value.cptr,"%s DB %s 0 J %lu %c", ! NumServ(&me),lp->value.cptr->name, ! tabla_serie[que_bdd],que_bdd); } } } almacena_hash(que_bdd); } ! void initdb(void) { ! char c; ! tabla_residente[ESNET_NICKDB]=1; #if defined(DB_ESNET) && defined(ESNET_CLONES) ! tabla_residente[ESNET_CLONESDB]=1; #endif ! for(c=ESNET_BDD;c<=ESNET_BDD_END;c++) initdb2(c); } --- 1915,1965 ---- ** Solucion temporal ** Corta conexiones con los HUBs */ ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name, CONF_HUB) != NULL) ! { ! sprintf_irc(buf, "BDD '%c' inconsistente. Resincronizando...", que_bdd); ! exit_client(lp->value.cptr, lp->value.cptr, &me, buf); } } /* ** Fin solucion temporal */ ! corta_si_multiples_hubs(NULL, que_bdd); sendto_ops("Solicitando actualizacion BDD '%c' " ! "a los nodos vecinos.", que_bdd); /* ** Solo pide a los HUBs, porque no se ** aceptan datos de leafs. */ ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name, CONF_HUB) != NULL) ! { ! sendto_one(lp->value.cptr, "%s DB %s 0 J %lu %c", ! NumServ(&me), lp->value.cptr->name, tabla_serie[que_bdd], que_bdd); } } } almacena_hash(que_bdd); } ! void initdb(void) ! { ! char c; ! tabla_residente[ESNET_NICKDB] = 1; #if defined(DB_ESNET) && defined(ESNET_CLONES) ! tabla_residente[ESNET_CLONESDB] = 1; #endif ! for (c = ESNET_BDD; c <= ESNET_BDD_END; c++) initdb2(c); } *************** *** 1923,2148 **** */ void reload_db(void) { ! char buf[16]; ! char c; sendto_ops("Releyendo Bases de Datos..."); initdb(); ! for(c=ESNET_BDD;c<=ESNET_BDD_END;c++) { ! if(tabla_serie[c]) { ! inttobase64(buf,tabla_hash_hi[c],6); ! inttobase64(buf+6,tabla_hash_lo[c],6); sendto_ops("DB: '%c'. Ultimo registro: %lu. HASH: %s", ! c,tabla_serie[c],buf); } } } - /* * m_db * * Gestion de la base de datos - ESNET * 29/May/98 jcea@argo.es * ! */ int m_db(aClient *cptr, aClient *sptr, int parc, char *parv[]) { ! unsigned long db; ! aClient *acptr; ! Dlink *lp; ! char db_buf[1024],db_buf2[1024]; ! char path[1024]; ! int db_file; ! int es_hub=0; ! char *p,*p2,*p3,*p4; ! char que_bdd=ESNET_NICKDB; ! unsigned long mascara_bdd; ! int cont; ! struct tabla_en_memoria mapeo; ! ! ! if(!IsServer(sptr) || parc<5) return 0; ! db=atol(parv[2]); ! if(find_conf_host(cptr->confs,cptr->name,CONF_HUB)!=NULL) es_hub=!0; ! if(!db) { ! db=atol(parv[4]); ! ! if(parc==6) { ! que_bdd=*parv[5]; ! if((que_bdd<'a')||(que_bdd>'z')) ! if((que_bdd<'2')||(que_bdd>'9')||(*parv[3]!='J')) return 0; ! else que_bdd=ESNET_NICKDB; ! } ! mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); ! ! switch(*parv[3]) { ! case 'B': ! if(es_hub) sendto_one(sptr,"%s DB %s 0 J %lu %c", ! NumServ(&me),parv[0],tabla_serie[que_bdd],que_bdd); ! return 0; ! break; ! case 'J': ! if((parc==6)&&(*parv[5]>='2')&&(*parv[5]<='9')) { /* ** Informamos del estado de nuestras BDD */ ! for(cont=ESNET_BDD;cont<=ESNET_BDD_END;cont++) { ! if(cont!=ESNET_NICKDB) /* No mandamos nicks de nuevo */ ! sendto_one(sptr,"%s DB %s 0 J %lu %c", ! NumServ(&me),parv[0],tabla_serie[cont],cont); ! } ! } ! cont=10; ! ! if(db>=tabla_serie[que_bdd]) { /* Se le pueden mandar registros individuales */ ! sptr->serv->esnet_db|=mascara_bdd; ! return 0; ! break; ! } else if((sptr->serv->esnet_db)&mascara_bdd) { /* ** Teniamos el grifo abierto, y ahora ** nos esta pidiendo registros antiguos. ** Eso SOLO ocurre si ha detectado que su ** copia local de la BDD esta corrupta. */ ! sptr->serv->esnet_db&=~mascara_bdd; /* ** Borramos su BDD porque es posible ** que le hayamos enviado mas registros. ** Es preferible empezar desde cero. */ ! sendto_one(sptr,"%s DB %s 0 D BDD_CORRUPTA %c", ! NumServ(&me),sptr->name,que_bdd); ! db=0; /* Nos curamos en salud; se la enviamos entera */ ! } ! ! db_file=abrir_db(db,db_buf,que_bdd,&mapeo); ! if(db_file==-1) return 0; /* Problemas con la DB */ ! do { ! p=strchr(db_buf,' '); ! if(p==NULL) continue; ! *p++='\0'; ! p2=strchr(p,' '); ! if(p2==NULL) continue; ! *p2++='\0'; ! p3=strchr(p2,' '); ! if(p3==NULL) continue; ! *p3++='\0'; ! p4=strchr(p3,' '); ! if(p4==NULL) { ! sendto_one(sptr,"%s DB %s %s %s %s",NumServ(&me),p,db_buf,p2,p3); ! } else { ! *p4++='\0'; ! sendto_one(sptr,"%s DB %s %s %s %s :%s",NumServ(&me),p,db_buf,p2,p3,p4); ! } ! if(!(--cont)) break; ! } while(leer_db(&mapeo,db_buf)!=-1); ! cerrar_db(&mapeo); ! if(cont) sptr->serv->esnet_db|=mascara_bdd; ! else sendto_one(sptr,"%s DB %s 0 B %lu %c", ! NumServ(&me),parv[0],tabla_serie[que_bdd],que_bdd); ! return 0; ! break; ! case 'D': ! if(!es_hub) return 0; /* ** Por bug en lastNNServer no se puede usar 'find_match_server()' */ ! collapse(parv[1]); ! if(!match(parv[1],me.name)) { ! sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); ! alarm(3); ! db_file=open(path,O_TRUNC,S_IRUSR | S_IWUSR); ! close(db_file); ! alarm(0); ! borrar_db(que_bdd); ! corta_si_multiples_hubs(cptr,que_bdd); /* ** Podemos enviar a 'sptr' tranquilos, porque el ** corte afectaria a todos los HUBs menos a ** traves del que llega la peticion. */ ! sendto_one(sptr,"%s DB %s 0 E %s %c\n", ! NumServ(&me),sptr->name,parv[4],que_bdd); ! } /* ** Como no sabemos si el otro extremo nos ha ** cerrado el grifo o no, nos curamos en salud */ ! sendto_one(cptr,"%s DB %s 0 J %lu %c", ! NumServ(&me),cptr->name,tabla_serie[que_bdd],que_bdd); ! sprintf(db_buf,"%s DB %s 0 D %s %c", ! NumServ(sptr),parv[1],parv[4],que_bdd); ! for(lp = me.serv->down; lp; lp = lp->next) { ! if(lp->value.cptr==cptr) continue; /* ** No sabemos si la otra punta ** va a cumplir la mascara, asi que ** nos curamos en salud. */ ! lp->value.cptr->serv->esnet_db&=~mascara_bdd; ! sendto_one(lp->value.cptr,db_buf); ! } ! return 0; ! break; ! case 'E': /* Podemos ser destinatarios si el otro estaba corrupto */ ! case 'R': ! if((acptr=find_match_server(parv[1]))&&(!IsMe(acptr))) ! sendto_one(acptr,"%s DB %s 0 %c %s %c",NumServ(sptr), ! acptr->name,*parv[3],parv[4],que_bdd); ! return 0; ! break; ! case 'Q': ! if(!es_hub) return 0; /* ** Por bug en lastNNServer no se puede usar 'find_match_server()' */ ! collapse(parv[1]); ! if(!match(parv[1],me.name)) { ! inttobase64(db_buf,tabla_hash_hi[que_bdd],6); ! inttobase64(db_buf+6,tabla_hash_lo[que_bdd],6); ! sendto_one(sptr,"%s DB %s 0 R %lu-%s-%s %c", ! NumServ(&me),sptr->name,tabla_serie[que_bdd], ! db_buf,parv[4],que_bdd); ! } ! sprintf(db_buf,"%s DB %s 0 Q %s %c", ! NumServ(sptr),parv[1],parv[4],que_bdd); ! ! for(lp = me.serv->down; lp; lp = lp->next) { ! if(lp->value.cptr==cptr) continue; ! sendto_one(lp->value.cptr,db_buf); ! } ! return 0; ! break; } return 0; } /* Nuevo registro */ ! que_bdd=*parv[3]; ! if((que_bdd<'a')||(que_bdd>'z')) { ! if(que_bdd=='N') que_bdd=ESNET_NICKDB; ! else return 0; } ! mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); ! if(db<=tabla_serie[que_bdd]) return 0; ! if(!es_hub) return 0; /* ** Ojo, hay que usar 'db' y no 'parv[2]' --- 1971,2238 ---- */ void reload_db(void) { ! char buf[16]; ! char c; sendto_ops("Releyendo Bases de Datos..."); initdb(); ! for (c = ESNET_BDD; c <= ESNET_BDD_END; c++) ! { ! if (tabla_serie[c]) ! { ! inttobase64(buf, tabla_hash_hi[c], 6); ! inttobase64(buf + 6, tabla_hash_lo[c], 6); sendto_ops("DB: '%c'. Ultimo registro: %lu. HASH: %s", ! c, tabla_serie[c], buf); } } } + /* * m_db * * Gestion de la base de datos - ESNET * 29/May/98 jcea@argo.es * ! */ int m_db(aClient *cptr, aClient *sptr, int parc, char *parv[]) { ! unsigned long db; ! aClient *acptr; ! Dlink *lp; ! char db_buf[1024], db_buf2[1024]; ! char path[1024]; ! int db_file; ! int es_hub = 0; ! char *p, *p2, *p3, *p4; ! char que_bdd = ESNET_NICKDB; ! unsigned long mascara_bdd; ! int cont; ! struct tabla_en_memoria mapeo; ! ! ! if (!IsServer(sptr) || parc < 5) ! return 0; ! db = atol(parv[2]); ! if (find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub = !0; ! if (!db) ! { ! db = atol(parv[4]); ! ! if (parc == 6) ! { ! que_bdd = *parv[5]; ! if ((que_bdd < 'a') || (que_bdd > 'z')) ! if ((que_bdd < '2') || (que_bdd > '9') || (*parv[3] != 'J')) ! return 0; ! else ! que_bdd = ESNET_NICKDB; ! } ! mascara_bdd = ((unsigned long)1) << (que_bdd - ESNET_BDD); ! ! switch (*parv[3]) ! { ! case 'B': ! if (es_hub) ! sendto_one(sptr, "%s DB %s 0 J %lu %c", ! NumServ(&me), parv[0], tabla_serie[que_bdd], que_bdd); ! return 0; ! break; ! case 'J': ! if ((parc == 6) && (*parv[5] >= '2') && (*parv[5] <= '9')) ! { /* ** Informamos del estado de nuestras BDD */ ! for (cont = ESNET_BDD; cont <= ESNET_BDD_END; cont++) ! { ! if (cont != ESNET_NICKDB) /* No mandamos nicks de nuevo */ ! sendto_one(sptr, "%s DB %s 0 J %lu %c", ! NumServ(&me), parv[0], tabla_serie[cont], cont); ! } ! } ! cont = 10; ! ! if (db >= tabla_serie[que_bdd]) ! { /* Se le pueden mandar registros individuales */ ! sptr->serv->esnet_db |= mascara_bdd; ! return 0; ! break; ! } ! else if ((sptr->serv->esnet_db) & mascara_bdd) ! { /* ** Teniamos el grifo abierto, y ahora ** nos esta pidiendo registros antiguos. ** Eso SOLO ocurre si ha detectado que su ** copia local de la BDD esta corrupta. */ ! sptr->serv->esnet_db &= ~mascara_bdd; /* ** Borramos su BDD porque es posible ** que le hayamos enviado mas registros. ** Es preferible empezar desde cero. */ ! sendto_one(sptr, "%s DB %s 0 D BDD_CORRUPTA %c", ! NumServ(&me), sptr->name, que_bdd); ! db = 0; /* Nos curamos en salud; se la enviamos entera */ ! } ! db_file = abrir_db(db, db_buf, que_bdd, &mapeo); ! if (db_file == -1) ! return 0; /* Problemas con la DB */ ! do ! { ! p = strchr(db_buf, ' '); ! if (p == NULL) ! continue; ! *p++ = '\0'; ! p2 = strchr(p, ' '); ! if (p2 == NULL) ! continue; ! *p2++ = '\0'; ! p3 = strchr(p2, ' '); ! if (p3 == NULL) ! continue; ! *p3++ = '\0'; ! p4 = strchr(p3, ' '); ! if (p4 == NULL) ! { ! sendto_one(sptr, "%s DB %s %s %s %s", NumServ(&me), p, db_buf, p2, ! p3); ! } ! else ! { ! *p4++ = '\0'; ! sendto_one(sptr, "%s DB %s %s %s %s :%s", NumServ(&me), p, db_buf, ! p2, p3, p4); ! } ! if (!(--cont)) ! break; ! } ! while (leer_db(&mapeo, db_buf) != -1); ! cerrar_db(&mapeo); ! if (cont) ! sptr->serv->esnet_db |= mascara_bdd; ! else ! sendto_one(sptr, "%s DB %s 0 B %lu %c", ! NumServ(&me), parv[0], tabla_serie[que_bdd], que_bdd); ! return 0; ! break; ! ! case 'D': ! if (!es_hub) ! return 0; /* ** Por bug en lastNNServer no se puede usar 'find_match_server()' */ ! collapse(parv[1]); ! if (!match(parv[1], me.name)) ! { ! sprintf_irc(path, "%s/tabla.%c", DBPATH, que_bdd); ! alarm(3); ! db_file = open(path, O_TRUNC, S_IRUSR | S_IWUSR); ! close(db_file); ! alarm(0); ! borrar_db(que_bdd); ! corta_si_multiples_hubs(cptr, que_bdd); /* ** Podemos enviar a 'sptr' tranquilos, porque el ** corte afectaria a todos los HUBs menos a ** traves del que llega la peticion. */ ! sendto_one(sptr, "%s DB %s 0 E %s %c\n", ! NumServ(&me), sptr->name, parv[4], que_bdd); ! } /* ** Como no sabemos si el otro extremo nos ha ** cerrado el grifo o no, nos curamos en salud */ ! sendto_one(cptr, "%s DB %s 0 J %lu %c", ! NumServ(&me), cptr->name, tabla_serie[que_bdd], que_bdd); ! sprintf(db_buf, "%s DB %s 0 D %s %c", ! NumServ(sptr), parv[1], parv[4], que_bdd); ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (lp->value.cptr == cptr) ! continue; /* ** No sabemos si la otra punta ** va a cumplir la mascara, asi que ** nos curamos en salud. */ ! lp->value.cptr->serv->esnet_db &= ~mascara_bdd; ! sendto_one(lp->value.cptr, db_buf); ! } ! return 0; ! break; ! case 'E': /* Podemos ser destinatarios si el otro estaba corrupto */ ! case 'R': ! if ((acptr = find_match_server(parv[1])) && (!IsMe(acptr))) ! sendto_one(acptr, "%s DB %s 0 %c %s %c", NumServ(sptr), ! acptr->name, *parv[3], parv[4], que_bdd); ! return 0; ! break; ! case 'Q': ! if (!es_hub) ! return 0; /* ** Por bug en lastNNServer no se puede usar 'find_match_server()' */ ! collapse(parv[1]); ! if (!match(parv[1], me.name)) ! { ! inttobase64(db_buf, tabla_hash_hi[que_bdd], 6); ! inttobase64(db_buf + 6, tabla_hash_lo[que_bdd], 6); ! sendto_one(sptr, "%s DB %s 0 R %lu-%s-%s %c", ! NumServ(&me), sptr->name, tabla_serie[que_bdd], ! db_buf, parv[4], que_bdd); ! } ! sprintf(db_buf, "%s DB %s 0 Q %s %c", ! NumServ(sptr), parv[1], parv[4], que_bdd); ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (lp->value.cptr == cptr) ! continue; ! sendto_one(lp->value.cptr, db_buf); ! } ! ! return 0; ! break; } return 0; } /* Nuevo registro */ ! que_bdd = *parv[3]; ! if ((que_bdd < 'a') || (que_bdd > 'z')) ! { ! if (que_bdd == 'N') ! que_bdd = ESNET_NICKDB; ! else ! return 0; } ! mascara_bdd = ((unsigned long)1) << (que_bdd - ESNET_BDD); ! if (db <= tabla_serie[que_bdd]) ! return 0; ! if (!es_hub) ! return 0; /* ** Ojo, hay que usar 'db' y no 'parv[2]' *************** *** 2154,2192 **** ** utilizado en un HASH y todos los ** nodos deberian dar el mismo valor. */ ! if(parc==5) ! sprintf_irc(db_buf,"%s DB %s %lu %s %s", ! NumServ(sptr),parv[1],db,parv[3],parv[4]); else ! sprintf_irc(db_buf,"%s DB %s %lu %s %s :%s", ! NumServ(sptr),parv[1],db,parv[3],parv[4],parv[5]); for (lp = me.serv->down; lp; lp = lp->next) { ! if(!((lp->value.cptr->serv->esnet_db)&mascara_bdd) || ! (lp->value.cptr==cptr)) continue; ! sendto_one(lp->value.cptr,db_buf); } ! sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); alarm(3); ! db_file=open(path,O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); alarm(0); ! if(parc==5) ! sprintf_irc(db_buf,"%lu %s %s %s\n",db,parv[1],parv[3],parv[4]); else ! sprintf_irc(db_buf,"%lu %s %s %s %s\n",db,parv[1],parv[3],parv[4],parv[5]); ! strcpy(db_buf2,db_buf); /* db_alta modifica la cadena */ ! if(strcmp(parv[4],"*")) db_alta(db_buf2,que_bdd,!0); /* CheckPoint */ alarm(3); ! if(strcmp(parv[4],"*")) write(db_file,db_buf,strlen(db_buf)); /* CheckPoint */ close(db_file); alarm(0); ! if(!strcmp(parv[4],"*")) db_pack(db_buf,que_bdd); return 0; } --- 2244,2286 ---- ** utilizado en un HASH y todos los ** nodos deberian dar el mismo valor. */ ! if (parc == 5) ! sprintf_irc(db_buf, "%s DB %s %lu %s %s", ! NumServ(sptr), parv[1], db, parv[3], parv[4]); else ! sprintf_irc(db_buf, "%s DB %s %lu %s %s :%s", ! NumServ(sptr), parv[1], db, parv[3], parv[4], parv[5]); for (lp = me.serv->down; lp; lp = lp->next) { ! if (!((lp->value.cptr->serv->esnet_db) & mascara_bdd) || ! (lp->value.cptr == cptr)) continue; ! sendto_one(lp->value.cptr, db_buf); } ! sprintf_irc(path, "%s/tabla.%c", DBPATH, que_bdd); alarm(3); ! db_file = open(path, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); alarm(0); ! if (parc == 5) ! sprintf_irc(db_buf, "%lu %s %s %s\n", db, parv[1], parv[3], parv[4]); else ! sprintf_irc(db_buf, "%lu %s %s %s %s\n", db, parv[1], parv[3], parv[4], ! parv[5]); ! strcpy(db_buf2, db_buf); /* db_alta modifica la cadena */ ! if (strcmp(parv[4], "*")) ! db_alta(db_buf2, que_bdd, !0); /* CheckPoint */ alarm(3); ! if (strcmp(parv[4], "*")) ! write(db_file, db_buf, strlen(db_buf)); /* CheckPoint */ close(db_file); alarm(0); ! if (!strcmp(parv[4], "*")) ! db_pack(db_buf, que_bdd); return 0; } *************** *** 2202,2218 **** */ void dbh_violacion(int parc, char *parv[], char *causa) { ! int i; ! char line[2048]; ! sprintf_irc(line,"%s %s ", parv[0], MSG_DBH ); ! for(i=1; inext) ! reg->borrado=1; ! return; } /* --- 2496,2518 ---- */ void dbh_borrar_tabla(char tabla, unsigned long version) { ! FILE *f; ! struct dbh_reg *reg; ! int i; ! f = dbh_abrir_tabla(tabla, "w"); /* esto truncara la tabla */ ! dbh_cerrar_tabla(f); ! ! dbh_guardar_version(tabla, version); ! ! if (!tabla_residente[tabla]) ! return; /* no esta en memoria, no hace falta */ ! ! for (i = 0; i < DBH_HASH_SIZE; i++) ! for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) ! reg->borrado = 1; ! ! return; } /* *************** *** 2424,2500 **** * si la hash no coincide borra la tabla. * 1999/06/21 savage@apostols.org */ ! void dbh_compactar_tabla(char tabla, unsigned long version, unsigned long serie, unsigned long hash) { ! FILE *n, *o; ! struct dbh_reg *reg; ! unsigned long i, j=0; ! char resi; ! char *rtxt; ! char *p; ! char tmp1[1024], tmp2[1024]; ! ! resi=tabla_residente[tabla]; ! ! /* creamos una tabla nueva */ ! n=dbh_abrir_tabla( '-', "w" ); ! o=dbh_abrir_tabla(tabla, "r" ); ! ! if(!resi) ! dbh_cargar_tabla(tabla); /* Hacemos residente la tabla un momento */ ! ! /* pongo los flags de compactacion a 0 */ ! for(i=0;inext) ! reg->compactado=0; ! /* ! * recorremos la tabla y si el registro esta en memoria, ! * lo metemos de nuevo en la tabla ! */ ! for(i=1;icompactado==0 ) { ! reg->compactado=1; ! fprintf(n,"%s %lu %c %s :%s\n", reg->destino, ++j, tabla, p, reg->valor); ! } ! } ! } ! ! dbh_cerrar_tabla(o); ! dbh_cerrar_tabla(n); ! ! /* en cualquier caso actualizo version */ ! dbh_guardar_version(tabla, version); ! ! /* calculo si ha sido correcto */ ! sprintf(tmp1, "%s/tabla.%c", DBPATH, tabla); ! sprintf(tmp2, "%s/tabla.%c", DBPATH, '-'); /* tabla temporal */ ! if( hash==dbh_hash_tabla('-') && j==serie ) { ! unlink(tmp1); ! rename(tmp2,tmp1); ! } else { ! unlink(tmp2); ! dbh_borrar_tabla(tabla,version); /* pone a 0 la serie */ ! dbh_eliminar_borrados(tabla); /* limpia de verdad con RunFree() */ ! return; ! } ! ! if(!resi) { ! /* no era residente, la elimino de memoria aunque haya funcionado */ ! for(i=0;inext) ! reg->borrado=1; ! dbh_eliminar_borrados(tabla); } ! return; } ! /* * m_dbq * --- 2522,2608 ---- * si la hash no coincide borra la tabla. * 1999/06/21 savage@apostols.org */ ! void dbh_compactar_tabla(char tabla, unsigned long version, unsigned long serie, ! unsigned long hash) { ! FILE *n, *o; ! struct dbh_reg *reg; ! unsigned long i, j = 0; ! char resi; ! char *rtxt; ! char *p; ! char tmp1[1024], tmp2[1024]; ! ! resi = tabla_residente[tabla]; ! ! /* creamos una tabla nueva */ ! n = dbh_abrir_tabla('-', "w"); ! o = dbh_abrir_tabla(tabla, "r"); ! ! if (!resi) ! dbh_cargar_tabla(tabla); /* Hacemos residente la tabla un momento */ ! ! /* pongo los flags de compactacion a 0 */ ! for (i = 0; i < DBH_HASH_SIZE; i++) ! for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) ! reg->compactado = 0; ! /* ! * recorremos la tabla y si el registro esta en memoria, ! * lo metemos de nuevo en la tabla ! */ ! for (i = 1; i < tabla_serie[tabla]; i++) ! { ! if ((rtxt = dbh_leer_registro(o, i)) != NULL) ! { ! p = strtok(rtxt, " "); /* destino */ ! p = strtok(NULL, " "); /* serie */ ! p = strtok(NULL, " "); /* tabla */ ! p = strtok(NULL, " \n\r"); /* clave */ ! if (p && ((reg = dbh_buscar_registro(tabla, p)) != NULL) ! && reg->compactado == 0) ! { ! reg->compactado = 1; ! fprintf(n, "%s %lu %c %s :%s\n", reg->destino, ++j, tabla, p, ! reg->valor); ! } } ! } ! ! dbh_cerrar_tabla(o); ! dbh_cerrar_tabla(n); ! ! /* en cualquier caso actualizo version */ ! dbh_guardar_version(tabla, version); ! ! /* calculo si ha sido correcto */ ! sprintf(tmp1, "%s/tabla.%c", DBPATH, tabla); ! sprintf(tmp2, "%s/tabla.%c", DBPATH, '-'); /* tabla temporal */ ! if (hash == dbh_hash_tabla('-') && j == serie) ! { ! unlink(tmp1); ! rename(tmp2, tmp1); ! } ! else ! { ! unlink(tmp2); ! dbh_borrar_tabla(tabla, version); /* pone a 0 la serie */ ! dbh_eliminar_borrados(tabla); /* limpia de verdad con RunFree() */ return; + } + + if (!resi) + { + /* no era residente, la elimino de memoria aunque haya funcionado */ + for (i = 0; i < DBH_HASH_SIZE; i++) + for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) + reg->borrado = 1; + dbh_eliminar_borrados(tabla); + } + + return; } ! /* * m_dbq * *************** *** 2506,2588 **** */ int m_dbq(aClient *cptr, aClient *sptr, int parc, char *parv[]) { ! char tabla, *clave, *servidor; ! aClient *acptr; ! struct dbh_reg *reg; ! if(!IsServer(sptr) && !IsOper(sptr) && !IsHelpOp(sptr)) ! return 0; /* No autorizado */ ! /* DBQ [] */ ! if(parc!=3 && parc!=4 ) { ! if(!IsServer(sptr)) ! sendto_one(cptr,":%s NOTICE %s :Parametros incorrectos: Formato: DBQ [] ", ! me.name, parv[0] ); ! return 0; ! } ! ! if( parc==3 ) { ! servidor=NULL; /* no nos indican server */ ! tabla=*parv[1]; ! clave=parv[2]; ! } else { ! servidor=parv[1]; ! tabla=*parv[2]; ! clave=parv[3]; ! ! if( *servidor == '*' ) { ! /* WOOW, BROADCAST */ ! sendto_serv_butone(cptr, ":%s DBQ * %c %s", parv[0], tabla, clave); ! } else { ! /* NOT BROADCAST */ ! if(!(acptr=find_match_server(servidor))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(cptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], servidor); ! return 0; ! } ! ! if(!IsMe(acptr)) /* no es para mi, a rutar */ ! { ! sendto_one(acptr,":%s DBQ %s %c %s", ! parv[0], servidor, tabla, clave); ! return 0; /* ok, rutado, fin del trabajo */ ! } ! } ! } ! ! if(!tabla_residente[tabla]) { ! if (MyUser(sptr) || Protocol(cptr) < 10) ! sendto_one(cptr,":%s NOTICE %s :DBQ ERROR TABLA_NO_RESIDENTE", ! me.name, parv[0]); ! else ! sendto_one(cptr,"%s NOTICE %s%s :DBQ ERROR TABLA_NO_RESIDENTE", ! NumServ(&me), NumNick(sptr)); ! return 0; ! } ! ! reg=dbh_buscar_registro(tabla, clave); ! if(!reg) { ! if (MyUser(sptr) || Protocol(cptr) < 10) ! sendto_one(cptr,":%s NOTICE %s :DBQ ERROR REGISTRO_NO_ENCONTRADO", ! me.name, parv[0]); ! else ! sendto_one(cptr,"%s NOTICE %s%s :DBQ ERROR REGISTRO_NO_ENCONTRADO", ! NumServ(&me), NumNick(sptr)); ! return 0; } if (MyUser(sptr) || Protocol(cptr) < 10) ! sendto_one(cptr,":%s NOTICE %s :DBQ OK Tabla='%c' Destino='%s' Clave='%s' Valor='%s'", ! me.name, parv[0], ! tabla, reg->destino, reg->clave, reg->valor); else ! sendto_one(cptr,"%s NOTICE %s%s :DBQ OK Tabla='%c' Destino='%s' Clave='%s' Valor='%s'", ! NumServ(&me), NumNick(sptr), ! tabla, reg->destino, reg->clave, reg->valor); return 0; } /* --- 2614,2706 ---- */ int m_dbq(aClient *cptr, aClient *sptr, int parc, char *parv[]) { ! char tabla, *clave, *servidor; ! aClient *acptr; ! struct dbh_reg *reg; ! ! if (!IsServer(sptr) && !IsOper(sptr) && !IsHelpOp(sptr)) ! return 0; /* No autorizado */ ! /* DBQ [] */ ! if (parc != 3 && parc != 4) ! { ! ! if (!IsServer(sptr)) ! sendto_one(cptr, ! ":%s NOTICE %s :Parametros incorrectos: Formato: DBQ [] ", ! me.name, parv[0]); ! return 0; ! } ! ! if (parc == 3) ! { ! servidor = NULL; /* no nos indican server */ ! tabla = *parv[1]; ! clave = parv[2]; ! } ! else ! { ! servidor = parv[1]; ! tabla = *parv[2]; ! clave = parv[3]; ! if (*servidor == '*') ! { ! /* WOOW, BROADCAST */ ! sendto_serv_butone(cptr, ":%s DBQ * %c %s", parv[0], tabla, clave); ! } ! else ! { ! /* NOT BROADCAST */ ! if (!(acptr = find_match_server(servidor))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(cptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], servidor); ! return 0; ! } ! if (!IsMe(acptr)) /* no es para mi, a rutar */ ! { ! sendto_one(acptr, ":%s DBQ %s %c %s", parv[0], servidor, tabla, clave); ! return 0; /* ok, rutado, fin del trabajo */ ! } } + } + if (!tabla_residente[tabla]) + { if (MyUser(sptr) || Protocol(cptr) < 10) ! sendto_one(cptr, ":%s NOTICE %s :DBQ ERROR TABLA_NO_RESIDENTE", ! me.name, parv[0]); else ! sendto_one(cptr, "%s NOTICE %s%s :DBQ ERROR TABLA_NO_RESIDENTE", ! NumServ(&me), NumNick(sptr)); ! return 0; ! } + reg = dbh_buscar_registro(tabla, clave); + if (!reg) + { + if (MyUser(sptr) || Protocol(cptr) < 10) + sendto_one(cptr, ":%s NOTICE %s :DBQ ERROR REGISTRO_NO_ENCONTRADO", + me.name, parv[0]); + else + sendto_one(cptr, "%s NOTICE %s%s :DBQ ERROR REGISTRO_NO_ENCONTRADO", + NumServ(&me), NumNick(sptr)); return 0; + } + + if (MyUser(sptr) || Protocol(cptr) < 10) + sendto_one(cptr, + ":%s NOTICE %s :DBQ OK Tabla='%c' Destino='%s' Clave='%s' Valor='%s'", + me.name, parv[0], tabla, reg->destino, reg->clave, reg->valor); + else + sendto_one(cptr, + "%s NOTICE %s%s :DBQ OK Tabla='%c' Destino='%s' Clave='%s' Valor='%s'", + NumServ(&me), NumNick(sptr), tabla, reg->destino, reg->clave, + reg->valor); + + return 0; } /* *************** *** 2596,2996 **** */ int m_dbh(aClient *cptr, aClient *sptr, int parc, char *parv[]) { ! unsigned long numserie, numversion, i, hash; ! unsigned int j; ! char tabla; ! aClient *acptr; ! Dlink *lp; ! char db_buf[1024], *reg; ! FILE *db_file; ! int es_hub=0; ! ! if(!IsServer(sptr)) { ! if(!IsOper(sptr) && !IsHelpOp(sptr)) ! return 0; ! ! sendto_one(cptr,":%s NOTICE %s :Comando obsoleto, utiliza DBQ [] ", ! me.name, parv[0] ); ! return 0; ! } ! ! if(find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub=1; /* El remoto es un Hub */ ! ! numserie=atol(parv[2]); /* solo != 0 en registros */ ! ! if(!numserie) { ! switch(*parv[3]) ! { ! case 'B': ! /* DBH 0 B */ ! /* No rutable, solo hub-nodo: sera para nosotros */ ! if(!es_hub || parc!=7) ! { ! /* ! * Un nodo idiota nos envia un "continua burst", ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } ! ! tabla=*parv[4]; ! numversion=atol(parv[5]); ! numserie=atol(parv[6]); ! ! if(numversion==tabla_version[tabla] && numserie==tabla_serie[tabla]) ! { ! /* ! * parece que llegamos al final, ya podemos eliminar de memoria ! * los registros marcados para borrar ... ! */ ! dbh_eliminar_borrados(tabla); ! break; ! } ! ! /* le contestamos con 0 J para que continue */ ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla] ); ! break; ! ! case 'J': ! /* DBH 0 J */ ! /* No rutable, solo nodo-nodo: sera para nosotros */ ! if(parc!=7) ! { ! /* parametros incorrectos, avisamos */ ! dbh_violacion(parc, parv, "Parametros incorrectos"); ! break; ! } ! ! tabla=*parv[4]; ! numversion=atol(parv[5]); ! numserie=atol(parv[6]); ! ! /* Parece ke no estamos en la version correcta */ ! if(numversion>tabla_version[tabla] && es_hub) { ! /* me perdi un COMMIT .... */ ! dbh_violacion(parc, parv, "Hub con version Superior. Borrando DB local ..."); ! dbh_borrar_tabla(tabla, numversion); ! /* le contestamos con 0 J para que continue o pare */ ! /* y al resto de nodos para que se enteren de la nueva version */ ! for(lp=me.serv->down; lp; lp=lp->next) ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], 0 ); ! break; ! } #ifdef HUB ! if(numversion>tabla_version[tabla] && !es_hub) { ! /* el nodo es un mamon, con version superior, ordeno borrado */ ! /* tambien podria ser ke yo me perdiera algo, pero ... shit hapens */ ! dbh_violacion(parc, parv, "Nodo con version Superior. Borrando DB remota ..."); ! sendto_one(sptr,"%s %s %s 0 D %c %lu", ! NumServ(&me),MSG_DBH,parv[0], ! tabla, tabla_version[tabla]); ! break; ! } ! ! if(numversion=tabla_serie[tabla]) ! break; /* El remoto es mas nuevo que nosotros o ya esta ok */ ! ! /* abrimos la tabla */ ! db_file = dbh_abrir_tabla(tabla, "r"); ! ! for(j=0,i=numserie+1;db_file && i<=tabla_serie[tabla] && j<25 ;i++,j++) ! { ! char *reg; ! ! reg=dbh_leer_registro(db_file, i); ! if(reg) ! { ! sendto_one(sptr,"%s %s %s", ! NumServ(&me),MSG_DBH,reg); ! } ! } ! ! dbh_cerrar_tabla(db_file); ! ! /* Enviamos el '0 B' para que el otro se entere si hemos terminado */ ! sendto_one(sptr, "%s %s - 0 B %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla] ); #endif /* HUB */ - - break; ! case 'q': ! /* DBH 0 q */ ! /* Rutable, debemos buscar destino */ #ifdef HUB ! if(parc!=8) ! { ! /* parametros incorrectos, avisamos */ ! dbh_violacion(parc, parv, "Parametros incorrectos"); ! break; ! } ! ! /* lo dejo pasar hacia destino, no puede ser para mi */ ! if(!(acptr=find_match_server(parv[1]))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); ! break; ! } ! ! if(IsMe(acptr)) ! { ! /* ! * Un nodo/hub idiota nos contesta sobre una tabla, ! * no hace falta avisar ... ! */ ! break; ! } else ! sendto_one(acptr,"%s %s %s 0 q %s %s %s %s", ! NumServ(sptr), MSG_DBH, acptr->name, ! parv[4],parv[5],parv[6],parv[7]); #endif /* HUB */ ! break; ! case 'Q': ! /* DBH /<*> 0 Q */ ! /* Rutable y Broadcast: tendre ke mirar destino */ ! if(!es_hub || parc!=5) ! { ! /* ! * Un nodo idiota nos interroga sobre una tabla, ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } #ifdef HUB ! /* ! * Si es un wildcard lo propago a todos ! */ ! if(*parv[1]=='*') ! { ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if( lp->value.cptr==cptr ) ! continue; /* al que nos lo envia, no se lo reenvio */ ! sendto_one(lp->value.cptr, "%s %s %s 0 Q %s", ! parv[0], MSG_DBH, parv[1], parv[4] ); ! } ! } else { ! /* ! * Pues no, no es un wilcard, busco destino ... ! */ ! if(!(acptr = find_match_server(parv[1]))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); ! break; ! } ! ! if(!IsMe(acptr)) ! { ! sendto_one(acptr,"%s %s %s 0 Q %s\n", ! NumServ(sptr), MSG_DBH, ! acptr->name, parv[4]); ! break; ! } ! } #endif /* HUB */ ! /* bueno, este 0 Q es para mí (o wilcard), a contestar ... */ ! tabla=*parv[4]; ! sendto_one(sptr,"%s %s %s 0 q %c %lu %lu %lu\n", ! NumServ(&me),MSG_DBH,parv[0], ! tabla, tabla_version[tabla], tabla_serie[tabla], ! dbh_hash_tabla(tabla) ); ! break; ! ! case 'D': ! /* DBH 0 D */ ! /* Rutable: tendre que buscar destino */ ! if(!es_hub || parc!=6) ! { ! /* ! * Un nodo idiota intenta borrarnos una tabla, ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } #ifdef HUB ! if(!(acptr = find_match_server(parv[1]))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); ! break; ! } ! ! if(!IsMe(acptr)) ! { ! sendto_one(acptr,"%s %s %s 0 D %s %s\n", ! NumServ(sptr), MSG_DBH, ! acptr->name, parv[4], parv[5]); ! break; ! } #endif /* HUB */ ! /* pues alguien me ordena borrar una tabla */ ! tabla=*parv[4]; ! numversion=atol(parv[5]); ! dbh_borrar_tabla(tabla, numversion); ! ! /* envio un 0 J para solicitar registros nuevos */ ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla] ); ! break; ! ! case 'C': ! /* DBH <*> 0 C */ ! /* Broadcast: tengo que propagarlo a todos */ ! if(!es_hub || parc!=8 || *parv[1]!='*' ) ! { ! /* ! * Un nodo idiota intenta compactarnos una tabla, ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } #ifdef HUB ! /* ! * Propago compactacion a todos mis nodos ! */ ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if( lp->value.cptr==cptr ) ! continue; /* al que nos lo envia, no se lo reenvio */ ! sendto_one(lp->value.cptr, "%s %s %s 0 C %s %s %s %s", ! parv[0], MSG_DBH, parv[1], ! parv[4], parv[5], parv[6], parv[7] ); ! } #endif ! tabla=*parv[4]; ! numversion=atol(parv[5]); ! numserie=atol(parv[6]); ! hash=atol(parv[7]); ! dbh_compactar_tabla(tabla,numversion,numserie,hash); ! /* Enviamos el '0 J' para informar / pedir mas */ ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla] ); ! break; ! ! default: ! return 0; /* Orden incorrecta, ni puto caso */ ! } ! ! /* orden procesada */ ! return 0; ! } ! ! /* Si llegamos aqui, se trata de un registro */ ! /* parv[0] parv[1] parv[2] parv[3] parv[4] parv[5] */ ! /* DBH /<*> [:] */ ! /* Broadcast: tengo que propagarlo a todos */ ! ! if(!es_hub || parc<5 ) ! { ! /* ! * Un nodo idiota nos envia un registro, ! * avisaremos a los operadores o a los services ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! return 0; ! } ! ! /* Procesamos un registro */ ! tabla=*parv[3]; ! if(numserie!=(tabla_serie[tabla]+1)) ! { ! /* ! * carambas, un registro atrasado o adelantado ... lo ignoro ... ! * no me interesa ni a mi ni a nadie que cuelgue de mi. ! */ ! return 0; } ! #ifdef HUB ! /* ! * Propago el registro ... ! */ ! if(parc==6) ! sprintf_irc(db_buf,"%s %s %s %s %s %s :%s", ! NumServ(sptr),MSG_DBH,parv[1], ! parv[2],parv[3],parv[4],parv[5]); ! else ! sprintf_irc(db_buf,"%s %s %s %s %s %s", ! NumServ(sptr),MSG_DBH,parv[1], ! parv[2],parv[3],parv[4]); ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if( lp->value.cptr==cptr ) ! continue; /* al que nos lo envia, no se lo reenvio */ ! sendto_one(lp->value.cptr, db_buf); ! } ! #endif /* HUB */ ! ! /* ! * meto el registro en la tabla de disco ! * lo meto en un formato aprovechable en los burst ! */ ! db_file=dbh_abrir_tabla(tabla, "a"); ! if(!db_file) ! return 0; /* que paso ? deberia informar error %m */ ! alarm(3); ! if(parc==6) ! fprintf(db_file, "%s %lu %c %s :%s\n", ! parv[1], numserie, tabla, parv[4], parv[5]); ! else ! fprintf(db_file, "%s %lu %c %s\n", ! parv[1], numserie, tabla, parv[4]); ! dbh_cerrar_tabla(db_file); ! alarm(0); /* ! * Actualizo la serie en memoria */ ! tabla_serie[tabla]++; /* ! * Meto el registro en memoria si es una tabla residente */ - if(tabla_residente[tabla]) - { - if(parc==6) - dbh_insertar_registro(tabla, parv[1], parv[4], parv[5]); - else - dbh_eliminar_registro(tabla, parv[4]); - } - - /* orden procesada */ return 0; } /* --- 2714,3122 ---- */ int m_dbh(aClient *cptr, aClient *sptr, int parc, char *parv[]) { ! unsigned long numserie, numversion, i, hash; ! unsigned int j; ! char tabla; ! aClient *acptr; ! Dlink *lp; ! char db_buf[1024], *reg; ! FILE *db_file; ! int es_hub = 0; ! ! if (!IsServer(sptr)) ! { ! if (!IsOper(sptr) && !IsHelpOp(sptr)) ! return 0; ! ! sendto_one(cptr, ! ":%s NOTICE %s :Comando obsoleto, utiliza DBQ [] ", ! me.name, parv[0]); ! return 0; ! } ! ! if (find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) ! es_hub = 1; /* El remoto es un Hub */ ! ! numserie = atol(parv[2]); /* solo != 0 en registros */ ! ! if (!numserie) ! { ! switch (*parv[3]) ! { ! case 'B': ! /* DBH 0 B */ ! /* No rutable, solo hub-nodo: sera para nosotros */ ! if (!es_hub || parc != 7) ! { ! /* ! * Un nodo idiota nos envia un "continua burst", ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } ! ! tabla = *parv[4]; ! numversion = atol(parv[5]); ! numserie = atol(parv[6]); ! ! if (numversion == tabla_version[tabla] ! && numserie == tabla_serie[tabla]) ! { ! /* ! * parece que llegamos al final, ya podemos eliminar de memoria ! * los registros marcados para borrar ... ! */ ! dbh_eliminar_borrados(tabla); ! break; ! } ! ! /* le contestamos con 0 J para que continue */ ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla]); ! break; ! ! case 'J': ! /* DBH 0 J */ ! /* No rutable, solo nodo-nodo: sera para nosotros */ ! if (parc != 7) ! { ! /* parametros incorrectos, avisamos */ ! dbh_violacion(parc, parv, "Parametros incorrectos"); ! break; ! } ! ! tabla = *parv[4]; ! numversion = atol(parv[5]); ! numserie = atol(parv[6]); ! ! /* Parece ke no estamos en la version correcta */ ! if (numversion > tabla_version[tabla] && es_hub) ! { ! /* me perdi un COMMIT .... */ ! dbh_violacion(parc, parv, ! "Hub con version Superior. Borrando DB local ..."); ! dbh_borrar_tabla(tabla, numversion); ! /* le contestamos con 0 J para que continue o pare */ ! /* y al resto de nodos para que se enteren de la nueva version */ ! for (lp = me.serv->down; lp; lp = lp->next) ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, tabla, tabla_version[tabla], 0); ! break; ! } #ifdef HUB ! if (numversion > tabla_version[tabla] && !es_hub) ! { ! /* el nodo es un mamon, con version superior, ordeno borrado */ ! /* tambien podria ser ke yo me perdiera algo, pero ... shit hapens */ ! dbh_violacion(parc, parv, ! "Nodo con version Superior. Borrando DB remota ..."); ! sendto_one(sptr, "%s %s %s 0 D %c %lu", NumServ(&me), MSG_DBH, ! parv[0], tabla, tabla_version[tabla]); ! break; ! } ! ! if (numversion < tabla_version[tabla]) ! { ! /* El remoto se perdio un compromiso */ ! dbh_violacion(parc, parv, ! "Remoto con version Inferior. Actualizando DB remota ..."); ! /* ! * El remoto se dara cuenta, y borrara su version vieja. ! * Esto provocara un nuevo msg 0 J con version adecuada y serie 0 ! * pero hasta que esto suceda, yo paso de enviarle nada .... ! */ ! break; ! } ! ! /* ! * Fantastico, hablamos sobre al misma version, ! * a ver si tengo que actualizarle ... ! */ ! ! if (numserie >= tabla_serie[tabla]) ! break; /* El remoto es mas nuevo que nosotros o ya esta ok */ ! ! /* abrimos la tabla */ ! db_file = dbh_abrir_tabla(tabla, "r"); ! ! for (j = 0, i = numserie + 1; ! db_file && i <= tabla_serie[tabla] && j < 25; i++, j++) ! { ! char *reg; ! ! reg = dbh_leer_registro(db_file, i); ! if (reg) ! { ! sendto_one(sptr, "%s %s %s", NumServ(&me), MSG_DBH, reg); ! } ! } ! ! dbh_cerrar_tabla(db_file); ! ! /* Enviamos el '0 B' para que el otro se entere si hemos terminado */ ! sendto_one(sptr, "%s %s - 0 B %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla]); #endif /* HUB */ ! break; ! ! case 'q': ! /* DBH 0 q */ ! /* Rutable, debemos buscar destino */ #ifdef HUB ! if (parc != 8) ! { ! /* parametros incorrectos, avisamos */ ! dbh_violacion(parc, parv, "Parametros incorrectos"); ! break; ! } ! ! /* lo dejo pasar hacia destino, no puede ser para mi */ ! if (!(acptr = find_match_server(parv[1]))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], ! parv[1]); ! break; ! } ! ! if (IsMe(acptr)) ! { ! /* ! * Un nodo/hub idiota nos contesta sobre una tabla, ! * no hace falta avisar ... ! */ ! break; ! } ! else ! sendto_one(acptr, "%s %s %s 0 q %s %s %s %s", ! NumServ(sptr), MSG_DBH, acptr->name, ! parv[4], parv[5], parv[6], parv[7]); #endif /* HUB */ ! break; ! case 'Q': ! /* DBH /<*> 0 Q */ ! /* Rutable y Broadcast: tendre ke mirar destino */ ! if (!es_hub || parc != 5) ! { ! /* ! * Un nodo idiota nos interroga sobre una tabla, ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } #ifdef HUB ! /* ! * Si es un wildcard lo propago a todos ! */ ! if (*parv[1] == '*') ! { ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (lp->value.cptr == cptr) ! continue; /* al que nos lo envia, no se lo reenvio */ ! sendto_one(lp->value.cptr, "%s %s %s 0 Q %s", ! parv[0], MSG_DBH, parv[1], parv[4]); ! } ! } ! else ! { ! /* ! * Pues no, no es un wilcard, busco destino ... ! */ ! if (!(acptr = find_match_server(parv[1]))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], ! parv[1]); ! break; ! } ! ! if (!IsMe(acptr)) ! { ! sendto_one(acptr, "%s %s %s 0 Q %s\n", ! NumServ(sptr), MSG_DBH, acptr->name, parv[4]); ! break; ! } ! } #endif /* HUB */ + + /* bueno, este 0 Q es para mí (o wilcard), a contestar ... */ + tabla = *parv[4]; + sendto_one(sptr, "%s %s %s 0 q %c %lu %lu %lu\n", + NumServ(&me), MSG_DBH, parv[0], + tabla, tabla_version[tabla], tabla_serie[tabla], + dbh_hash_tabla(tabla)); + break; ! case 'D': ! /* DBH 0 D */ ! /* Rutable: tendre que buscar destino */ ! if (!es_hub || parc != 6) ! { ! /* ! * Un nodo idiota intenta borrarnos una tabla, ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } #ifdef HUB ! if (!(acptr = find_match_server(parv[1]))) ! { ! /* joer, el server de destino no existe */ ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], ! parv[1]); ! break; ! } ! ! if (!IsMe(acptr)) ! { ! sendto_one(acptr, "%s %s %s 0 D %s %s\n", ! NumServ(sptr), MSG_DBH, acptr->name, parv[4], parv[5]); ! break; ! } #endif /* HUB */ + + /* pues alguien me ordena borrar una tabla */ + tabla = *parv[4]; + numversion = atol(parv[5]); + dbh_borrar_tabla(tabla, numversion); + + /* envio un 0 J para solicitar registros nuevos */ + sendto_one(sptr, "%s %s - 0 J %c %lu %lu", + NumServ(&me), MSG_DBH, + tabla, tabla_version[tabla], tabla_serie[tabla]); + break; ! case 'C': ! /* DBH <*> 0 C */ ! /* Broadcast: tengo que propagarlo a todos */ ! if (!es_hub || parc != 8 || *parv[1] != '*') ! { ! /* ! * Un nodo idiota intenta compactarnos una tabla, ! * avisamos a los ircops ! */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! break; ! } #ifdef HUB ! /* ! * Propago compactacion a todos mis nodos ! */ ! for (lp = me.serv->down; lp; lp = lp->next) ! { ! if (lp->value.cptr == cptr) ! continue; /* al que nos lo envia, no se lo reenvio */ ! sendto_one(lp->value.cptr, "%s %s %s 0 C %s %s %s %s", ! parv[0], MSG_DBH, parv[1], parv[4], parv[5], parv[6], parv[7]); ! } #endif ! tabla = *parv[4]; ! numversion = atol(parv[5]); ! numserie = atol(parv[6]); ! hash = atol(parv[7]); ! dbh_compactar_tabla(tabla, numversion, numserie, hash); ! /* Enviamos el '0 J' para informar / pedir mas */ ! sendto_one(sptr, "%s %s - 0 J %c %lu %lu", ! NumServ(&me), MSG_DBH, ! tabla, tabla_version[tabla], tabla_serie[tabla]); ! break; ! ! default: ! return 0; /* Orden incorrecta, ni puto caso */ } ! /* orden procesada */ ! return 0; ! } ! /* Si llegamos aqui, se trata de un registro */ ! /* parv[0] parv[1] parv[2] parv[3] parv[4] parv[5] */ ! /* DBH /<*> [:] */ ! /* Broadcast: tengo que propagarlo a todos */ + if (!es_hub || parc < 5) + { /* ! * Un nodo idiota nos envia un registro, ! * avisaremos a los operadores o a los services */ ! dbh_violacion(parc, parv, "Origen no Hub o Parametros incorrectos"); ! return 0; ! } + /* Procesamos un registro */ + tabla = *parv[3]; + if (numserie != (tabla_serie[tabla] + 1)) + { /* ! * carambas, un registro atrasado o adelantado ... lo ignoro ... ! * no me interesa ni a mi ni a nadie que cuelgue de mi. */ return 0; + } + + #ifdef HUB + /* + * Propago el registro ... + */ + if (parc == 6) + sprintf_irc(db_buf, "%s %s %s %s %s %s :%s", + NumServ(sptr), MSG_DBH, parv[1], parv[2], parv[3], parv[4], parv[5]); + else + sprintf_irc(db_buf, "%s %s %s %s %s %s", + NumServ(sptr), MSG_DBH, parv[1], parv[2], parv[3], parv[4]); + + for (lp = me.serv->down; lp; lp = lp->next) + { + if (lp->value.cptr == cptr) + continue; /* al que nos lo envia, no se lo reenvio */ + sendto_one(lp->value.cptr, db_buf); + } + #endif /* HUB */ + + /* + * meto el registro en la tabla de disco + * lo meto en un formato aprovechable en los burst + */ + db_file = dbh_abrir_tabla(tabla, "a"); + if (!db_file) + return 0; /* que paso ? deberia informar error %m */ + alarm(3); + if (parc == 6) + fprintf(db_file, "%s %lu %c %s :%s\n", + parv[1], numserie, tabla, parv[4], parv[5]); + else + fprintf(db_file, "%s %lu %c %s\n", parv[1], numserie, tabla, parv[4]); + dbh_cerrar_tabla(db_file); + alarm(0); + + /* + * Actualizo la serie en memoria + */ + tabla_serie[tabla]++; + + /* + * Meto el registro en memoria si es una tabla residente + */ + if (tabla_residente[tabla]) + { + if (parc == 6) + dbh_insertar_registro(tabla, parv[1], parv[4], parv[5]); + else + dbh_eliminar_registro(tabla, parv[4]); + } + + /* orden procesada */ + return 0; } /* *************** *** 3001,3026 **** */ void dbh_recarga() { ! unsigned char i; ! unsigned int j; ! struct dbh_reg *reg; ! ! sendto_ops("Recargando tablas DBH"); ! for(i=DBH_PRIMERA_TABLA;i<=DBH_ULTIMA_TABLA;i++) { ! /* marco todo como borrado */ ! for(j=0;jnext) ! reg->borrado=1; ! /* cargo de nuevo de disco */ ! dbh_cargar_tabla(i); ! /* elimino lo marcado */ ! dbh_eliminar_borrados(i); ! if(tabla_serie[i]) ! sendto_ops("Tabla '%c' V:%lu S:%lu", ! i, tabla_version[i], tabla_serie[i]); ! } ! return; } /* --- 3127,3152 ---- */ void dbh_recarga() { ! unsigned char i; ! unsigned int j; ! struct dbh_reg *reg; ! ! sendto_ops("Recargando tablas DBH"); ! for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) ! { ! /* marco todo como borrado */ ! for (j = 0; j < DBH_HASH_SIZE; j++) ! for (reg = tabla_datos[i][j]; reg != NULL; reg = reg->next) ! reg->borrado = 1; ! /* cargo de nuevo de disco */ ! dbh_cargar_tabla(i); ! /* elimino lo marcado */ ! dbh_eliminar_borrados(i); ! if (tabla_serie[i]) ! sendto_ops("Tabla '%c' V:%lu S:%lu", i, tabla_version[i], tabla_serie[i]); ! } ! return; } /* *************** *** 3031,3060 **** */ void dbh_inicializa() { ! unsigned char i; ! /* --------------------------------------------------- */ ! memset(tabla_residente, 0, sizeof(tabla_residente)); ! memset(tabla_cuantos, 0, sizeof(tabla_cuantos)); ! memset(tabla_datos, 0, sizeof(tabla_datos)); ! memset(tabla_version, 0, sizeof(tabla_version)); ! memset(tabla_serie, 0, sizeof(tabla_serie)); ! /* --------------------------------------------------- */ ! /* ! * Hago residentes las tablas necesarias para los parches ! */ ! tabla_residente[DBH_NICKDB]=1; ! tabla_residente[DBH_OPERDB]=1; ! tabla_residente[DBH_CHANDB]=1; ! tabla_residente[DBH_BOTSDB]=1; ! tabla_residente[DBH_VIRTUALDB]=1; ! ! /* --------------------------------------------------- */ ! for(i=DBH_PRIMERA_TABLA;i<=DBH_ULTIMA_TABLA;i++) ! dbh_cargar_tabla(i); ! return; } #endif /* DB_HISPANO */ --- 3157,3186 ---- */ void dbh_inicializa() { ! unsigned char i; ! /* --------------------------------------------------- */ ! memset(tabla_residente, 0, sizeof(tabla_residente)); ! memset(tabla_cuantos, 0, sizeof(tabla_cuantos)); ! memset(tabla_datos, 0, sizeof(tabla_datos)); ! memset(tabla_version, 0, sizeof(tabla_version)); ! memset(tabla_serie, 0, sizeof(tabla_serie)); ! /* --------------------------------------------------- */ ! /* ! * Hago residentes las tablas necesarias para los parches ! */ ! tabla_residente[DBH_NICKDB] = 1; ! tabla_residente[DBH_OPERDB] = 1; ! tabla_residente[DBH_CHANDB] = 1; ! tabla_residente[DBH_BOTSDB] = 1; ! tabla_residente[DBH_VIRTUALDB] = 1; ! ! /* --------------------------------------------------- */ ! for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) ! dbh_cargar_tabla(i); ! return; } #endif /* DB_HISPANO */ Index: ../ircu2.10.06/ircd/s_socks.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_socks.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ../ircu2.10.06/ircd/s_socks.c 1999/10/08 19:25:35 1.3 --- ../ircu2.10.06/ircd/s_socks.c 1999/10/15 08:24:25 1.4 *************** *** 55,61 **** #include "s_socks.h" #include "sprintf_irc.h" ! RCSTAG_CC("$Id: s_socks.c,v 1.3 1999/10/08 19:25:35 savage Exp $"); /* * start_socks --- 55,61 ---- #include "s_socks.h" #include "sprintf_irc.h" ! RCSTAG_CC("$Id: s_socks.c,v 1.4 1999/10/15 08:24:25 savage Exp $"); /* * start_socks *************** *** 96,102 **** } if (cptr->socksfd >= (MAXCONNECTIONS - 2)) { ! sendto_ops("Can't allocate fd for socks on %s", get_client_name(cptr, TRUE)); close(cptr->socksfd); return; } --- 96,103 ---- } if (cptr->socksfd >= (MAXCONNECTIONS - 2)) { ! sendto_ops("Can't allocate fd for socks on %s", get_client_name(cptr, ! TRUE)); close(cptr->socksfd); return; } *************** *** 115,121 **** sock.sin_port = htons(1080); sock.sin_family = AF_INET; ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Checking WinGate/SocksProxy security...\r\n", me.name ); write(cptr->fd, text, strlen(text)); alarm((unsigned)4); if (connect(cptr->socksfd, (struct sockaddr *)&sock, --- 116,124 ---- sock.sin_port = htons(1080); sock.sin_family = AF_INET; ! sprintf_irc(text, ! ":%s NOTICE SOCKS4 :*** Checking WinGate/SocksProxy security...\r\n", ! me.name); write(cptr->fd, text, strlen(text)); alarm((unsigned)4); if (connect(cptr->socksfd, (struct sockaddr *)&sock, *************** *** 128,134 **** alarm((unsigned)0); close(cptr->socksfd); cptr->socksfd = -1; ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy test passed.\r\n", me.name ); write(cptr->fd, text, strlen(text)); if (!DoingDNS(cptr) && !DoingAuth(cptr)) SetAccess(cptr); --- 131,137 ---- alarm((unsigned)0); close(cptr->socksfd); cptr->socksfd = -1; ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy test passed.\r\n", me.name); write(cptr->fd, text, strlen(text)); if (!DoingDNS(cptr) && !DoingAuth(cptr)) SetAccess(cptr); *************** *** 168,196 **** goto sockssenderr; } ! if( ! (pw=getpwuid(getuid())) ) { #ifdef USE_SYSLOG syslog(LOG_ERR, "socks getpwuid error"); #endif goto sockssenderr; } ! sk=(struct socks4 *)socksbuf; ! uname=socksbuf+sizeof(struct socks4); ! sk->vn=4; ! sk->cd=1; ! sk->dstport=us.sin_port; ! sk->dstip=us.sin_addr.s_addr; strcpy(uname, pw->pw_name); Debug((DEBUG_SEND, "sending connection request to socks port %s.1080", ! inetntoa(them.sin_addr))); ! if (write(cptr->socksfd, socksbuf, sizeof(struct socks4)+strlen(uname)+1) ! != (int)(sizeof(struct socks4)+strlen(uname)+1) ) { sockssenderr: ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy test passed.\r\n", me.name ); write(cptr->fd, text, strlen(text)); close(cptr->socksfd); if (cptr->socksfd == highest_fd) --- 171,200 ---- goto sockssenderr; } ! if (!(pw = getpwuid(getuid()))) ! { #ifdef USE_SYSLOG syslog(LOG_ERR, "socks getpwuid error"); #endif goto sockssenderr; } ! sk = (struct socks4 *)socksbuf; ! uname = socksbuf + sizeof(struct socks4); ! sk->vn = 4; ! sk->cd = 1; ! sk->dstport = us.sin_port; ! sk->dstip = us.sin_addr.s_addr; strcpy(uname, pw->pw_name); Debug((DEBUG_SEND, "sending connection request to socks port %s.1080", ! inetntoa(them.sin_addr))); ! if (write(cptr->socksfd, socksbuf, sizeof(struct socks4) + strlen(uname) + 1) ! != (int)(sizeof(struct socks4) + strlen(uname) + 1)) { sockssenderr: ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy test passed.\r\n", me.name); write(cptr->fd, text, strlen(text)); close(cptr->socksfd); if (cptr->socksfd == highest_fd) *************** *** 199,209 **** cptr->socksfd = -1; ClearSocks(cptr); if (!DoingDNS(cptr) && !DoingAuth(cptr)) ! SetAccess(cptr); ! } ClearWrSocks(cptr); return; } /* * read_socksports * --- 203,214 ---- cptr->socksfd = -1; ClearSocks(cptr); if (!DoingDNS(cptr) && !DoingAuth(cptr)) ! SetAccess(cptr); ! } ClearWrSocks(cptr); return; } + /* * read_socksports * *************** *** 218,246 **** char socksbuf[255]; char text[1024]; ! sk=(struct socks4 *)socksbuf; Debug((DEBUG_NOTICE, "read_socksports(%p) fd %d socksfd %d stat %d", cptr, cptr->fd, cptr->socksfd, cptr->status)); ! if ( cptr->socksfd>0 && read(cptr->socksfd, socksbuf, sizeof(struct socks4)) == sizeof(struct socks4) ) { ! switch(sk->cd) ! { case 90: ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy is UNSECURE.\r\n", me.name ); ! write(cptr->fd, text, strlen(text)); ! /* close connection */ ! close(cptr->socksfd); ! close(cptr->authfd); ! exit_client(cptr, cptr, &me, "Unsecured SocksProxy or WinGate"); ! return; default: ! break; ! } } ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy test passed.\r\n", me.name ); write(cptr->fd, text, strlen(text)); cptr->lasttime = now; --- 223,254 ---- char socksbuf[255]; char text[1024]; ! sk = (struct socks4 *)socksbuf; Debug((DEBUG_NOTICE, "read_socksports(%p) fd %d socksfd %d stat %d", cptr, cptr->fd, cptr->socksfd, cptr->status)); ! if (cptr->socksfd > 0 ! && read(cptr->socksfd, socksbuf, ! sizeof(struct socks4)) == sizeof(struct socks4)) { ! switch (sk->cd) ! { case 90: ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy is UNSECURE.\r\n", ! me.name); ! write(cptr->fd, text, strlen(text)); ! /* close connection */ ! close(cptr->socksfd); ! close(cptr->authfd); ! exit_client(cptr, cptr, &me, "Unsecured SocksProxy or WinGate"); ! return; default: ! break; ! } } ! sprintf_irc(text, ":%s NOTICE SOCKS4 :*** Proxy test passed.\r\n", me.name); write(cptr->fd, text, strlen(text)); cptr->lasttime = now; Index: ../ircu2.10.06/ircd/s_user.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_user.c,v retrieving revision 1.23 retrieving revision 1.24 diff -c -r1.23 -r1.24 *** ../ircu2.10.06/ircd/s_user.c 1999/10/08 19:25:35 1.23 --- ../ircu2.10.06/ircd/s_user.c 1999/10/15 08:24:25 1.24 *************** *** 780,786 **** { #if defined(DB_ESNET) || defined(DB_HISPANO) struct dbh_reg *reg; ! char hflag='-'; #endif aClient *acptr; aClient *server = NULL; --- 780,786 ---- { #if defined(DB_ESNET) || defined(DB_HISPANO) struct dbh_reg *reg; ! char hflag = '-'; #endif aClient *acptr; aClient *server = NULL; *************** *** 905,932 **** } #if defined(DB_ESNET) || defined(DB_HISPANO) ! reg=NULL; ! if(!IsServer(cptr)) { ! char *p=strchr(parv[1],':'); ! ! if(p!=NULL) { ! *p++='\0'; ! parc=3; ! parv[2]=p; } #ifdef DB_ESNET ! reg=dbh_buscar_registro_local(ESNET_NICKDB,nick); #ifdef DB_HISPANO ! if(reg==NULL) #endif /* DB_HISPANO */ #endif /* DB_ESNET */ #ifdef DB_HISPANO ! reg=dbh_buscar_registro_local(DBH_NICKDB,nick); #endif /* DB_HISPANO */ } #endif /* DB_ESNET || DB_HISPANO */ ! if (!(acptr = FindClient(nick))) goto nickkilldone; /* No collisions, all clear... */ /* --- 905,934 ---- } #if defined(DB_ESNET) || defined(DB_HISPANO) ! reg = NULL; ! if (!IsServer(cptr)) ! { ! char *p = strchr(parv[1], ':'); ! ! if (p != NULL) ! { ! *p++ = '\0'; ! parc = 3; ! parv[2] = p; } #ifdef DB_ESNET ! reg = dbh_buscar_registro_local(ESNET_NICKDB, nick); #ifdef DB_HISPANO ! if (reg == NULL) #endif /* DB_HISPANO */ #endif /* DB_ESNET */ #ifdef DB_HISPANO ! reg = dbh_buscar_registro_local(DBH_NICKDB, nick); #endif /* DB_HISPANO */ } #endif /* DB_ESNET || DB_HISPANO */ ! if (!(acptr = FindClient(nick))) goto nickkilldone; /* No collisions, all clear... */ /* *************** *** 1103,1181 **** * Esta comprobacion solo se va a hacer si * el usuario es local y no esta haciendo nick flood. */ ! if(reg && (now >= cptr->nextnick)) { /* El nick indicado esta registrado */ ! unsigned long v[2],k[2],x[2]; ! int cont=(NICKLEN+8)/8; ! char tmpnick[8*((NICKLEN+8)/8)+1]; ! char tmppass[12+1]; ! unsigned long *p=(unsigned long *)tmpnick; ! unsigned long numpass[2]; ! int legal=1; ! char *nombre; ! char tmp; ! ! memset(tmpnick,0,sizeof(tmpnick)); ! strncpy(tmpnick,reg->clave,sizeof(tmpnick)-1); ! ! memset(tmppass,0,sizeof(tmppass)); ! strncpy(tmppass,reg->valor,sizeof(tmppass)-1); ! ! tmp=tmppass[6]; ! tmppass[6]='\0'; ! numpass[0]=base64toint(tmppass); ! tmppass[6]=tmp; ! numpass[1]=base64toint(tmppass+6); ! ! memset(tmppass,0,sizeof(tmppass)); ! if(parc>=3) ! strncpy(tmppass,parv[2],sizeof(tmppass)-1); ! else ! strncpy(tmppass,cptr->passwd,sizeof(tmppass)-1); ! ! /* relleno -> 123456789012 */ ! strncat(tmppass, "AAAAAAAAAAAA", sizeof(tmppass)-strlen(tmppass)-1); ! x[0]=x[1]=0; ! tmp=tmppass[6]; ! tmppass[6]='\0'; ! k[0]=base64toint(tmppass); ! tmppass[6]=tmp; ! k[1]=base64toint(tmppass+6); ! while(cont--) { ! v[0]=ntohl(*p++); ! v[1]=ntohl(*p++); ! tea(v,k,x); } - - if(x[0]!=numpass[0] || x[1]!=numpass[1]) - legal=0; - - if(*parv[0]) - nombre=parv[0]; else ! nombre=nick; ! ! if(legal) { ! sendto_one(cptr, ":%s NOTICE %s :*** Contraseña aceptada. Bienvenid@ a casa ;)", ! me.name, nick ); ! hflag='+'; ! } else { ! if(parc<3) { ! sendto_one(cptr, ":%s NOTICE %s :*** El nick %s está Registrado, necesitas contraseña.", ! me.name, nombre, nick ); ! } else { ! sendto_one(cptr, ":%s NOTICE %s :*** Contraseña Incorrecta para el nick %s.", ! me.name, nombre, nick ); ! } ! ! sendto_one(cptr, ":%s NOTICE %s :*** Utiliza /QUOTE NICK %s contraseña para identificarte.", ! me.name, nombre, nick ); ! ! sendto_one(cptr,err_str(ERR_NICKREGISTERED), ! me.name,parv[0],nick); ! return 0; } } #endif --- 1105,1194 ---- * Esta comprobacion solo se va a hacer si * el usuario es local y no esta haciendo nick flood. */ ! if (reg && (now >= cptr->nextnick)) ! { /* El nick indicado esta registrado */ ! unsigned long v[2], k[2], x[2]; ! int cont = (NICKLEN + 8) / 8; ! char tmpnick[8 * ((NICKLEN + 8) / 8) + 1]; ! char tmppass[12 + 1]; ! unsigned long *p = (unsigned long *)tmpnick; ! unsigned long numpass[2]; ! int legal = 1; ! char *nombre; ! char tmp; ! ! memset(tmpnick, 0, sizeof(tmpnick)); ! strncpy(tmpnick, reg->clave, sizeof(tmpnick) - 1); ! ! memset(tmppass, 0, sizeof(tmppass)); ! strncpy(tmppass, reg->valor, sizeof(tmppass) - 1); ! ! tmp = tmppass[6]; ! tmppass[6] = '\0'; ! numpass[0] = base64toint(tmppass); ! tmppass[6] = tmp; ! numpass[1] = base64toint(tmppass + 6); ! ! memset(tmppass, 0, sizeof(tmppass)); ! if (parc >= 3) ! strncpy(tmppass, parv[2], sizeof(tmppass) - 1); ! else ! strncpy(tmppass, cptr->passwd, sizeof(tmppass) - 1); ! ! /* relleno -> 123456789012 */ ! strncat(tmppass, "AAAAAAAAAAAA", sizeof(tmppass) - strlen(tmppass) - 1); ! ! x[0] = x[1] = 0; ! tmp = tmppass[6]; ! tmppass[6] = '\0'; ! k[0] = base64toint(tmppass); ! tmppass[6] = tmp; ! k[1] = base64toint(tmppass + 6); ! ! while (cont--) ! { ! v[0] = ntohl(*p++); ! v[1] = ntohl(*p++); ! tea(v, k, x); ! } ! ! if (x[0] != numpass[0] || x[1] != numpass[1]) ! legal = 0; ! if (*parv[0]) ! nombre = parv[0]; ! else ! nombre = nick; ! if (legal) ! { ! sendto_one(cptr, ! ":%s NOTICE %s :*** Contraseña aceptada. Bienvenid@ a casa ;)", ! me.name, nick); ! hflag = '+'; ! } ! else ! { ! if (parc < 3) ! { ! sendto_one(cptr, ! ":%s NOTICE %s :*** El nick %s está Registrado, necesitas contraseña.", ! me.name, nombre, nick); } else ! { ! sendto_one(cptr, ! ":%s NOTICE %s :*** Contraseña Incorrecta para el nick %s.", ! me.name, nombre, nick); } + + sendto_one(cptr, + ":%s NOTICE %s :*** Utiliza /QUOTE NICK %s contraseña para identificarte.", + me.name, nombre, nick); + + sendto_one(cptr, err_str(ERR_NICKREGISTERED), me.name, parv[0], nick); + return 0; + } } #endif *************** *** 1213,1231 **** #if defined(DB_HISPANO) || defined(DB_ESNET) { #endif ! for (s = user_modes; (flag = *s); s += 2) if (((char)*(s + 1)) == *p) { sptr->flags |= flag; break; ! } #if defined(DB_HISPANO) || defined(DB_ESNET) ! for (s = user_hmodes; (flag = *s); s += 2) if (((char)*(s + 1)) == *p) { sptr->hmodes |= flag; break; ! } } #endif /* --- 1226,1244 ---- #if defined(DB_HISPANO) || defined(DB_ESNET) { #endif ! for (s = user_modes; (flag = *s); s += 2) if (((char)*(s + 1)) == *p) { sptr->flags |= flag; break; ! } #if defined(DB_HISPANO) || defined(DB_ESNET) ! for (s = user_hmodes; (flag = *s); s += 2) if (((char)*(s + 1)) == *p) { sptr->hmodes |= flag; break; ! } } #endif /* *************** *** 1266,1273 **** add_client_to_list(sptr); hAddClient(sptr); #ifdef DBH_VIP ! if(IsHidden(sptr)) ! make_virtualhost(sptr); #endif server->serv->ghost = 0; /* :server NICK means end of net.burst */ strncpy(sptr->info, parv[parc - 1], sizeof(sptr->info) - 1); --- 1279,1286 ---- add_client_to_list(sptr); hAddClient(sptr); #ifdef DBH_VIP ! if (IsHidden(sptr)) ! make_virtualhost(sptr); #endif server->serv->ghost = 0; /* :server NICK means end of net.burst */ strncpy(sptr->info, parv[parc - 1], sizeof(sptr->info) - 1); *************** *** 1389,1417 **** } #if defined(DB_HISPANO) || defined(DB_ESNET) ! if( !IsServer(sptr) ) { ! int of, oh; ! static void send_umode_out(aClient *a, aClient *b, int c, int d); ! ! of=sptr->flags; ! oh=sptr->hmodes; ! if(hflag=='+') { ! SetNickRegistered(sptr); /* por si era nuevo */ #ifdef DBH_VIP ! SetHidden(sptr); /* lo oculto */ ! make_virtualhost(sptr); #endif ! if( dbh_buscar_registro_local(DBH_OPERDB, nick) ) ! SetHelpOp(sptr); ! } else { ! ClearNickRegistered(sptr); /* por si era nuevo */ ! ClearHelpOp(sptr); ! ClearHidden(sptr); /* desoculto */ ! } ! send_umode_out(cptr, sptr, of, oh); } #endif --- 1402,1433 ---- } #if defined(DB_HISPANO) || defined(DB_ESNET) ! if (!IsServer(sptr)) { ! int of, oh; ! static void send_umode_out(aClient *a, aClient *b, int c, int d); ! of = sptr->flags; ! oh = sptr->hmodes; ! ! if (hflag == '+') ! { ! SetNickRegistered(sptr); /* por si era nuevo */ #ifdef DBH_VIP ! SetHidden(sptr); /* lo oculto */ ! make_virtualhost(sptr); #endif ! if (dbh_buscar_registro_local(DBH_OPERDB, nick)) ! SetHelpOp(sptr); ! } ! else ! { ! ClearNickRegistered(sptr); /* por si era nuevo */ ! ClearHelpOp(sptr); ! ClearHidden(sptr); /* desoculto */ ! } ! send_umode_out(cptr, sptr, of, oh); } #endif *************** *** 1459,1465 **** unsigned char hash = (tmp * tmp) >> 12; #ifdef CS_NO_FLOOD_ESNET ! if(IsChannelService(sptr)) return 0; #endif if (sptr->targets[0] == hash) /* Same target as last time ? */ --- 1475,1482 ---- unsigned char hash = (tmp * tmp) >> 12; #ifdef CS_NO_FLOOD_ESNET ! if (IsChannelService(sptr)) ! return 0; #endif if (sptr->targets[0] == hash) /* Same target as last time ? */ *************** *** 1598,1604 **** sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], nick); else sendto_one(sptr, ! ":%s %d %s * :Target left IRC. Failed to deliver: [%.50s]", me.name, ERR_NOSUCHNICK, sptr->name, parv[parc - 1]); continue; } --- 1615,1621 ---- sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], nick); else sendto_one(sptr, ! ":%s %d %s * :Target left IRC. Failed to deliver: [%.50s]", me.name, ERR_NOSUCHNICK, sptr->name, parv[parc - 1]); continue; } *************** *** 2338,2344 **** } #if defined(DB_HISPANO) || defined(DB_ESNET) ! static char umode_buf[2 * (sizeof(user_modes)+sizeof(user_hmodes)) / sizeof(int)]; #else static char umode_buf[2 * sizeof(user_modes) / sizeof(int)]; #endif /* DB_HISPANO || DB_ESNET */ --- 2355,2362 ---- } #if defined(DB_HISPANO) || defined(DB_ESNET) ! static char umode_buf[2 * (sizeof(user_modes) + ! sizeof(user_hmodes)) / sizeof(int)]; #else static char umode_buf[2 * sizeof(user_modes) / sizeof(int)]; #endif /* DB_HISPANO || DB_ESNET */ *************** *** 2363,2368 **** --- 2381,2387 ---- if (cptr && MyUser(cptr)) send_umode(cptr, sptr, old, ALL_UMODES, oldh, ALL_HMODES); } + #else /* * added Sat Jul 25 07:30:42 EST 1992 *************** *** 2382,2387 **** --- 2401,2407 ---- if (cptr && MyUser(cptr)) send_umode(cptr, sptr, old, ALL_UMODES); } + #endif /* DB_HISPANO || DB_ESNET */ /* *************** *** 2573,2584 **** #ifdef DBH_VIP sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', ! acptr->user->username, ! get_visiblehost(acptr,sptr)); #else sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', ! acptr->user->username, acptr->user->host); #endif } else --- 2593,2603 ---- #ifdef DBH_VIP sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', ! acptr->user->username, get_visiblehost(acptr, sptr)); #else sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', ! acptr->user->username, acptr->user->host); #endif } else *************** *** 2622,2629 **** #ifdef DB_HISPANO sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', ! acptr->user->username, ! ( sptr==acptr || IsHiddenViewer(sptr) || !IsHidden(acptr))?inetntoa(acptr->ip):"127.0.0.1"); #else sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', --- 2641,2649 ---- #ifdef DB_HISPANO sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', ! acptr->user->username, ! (sptr == acptr || IsHiddenViewer(sptr) ! || !IsHidden(acptr)) ? inetntoa(acptr->ip) : "127.0.0.1"); #else sbuf = sprintf_irc(sbuf, "%s%s=%c%s@%s", acptr->name, IsAnOper(acptr) ? "*" : "", (acptr->user->away) ? '-' : '+', *************** *** 2705,2711 **** #if defined(DB_HISPANO) || defined(DB_ESNET) int sethmodes; #endif ! what = MODE_ADD; if (parc < 2) --- 2725,2731 ---- #if defined(DB_HISPANO) || defined(DB_ESNET) int sethmodes; #endif ! what = MODE_ADD; if (parc < 2) *************** *** 2757,2770 **** setflags = 0; for (s = user_modes; (flag = *s); s += 2) if (sptr->flags & flag) ! setflags |= flag; #if defined(DB_HISPANO) || defined(DB_ESNET) sethmodes = 0; for (s = user_hmodes; (flag = *s); s += 2) if (sptr->hmodes & flag) ! sethmodes |= flag; #endif ! if (MyConnect(sptr)) tmpmask = sptr->snomask; --- 2777,2790 ---- setflags = 0; for (s = user_modes; (flag = *s); s += 2) if (sptr->flags & flag) ! setflags |= flag; #if defined(DB_HISPANO) || defined(DB_ESNET) sethmodes = 0; for (s = user_hmodes; (flag = *s); s += 2) if (sptr->hmodes & flag) ! sethmodes |= flag; #endif ! if (MyConnect(sptr)) tmpmask = sptr->snomask; *************** *** 2822,2840 **** break; } #if defined(DB_HISPANO) || defined(DB_ESNET) ! if(flag==0) ! for (s = user_hmodes; (flag = *s); s += 2) ! if (*m == (char)(*(s + 1))) ! { ! if (what == MODE_ADD) ! sptr->hmodes |= flag; ! else ! sptr->hmodes &= ~flag; ! break; ! } #endif ! if (flag == 0 && MyConnect(sptr)) ! sendto_one(sptr, err_str(ERR_UMODEUNKNOWNFLAG), me.name, parv[0]); break; } /* --- 2842,2860 ---- break; } #if defined(DB_HISPANO) || defined(DB_ESNET) ! if (flag == 0) ! for (s = user_hmodes; (flag = *s); s += 2) ! if (*m == (char)(*(s + 1))) ! { ! if (what == MODE_ADD) ! sptr->hmodes |= flag; ! else ! sptr->hmodes &= ~flag; ! break; ! } #endif ! if (flag == 0 && MyConnect(sptr)) ! sendto_one(sptr, err_str(ERR_UMODEUNKNOWNFLAG), me.name, parv[0]); break; } /* *************** *** 2851,2884 **** * prevents users from /kick'ing or /mode -o'ing */ #if defined(DB_HISPANO) || defined(DB_ESNET) /* el modo +/-r solo se acepta de los Servidores */ ! if(!IsServer(cptr)) { ! if(sethmodes & HMODE_NICKREGISTERED) ! SetNickRegistered(sptr); ! else ! ClearNickRegistered(sptr); ! /* el modo +h solo se lopueden poner los OPER y kitar a voluntad */ ! if( !(sethmodes & HMODE_HELPOP) && !( IsNickRegistered(sptr) && dbh_buscar_registro_local(DBH_OPERDB,sptr->name)) ) ! ClearHelpOp(sptr); ! if( !(sethmodes & HMODE_HIDDEN) && !( IsNickRegistered(sptr) ) ) ! ClearHidden(sptr); ! if( !(sethmodes & HMODE_HIDDENVIEWER) && !( IsHelpOp(sptr) || IsAnOper(sptr) ) ) ! ClearHiddenViewer(sptr); ! if( !(sethmodes & HMODE_SERVICESBOT) ) ! ClearServicesBot(sptr); } #ifdef DBH_VIP /* si acaba de hacerse +x, calculo el virtualhost */ ! if( !(sethmodes & HMODE_HIDDEN) && IsHidden(sptr) ) ! make_virtualhost(sptr); #endif ! #endif ! /* ** Si somos IRCOPs y hemos puesto el flag K, lo acepta. ** jcea@argo.es - 16/Dic/97 --- 2871,2907 ---- * prevents users from /kick'ing or /mode -o'ing */ #if defined(DB_HISPANO) || defined(DB_ESNET) /* el modo +/-r solo se acepta de los Servidores */ ! if (!IsServer(cptr)) ! { ! if (sethmodes & HMODE_NICKREGISTERED) ! SetNickRegistered(sptr); ! else ! ClearNickRegistered(sptr); ! /* el modo +h solo se lopueden poner los OPER y kitar a voluntad */ ! if (!(sethmodes & HMODE_HELPOP) && !(IsNickRegistered(sptr) ! && dbh_buscar_registro_local(DBH_OPERDB, sptr->name))) ! ClearHelpOp(sptr); ! if (!(sethmodes & HMODE_HIDDEN) && !(IsNickRegistered(sptr))) ! ClearHidden(sptr); ! if (!(sethmodes & HMODE_HIDDENVIEWER) && !(IsHelpOp(sptr) ! || IsAnOper(sptr))) ! ClearHiddenViewer(sptr); ! if (!(sethmodes & HMODE_SERVICESBOT)) ! ClearServicesBot(sptr); } #ifdef DBH_VIP /* si acaba de hacerse +x, calculo el virtualhost */ ! if (!(sethmodes & HMODE_HIDDEN) && IsHidden(sptr)) ! make_virtualhost(sptr); #endif ! #endif ! /* ** Si somos IRCOPs y hemos puesto el flag K, lo acepta. ** jcea@argo.es - 16/Dic/97 *************** *** 2890,2897 **** #if defined(DB_HISPANO) && defined(DBH_OPER_HACK_KMODE) && !IsHelpOp(sptr) #endif ! ) ! sptr->flags &= ~FLAGS_CHSERV; /* * Compare new flags with old flags and send string which --- 2913,2920 ---- #if defined(DB_HISPANO) && defined(DBH_OPER_HACK_KMODE) && !IsHelpOp(sptr) #endif ! ) ! sptr->flags &= ~FLAGS_CHSERV; /* * Compare new flags with old flags and send string which *************** *** 2935,2948 **** for (s = user_modes; (flag = *s); s += 2) if ((c_flags & flag)) ! *m++ = *(s + 1); #if defined(DB_HISPANO) || defined(DB_ESNET) { ! int c_hmodes = cptr->hmodes & SEND_HMODES; ! ! for (s = user_hmodes; (flag = *s); s += 2) ! if ((c_hmodes & flag)) ! *m++ = *(s + 1); } #endif *m = '\0'; --- 2958,2971 ---- for (s = user_modes; (flag = *s); s += 2) if ((c_flags & flag)) ! *m++ = *(s + 1); #if defined(DB_HISPANO) || defined(DB_ESNET) { ! int c_hmodes = cptr->hmodes & SEND_HMODES; ! ! for (s = user_hmodes; (flag = *s); s += 2) ! if ((c_hmodes & flag)) ! *m++ = *(s + 1); } #endif *m = '\0'; *************** *** 2956,2962 **** * -avalon */ #if defined(DB_HISPANO) || defined(DB_ESNET) ! void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask, int oldh, int sendhmask) #else void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask) #endif --- 2979,2986 ---- * -avalon */ #if defined(DB_HISPANO) || defined(DB_ESNET) ! void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask, int oldh, ! int sendhmask) #else void send_umode(aClient *cptr, aClient *sptr, int old, int sendmask) #endif *************** *** 3354,3366 **** */ char *get_virtualhost(aClient *acptr) { ! if(!IsUser(acptr)) ! return ""; /* esto no deberia salir nunca */ ! if(!IsHidden(acptr)) ! return acptr->user->host; ! else ! return acptr->user->virtualhost; } /* --- 3378,3390 ---- */ char *get_virtualhost(aClient *acptr) { ! if (!IsUser(acptr)) ! return ""; /* esto no deberia salir nunca */ ! if (!IsHidden(acptr)) ! return acptr->user->host; ! else ! return acptr->user->virtualhost; } /* *************** *** 3372,3384 **** */ char *get_visiblehost(aClient *acptr, aClient *sptr) { ! if(!IsUser(acptr) || !IsUser(sptr)) ! return ""; /* esto no deberia salir nunca */ ! if(!IsHidden(acptr) || IsHiddenViewer(sptr) || acptr == sptr) ! return acptr->user->host; ! else ! return acptr->user->virtualhost; } /* --- 3396,3408 ---- */ char *get_visiblehost(aClient *acptr, aClient *sptr) { ! if (!IsUser(acptr) || !IsUser(sptr)) ! return ""; /* esto no deberia salir nunca */ ! if (!IsHidden(acptr) || IsHiddenViewer(sptr) || acptr == sptr) ! return acptr->user->host; ! else ! return acptr->user->virtualhost; } /* *************** *** 3389,3447 **** */ void make_virtualhost(aClient *acptr) { ! struct dbh_reg *reg; ! unsigned long v[2],k[2],x[2]; ! int cont=(NICKLEN+8)/8, ts=0; ! char hash[12+1]; ! ! strcpy(acptr->user->virtualhost, acptr->user->host); ! ! if( (reg=dbh_buscar_registro_local(DBH_VIRTUALDB, acptr->name)) ) ! { ! strncpy(acptr->user->virtualhost, reg->valor, sizeof(acptr->user->virtualhost)); ! sendto_one(acptr, ":%s NOTICE %s :*** Protecci3/4n IP: tu direcci3/4n virtual es %s", ! me.name, acptr->name, acptr->user->virtualhost); ! return; ! } ! ! if( !(reg=dbh_buscar_registro_local(ESNET_NICKDB, acptr->name)) && ! !(reg=dbh_buscar_registro_local(DBH_NICKDB, acptr->name)) ! ) ! return; ! strncpy(hash, reg->valor, 12); ! while(1) { ! char tmp; ! /* resultado */ ! x[0]=x[1]=0; ! /* valor */ ! tmp=hash[6]; ! hash[6]='\0'; ! v[0]=base64toint(hash); ! hash[6]=tmp; ! v[1]=base64toint(hash+6); ! /* clave */ ! k[0]=(unsigned long)acptr->ip.s_addr; ! k[1]=(unsigned long)(base64toint(acptr->yxx)+ts); ! tea(v,k,x); ! inttobase64(acptr->user->virtualhost,x[0],6); ! inttobase64(acptr->user->virtualhost+6,x[1],6); ! strcpy(acptr->user->virtualhost+12,".virtual"); ! if( strchr(acptr->user->virtualhost, '[') == NULL && ! strchr(acptr->user->virtualhost, ']') == NULL ) ! break; /* nice host name */ ! else ! ts+=65537; ! } ! ! sendto_one(acptr, ":%s NOTICE %s :*** Protecci3/4n IP: tu direcci3/4n virtual es %s", ! me.name, acptr->name, acptr->user->virtualhost); } ! #endif --- 3413,3475 ---- */ void make_virtualhost(aClient *acptr) { ! struct dbh_reg *reg; ! unsigned long v[2], k[2], x[2]; ! int cont = (NICKLEN + 8) / 8, ts = 0; ! char hash[12 + 1]; ! ! strcpy(acptr->user->virtualhost, acptr->user->host); ! ! if ((reg = dbh_buscar_registro_local(DBH_VIRTUALDB, acptr->name))) ! { ! strncpy(acptr->user->virtualhost, reg->valor, ! sizeof(acptr->user->virtualhost)); ! sendto_one(acptr, ! ":%s NOTICE %s :*** Protecci3/4n IP: tu direcci3/4n virtual es %s", me.name, ! acptr->name, acptr->user->virtualhost); ! return; ! } ! ! if (!(reg = dbh_buscar_registro_local(ESNET_NICKDB, acptr->name)) && ! !(reg = dbh_buscar_registro_local(DBH_NICKDB, acptr->name))) ! return; ! strncpy(hash, reg->valor, 12); ! while (1) ! { ! char tmp; ! /* resultado */ ! x[0] = x[1] = 0; ! /* valor */ ! tmp = hash[6]; ! hash[6] = '\0'; ! v[0] = base64toint(hash); ! hash[6] = tmp; ! v[1] = base64toint(hash + 6); ! /* clave */ ! k[0] = (unsigned long)acptr->ip.s_addr; ! k[1] = (unsigned long)(base64toint(acptr->yxx) + ts); ! tea(v, k, x); ! inttobase64(acptr->user->virtualhost, x[0], 6); ! inttobase64(acptr->user->virtualhost + 6, x[1], 6); ! strcpy(acptr->user->virtualhost + 12, ".virtual"); ! if (strchr(acptr->user->virtualhost, '[') == NULL && ! strchr(acptr->user->virtualhost, ']') == NULL) ! break; /* nice host name */ ! else ! ts += 65537; ! } ! ! sendto_one(acptr, ! ":%s NOTICE %s :*** Protecci3/4n IP: tu direcci3/4n virtual es %s", me.name, ! acptr->name, acptr->user->virtualhost); } ! ! #endif Index: ../ircu2.10.06/ircd/send.c =================================================================== RCS file: /cvsroot/ircd/ircd/send.c,v retrieving revision 1.5 retrieving revision 1.6 diff -c -r1.5 -r1.6 *** ../ircu2.10.06/ircd/send.c 1999/10/08 11:09:09 1.5 --- ../ircu2.10.06/ircd/send.c 1999/10/15 08:24:25 1.6 *************** *** 309,319 **** } if (*user->host && !MyConnect(from)) { ! strcat(sender, "@"); #ifdef DBH_VIP ! strcat(sender, get_virtualhost(from)); #else ! strcat(sender, user->host); #endif flag = 1; } --- 309,319 ---- } if (*user->host && !MyConnect(from)) { ! strcat(sender, "@"); #ifdef DBH_VIP ! strcat(sender, get_virtualhost(from)); #else ! strcat(sender, user->host); #endif flag = 1; } Index: ../ircu2.10.06/ircd/support.c =================================================================== RCS file: /cvsroot/ircd/ircd/support.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ../ircu2.10.06/ircd/support.c 1999/10/08 10:33:11 1.3 --- ../ircu2.10.06/ircd/support.c 1999/10/15 08:24:25 1.4 *************** *** 72,77 **** --- 72,78 ---- *save = pos; return (tmp); } + #endif /* !HAVE_STRTOKEN */ #ifndef HAVE_STRERROR *************** *** 158,163 **** --- 159,165 ---- tv->tv_usec = (tp.tv_nsec + 500) / 1000; return 0; } + #endif /* !HAVE_GETTIMEOFDAY */ #ifdef DEBUGMODE *************** *** 211,216 **** --- 213,219 ---- va_end(vl); } + #endif int check_if_ipmask(const char *mask) Index: ../ircu2.10.06/ircd/whocmds.c =================================================================== RCS file: /cvsroot/ircd/ircd/whocmds.c,v retrieving revision 1.13 retrieving revision 1.14 diff -c -r1.13 -r1.14 *** ../ircu2.10.06/ircd/whocmds.c 1999/10/10 01:10:29 1.13 --- ../ircu2.10.06/ircd/whocmds.c 1999/10/15 08:24:25 1.14 *************** *** 143,148 **** --- 143,149 ---- who_marker++; } } + #define CheckMark(x, y) ((x == y) ? 0 : (x = y)) #define Process(cptr) CheckMark(cptr->marker, who_marker) *************** *** 220,226 **** if (!fields || (fields & WHO_FIELD_HOS)) { #ifdef DBH_VIP ! Reg3 char *p2 = get_visiblehost(acptr,sptr); #else Reg3 char *p2 = acptr->user->host; #endif --- 221,227 ---- if (!fields || (fields & WHO_FIELD_HOS)) { #ifdef DBH_VIP ! Reg3 char *p2 = get_visiblehost(acptr, sptr); #else Reg3 char *p2 = acptr->user->host; #endif *************** *** 258,275 **** else if (chptr && is_zombie(acptr, chptr)) *(p1++) = '!'; if (IsDeaf(acptr)) ! *(p1++) = 'd'; #ifdef DB_HISPANO ! if(IsHelpOp(acptr)) ! *(p1++) = 'h'; ! if(IsHidden(acptr)) ! *(p1++) = 'x'; ! if(IsHiddenViewer(acptr)) ! *(p1++) = 'X'; ! if(IsNickRegistered(acptr)) ! *(p1++) = 'r'; #endif ! if (IsAnOper(sptr)) { if (IsInvisible(acptr)) --- 259,276 ---- else if (chptr && is_zombie(acptr, chptr)) *(p1++) = '!'; if (IsDeaf(acptr)) ! *(p1++) = 'd'; #ifdef DB_HISPANO ! if (IsHelpOp(acptr)) ! *(p1++) = 'h'; ! if (IsHidden(acptr)) ! *(p1++) = 'x'; ! if (IsHiddenViewer(acptr)) ! *(p1++) = 'X'; ! if (IsNickRegistered(acptr)) ! *(p1++) = 'r'; #endif ! if (IsAnOper(sptr)) { if (IsInvisible(acptr)) *************** *** 556,581 **** if ((bitsel & WHOSELECT_OPER) && !IsAnOper(acptr)) continue; #ifdef DBH_VIP ! if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) || matchexec(acptr->name, mymask, minlen)) && ((!(matchsel & WHO_FIELD_UID)) || matchexec(acptr->user->username, mymask, minlen)) && ((!(matchsel & WHO_FIELD_SER)) || (!(acptr->user->server->flags & FLAGS_MAP))) ! && ((!(matchsel & WHO_FIELD_HOS)) ! || (matchexec(get_visiblehost(acptr,sptr), mymask, minlen) ! && matchexec(get_virtualhost(acptr), mymask, minlen)) ) && ((!(matchsel & WHO_FIELD_REN)) || matchexec(acptr->info, mymask, minlen)) ! && ((!(matchsel & WHO_FIELD_NIP)) ! || (IsHidden(acptr)&&!IsHiddenViewer(sptr)) || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #else ! if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) || matchexec(acptr->name, mymask, minlen)) && ((!(matchsel & WHO_FIELD_UID)) --- 557,582 ---- if ((bitsel & WHOSELECT_OPER) && !IsAnOper(acptr)) continue; #ifdef DBH_VIP ! if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) || matchexec(acptr->name, mymask, minlen)) && ((!(matchsel & WHO_FIELD_UID)) || matchexec(acptr->user->username, mymask, minlen)) && ((!(matchsel & WHO_FIELD_SER)) || (!(acptr->user->server->flags & FLAGS_MAP))) ! && ((!(matchsel & WHO_FIELD_HOS)) ! || (matchexec(get_visiblehost(acptr, sptr), mymask, minlen) ! && matchexec(get_virtualhost(acptr), mymask, minlen))) && ((!(matchsel & WHO_FIELD_REN)) || matchexec(acptr->info, mymask, minlen)) ! && ((!(matchsel & WHO_FIELD_NIP)) ! || (IsHidden(acptr) && !IsHiddenViewer(sptr)) || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #else ! if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) || matchexec(acptr->name, mymask, minlen)) && ((!(matchsel & WHO_FIELD_UID)) *************** *** 590,596 **** || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #endif if (!SHOW_MORE(sptr, counter)) break; --- 591,597 ---- || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #endif if (!SHOW_MORE(sptr, counter)) break; *************** *** 607,615 **** if ((bitsel & WHOSELECT_OPER) && !IsAnOper(acptr)) continue; if (!(SEE_USER(sptr, acptr, bitsel))) ! continue; #ifdef DBH_VIP ! /* tengo ke pensar un rato en ello. 1999/09/14 savage@apostols.org */ if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) || matchexec(acptr->name, mymask, minlen)) --- 608,616 ---- if ((bitsel & WHOSELECT_OPER) && !IsAnOper(acptr)) continue; if (!(SEE_USER(sptr, acptr, bitsel))) ! continue; #ifdef DBH_VIP ! /* tengo ke pensar un rato en ello. 1999/09/14 savage@apostols.org */ if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) || matchexec(acptr->name, mymask, minlen)) *************** *** 617,633 **** || matchexec(acptr->user->username, mymask, minlen)) && ((!(matchsel & WHO_FIELD_SER)) || (!(acptr->user->server->flags & FLAGS_MAP))) ! && ((!(matchsel & WHO_FIELD_HOS)) ! || (matchexec(get_visiblehost(acptr,sptr), mymask, minlen) ! && matchexec(get_virtualhost(acptr), mymask, minlen)) ) && ((!(matchsel & WHO_FIELD_REN)) || matchexec(acptr->info, mymask, minlen)) && ((!(matchsel & WHO_FIELD_NIP)) ! || (IsHidden(acptr)&&!IsHiddenViewer(sptr)) || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #else if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) --- 618,634 ---- || matchexec(acptr->user->username, mymask, minlen)) && ((!(matchsel & WHO_FIELD_SER)) || (!(acptr->user->server->flags & FLAGS_MAP))) ! && ((!(matchsel & WHO_FIELD_HOS)) ! || (matchexec(get_visiblehost(acptr, sptr), mymask, minlen) ! && matchexec(get_virtualhost(acptr), mymask, minlen))) && ((!(matchsel & WHO_FIELD_REN)) || matchexec(acptr->info, mymask, minlen)) && ((!(matchsel & WHO_FIELD_NIP)) ! || (IsHidden(acptr) && !IsHiddenViewer(sptr)) || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #else if ((mask) && ((!(matchsel & WHO_FIELD_NIC)) *************** *** 644,650 **** || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #endif if (!SHOW_MORE(sptr, counter)) break; --- 645,651 ---- || ((((acptr->ip.s_addr & imask.mask.s_addr) != imask.bits.s_addr)) || (imask.fall && matchexec(inet_ntoa(acptr->ip), mymask, minlen))))) ! continue; #endif if (!SHOW_MORE(sptr, counter)) break; *************** *** 775,786 **** { a2cptr = user->server; #ifdef DBH_VIP ! sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, ! get_visiblehost(acptr,sptr), acptr->info); #else ! sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, user->host, acptr->info); #endif } else --- 776,787 ---- { a2cptr = user->server; #ifdef DBH_VIP ! sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, ! get_visiblehost(acptr, sptr), acptr->info); #else ! sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, user->host, acptr->info); #endif } else *************** *** 795,810 **** exact_match: if (user #ifndef OPER_CHANNEL_SERVICE_ESNET ! && !IsChannelService(acptr) #endif ! ) { mlen = strlen(me.name) + strlen(parv[0]) + 12 + strlen(name); for (len = 0, *buf = '\0', lp = user->channel; lp; lp = lp->next) { chptr = lp->value.chptr; if (ShowChannel(sptr, chptr) && ! (acptr == sptr || !is_zombie(acptr, chptr))) { if (len + strlen(chptr->chname) + mlen > BUFSIZE - 5) { --- 796,811 ---- exact_match: if (user #ifndef OPER_CHANNEL_SERVICE_ESNET ! && !IsChannelService(acptr) #endif ! ) { mlen = strlen(me.name) + strlen(parv[0]) + 12 + strlen(name); for (len = 0, *buf = '\0', lp = user->channel; lp; lp = lp->next) { chptr = lp->value.chptr; if (ShowChannel(sptr, chptr) && ! (acptr == sptr || !is_zombie(acptr, chptr))) { if (len + strlen(chptr->chname) + mlen > BUFSIZE - 5) { *************** *** 845,864 **** #if defined(DB_HISPANO) || defined(DB_ESNET) if (IsNickRegistered(acptr)) ! sendto_one(sptr, rpl_str(RPL_WHOISREGNICK), ! me.name, parv[0], name); ! if (IsHelpOp(acptr)) ! sendto_one(sptr, rpl_str(RPL_WHOISHELPOP), ! me.name, parv[0], name); #ifdef DBH_VIP ! if (IsHidden(acptr) && ( IsHiddenViewer(sptr) || acptr == sptr ) ) ! sendto_one(sptr, rpl_str(RPL_WHOISHOST), ! me.name, parv[0], name, get_virtualhost(acptr)); #endif /* DBH_VIP */ ! #endif ! if (IsAnOper(acptr)) sendto_one(sptr, rpl_str(RPL_WHOISOPERATOR), me.name, parv[0], name); --- 846,863 ---- #if defined(DB_HISPANO) || defined(DB_ESNET) if (IsNickRegistered(acptr)) ! sendto_one(sptr, rpl_str(RPL_WHOISREGNICK), me.name, parv[0], name); ! if (IsHelpOp(acptr)) ! sendto_one(sptr, rpl_str(RPL_WHOISHELPOP), me.name, parv[0], name); #ifdef DBH_VIP ! if (IsHidden(acptr) && (IsHiddenViewer(sptr) || acptr == sptr)) ! sendto_one(sptr, rpl_str(RPL_WHOISHOST), ! me.name, parv[0], name, get_virtualhost(acptr)); #endif /* DBH_VIP */ ! #endif ! if (IsAnOper(acptr)) sendto_one(sptr, rpl_str(RPL_WHOISOPERATOR), me.name, parv[0], name); *************** *** 881,895 **** name = (!*acptr->name) ? "?" : acptr->name; a2cptr = user->server; #ifdef DBH_VIP ! sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, ! get_visiblehost(acptr,sptr), ! acptr->info); #else sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, user->host, acptr->info) #endif ! goto exact_match; } } if (!found) --- 880,893 ---- name = (!*acptr->name) ? "?" : acptr->name; a2cptr = user->server; #ifdef DBH_VIP ! sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, ! get_visiblehost(acptr, sptr), acptr->info); #else sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, ! parv[0], name, user->username, user->host, acptr->info) #endif ! goto exact_match; } } if (!found)