? patch.db27 Index: ircd/s_debug.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_debug.c,v retrieving revision 1.44 diff -c -r1.44 s_debug.c *** ../ircu2.10.06/ircd/s_debug.c 1999/10/11 18:31:17 1.44 --- ../ircu2.10.06+/ircd/s_debug.c 1999/10/13 12:58:16 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','2','6', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','2','7', #ifdef DB_ESNET '+', #else Index: ircd/s_serv.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_serv.c,v retrieving revision 1.28 diff -c -r1.28 s_serv.c *** ../ircu2.10.06/ircd/s_serv.c 1999/10/11 18:31:17 1.28 --- ../ircu2.10.06+/ircd/s_serv.c 1999/10/13 12:58:17 *************** *** 1765,1778 **** } ! static void corta_si_multiples_hubs(char que_bdd) { Dlink *lp; int num_hubs=0; 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) { /* --- 1765,1780 ---- } ! static void corta_si_multiples_hubs(aClient *cptr,char que_bdd) { 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) { /* *************** *** 1780,1791 **** ** el "exit_client()" modifica la estructura */ corta: ! for(lp = me.serv->down; lp; lp = lp->next) { ! if(find_conf_host(lp->value.cptr->confs, ! lp->value.cptr->name,CONF_HUB)!=NULL) { ! exit_client(lp->value.cptr,lp->value.cptr, ! &me,"BDD inconsistente. Resincronizando..."); ! goto corta; } } } --- 1782,1801 ---- ** 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) { ! exit_client(acptr,acptr, ! &me,"BDD inconsistente. Resincronizando..."); ! goto corta; ! } } } } *************** *** 1835,1852 **** db_file=open(path,O_TRUNC,S_IRUSR | S_IWUSR); close(db_file); alarm(0); sendto_ops("Solicitando actualizacion BDD '%c' " "a los nodos vecinos.",ESNET_NICKDB); /* ! ** No deberia pedirse actualizacion ! ** a nodos que no son HUBs, porque ! ** sus datos no se van a aceptar. */ for(lp = me.serv->down; lp; lp = lp->next) { ! sendto_one(lp->value.cptr,"%s DB %s 0 J %lu %c", ! NumServ(&me),lp->value.cptr->name,tabla_serie[ESNET_NICKDB],ESNET_NICKDB); } - corta_si_multiples_hubs(ESNET_NICKDB); } almacena_hash(ESNET_NICKDB); } --- 1845,1868 ---- db_file=open(path,O_TRUNC,S_IRUSR | S_IWUSR); close(db_file); alarm(0); + + corta_si_multiples_hubs(NULL,ESNET_NICKDB); + sendto_ops("Solicitando actualizacion BDD '%c' " "a los nodos vecinos.",ESNET_NICKDB); + /* ! ** 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[ESNET_NICKDB],ESNET_NICKDB); ! } } } almacena_hash(ESNET_NICKDB); } *************** *** 1991,1999 **** close(db_file); alarm(0); borrar_db(que_bdd); sendto_one(sptr,"%s DB %s 0 E %s %c\n", NumServ(&me),sptr->name,parv[4],que_bdd); - corta_si_multiples_hubs(que_bdd); } /* --- 2007,2020 ---- 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); } /*