[ 
https://issues.apache.org/jira/browse/HADOOP-11699?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chris Nauroth updated HADOOP-11699:
-----------------------------------
    Summary: _HOST not consistently resolving to lowercase fully qualified 
hostname on Windows  (was: _HOST not consistently resolving to lowercase fully 
qualified hostname)

Hi [~kminder].  Thanks for filing this issue.

Just to confirm, is DNS otherwise working correctly in your environment?  For 
example, does {{nslookup}} return the expected result?  I expect 
{{InetAddress.getLocalHost().getCanonicalHostName()}} to be basically 
equivalent to a reverse DNS lookup.  If DNS works fine in this environment, 
then I suppose we're dealing with some quirk of Java on Windows.

I think {{USERDNSDOMAIN}} is only defined if the logged in user is a domain 
user.  It won't be defined if logged in as a local account or a built-in 
account like administrator.  That's probably fine though.

Is the {{toLowerCase}} necessary?  I have seen environments where using all 
caps for Windows host names was considered a standard practice.  Kerberos is 
case-sensitive.  DNS is case-insensitive, but case-preserving on outputs.  
Because of that, I'd expect upper case to work fine as long as both DNS and 
Kerberos records are consistent in their use of upper case, so that everything 
matches.

The last line has a {{null}} check.  Did you actually see a {{null}} value in 
your testing?  I didn't think 
{{InetAddress.getLocalHost().getCanonicalHostName()}} could ever return 
{{null}}.

Just a minor nit-pick: you can use {{org.apache.hadoop.util.Shell#WINDOWS}} as 
a helper to check if the runtime environment is Windows.  I recommend 
completely special-casing all unique handling on Windows, so that non-Windows 
continues to use the straight-up {{return 
InetAddress.getLocalHost().getCanonicalHostName()}}.

> _HOST not consistently resolving to lowercase fully qualified hostname on 
> Windows
> ---------------------------------------------------------------------------------
>
>                 Key: HADOOP-11699
>                 URL: https://issues.apache.org/jira/browse/HADOOP-11699
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: security
>    Affects Versions: 2.6.0
>            Reporter: Kevin Minder
>            Assignee: Brahma Reddy Battula
>
> The _HOST marker used for Kerberos principals in various configuration files 
> does not always return lowercase fully qualified hostnames.  For example this 
> setting in hdfs-site.xml
> {code}
> <property>
>   <name>dfs.namenode.kerberos.principal</name>
>   <value>hdfs/[email protected]</value>
> </property>
> {code}
> In particular, this is impeding our work to have Hadoop work with equivalent 
> security on Windows as on Linux.
> In the windows env in which I'm having the issue, I was able to get a fully 
> qualified host name using this version of method getLocalHostName() in .  
> hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java
> {code:java}
>   public static String getLocalHostName() throws UnknownHostException {
>     String hostname = InetAddress.getLocalHost().getCanonicalHostName();
>     if ( !hostname.contains( "." ) ) {
>       final String os = System.getProperties().getProperty( "os.name", "?" 
> ).toLowerCase();
>       if ( os.startsWith( "windows" ) ) {
>         String domain = System.getenv( "USERDNSDOMAIN" );
>         if ( domain != null ) {
>           hostname += "." + domain.trim();
>         }
>       }
>     }
>     return hostname == null ? "localhost" : hostname.toLowerCase();
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to