? ../ircu2.10.06/patch.db36 ? ../ircu2.10.06/patch.db37 ? ../ircu2.10.06/patch.db38 ? ../ircu2.10.06/patch.db39 ? ../ircu2.10.06/patch.db40 ? ../ircu2.10.06/patch.db41 ? ../ircu2.10.06/patch.db42 Index: ../ircu2.10.06/include/s_bdd.h =================================================================== RCS file: /cvsroot/ircd/include/s_bdd.h,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** ../ircu2.10.06/include/s_bdd.h 1999/10/25 17:21:23 1.2 --- ../ircu2.10.06/include/s_bdd.h 1999/10/25 17:51:40 1.3 *************** *** 91,97 **** extern void dbh_recarga(); extern void dbh_inicializa(); extern int m_dbq(aClient *cptr, aClient *sptr, int parc, char *parv[]); - extern int m_dbh(aClient *cptr, aClient *sptr, int parc, char *parv[]); #endif #endif /* S_BDD_H */ --- 91,96 ---- Index: ../ircu2.10.06/ircd/parse.c =================================================================== RCS file: /cvsroot/ircd/ircd/parse.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** ../ircu2.10.06/ircd/parse.c 1999/10/21 22:44:42 1.8 --- ../ircu2.10.06/ircd/parse.c 1999/10/25 17:51:40 1.9 *************** *** 126,132 **** {CLASS_DB, MSG_DB, TOK_DB, m_db, 0, MAXPARA, MFLG_SLOW, 0L}, #endif #ifdef DB_HISPANO - {CLASS_DBH, MSG_DBH, TOK_DBH, m_dbh, 0, MAXPARA, MFLG_SLOW, 0L}, {CLASS_DBQ, MSG_DBQ, TOK_DBQ, m_dbq, 0, MAXPARA, MFLG_SLOW, 0L}, #endif #if defined(DB_HISPANO) || defined(DB_ESNET) --- 126,131 ---- Index: ../ircu2.10.06/ircd/s_bdd.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_bdd.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** ../ircu2.10.06/ircd/s_bdd.c 1999/10/25 17:21:25 1.2 --- ../ircu2.10.06/ircd/s_bdd.c 1999/10/25 17:51:40 1.3 *************** *** 1722,2143 **** } /* - * m_dbh - * - * parv[0] = prefijo del enviador - * parv[1..] = argumentos de DBH - * - * Maneja los mensajes DBH recibidos por los servers. - * 1999/06/20 savage@apostols.org - */ - 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; - } - - /* * dbh_recarga () * * Recarga la base de datos (carga todas las tablas) --- 1722,1727 ---- Index: ../ircu2.10.06/ircd/s_debug.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_debug.c,v retrieving revision 1.64 retrieving revision 1.65 diff -c -r1.64 -r1.65 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/25 17:21:25 1.64 --- ../ircu2.10.06/ircd/s_debug.c 1999/10/25 17:51:40 1.65 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','4','1', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','4','2', #ifdef DB_ESNET '+', #else