svn merge -c 1343290. Backport of HADOOP-8358 to branch-2. (harsh)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1343294 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Harsh J 2012-05-28 15:41:24 +00:00
parent 1f804b5d20
commit d7585fa501
7 changed files with 39 additions and 21 deletions

View File

@ -26,6 +26,8 @@ Release 2.0.1-alpha - UNRELEASED
HADOOP-8323. Add javadoc and tests for Text.clear() behavior (harsh) HADOOP-8323. Add javadoc and tests for Text.clear() behavior (harsh)
HADOOP-8358. Config-related WARN for dfs.web.ugi can be avoided. (harsh)
BUG FIXES BUG FIXES
HADOOP-8372. NetUtils.normalizeHostName() incorrectly handles hostname HADOOP-8372. NetUtils.normalizeHostName() incorrectly handles hostname

View File

@ -20,6 +20,7 @@ package org.apache.hadoop.fs;
import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.http.lib.StaticUserWebFilter;
/** /**
* This class contains constants for configuration keys used * This class contains constants for configuration keys used
@ -161,5 +162,12 @@ public class CommonConfigurationKeys extends CommonConfigurationKeysPublic {
"ha.failover-controller.cli-check.rpc-timeout.ms"; "ha.failover-controller.cli-check.rpc-timeout.ms";
public static final int HA_FC_CLI_CHECK_TIMEOUT_DEFAULT = 20000; public static final int HA_FC_CLI_CHECK_TIMEOUT_DEFAULT = 20000;
/** Static user web-filter properties.
* See {@link StaticUserWebFilter}.
*/
public static final String HADOOP_HTTP_STATIC_USER =
"hadoop.http.staticuser.user";
public static final String DEFAULT_HADOOP_HTTP_STATIC_USER =
"dr.who";
} }

View File

