• Wang Lei's avatar
    DNS: If the DNS server returns an error, allow that to be cached [ver #2] · 4a2d7892
    Wang Lei authored
    If the DNS server returns an error, allow that to be cached in the DNS resolver
    key in lieu of a value.  Userspace passes the desired error number as an option
    in the payload:
    
    	"#dnserror=<number>"
    
    Userspace must map h_errno from the name resolution routines to an appropriate
    Linux error before passing it up.  Something like the following mapping is
    recommended:
    
    	[HOST_NOT_FOUND]	= ENODATA,
    	[TRY_AGAIN]		= EAGAIN,
    	[NO_RECOVERY]		= ECONNREFUSED,
    	[NO_DATA]		= ENODATA,
    
    in lieu of Linux errors specifically for representing name service errors.  The
    filesystem must map these errors appropropriately before passing them to
    userspace.  AFS is made to map ENODATA and EAGAIN to EDESTADDRREQ for the
    return to userspace; ECONNREFUSED is allowed to stand as is.
    
    The error can be seen in /proc/keys as a negative number after the description
    of the key.  Compare, for example, the following key entries:
    
    2f97238c I--Q--     1  53s 3f010000     0     0 dns_resol afsdb:grand.centrall.org: -61
    338bfbbe I--Q--     1  59m 3f010000     0     0 dns_resol afsdb:grand.central.org: 37
    
    If the error option is supplied in the payload, the main part of the payload is
    discarded.  The key should have an expiry time set by userspace.
    Signed-off-by: default avatarWang Lei <wang840925@gmail.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Acked-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
    4a2d7892
dns_key.c 7.57 KB