From 5f8d2a075f6d5696001fd610ae1d331d1094b13e Mon Sep 17 00:00:00 2001 From: Jitendra Nath Pandey Date: Wed, 25 Jan 2012 21:09:27 +0000 Subject: [PATCH] Merged r1235945 from trunk for HADOOP-7987. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1235948 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop-common/CHANGES.txt | 2 ++ .../hadoop/security/UserGroupInformation.java | 12 ++++++- .../hadoop/security/TestUserFromEnv.java | 32 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserFromEnv.java diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 498b7350b5e..9a308e9febd 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -64,6 +64,8 @@ Release 0.23.1 - Unreleased HADOOP-7975. Add LZ4 as an entry in the default codec list, missed by HADOOP-7657 (harsh) + HADOOP-7987. Support setting the run-as user in unsecure mode. (jitendra) + OPTIMIZATIONS BUG FIXES diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java index 7c7e975193f..d595b5a8027 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java @@ -80,6 +80,7 @@ public class UserGroupInformation { * Percentage of the ticket window to use before we renew ticket. */ private static final float TICKET_RENEW_WINDOW = 0.80f; + static final String HADOOP_USER_NAME = "HADOOP_USER_NAME"; /** * UgiMetrics maintains UGI activity statistics @@ -137,7 +138,16 @@ public boolean commit() throws LoginException { LOG.debug("using kerberos user:"+user); } } - // if we don't have a kerberos user, use the OS user + //If we don't have a kerberos user and security is disabled, check + //if user is specified in the environment or properties + if (!isSecurityEnabled() && (user == null)) { + String envUser = System.getenv(HADOOP_USER_NAME); + if (envUser == null) { + envUser = System.getProperty(HADOOP_USER_NAME); + } + user = envUser == null ? null : new User(envUser); + } + // use the OS user if (user == null) { user = getCanonicalUser(OS_PRINCIPAL_CLASS); if (LOG.isDebugEnabled()) { diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserFromEnv.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserFromEnv.java new file mode 100644 index 00000000000..e436f26a07c --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserFromEnv.java @@ -0,0 +1,32 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package org.apache.hadoop.security; + +import java.io.IOException; +import org.junit.Assert; +import org.junit.Test; + +public class TestUserFromEnv { + + @Test + public void testUserFromEnvironment() throws IOException { + System.setProperty(UserGroupInformation.HADOOP_USER_NAME, "randomUser"); + Assert.assertEquals("randomUser", UserGroupInformation.getLoginUser() + .getUserName()); + } +}