You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by bo...@apache.org on 2012/08/20 23:17:13 UTC
svn commit: r1375221 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: ./
src/main/java/org/apache/hadoop/security/
src/test/java/org/apache/hadoop/security/
Author: bobby
Date: Mon Aug 20 21:17:13 2012
New Revision: 1375221
URL: http://svn.apache.org/viewvc?rev=1375221&view=rev
Log:
HADOOP-8611. Allow fall-back to the shell-based implementation when JNI-based users-group mapping fails (Robert Parker via bobby)
Added:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsMappingWithFallback.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsNetgroupMappingWithFallback.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupFallback.java
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1375221&r1=1375220&r2=1375221&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Mon Aug 20 21:17:13 2012
@@ -938,6 +938,9 @@ Release 0.23.3 - UNRELEASED
HADOOP-8695. TestPathData fails intermittently with JDK7 (Trevor
Robinson via tgraves)
+ HADOOP-8611. Allow fall-back to the shell-based implementation when
+ JNI-based users-group mapping fails (Robert Parker via bobby)
+
Release 0.23.2 - UNRELEASED
INCOMPATIBLE CHANGES
Added: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsMappingWithFallback.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsMappingWithFallback.java?rev=1375221&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsMappingWithFallback.java (added)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsMappingWithFallback.java Mon Aug 20 21:17:13 2012
@@ -0,0 +1,63 @@
+/**
+ * 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 java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.util.NativeCodeLoader;
+
+public class JniBasedUnixGroupsMappingWithFallback implements
+ GroupMappingServiceProvider {
+
+ private static final Log LOG = LogFactory
+ .getLog(JniBasedUnixGroupsMappingWithFallback.class);
+
+ private GroupMappingServiceProvider impl;
+
+ public JniBasedUnixGroupsMappingWithFallback() {
+ if (NativeCodeLoader.isNativeCodeLoaded()) {
+ this.impl = new JniBasedUnixGroupsMapping();
+ } else {
+ LOG.info("Falling back to shell based");
+ this.impl = new ShellBasedUnixGroupsMapping();
+ }
+ if (LOG.isDebugEnabled()){
+ LOG.debug("Group mapping impl=" + impl.getClass().getName());
+ }
+ }
+
+ @Override
+ public List<String> getGroups(String user) throws IOException {
+ return impl.getGroups(user);
+ }
+
+ @Override
+ public void cacheGroupsRefresh() throws IOException {
+ impl.cacheGroupsRefresh();
+ }
+
+ @Override
+ public void cacheGroupsAdd(List<String> groups) throws IOException {
+ impl.cacheGroupsAdd(groups);
+ }
+
+}
Added: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsNetgroupMappingWithFallback.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsNetgroupMappingWithFallback.java?rev=1375221&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsNetgroupMappingWithFallback.java (added)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/JniBasedUnixGroupsNetgroupMappingWithFallback.java Mon Aug 20 21:17:13 2012
@@ -0,0 +1,63 @@
+/**
+ * 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 java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.util.NativeCodeLoader;
+
+public class JniBasedUnixGroupsNetgroupMappingWithFallback implements
+ GroupMappingServiceProvider {
+
+ private static final Log LOG = LogFactory
+ .getLog(JniBasedUnixGroupsNetgroupMappingWithFallback.class);
+
+ private GroupMappingServiceProvider impl;
+
+ public JniBasedUnixGroupsNetgroupMappingWithFallback() {
+ if (NativeCodeLoader.isNativeCodeLoaded()) {
+ this.impl = new JniBasedUnixGroupsNetgroupMapping();
+ } else {
+ LOG.info("Falling back to shell based");
+ this.impl = new ShellBasedUnixGroupsNetgroupMapping();
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Group mapping impl=" + impl.getClass().getName());
+ }
+ }
+
+ @Override
+ public List<String> getGroups(String user) throws IOException {
+ return impl.getGroups(user);
+ }
+
+ @Override
+ public void cacheGroupsRefresh() throws IOException {
+ impl.cacheGroupsRefresh();
+ }
+
+ @Override
+ public void cacheGroupsAdd(List<String> groups) throws IOException {
+ impl.cacheGroupsAdd(groups);
+ }
+
+}
Added: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupFallback.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupFallback.java?rev=1375221&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupFallback.java (added)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupFallback.java Mon Aug 20 21:17:13 2012
@@ -0,0 +1,105 @@
+/**
+ * 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 static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeys;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestGroupFallback {
+ public static final Log LOG = LogFactory.getLog(TestGroupFallback.class);
+
+ @Test
+ public void testGroupShell() throws Exception {
+ Logger.getRootLogger().setLevel(Level.DEBUG);
+ Configuration conf = new Configuration();
+ conf.set(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
+ "org.apache.hadoop.security.ShellBasedUnixGroupsMapping");
+
+ Groups groups = new Groups(conf);
+
+ String username = System.getProperty("user.name");
+ List<String> groupList = groups.getGroups(username);
+
+ LOG.info(username + " has GROUPS: " + groupList.toString());
+ assertTrue(groupList.size() > 0);
+ }
+
+ @Test
+ public void testNetgroupShell() throws Exception {
+ Logger.getRootLogger().setLevel(Level.DEBUG);
+ Configuration conf = new Configuration();
+ conf.set(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
+ "org.apache.hadoop.security.ShellBasedUnixGroupsNetgroupMapping");
+
+ Groups groups = new Groups(conf);
+
+ String username = System.getProperty("user.name");
+ List<String> groupList = groups.getGroups(username);
+
+ LOG.info(username + " has GROUPS: " + groupList.toString());
+ assertTrue(groupList.size() > 0);
+ }
+
+ @Test
+ public void testGroupWithFallback() throws Exception {
+ LOG.info("running 'mvn -Pnative -DTestGroupFallback clear test' will " +
+ "test the normal path and 'mvn -DTestGroupFallback clear test' will" +
+ " test the fall back functionality");
+ Logger.getRootLogger().setLevel(Level.DEBUG);
+ Configuration conf = new Configuration();
+ conf.set(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
+ "org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback");
+
+ Groups groups = new Groups(conf);
+
+ String username = System.getProperty("user.name");
+ List<String> groupList = groups.getGroups(username);
+
+ LOG.info(username + " has GROUPS: " + groupList.toString());
+ assertTrue(groupList.size() > 0);
+ }
+
+ @Test
+ public void testNetgroupWithFallback() throws Exception {
+ LOG.info("running 'mvn -Pnative -DTestGroupFallback clear test' will " +
+ "test the normal path and 'mvn -DTestGroupFallback clear test' will" +
+ " test the fall back functionality");
+ Logger.getRootLogger().setLevel(Level.DEBUG);
+ Configuration conf = new Configuration();
+ conf.set(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
+ "org.apache.hadoop.security.JniBasedUnixGroupsNetgroupMappingWithFallback");
+
+ Groups groups = new Groups(conf);
+
+ String username = System.getProperty("user.name");
+ List<String> groupList = groups.getGroups(username);
+
+ LOG.info(username + " has GROUPS: " + groupList.toString());
+ assertTrue(groupList.size() > 0);
+ }
+
+}