diff --git a/build.vc10/daemon.vcxproj b/build.vc10/daemon.vcxproj index 8d17e8c..a3385e3 100644 --- a/build.vc10/daemon.vcxproj +++ b/build.vc10/daemon.vcxproj @@ -119,7 +119,7 @@ /Wall /wd4100 /wd4127 /wd4255 /wd4574 /wd4619 /wd4668 /wd4710 /wd4711 /wd4820 %(AdditionalOptions) Disabled ..\sys;..\xdr;..\dll;..\libtirpc\tirpc;%(AdditionalIncludeDirectories) - WIN32_LEAN_AND_MEAN;STANDALONE_NFSD;%(PreprocessorDefinitions) + WIN32_LEAN_AND_MEAN;STANDALONE_NFSD;NO_CB_4_KRB5P;%(PreprocessorDefinitions) true diff --git a/build.vc10/libtirpc.vcxproj b/build.vc10/libtirpc.vcxproj index 070d42c..6d53ec9 100644 --- a/build.vc10/libtirpc.vcxproj +++ b/build.vc10/libtirpc.vcxproj @@ -115,7 +115,7 @@ Disabled ..\libtirpc\tirpc;%(AdditionalIncludeDirectories) - INET6;FD_SETSIZE=128;PORTMAP;%(PreprocessorDefinitions) + INET6;FD_SETSIZE=128;PORTMAP;NO_CB_4_KRB5P;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL diff --git a/daemon/nfs41_rpc.c b/daemon/nfs41_rpc.c index 1f39890..ec205b5 100644 --- a/daemon/nfs41_rpc.c +++ b/daemon/nfs41_rpc.c @@ -129,6 +129,10 @@ int nfs41_rpc_clnt_create( status = GetLastError(); goto out; } +#ifdef NO_CB_4_KRB5P + if (sec_flavor == RPCSEC_AUTHGSS_KRB5P) + needcb = 0; +#endif rpc->needcb = needcb; rpc->cond = CreateEvent(NULL, TRUE, FALSE, "rpc_recovery_cond"); if (rpc->cond == NULL) { diff --git a/daemon/nfs41_session.c b/daemon/nfs41_session.c index 3e31589..e12307a 100644 --- a/daemon/nfs41_session.c +++ b/daemon/nfs41_session.c @@ -279,8 +279,13 @@ int nfs41_session_create( } AcquireSRWLockShared(&client->exid_lock); +#ifdef NO_CB_4_KRB5P + if ((client->roles & (EXCHGID4_FLAG_USE_PNFS_MDS | + EXCHGID4_FLAG_USE_NON_PNFS)) && client->rpc->needcb) +#else if (client->roles & (EXCHGID4_FLAG_USE_PNFS_MDS | EXCHGID4_FLAG_USE_NON_PNFS)) +#endif session->flags |= CREATE_SESSION4_FLAG_CONN_BACK_CHAN; ReleaseSRWLockShared(&client->exid_lock); diff --git a/libtirpc/src/clnt_vc.c b/libtirpc/src/clnt_vc.c index 5849a41..488be66 100644 --- a/libtirpc/src/clnt_vc.c +++ b/libtirpc/src/clnt_vc.c @@ -549,19 +549,26 @@ call_again: return(ct->ct_error.re_status); } - release_fd_lock(ct->ct_fd, mask); +#ifdef NO_CB_4_KRB5P + if (cl->cb_thread != INVALID_HANDLE_VALUE) + release_fd_lock(ct->ct_fd, mask); +#endif /* * Keep receiving until we get a valid transaction id */ while (TRUE) { - mutex_lock(&clnt_fd_lock); - while ((vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] && - vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] != GetCurrentThreadId()) || - (ct->reply_msg.rm_xid && ct->reply_msg.rm_xid != x_id)) - cond_wait(&vc_cv[WINSOCK_HANDLE_HASH(ct->ct_fd)], &clnt_fd_lock); - vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] = GetCurrentThreadId(); - mutex_unlock(&clnt_fd_lock); +#ifdef NO_CB_4_KRB5P + if (cl->cb_thread != INVALID_HANDLE_VALUE) { + mutex_lock(&clnt_fd_lock); + while ((vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] && + vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] != GetCurrentThreadId()) || + (ct->reply_msg.rm_xid && ct->reply_msg.rm_xid != x_id)) + cond_wait(&vc_cv[WINSOCK_HANDLE_HASH(ct->ct_fd)], &clnt_fd_lock); + vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] = GetCurrentThreadId(); + mutex_unlock(&clnt_fd_lock); + } +#endif xdrs->x_op = XDR_DECODE; ct->reply_msg.acpted_rply.ar_verf = _null_auth;