Author: umamahesh
Date: Mon Aug 4 09:56:57 2014
New Revision: 1615523
URL: http://svn.apache.org/r1615523
Log:
HADOOP-10886. CryptoCodec#getCodecclasses throws NPE when configurations not
loaded. Contributed by Uma Maheswara Rao G.
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoCodec.java
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/TestCryptoStreamsForLocalFS.java
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt?rev=1615523&r1=1615522&r2=1615523&view=diff
==============================================================================
---
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
(original)
+++
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/CHANGES-fs-encryption.txt
Mon Aug 4 09:56:57 2014
@@ -51,3 +51,6 @@ fs-encryption (Unreleased)
BUG FIXES
HADOOP-10871. incorrect prototype in OpensslSecureRandom.c (cmccabe)
+
+ HADOOP-10886. CryptoCodec#getCodecclasses throws NPE when configurations
not
+ loaded. (umamahesh)
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoCodec.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoCodec.java?rev=1615523&r1=1615522&r2=1615523&view=diff
==============================================================================
---
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoCodec.java
(original)
+++
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoCodec.java
Mon Aug 4 09:56:57 2014
@@ -45,14 +45,21 @@ public abstract class CryptoCodec implem
/**
* Get crypto codec for specified algorithm/mode/padding.
- * @param conf the configuration
- * @param CipherSuite algorithm/mode/padding
- * @return CryptoCodec the codec object
+ *
+ * @param conf
+ * the configuration
+ * @param CipherSuite
+ * algorithm/mode/padding
+ * @return CryptoCodec the codec object. Null value will be returned if no
+ * crypto codec classes with cipher suite configured.
*/
public static CryptoCodec getInstance(Configuration conf,
CipherSuite cipherSuite) {
List<Class<? extends CryptoCodec>> klasses = getCodecClasses(
conf, cipherSuite);
+ if (klasses == null) {
+ return null;
+ }
CryptoCodec codec = null;
for (Class<? extends CryptoCodec> klass : klasses) {
try {
@@ -80,10 +87,13 @@ public abstract class CryptoCodec implem
}
/**
- * Get crypto codec for algorithm/mode/padding in config value
+ * Get crypto codec for algorithm/mode/padding in config value
* hadoop.security.crypto.cipher.suite
- * @param conf the configuration
- * @return CryptoCodec the codec object
+ *
+ * @param conf
+ * the configuration
+ * @return CryptoCodec the codec object Null value will be returned if no
+ * crypto codec classes with cipher suite configured.
*/
public static CryptoCodec getInstance(Configuration conf) {
String name = conf.get(HADOOP_SECURITY_CRYPTO_CIPHER_SUITE_KEY,
@@ -97,6 +107,10 @@ public abstract class CryptoCodec implem
String configName = HADOOP_SECURITY_CRYPTO_CODEC_CLASSES_KEY_PREFIX +
cipherSuite.getConfigSuffix();
String codecString = conf.get(configName);
+ if (codecString == null) {
+ LOG.warn("No crypto codec classes with cipher suite configured.");
+ return null;
+ }
for (String c : Splitter.on(',').trimResults().omitEmptyStrings().
split(codecString)) {
try {
Modified:
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/TestCryptoStreamsForLocalFS.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/TestCryptoStreamsForLocalFS.java?rev=1615523&r1=1615522&r2=1615523&view=diff
==============================================================================
---
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/TestCryptoStreamsForLocalFS.java
(original)
+++
hadoop/common/branches/fs-encryption/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/TestCryptoStreamsForLocalFS.java
Mon Aug 4 09:56:57 2014
@@ -25,6 +25,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.LocalFileSystem;
@@ -50,6 +51,11 @@ public class TestCryptoStreamsForLocalFS
conf = new Configuration(false);
conf.set("fs.file.impl", LocalFileSystem.class.getName());
fileSys = FileSystem.getLocal(conf);
+ conf.set(
+
CommonConfigurationKeysPublic.HADOOP_SECURITY_CRYPTO_CODEC_CLASSES_KEY_PREFIX
+ + CipherSuite.AES_CTR_NOPADDING.getConfigSuffix(),
+ OpensslAesCtrCryptoCodec.class.getName() + ","
+ + JceAesCtrCryptoCodec.class.getName());
codec = CryptoCodec.getInstance(conf);
}