|
@@ -19,9 +19,11 @@
|
|
package org.apache.hadoop.security.authorize;
|
|
package org.apache.hadoop.security.authorize;
|
|
|
|
|
|
import java.net.InetAddress;
|
|
import java.net.InetAddress;
|
|
|
|
+import java.net.InetSocketAddress;
|
|
import java.net.UnknownHostException;
|
|
import java.net.UnknownHostException;
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
+import java.util.HashSet;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Map.Entry;
|
|
import java.util.Map.Entry;
|
|
|
|
|
|
@@ -39,12 +41,16 @@ public class ProxyUsers {
|
|
public static final String CONF_GROUPS = ".groups";
|
|
public static final String CONF_GROUPS = ".groups";
|
|
public static final String CONF_HADOOP_PROXYUSER = "hadoop.proxyuser.";
|
|
public static final String CONF_HADOOP_PROXYUSER = "hadoop.proxyuser.";
|
|
public static final String CONF_HADOOP_PROXYUSER_RE = "hadoop\\.proxyuser\\.";
|
|
public static final String CONF_HADOOP_PROXYUSER_RE = "hadoop\\.proxyuser\\.";
|
|
|
|
+ public static final String CONF_HADOOP_PROXYSERVERS = "hadoop.proxyservers";
|
|
|
|
+
|
|
private static boolean init = false;
|
|
private static boolean init = false;
|
|
// list of groups and hosts per proxyuser
|
|
// list of groups and hosts per proxyuser
|
|
private static Map<String, Collection<String>> proxyGroups =
|
|
private static Map<String, Collection<String>> proxyGroups =
|
|
new HashMap<String, Collection<String>>();
|
|
new HashMap<String, Collection<String>>();
|
|
private static Map<String, Collection<String>> proxyHosts =
|
|
private static Map<String, Collection<String>> proxyHosts =
|
|
new HashMap<String, Collection<String>>();
|
|
new HashMap<String, Collection<String>>();
|
|
|
|
+ private static Collection<String> proxyServers =
|
|
|
|
+ new HashSet<String>();
|
|
|
|
|
|
/**
|
|
/**
|
|
* reread the conf and get new values for "hadoop.proxyuser.*.groups/hosts"
|
|
* reread the conf and get new values for "hadoop.proxyuser.*.groups/hosts"
|
|
@@ -60,9 +66,10 @@ public class ProxyUsers {
|
|
*/
|
|
*/
|
|
public static synchronized void refreshSuperUserGroupsConfiguration(Configuration conf) {
|
|
public static synchronized void refreshSuperUserGroupsConfiguration(Configuration conf) {
|
|
|
|
|
|
- // remove alle existing stuff
|
|
|
|
|
|
+ // remove all existing stuff
|
|
proxyGroups.clear();
|
|
proxyGroups.clear();
|
|
proxyHosts.clear();
|
|
proxyHosts.clear();
|
|
|
|
+ proxyServers.clear();
|
|
|
|
|
|
// get all the new keys for groups
|
|
// get all the new keys for groups
|
|
String regex = CONF_HADOOP_PROXYUSER_RE+"[^.]*\\"+CONF_GROUPS;
|
|
String regex = CONF_HADOOP_PROXYUSER_RE+"[^.]*\\"+CONF_GROUPS;
|
|
@@ -80,9 +87,23 @@ public class ProxyUsers {
|
|
StringUtils.getTrimmedStringCollection(entry.getValue()));
|
|
StringUtils.getTrimmedStringCollection(entry.getValue()));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // trusted proxy servers such as http proxies
|
|
|
|
+ for (String host : conf.getTrimmedStrings(CONF_HADOOP_PROXYSERVERS)) {
|
|
|
|
+ InetSocketAddress addr = new InetSocketAddress(host, 0);
|
|
|
|
+ if (!addr.isUnresolved()) {
|
|
|
|
+ proxyServers.add(addr.getAddress().getHostAddress());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
init = true;
|
|
init = true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static synchronized boolean isProxyServer(String remoteAddr) {
|
|
|
|
+ if(!init) {
|
|
|
|
+ refreshSuperUserGroupsConfiguration();
|
|
|
|
+ }
|
|
|
|
+ return proxyServers.contains(remoteAddr);
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Returns configuration key for effective user groups allowed for a superuser
|
|
* Returns configuration key for effective user groups allowed for a superuser
|
|
*
|
|
*
|