You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zeppelin.apache.org by gss2002 <gi...@git.apache.org> on 2016/11/08 18:42:48 UTC

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

GitHub user gss2002 opened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----
commit 1702cc52c23aa0e20bf1b11ebb3ecce279efe3a1
Author: gss2002 <gs...@apache.org>
Date:   2016-11-08T16:26:11Z

    Merge pull request #1 from apache/master
    
    merge latest commits

commit 097e66556c0d008d5d26e72ba998aa9cce079a36
Author: gss2002 <gr...@senia.org>
Date:   2016-11-08T18:14:46Z

    ZEPPELIN-1472 - LdapRealm Additions based on Knox LdapRealm and support
    of using roles with LdapRealms. Also adjusted to use className and not
    actual name of the realm in shiro.ini. As using realmName in code could
    cause problems for people who want to use alternate names. Also migrated
    the LdapGroupRealm and ActiveDirectoryRealm to org.apache.zeppelin.realm
    packages per a recommendation.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    @nazgul33 and @jongyoul I made some changes to support the groups as roles. let me know. So far so good in user testing at the enterprise I work for. This replaces #1513


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
GitHub user gss2002 reopened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----
commit 1702cc52c23aa0e20bf1b11ebb3ecce279efe3a1
Author: gss2002 <gs...@apache.org>
Date:   2016-11-08T16:26:11Z

    Merge pull request #1 from apache/master
    
    merge latest commits

commit d6a7cea1fe9555fc29f53a228ac1fbc320139ca3
Author: gss2002 <gr...@senia.org>
Date:   2016-11-08T18:14:46Z

    ZEPPELIN-1472 - LdapRealm Additions based on Knox LdapRealm and support
    of using roles with LdapRealms. Also adjusted to use className and not
    actual name of the realm in shiro.ini. As using realmName in code could
    cause problems for people who want to use alternate names. Also migrated
    the LdapGroupRealm and ActiveDirectoryRealm to org.apache.zeppelin.realm
    packages per a recommendation.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
GitHub user gss2002 reopened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----
commit 1702cc52c23aa0e20bf1b11ebb3ecce279efe3a1
Author: gss2002 <gs...@apache.org>
Date:   2016-11-08T16:26:11Z

    Merge pull request #1 from apache/master
    
    merge latest commits

commit d6a7cea1fe9555fc29f53a228ac1fbc320139ca3
Author: gss2002 <gr...@senia.org>
Date:   2016-11-08T18:14:46Z

    ZEPPELIN-1472 - LdapRealm Additions based on Knox LdapRealm and support
    of using roles with LdapRealms. Also adjusted to use className and not
    actual name of the realm in shiro.ini. As using realmName in code could
    cause problems for people who want to use alternate names. Also migrated
    the LdapGroupRealm and ActiveDirectoryRealm to org.apache.zeppelin.realm
    packages per a recommendation.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    Going to close and re-open to re kick the tests. These tests have been flaky I dont think the error is related to the patch...
    
    15:38:55,459 ERROR org.apache.zeppelin.AbstractZeppelinIT:136 - Exception in ParagraphActionsIT while testEditOnDoubleClick 
    org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
    Command duration or timeout: 30.04 seconds
    Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06'
    System info: host: 'testing-docker-60ee1fc8-0996-4929-93bf-f3f4ab1d7d4e', ip: '172.17.0.8', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-47-generic', java.version: '1.7.0_76'
    Session ID: e568225a-5433-4a6e-b11a-85faf279113b
    Driver info: org.openqa.selenium.firefox.FirefoxDriver
    Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=31.0}]
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647)
    	at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:326)
    	at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:121)
    	at org.apache.zeppelin.integration.ParagraphActionsIT.testEditOnDoubleClick(ParagraphActionsIT.java:443)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    reopen for clean up


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    No problem Let me know if you see any others or if you need me to adjust this code at all



---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by jongyoul <gi...@git.apache.org>.
Github user jongyoul commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    @cloverhearts Can you see the error of this PR? I think it's irrelevant but want to check it double.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by jongyoul <gi...@git.apache.org>.
Github user jongyoul commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    Sorry for the delay. LGTM, merging if there's no more discussion. 


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
GitHub user gss2002 reopened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----
commit 1702cc52c23aa0e20bf1b11ebb3ecce279efe3a1
Author: gss2002 <gs...@apache.org>
Date:   2016-11-08T16:26:11Z

    Merge pull request #1 from apache/master
    
    merge latest commits

