getresources returns nothing for types created with Generic.create since 0.7.2
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 86/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- ruby
- Área
- networking
Línea de trabajo
Comienza ejecutando la reproducción suministrada sin red e inspecciona DNS#extract_resources, especialmente ambas ramas que seleccionan respuestas según la typeclass. Verifica que getresources devuelva el registro Generic decodificado, mientras que los registros nombrados IN::A e IN::AAAA conserven su comportamiento existente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Since 0.7.2, getresources and each_resource never return records for a type created with Resolv::DNS::Resource::Generic.create, for example NAPTR (type 35), which has no named class in Resolv.
Cause
fa5e689c4 ("Do not register on-demand classes for unknown DNS types and SvcParamKeys") stopped registering the classes from Generic.create. So decoding a reply gives each unknown record a new anonymous class, not the class the caller passed. 05185b432 and fcff0a19e updated Message#== and Generic#== for this with Generic.type_class_equal?. DNS#extract_resources still selects answers with when typeclass, so it drops every decoded record of such a type.
Reproduction
This needs no network: it encodes and decodes a reply and gives it to getresources.
require "resolv"
naptr = Resolv::DNS::Resource::Generic.create(35, Resolv::DNS::Resource::IN::ClassValue)
name = "example.com."
rdata = "\x00\x64\x00\x0A\x01U\x07E2U+sip\x1C!^.*$!sip:[email protected]!\x00".b
reply = Resolv::DNS::Message.new
reply.add_answer(name, 60, naptr.new(rdata))
decoded = Resolv::DNS::Message.decode(reply.encode)
dns = Resolv::DNS.new
dns.define_singleton_method(:fetch_resource) {|_name, _typeclass, &block| block.call(decoded, Resolv::DNS::Name.create(name)) }
puts "resolv #{Resolv::VERSION}: #{dns.getresources(name, naptr).size} record(s)"
resolv 0.7.0: 1 record(s)
resolv 0.7.2: 0 record(s)
resolv 0.8.0: 0 record(s)
A real query shows the same result: getresources returns [], but fetch_resource gets the NAPTR answer. Ruby 4.0.7 includes 0.7.2, so a patch update of Ruby is enough to get this behaviour.
Possible fix
Compare by type and class value in extract_resources, in both when typeclass branches:
- when typeclass
+ when ->(data) { Resource::Generic.type_class_equal?(data.class, typeclass) }
With this change, the reproduction returns 1 record on 0.8.0. Named types (IN::A, IN::AAAA) behave as before, because type_class_equal? compares identity first and returns false for classes that are not Generic.
Workaround
Register the type in the same way as Resolv's built-in types:
class NAPTR < Resolv::DNS::Resource::Generic
const_set(:TypeValue, 35)
const_set(:ClassValue, Resolv::DNS::Resource::IN::ClassValue)
Resolv::DNS::Resource::ClassHash[[self::TypeValue, self::ClassValue]] = self
end
- Lenguaje dominante
- Ruby
- Estrellas
- 56
- Forks
- 41
- Merge medio
- 2 h 50 min
- PR fusionados (30 d)
- 8
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ruby/resolv
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
`resolv.conf` on macOS sometimes has interface suffix which breaks `resolve.rb`.Quizá libre de nuevo @ioquatix la tomó hace 1252 días y no hay ningún pull request abierto. Abierto
Todos los issues de ruby/resolv
Issues similares
-
security
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
OSCON 2016Abiertocontent
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
rubyevents/rubyevents#2148 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
we-promise/sure#3838 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Mend: dependency security vulnerability
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ManageIQ/manageiq-ui-classic#10341 ·
Los mantenedores suelen responder en 1 día
-
Obsolete link to RubyMine docsAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
rubocop/ruby-style-guide#984 ·