You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by sp...@apache.org on 2017/03/10 22:10:48 UTC

ranger git commit: RANGER-1435: Allow different files to be specified for unix based usersync - ranger-0.6

Repository: ranger
Updated Branches:
  refs/heads/ranger-0.6 76020e495 -> 3a33a2dcc


RANGER-1435: Allow different files to be specified for unix based usersync - ranger-0.6


Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/3a33a2dc
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/3a33a2dc
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/3a33a2dc

Branch: refs/heads/ranger-0.6
Commit: 3a33a2dcccbf34a34ca1e636ebc474ccf9171887
Parents: 76020e4
Author: Sailaja Polavarapu <sp...@hortonworks.com>
Authored: Fri Mar 10 13:12:59 2017 -0800
Committer: Sailaja Polavarapu <sp...@hortonworks.com>
Committed: Fri Mar 10 13:12:59 2017 -0800

----------------------------------------------------------------------
 .../config/UserGroupSyncConfig.java             | 24 ++++++++++++++++++++
 .../process/UnixUserGroupBuilder.java           | 17 +++++++-------
 .../process/UnixUserGroupBuilderTest.java       | 22 ++++++++++++++++++
 ugsync/src/test/resources/groupFile.txt         |  6 +++++
 ugsync/src/test/resources/passwordFile.txt      |  5 ++++
 5 files changed, 66 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/3a33a2dc/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
