[ 
https://issues.apache.org/jira/browse/HIVE-18381?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16312602#comment-16312602
 ] 

youchuikai commented on HIVE-18381:
-----------------------------------

*fix this bug.*
{code:java}
Index: src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java       (date 
1515137061000)
+++ src/main/java/org/apache/hadoop/hive/metastore/Warehouse.java       (date 
1515137079737)
@@ -43,6 +43,8 @@
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.AclEntry;
+import org.apache.hadoop.fs.permission.AclStatus;
 import org.apache.hadoop.fs.permission.FsAction;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.HiveStatsUtils;
@@ -250,8 +252,10 @@
             return false;
         }
         final FileStatus stat;
+        final AclStatus aclStas;
         try {
             stat = getFs(path).getFileStatus(path);
+            aclStas = getFs(path).getAclStatus(path);
         } catch (FileNotFoundException fnfe){
             // File named by path doesn't exist; nothing to validate.
             return true;
@@ -266,23 +270,38 @@
         } catch (LoginException le) {
             throw new IOException(le);
         }
-        String user = ugi.getShortUserName();
+        String user = ugi.getShortUserName();   // kaikai
+        String[] groups = ugi.getGroupNames(); // groups 获取的是metastore的组用户信息。
         //check whether owner can delete
         if (stat.getOwner().equals(user) &&
                 stat.getPermission().getUserAction().implies(FsAction.WRITE)) {
             return true;
         }
+
         //check whether group of the user can delete
         if (stat.getPermission().getGroupAction().implies(FsAction.WRITE)) {
-            String[] groups = ugi.getGroupNames();
             if (ArrayUtils.contains(groups, stat.getGroup())) {
                 return true;
             }
         }
+
         //check whether others can delete (uncommon case!!)
         if (stat.getPermission().getOtherAction().implies(FsAction.WRITE)) {
             return true;
         }
+
+        // add extra
+        List<AclEntry> list = aclStas.getEntries();
+        for (AclEntry aclEntry : list){
+            if (aclEntry.getScope().toString() != "DEFAULT" && 
aclEntry.getPermission().implies(FsAction.WRITE) && aclEntry.getName() != 
"null"){
+                if (aclEntry.getType().toString() == "USER" && 
aclEntry.getName().equals(user)){
+                    LOG.info("acl user is" + aclEntry.getName() + ";" + "hive 
cli user is " + user);
+                    return true;
+                } else if (aclEntry.getType().toString() == "GROUP" && 
ArrayUtils.contains(groups, aclEntry.getName())){
+                    return true;
+                }
+            }
+        }
         return false;
     }
   /*

{code}


> Drop table operation isn't consider that hdfs acl privilege of the table 
> location parent path  
> -----------------------------------------------------------------------------------------------
>
>                 Key: HIVE-18381
>                 URL: https://issues.apache.org/jira/browse/HIVE-18381
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive
>    Affects Versions: 1.1.0
>         Environment: hive-1.1.0-cdh5.8.4
>            Reporter: youchuikai
>            Assignee: youchuikai
>
> {code:sql}
> // the push user belong to the test_rw group
> hive> dfs -getfacl /user/hive/warehouse1/test1.db;
> # file: /user/hive/warehouse1/test1.db
> # owner: root
> # group: hive
> user::rwx
> group::rwx
> group:test_r:r-x
> group:test_rw:rwx
> mask::rwx
> other::---
> default:user::rwx
> default:group::rwx
> default:group:test_r:r-x
> default:group:test_rw:rwx
> default:mask::rwx
> default:other::---
> hive> drop table test1.youck_66;
> FAILED: Execution Error, return code 1 from 
> org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Table metadata 
> not deleted since hdfs://nameservice-test1/user/hive/warehouse1/test1.db is 
> not writable by push)
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to