*** ../ircu2.10.06/ircd/s_debug.c 1999/10/06 20:13:44 1.5 --- ../ircu2.10.06+/ircd/s_debug.c 1999/10/06 22:05:54 1.7 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','1','6', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','1','7', #ifdef DB_ESNET '+', #else *** ../ircu2.10.06/ircd/s_serv.c 1999/10/06 17:24:16 1.2 --- ../ircu2.10.06+/ircd/s_serv.c 1999/10/06 21:57:28 1.5 *************** *** 1590,1603 **** * * 1999/06/30 savage@apostols.org */ ! void borrar_db(void) { int i; struct dbh_reg *reg; for(i=0;inext) reg->borrado=1; } /* --- 1590,1608 ---- * * 1999/06/30 savage@apostols.org */ ! 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; } /* *************** *** 1608,1614 **** */ void reload_db(void) { ! borrar_db(); initdb(); sendto_ops("Releyendo la base de datos. Ultimo registro: %lu",tabla_serie[ESNET_NICKDB]); } --- 1613,1619 ---- */ void reload_db(void) { ! borrar_db(ESNET_NICKDB); initdb(); sendto_ops("Releyendo la base de datos. Ultimo registro: %lu",tabla_serie[ESNET_NICKDB]); } *************** *** 1641,1666 **** if(find_conf_host(cptr->confs,cptr->name,CONF_HUB)!=NULL) es_hub=!0; if(!db) { db=atol(parv[4]); switch(*parv[3]) { case 'B': ! if(parc==6) { ! que_bdd=*parv[5]; ! if((que_bdd<'a')||(que_bdd>'z')) return 0; ! } ! 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': cont=100; - if(parc==6) { - que_bdd=*parv[5]; - if((que_bdd<'a')||(que_bdd>'z')) return 0; - } - if(db>=tabla_serie[que_bdd]) { /* Se le pueden mandar registros individuales */ - mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); sptr->serv->esnet_db|=mascara_bdd; return 0; break; --- 1646,1669 ---- 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')) return 0; + } + 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': cont=100; if(db>=tabla_serie[que_bdd]) { /* Se le pueden mandar registros individuales */ sptr->serv->esnet_db|=mascara_bdd; return 0; break; *************** *** 1687,1727 **** if(!(--cont)) break; } while(leer_db(db_file,db_buf)!=-1); close(db_file); ! if(cont) { ! mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); ! 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 'q': /* FALTA POR ACTUALIZAR DESDE DB16 */ if((acptr=find_match_server(parv[1]))&&(!IsMe(acptr))) ! sendto_one(acptr,"%s DB %s 0 q %lu %s",NumServ(sptr), ! acptr->name,db,parv[5]); return 0; break; ! case 'Q': /* FALTA POR ACTUALIZAR DESDE DB16 */ if(!es_hub) return 0; if(!(acptr = find_match_server(parv[1]))) { sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); return 0; } ! if(!IsMe(acptr)) { ! sendto_one(acptr,"%s DB %s 0 Q %lu\n",NumServ(sptr),acptr->name,db); ! return 0; } ! if(dbserv->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; ! if(!(acptr = find_match_server(parv[1]))) { ! sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); ! return 0; } ! ! if(IsMe(acptr)) { ! alarm(3); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); ! db_file=open(path,O_TRUNC,S_IRUSR | S_IWUSR); ! alarm(0); ! close(db_file); ! borrar_db(que_bdd); ! 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': ! 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; if(!(acptr = find_match_server(parv[1]))) { sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); return 0; } ! if(IsMe(acptr)) { ! sendto_one(sptr,"%s DB %s 0 R %lu-HASH-%s %c", ! NumServ(&me),sptr->name,tabla_serie[que_bdd],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; } *************** *** 1730,1736 **** /* Nuevo registro */ ! que_bdd=*parv[5]; if((que_bdd<'a')||(que_bdd>'z')) { if(que_bdd=='N') que_bdd=ESNET_NICKDB; else return 0; --- 1775,1781 ---- /* Nuevo registro */ ! que_bdd=*parv[3]; if((que_bdd<'a')||(que_bdd>'z')) { if(que_bdd=='N') que_bdd=ESNET_NICKDB; else return 0; *************** *** 1757,1763 **** 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); } --- 1802,1809 ---- 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); }