----------------------------------------------------------------------
diff --git a/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java b/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
index eac0073..760fc4a 100644
--- a/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
+++ b/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java
@@ -58,6 +58,12 @@ public class UserGroupSyncConfig  {
 	public static final String  UGSYNC_ENABLED_PROP = "ranger.usersync.enabled" ;
 	
 	public static final String  UGSYNC_PM_URL_PROP = 	"ranger.usersync.policymanager.baseURL" ;
+
+	public static final String UGSYNC_UNIX_PASSWORD_FILE = "ranger.usersync.unix.password.file";
+	public static final String  DEFAULT_UGSYNC_UNIX_PASSWORD_FILE =   "/etc/passwd";
+	
+	public static final String UGSYNC_UNIX_GROUP_FILE = "ranger.usersync.unix.group.file";
+	public static final String  DEFAULT_UGSYNC_UNIX_GROUP_FILE =   "/etc/group";
 	
 	public static final String  UGSYNC_MIN_USERID_PROP  = 	"ranger.usersync.unix.minUserId" ;
 
@@ -355,6 +361,24 @@ public class UserGroupSyncConfig  {
 		return val;
 	}
 
+	public String getUnixPasswordFile() {
+		String val = prop.getProperty(UGSYNC_UNIX_PASSWORD_FILE);
+		if ( val == null ) {
+			val = DEFAULT_UGSYNC_UNIX_PASSWORD_FILE;
+		}
+
+		return val;
+	}
+	
+	public String getUnixGroupFile() {
+		String val = prop.getProperty(UGSYNC_UNIX_GROUP_FILE);
+		if ( val == null ) {
+			val = DEFAULT_UGSYNC_UNIX_GROUP_FILE;
+		}
+
+		return val;
+	}
+
 	public String getUnixBackend() {
 		String val = prop.getProperty(UGSYNC_UNIX_BACKEND);
 		if ( val == null ) {

http://git-wip-us.apache.org/repos/asf/ranger/blob/3a33a2dc/ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java
----------------------------------------------------------------------
diff --git a/ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java b/ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java
index c71bc90..8a6a18d 100644
--- a/ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java
+++ b/ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java
@@ -41,10 +41,6 @@ public class UnixUserGroupBuilder implements UserGroupSource {
 	private static final Logger LOG = Logger.getLogger(UnixUserGroupBuilder.class) ;
 	private final static String OS = System.getProperty("os.name") ;
 
-	// kept for legacy support
-	public static final String UNIX_USER_PASSWORD_FILE = "/etc/passwd" ;
-	public static final String UNIX_GROUP_FILE = "/etc/group" ;
-
 	/** Shell commands to get users and groups */
 	static final String LINUX_GET_ALL_USERS_CMD = "getent passwd" ;
 	static final String LINUX_GET_ALL_GROUPS_CMD = "getent group" ;
@@ -78,6 +74,9 @@ public class UnixUserGroupBuilder implements UserGroupSource {
 	private int 						minimumUserId  = 0 ;
 	private int							minimumGroupId = 0 ;
 
+	private String unixPasswordFile;
+	private String unixGroupFile;
+
 	private long passwordFileModifiedAt = 0 ;
 	private long groupFileModifiedAt = 0 ;
 
@@ -90,6 +89,8 @@ public class UnixUserGroupBuilder implements UserGroupSource {
 	public UnixUserGroupBuilder() {
 		minimumUserId = Integer.parseInt(config.getMinUserId()) ;
 		minimumGroupId = Integer.parseInt(config.getMinGroupId()) ;
+		unixPasswordFile = config.getUnixPasswordFile();
+		unixGroupFile = config.getUnixGroupFile();
 
 		LOG.debug("Minimum UserId: " + minimumUserId + ", minimum GroupId: " + minimumGroupId) ;
 
@@ -114,12 +115,12 @@ public class UnixUserGroupBuilder implements UserGroupSource {
 		if (useNss)
 			return System.currentTimeMillis() - lastUpdateTime > timeout ;
 
-		long TempPasswordFileModifiedAt = new File(UNIX_USER_PASSWORD_FILE).lastModified() ;
+		long TempPasswordFileModifiedAt = new File(unixPasswordFile).lastModified() ;
 		if (passwordFileModifiedAt != TempPasswordFileModifiedAt) {
 			return true ;
 		}
 
-		long TempGroupFileModifiedAt = new File(UNIX_GROUP_FILE).lastModified() ;
+		long TempGroupFileModifiedAt = new File(unixGroupFile).lastModified() ;
 		if (groupFileModifiedAt != TempGroupFileModifiedAt) {
 			return true ;
 		}
@@ -187,7 +188,7 @@ public class UnixUserGroupBuilder implements UserGroupSource {
 
 		try {
 			if (!useNss) {
-				File file = new File(UNIX_USER_PASSWORD_FILE);
+				File file = new File(unixPasswordFile);
 				passwordFileModifiedAt = file.lastModified();
 				FileInputStream fis = new FileInputStream(file);
 				reader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
@@ -376,7 +377,7 @@ public class UnixUserGroupBuilder implements UserGroupSource {
 
 		try {
 			if (!useNss) {
-				File file = new File(UNIX_GROUP_FILE);
+				File file = new File(unixGroupFile);
 				groupFileModifiedAt = file.lastModified();
 				FileInputStream fis = new FileInputStream(file);
 				reader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));

http://git-wip-us.apache.org/repos/asf/ranger/blob/3a33a2dc/ugsync/src/test/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilderTest.java
----------------------------------------------------------------------
diff --git a/ugsync/src/test/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilderTest.java b/ugsync/src/test/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilderTest.java
index e4d5456..9839ba9 100644
--- a/ugsync/src/test/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilderTest.java
+++ b/ugsync/src/test/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilderTest.java
@@ -42,6 +42,8 @@ public class UnixUserGroupBuilderTest {
     @Test
     public void testBuilderPasswd() throws Throwable {
         config.setProperty("ranger.usersync.unix.backend", "passwd");
+	config.setProperty(UserGroupSyncConfig.UGSYNC_UNIX_PASSWORD_FILE, "/etc/passwd");
+        config.setProperty(UserGroupSyncConfig.UGSYNC_UNIX_GROUP_FILE, "/etc/group");
 
         UnixUserGroupBuilder builder = new UnixUserGroupBuilder();
         builder.init();
@@ -105,4 +107,24 @@ public class UnixUserGroupBuilderTest {
         assertNull(users.get("root"));
     }
 
+    @Test
+    public void testUnixPasswdAndGroupFile() throws Throwable {
+        config.setProperty("ranger.usersync.unix.backend", "passwd");
+        config.setProperty(UserGroupSyncConfig.UGSYNC_UNIX_PASSWORD_FILE, "src/test/resources/passwordFile.txt");
+        config.setProperty(UserGroupSyncConfig.UGSYNC_UNIX_GROUP_FILE, "src/test/resources/groupFile.txt");
+
+        UnixUserGroupBuilder builder = new UnixUserGroupBuilder();
+        builder.init();
+
+        Map<String, String> groups = builder.getGroupId2groupNameMap();
+        String name = groups.get("1028");
+        assertThat(name, anyOf(equalTo("wheel"), equalTo("sam")));
+
+        Map<String, List<String>> users = builder.getUser2GroupListMap();
+        List<String> usergroups = users.get("sam");
+        assertNotNull(usergroups);
+        assertThat(usergroups, anyOf(hasItem("wheel"), hasItem("sam")));
+
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/3a33a2dc/ugsync/src/test/resources/groupFile.txt
----------------------------------------------------------------------
diff --git a/ugsync/src/test/resources/groupFile.txt b/ugsync/src/test/resources/groupFile.txt
new file mode 100644
index 0000000..89f7564
--- /dev/null
+++ b/ugsync/src/test/resources/groupFile.txt
@@ -0,0 +1,6 @@
+users:x:100:sam,bob,tom,user1,user2
+sam:x:1028:
+bob:x:1029:
+tom:x:1030:
+user1:x:1031:
+user2:x:1032:
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/3a33a2dc/ugsync/src/test/resources/passwordFile.txt
----------------------------------------------------------------------
diff --git a/ugsync/src/test/resources/passwordFile.txt b/ugsync/src/test/resources/passwordFile.txt
new file mode 100644
index 0000000..0e8e10b
--- /dev/null
+++ b/ugsync/src/test/resources/passwordFile.txt
@@ -0,0 +1,5 @@
+sam:x:1021:1028::/home/sam:/bin/bash
+bob:x:1022:1029::/home/bob:/bin/bash
+tom:x:1023:1030::/home/tom:/bin/bash
+user1:x:1024:1031::/home/user1:/bin/bash
+user2:x:1025:1032::/home/user2:/bin/bash
\ No newline at end of file