@ -37,6 +37,9 @@ import org.apache.hadoop.http.FilterInitializer;
import javax.servlet.Filter; import javax.servlet.Filter;
import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_HTTP_STATIC_USER;
import static org.apache.hadoop.fs.CommonConfigurationKeys.DEFAULT_HADOOP_HTTP_STATIC_USER;
/** /**
* Provides a servlet filter that pretends to authenticate a fake user (Dr.Who) * Provides a servlet filter that pretends to authenticate a fake user (Dr.Who)
* so that the web UI is usable for a secure cluster without authentication. * so that the web UI is usable for a secure cluster without authentication.
@ -44,9 +47,6 @@ import javax.servlet.Filter;
public class StaticUserWebFilter extends FilterInitializer { public class StaticUserWebFilter extends FilterInitializer {
static final String DEPRECATED_UGI_KEY = "dfs.web.ugi"; static final String DEPRECATED_UGI_KEY = "dfs.web.ugi";
static final String USERNAME_KEY = "hadoop.http.staticuser.user";
static final String USERNAME_DEFAULT = "dr.who";
private static final Log LOG = LogFactory.getLog(StaticUserWebFilter.class); private static final Log LOG = LogFactory.getLog(StaticUserWebFilter.class);
static class User implements Principal { static class User implements Principal {
@ -112,7 +112,7 @@ public class StaticUserWebFilter extends FilterInitializer {
@Override @Override
public void init(FilterConfig conf) throws ServletException { public void init(FilterConfig conf) throws ServletException {
this.username = conf.getInitParameter(USERNAME_KEY); this.username = conf.getInitParameter(HADOOP_HTTP_STATIC_USER);
this.user = new User(username); this.user = new User(username);
} }
@ -123,7 +123,7 @@ public class StaticUserWebFilter extends FilterInitializer {
HashMap<String, String> options = new HashMap<String, String>(); HashMap<String, String> options = new HashMap<String, String>();
String username = getUsernameFromConf(conf); String username = getUsernameFromConf(conf);
options.put(USERNAME_KEY, username); options.put(HADOOP_HTTP_STATIC_USER, username);
container.addFilter("static_user_filter", container.addFilter("static_user_filter",
StaticUserFilter.class.getName(), StaticUserFilter.class.getName(),
@ -139,11 +139,12 @@ public class StaticUserWebFilter extends FilterInitializer {
// We can't use the normal configuration deprecation mechanism here // We can't use the normal configuration deprecation mechanism here
// since we need to split out the username from the configured UGI. // since we need to split out the username from the configured UGI.
LOG.warn(DEPRECATED_UGI_KEY + " should not be used. Instead, use " + LOG.warn(DEPRECATED_UGI_KEY + " should not be used. Instead, use " +
USERNAME_KEY + "."); HADOOP_HTTP_STATIC_USER + ".");
String[] parts = oldStyleUgi.split(","); String[] parts = oldStyleUgi.split(",");
return parts[0]; return parts[0];
} else { } else {
return conf.get(USERNAME_KEY, USERNAME_DEFAULT); return conf.get(HADOOP_HTTP_STATIC_USER,
DEFAULT_HADOOP_HTTP_STATIC_USER);
} }
} }

View File

@ -944,4 +944,15 @@
</description> </description>
</property> </property>
<!-- Static Web User Filter properties. -->
<property>
<description>
The user name to filter as, on static web filters
while rendering content. An example use is the HDFS
web UI (user to be used for browsing files).
</description>
<name>hadoop.http.staticuser.user</name>
<value>dr.who</value>
</property>
</configuration> </configuration>

View File

@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.http.lib.StaticUserWebFilter.StaticUserFilter; import org.apache.hadoop.http.lib.StaticUserWebFilter.StaticUserFilter;
import org.junit.Test; import org.junit.Test;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
@ -36,7 +37,7 @@ public class TestStaticUserWebFilter {
private FilterConfig mockConfig(String username) { private FilterConfig mockConfig(String username) {
FilterConfig mock = Mockito.mock(FilterConfig.class); FilterConfig mock = Mockito.mock(FilterConfig.class);
Mockito.doReturn(username).when(mock).getInitParameter( Mockito.doReturn(username).when(mock).getInitParameter(
StaticUserWebFilter.USERNAME_KEY); CommonConfigurationKeys.HADOOP_HTTP_STATIC_USER);
return mock; return mock;
} }
@ -73,7 +74,7 @@ public class TestStaticUserWebFilter {
@Test @Test
public void testConfiguration() { public void testConfiguration() {
Configuration conf = new Configuration(); Configuration conf = new Configuration();
conf.set(StaticUserWebFilter.USERNAME_KEY, "joe"); conf.set(CommonConfigurationKeys.HADOOP_HTTP_STATIC_USER, "joe");
assertEquals("joe", StaticUserWebFilter.getUsernameFromConf(conf)); assertEquals("joe", StaticUserWebFilter.getUsernameFromConf(conf));
} }

View File

@ -71,10 +71,12 @@ import org.apache.hadoop.security.authorize.ProxyUsers;
import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.util.VersionInfo; import org.apache.hadoop.util.VersionInfo;
import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_HTTP_STATIC_USER;
import static org.apache.hadoop.fs.CommonConfigurationKeys.DEFAULT_HADOOP_HTTP_STATIC_USER;
@InterfaceAudience.Private @InterfaceAudience.Private
public class JspHelper { public class JspHelper {
public static final String CURRENT_CONF = "current.conf"; public static final String CURRENT_CONF = "current.conf";
final static public String WEB_UGI_PROPERTY_NAME = DFSConfigKeys.DFS_WEB_UGI_KEY;
public static final String DELEGATION_PARAMETER_NAME = DelegationParam.NAME; public static final String DELEGATION_PARAMETER_NAME = DelegationParam.NAME;
public static final String NAMENODE_ADDRESS = "nnaddr"; public static final String NAMENODE_ADDRESS = "nnaddr";
static final String SET_DELEGATION = "&" + DELEGATION_PARAMETER_NAME + static final String SET_DELEGATION = "&" + DELEGATION_PARAMETER_NAME +
@ -483,11 +485,12 @@ public class JspHelper {
*/ */
public static UserGroupInformation getDefaultWebUser(Configuration conf public static UserGroupInformation getDefaultWebUser(Configuration conf
) throws IOException { ) throws IOException {
String[] strings = conf.getStrings(JspHelper.WEB_UGI_PROPERTY_NAME); String user = conf.get(
if (strings == null || strings.length == 0) { HADOOP_HTTP_STATIC_USER, DEFAULT_HADOOP_HTTP_STATIC_USER);
if (user == null || user.length() == 0) {
throw new IOException("Cannot determine UGI from request or conf"); throw new IOException("Cannot determine UGI from request or conf");
} }
return UserGroupInformation.createRemoteUser(strings[0]); return UserGroupInformation.createRemoteUser(user);
} }
private static InetSocketAddress getNNServiceAddress(ServletContext context, private static InetSocketAddress getNNServiceAddress(ServletContext context,

View File

@ -240,14 +240,6 @@
</description> </description>
</property> </property>
<property>
<name>dfs.web.ugi</name>
<value>webuser,webgroup</value>
<description>The user account used by the web interface.
Syntax: USERNAME,GROUP1,GROUP2, ...
</description>
</property>
<property> <property>
<name>dfs.permissions.enabled</name> <name>dfs.permissions.enabled</name>
<value>true</value> <value>true</value>