You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2012/07/24 02:18:05 UTC

svn commit: r1364853 - in /hive/trunk/ql/src: java/org/apache/hadoop/hive/ql/Driver.java test/queries/clientnegative/join_nonexistent_part.q test/results/clientnegative/join_nonexistent_part.q.out

Author: hashutosh
Date: Tue Jul 24 00:18:04 2012
New Revision: 1364853

URL: http://svn.apache.org/viewvc?rev=1364853&view=rev
Log:
HIVE-3225 : NPE on a join query with authorization enabled (Francis Liu via Ashutosh Chauhan)

Added:
    hive/trunk/ql/src/test/queries/clientnegative/join_nonexistent_part.q
    hive/trunk/ql/src/test/results/clientnegative/join_nonexistent_part.q.out
Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java?rev=1364853&r1=1364852&r2=1364853&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java Tue Jul 24 00:18:04 2012
@@ -606,7 +606,11 @@ public class Driver implements CommandPr
                 cols.add(columns.get(i).getName());
               }
             }
-            if (tbl.isPartitioned() && tableUsePartLevelAuth.get(tbl.getTableName())) {
+            //map may not contain all sources, since input list may have been optimized out
+            //or non-existent tho such sources may still be referenced by the TableScanOperator
+            //if it's null then the partition probably doesn't exist so let's use table permission
+            if (tbl.isPartitioned() &&
+                tableUsePartLevelAuth.get(tbl.getTableName()) == Boolean.TRUE) {
               String alias_id = topOpMap.getKey();
               PrunedPartitionList partsList = PartitionPruner.prune(parseCtx
                   .getTopToTable().get(topOp), parseCtx.getOpToPartPruner()
@@ -643,7 +647,7 @@ public class Driver implements CommandPr
         if (read.getPartition() != null) {
           tbl = read.getPartition().getTable();
           // use partition level authorization
-          if (tableUsePartLevelAuth.get(tbl.getTableName())) {
+          if (tableUsePartLevelAuth.get(tbl.getTableName()) == Boolean.TRUE) {
             List<String> cols = part2Cols.get(read.getPartition());
             if (cols != null && cols.size() > 0) {
               ss.getAuthorizer().authorize(read.getPartition().getTable(),

Added: hive/trunk/ql/src/test/queries/clientnegative/join_nonexistent_part.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/join_nonexistent_part.q?rev=1364853&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/join_nonexistent_part.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/join_nonexistent_part.q Tue Jul 24 00:18:04 2012
@@ -0,0 +1,4 @@
+SET hive.security.authorization.enabled = true;
+SELECT *
+FROM srcpart s1 join src s2 on s1.key == s2.key
+WHERE s1.ds='non-existent';
\ No newline at end of file

Added: hive/trunk/ql/src/test/results/clientnegative/join_nonexistent_part.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/join_nonexistent_part.q.out?rev=1364853&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/join_nonexistent_part.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/join_nonexistent_part.q.out Tue Jul 24 00:18:04 2012
@@ -0,0 +1 @@
+Authorization failed:No privilege 'Select' found for inputs { database:default, table:src, columnName:key}. Use show grant to get more details.