commit d6a7cea1fe9555fc29f53a228ac1fbc320139ca3
Author: gss2002 <gr...@senia.org>
Date:   2016-11-08T18:14:46Z

    ZEPPELIN-1472 - LdapRealm Additions based on Knox LdapRealm and support
    of using roles with LdapRealms. Also adjusted to use className and not
    actual name of the realm in shiro.ini. As using realmName in code could
    cause problems for people who want to use alternate names. Also migrated
    the LdapGroupRealm and ActiveDirectoryRealm to org.apache.zeppelin.realm
    packages per a recommendation.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
GitHub user gss2002 reopened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----
commit 1702cc52c23aa0e20bf1b11ebb3ecce279efe3a1
Author: gss2002 <gs...@apache.org>
Date:   2016-11-08T16:26:11Z

    Merge pull request #1 from apache/master
    
    merge latest commits

commit 635deb3398fded9811c05caa688ba950ba7e8d1b
Author: gss2002 <gr...@senia.org>
Date:   2016-11-08T18:14:46Z

    ZEPPELIN-1472 - LdapRealm Additions based on Knox LdapRealm and support
    of using roles with LdapRealms. Also adjusted to use className and not
    actual name of the realm in shiro.ini. As using realmName in code could
    cause problems for people who want to use alternate names. Also migrated
    the LdapGroupRealm and ActiveDirectoryRealm to org.apache.zeppelin.realm
    packages per a recommendation.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin issue #1614: ZEPPELIN-1472 - Create new LdapRealm based on Apache K...

Posted by nazgul33 <gi...@git.apache.org>.
Github user nazgul33 commented on the issue:

    https://github.com/apache/zeppelin/pull/1614
  
    @gss2002 @jongyoul 
    I confirm that this works as expected.
    ldap group to shiro role mapping works flawlessly.
    here's my shiro setup with openldap + phpldapadmin
    
    ```
    [main]
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = cn=zeppelin,ou=system,dc=example,DC=com
    ldapADGCRealm.contextFactory.systemPassword = 1some2Random3Password4
    ldapADGCRealm.userDnTemplate=cn={0},ou=people,dc=example,DC=com
    ldapADGCRealm.searchBase = dc=example,DC=com
    ldapADGCRealm.userSearchBase = ou=people,dc=example,DC=com
    ldapADGCRealm.groupSearchBase = ou=groups,dc=example,DC=com
    ldapADGCRealm.contextFactory.url = ldap://127.0.0.1:389
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.userObjectClass = posixAccount
    ldapADGCRealm.groupObjectClass = posixGroup
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.memberAttribute = memberUid
    ldapADGCRealm.memberAttributeValueTemplate=cn={0},ou=people,dc=example,DC=com
    ldapADGCRealm.rolesByGroup = AdminGroup:admin,UserGroup:user
    
    securityManager.realms = $ldapADGCRealm
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
    
    [roles]
    admin = *
    user = *
    ```
    
    I added all people under "ou=people,dc=example,DC=com",
    groups under "ou=people,dc=example,DC=com".
    In each groups, added "memberUid" property and added users to this attribute.
    
    now I can configure user or/and role for each note.
    other permissions for interpreter settings or whatever works as expected.
    
    ```
    [urls]
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    ```
    
    thank for nice patch!!


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
GitHub user gss2002 reopened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----
commit 1702cc52c23aa0e20bf1b11ebb3ecce279efe3a1
Author: gss2002 <gs...@apache.org>
Date:   2016-11-08T16:26:11Z

    Merge pull request #1 from apache/master
    
    merge latest commits

commit d6a7cea1fe9555fc29f53a228ac1fbc320139ca3
Author: gss2002 <gr...@senia.org>
Date:   2016-11-08T18:14:46Z

    ZEPPELIN-1472 - LdapRealm Additions based on Knox LdapRealm and support
    of using roles with LdapRealms. Also adjusted to use className and not
    actual name of the realm in shiro.ini. As using realmName in code could
    cause problems for people who want to use alternate names. Also migrated
    the LdapGroupRealm and ActiveDirectoryRealm to org.apache.zeppelin.realm
    packages per a recommendation.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
Github user gss2002 closed the pull request at:

    https://github.com/apache/zeppelin/pull/1614


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] zeppelin pull request #1614: ZEPPELIN-1472 - Create new LdapRealm based on A...

