diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index c8f96b3bb9c..923e8f83cde 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -618,6 +618,9 @@ Release 2.7.0 - UNRELEASED HDFS-7736. Fix typos in dfsadmin/fsck/snapshotDiff usage messages. (Brahma Reddy Battula via wheat9) + HDFS-7771. fuse_dfs should permit FILE: on the front of KRB5CCNAME + (cmccabe) + Release 2.6.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c b/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c index 218c5c9ab2a..8a2a00b887b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_connect.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -358,6 +359,15 @@ static void hdfsConnExpiry(void) pthread_mutex_unlock(&gConnMutex); } +// The Kerberos FILE: prefix. This indicates that the kerberos ticket cache +// specifier is a file. (Note that we also assume that the specifier is a file +// if no prefix is present.) +#define KRB_FILE_PREFIX "FILE:" + +// Length of the Kerberos file prefix, which is equal to the string size in +// bytes minus 1 (because we don't count the null terminator in the length.) +#define KRB_FILE_PREFIX_LEN (sizeof(KRB_FILE_PREFIX) - 1) + /** * Find the Kerberos ticket cache path. * @@ -414,6 +424,12 @@ done: } else { path[pathIdx] = '\0'; } + if (strncmp(path, KRB_FILE_PREFIX, KRB_FILE_PREFIX_LEN) == 0) { + fprintf(stderr, "stripping " KRB_FILE_PREFIX " from the front of " + "KRB5CCNAME.\n"); + memmove(path, path + KRB_FILE_PREFIX_LEN, + strlen(path + KRB_FILE_PREFIX_LEN) + 1); + } } /**