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); }