HDFS-13322 fuse dfs - uid persists when switching between ticket caches. Contributed by Istvan Fajth.
This commit is contained in:
parent
c835fc08ad
commit
40f9b0c5c1
@ -192,7 +192,7 @@ int fuseConnectInit(const char *nnUri, int port)
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two libhdfs connections by username
|
||||
* Compare two libhdfs connections by username and Kerberos ticket cache path
|
||||
*
|
||||
* @param a The first libhdfs connection
|
||||
* @param b The second libhdfs connection
|
||||
@ -201,22 +201,26 @@ int fuseConnectInit(const char *nnUri, int port)
|
||||
*/
|
||||
static int hdfsConnCompare(const struct hdfsConn *a, const struct hdfsConn *b)
|
||||
{
|
||||
return strcmp(a->usrname, b->usrname);
|
||||
int rc = strcmp(a->usrname, b->usrname);
|
||||
if (rc) return rc;
|
||||
return gHdfsAuthConf == AUTH_CONF_KERBEROS && strcmp(a->kpath, b->kpath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a libhdfs connection by username
|
||||
*
|
||||
* @param usrname The username to look up
|
||||
* @param kpath The Kerberos ticket cache file path
|
||||
*
|
||||
* @return The connection, or NULL if none could be found
|
||||
*/
|
||||
static struct hdfsConn* hdfsConnFind(const char *usrname)
|
||||
static struct hdfsConn* hdfsConnFind(const char *usrname, const char *kpath)
|
||||
{
|
||||
struct hdfsConn exemplar;
|
||||
|
||||
memset(&exemplar, 0, sizeof(exemplar));
|
||||
exemplar.usrname = (char*)usrname;
|
||||
exemplar.kpath = (char*)kpath;
|
||||
return RB_FIND(hdfsConnTree, &gConnTree, &exemplar);
|
||||
}
|
||||
|
||||
@ -542,8 +546,13 @@ static int fuseConnect(const char *usrname, struct fuse_context *ctx,
|
||||
int ret;
|
||||
struct hdfsConn* conn;
|
||||
|
||||
char kpath[PATH_MAX] = { 0 };
|
||||
if (gHdfsAuthConf == AUTH_CONF_KERBEROS) {
|
||||
findKerbTicketCachePath(ctx, kpath, sizeof(kpath));
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&gConnMutex);
|
||||
conn = hdfsConnFind(usrname);
|
||||
conn = hdfsConnFind(usrname, kpath);
|
||||
if (!conn) {
|
||||
ret = fuseNewConnect(usrname, ctx, &conn);
|
||||
if (ret) {
|
||||
|
Loading…
Reference in New Issue
Block a user