Posted by gss2002 <gi...@git.apache.org>.
GitHub user gss2002 reopened a pull request:

    https://github.com/apache/zeppelin/pull/1614

    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to Apache Knox

    ### What is this PR for?
    ZEPPELIN-1472 - Create new LdapRealm based on Apache Knox LdapRealm: Provides LdapRealm Functionality similar to what Apache Knox provides. This is critical as in large enterprise environments Active Directory Global Catalogs are used for lookup with samAccountName and using a DN Template is not an option as their are multiple OUs. Also searching on "userPrincipalName" is risky in an AD environment since the explicit UPN vs Implicit UPN can be different this is definitely the case with environments using Office 365. And the LDAP userPrincipalName attribute is the explicit UPN which can be defined by the directory administrator to any value and it can be duplicated. SamAccountName is unique per domain and Microsoft states best practice is to not allow duplicate samAccountName's across the forest. 
    
    In addition to the above changes I have adjusted and moved the LdapGroupRealm and ActiveDirectoryGroupRealm into the org.apache.zeppelin.realm package structure to make all Realm's consistent. 
    
    The LdapRealm class also works with role to group mapping for usage within Zeppelin for notebook authorization.
    
    I have adjusted SecurityUtils to use ClassName vs realmName in determining what to use as you may have companies that decide to use their own custom realmname in shiro.ini and may not realize you cannot so using className is much safer. 
    
    
    Example - SecurityUtils
            String name = realm.getClass().getName();
            if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
              allRoles = ((IniRealm) realm).getIni().get("roles");
              break;
            } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
              allRoles = ((LdapRealm) realm).getListRoles();
              break;
            }
    
    Example - SecurityRestApi:
              String name = realm.getClass().getName();
              if (LOG.isDebugEnabled()) {
                LOG.debug("RealmClass.getName: " + name);
              }
              if (name.equals("org.apache.shiro.realm.text.IniRealm")) {
                usersList.addAll(getUserListObj.getUserList((IniRealm) realm));
                rolesList.addAll(getUserListObj.getRolesList((IniRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((JndiLdapRealm) realm, searchText));
              } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) {
                usersList.addAll(getUserListObj.getUserList((LdapRealm) realm, searchText));
                rolesList.addAll(getUserListObj.getRolesList((LdapRealm) realm));
              } else if (name.equals("org.apache.zeppelin.realm.ActiveDirectoryGroupRealm")) {
                usersList.addAll(getUserListObj.getUserList((ActiveDirectoryGroupRealm) realm,
                    searchText));
              } else if (name.equals("org.apache.shiro.realm.jdbc.JdbcRealm")) {
                usersList.addAll(getUserListObj.getUserList((JdbcRealm) realm));
              }
    
    Please see feedback from previous PRs related to this JIRA:
    https://github.com/apache/zeppelin/pull/1513
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-1472
    
    ### How should this be tested?
    Update shiro.ini to use configuration similar to below:
    # Sample LDAP configuration, for user Authentication, currently tested for single Realm 
    [main] 
    ldapADGCRealm = org.apache.zeppelin.realm.LdapRealm
    ldapADGCRealm.contextFactory.systemUsername = CN=hdplookup,OU=hadoop,DC=hdpusr,DC=senia,DC=org
    ldapADGCRealm.contextFactory.systemPassword = ldapBindPassword
    ldapADGCRealm.searchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.userSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.groupSearchBase = dc=hdpusr,dc=senia,dc=org
    ldapADGCRealm.authorizationEnabled = true
    ldapADGCRealm.contextFactory.url = ldap://seniadc1.hdpusr.senia.org:3268
    ldapADGCRealm.userSearchAttributeName = sAMAccountName
    ldapADGCRealm.contextFactory.authenticationMechanism = simple
    ldapADGCRealm.groupObjectClass = group
    ldapADGCRealm.memberAttribute = member
    ldapADGCRealm.rolesByGroup = hdpeng: admin, \
     hadoopusers: user
    
    securityManager.realms = $ldapADGCRealm 
    
    sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
    
    ### If caching of user is required then uncomment below lines 
    #cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager 
    #securityManager.cacheManager = $cacheManager 
    
    securityManager.sessionManager = $sessionManager 
    # 86,400,000 milliseconds = 24 hour 
    securityManager.sessionManager.globalSessionTimeout = 86400000 
    shiro.loginUrl = /api/login
    
    [roles]
    # 'admin' role has all permissions, indicated by the wildcard '*'
    admin = * 
    user = *
    
    [urls] 
    # anon means the access is anonymous. 
    # authcBasic means Basic Auth Security 
    # authc means Form based Auth Security 
    # To enfore security, comment the line below and uncomment the next one 
    #/api/version = anon 
    #/** = anon 
    /api/interpreter/** = authc, roles[admin]
    /api/configurations/** = authc, roles[admin]
    /api/credential/** = authc, roles[admin]
    /api/login = authc
    /api/login/logout = authc
    /api/security/ticket = authc
    /** = authc, roles[admin, user]
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? n
    * Is there breaking changes for older versions? n
    * Does this needs documentation? y
    
    merge latest commits

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/gss2002/zeppelin ZEPPELIN-1472

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/zeppelin/pull/1614.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1614
    
----

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---