[Bug 1299] Remove redefinition of _res in getrrsetbyname.c
    bugzilla-daemon at mindrot.org 
    bugzilla-daemon at mindrot.org
       
    Fri Mar 16 15:54:17 EST 2007
    
    
  
http://bugzilla.mindrot.org/show_bug.cgi?id=1299
           Summary: Remove redefinition of _res in getrrsetbyname.c
           Product: Portable OpenSSH
           Version: 4.5p1
          Platform: All
        OS/Version: NetBSD
            Status: NEW
          Keywords: patch
          Severity: major
          Priority: P2
         Component: ssh
        AssignedTo: bitbucket at mindrot.org
        ReportedBy: cjs at cynic.net
Ssh won't use SSHFP fingerprints available via DNSSEC, because it
doesn't turn on DNSSEC to request them.
Around line 70 in openbsd-compat/getrrsetbyname.c, we have the
following:
    /* to avoid conflicts where a platform already has _res */
    #ifdef _res
    # undef _res
    #endif
    #define _res    _compat_res
    struct __res_state _res;
This defines a global, _compat_res, used only by OpenSSH (at least on
NetBSD), and makes _res be that instead of the "real" _res (however
that
might be defined on various platforms).
_res is used only in the getrrsetbyname function, which never
initializes it in any way, but tries to act as if it's using the real
_res. So it calls init_res every time:
        if ((_resp->options & RES_INIT) == 0 && res_init() == -1) {
and it never turns on DNSSEC, even when RES_USE_EDNS0 is set, since
it's
checking for it in the wrong place:
        if (_resp->options & RES_USE_EDNS0)
            _resp->options |= RES_USE_DNSSEC;
The fix is to remove the code that redefines _res, or at least #ifdef
it for only those platforms that need this for some reason.
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
    
    
More information about the openssh-bugs
mailing list