[IRC-DEV] Bug en comando del IRCd y propuesta de futuro

Ruben Cardenal rubenc at arrakis.es
Wed Sep 17 18:20:00 CEST 2003


Hola,

  Ayer por la tarde, se puso de manifiesto un bug en el código que
tenía aproximadamente 2 meses de antigüedad (cosa que parecían no saber
las malas lenguas). El bug consistía en hacer un ghost sin especificar
ningún parámetro más, y puesto que en un parche anterior se eliminó
accidentalmente del código dicha comprobación, el ircd moría.

  Para evitar que, en un futuro, se detecte en un momento dado que el
uso de tal o cual comando de ésta o aquella forma, mata al servidor,
se puede crear un sistema de control por la BDD de acceso a cualquier
comando del ircd.

  En líneas generales, sería comprobar, al ir a ejecutar cualquier
comando, y en el caso de que quien lo ejecuta es un cliente, que dicho
cliente tiene permiso para ello. Se podrían establecer 4 niveles de
acceso a los comandos:

  a) Todos
  b) Opers/Admins
  c) Admins
  d) Nadie

  La mayoría de los comandos, obviamente, tendrían un acceso permitido
para todo el mundo, y luego ciertos comandos se podrían restringir (o
ampliar) a unos niveles u otros en tiempo real, sin necesidad de
parchear el código. Esta implementación cubriría casos ya existentes
como /stats g, /dqb, etc.

  Está claro que con este sistema, si en un momento dado, se detecta
que un determinado comando causa problemas, se puede anular el uso de
dicho comando y no hay que perder el culo en parches a toda prisa,
llamadas telefónicas a los responsables de los nodos para que
actualicen, etc etc.

  Por encima, a nivel técnico, su implementación es sencilla, y se
usarían entradas en la tabla 'z', que podrían tener de clave el nombre
del comando y de valor un flag. En caso de que un usuario no tenga
privilegios para ejecutar un comando, se le puede devolver un error
adecuado para cada situación. Por ejemplo, en el caso de ayer, se
podría haber limitado el uso de /ghost a los usuarios normales -por
ejemplo- y quien intentase utilizarlo obtendría una respuesta en forma
de nuevo raw que podría decir "Temporalmente no disponible" o algo por
el estilo, texto que incluso podría ser tomado también de la BDD.

  Es bastante útil, sencillo de implementar, y sus beneficios en
potencia, bastantes. Asi que si jcea no objeta nada, lo hago.

  Saludos,

NiKoLaS




More information about the IRC-Dev mailing list