Lines 133-138
static volatile int nfsrv_writedelegcnt = 0;
Link Here
|
133 |
static int nfsrv_faildscnt; |
133 |
static int nfsrv_faildscnt; |
134 |
|
134 |
|
135 |
/* local functions */ |
135 |
/* local functions */ |
|
|
136 |
static void nfsrv_revoke(struct nfsclient *clp, NFSPROC_T *p); |
136 |
static void nfsrv_dumpaclient(struct nfsclient *clp, |
137 |
static void nfsrv_dumpaclient(struct nfsclient *clp, |
137 |
struct nfsd_dumpclients *dumpp); |
138 |
struct nfsd_dumpclients *dumpp); |
138 |
static void nfsrv_freeopenowner(struct nfsstate *stp, int cansleep, |
139 |
static void nfsrv_freeopenowner(struct nfsstate *stp, int cansleep, |
Lines 677-685
nfsrv_getclient(nfsquad_t clientid, int opflags, struc
Link Here
|
677 |
*/ |
678 |
*/ |
678 |
if (opflags & CLOPS_CONFIRM) { |
679 |
if (opflags & CLOPS_CONFIRM) { |
679 |
if ((nd->nd_flag & ND_NFSV41) != 0 && |
680 |
if ((nd->nd_flag & ND_NFSV41) != 0 && |
680 |
clp->lc_confirm.lval[0] != confirm.lval[0]) |
681 |
clp->lc_confirm.lval[0] != confirm.lval[0]) { |
681 |
error = NFSERR_SEQMISORDERED; |
682 |
nfsrv_revoke(clp, p); |
682 |
else if ((nd->nd_flag & ND_NFSV41) == 0 && |
683 |
error = NFSERR_ADMINREVOKED; |
|
|
684 |
} else if ((nd->nd_flag & ND_NFSV41) == 0 && |
683 |
clp->lc_confirm.qval != confirm.qval) |
685 |
clp->lc_confirm.qval != confirm.qval) |
684 |
error = NFSERR_STALECLIENTID; |
686 |
error = NFSERR_STALECLIENTID; |
685 |
else if (nfsrv_notsamecredname(nd, clp)) |
687 |
else if (nfsrv_notsamecredname(nd, clp)) |
Lines 908-913
nfsrv_adminrevoke(struct nfsd_clid *revokep, NFSPROC_T
Link Here
|
908 |
goto out; |
910 |
goto out; |
909 |
} |
911 |
} |
910 |
|
912 |
|
|
|
913 |
nfsrv_revoke(clp, p); |
914 |
|
915 |
NFSLOCKV4ROOTMUTEX(); |
916 |
nfsv4_unlock(&nfsv4rootfs_lock, 0); |
917 |
NFSUNLOCKV4ROOTMUTEX(); |
918 |
|
919 |
out: |
920 |
NFSEXITCODE(error); |
921 |
return (error); |
922 |
} |
923 |
|
924 |
/* |
925 |
* Do the actual revokation of the client. The exclusive lock on |
926 |
* nfsv4rootfs_lock must be held. |
927 |
*/ |
928 |
static void |
929 |
nfsrv_revoke(struct nfsclient *clp, NFSPROC_T *p) |
930 |
{ |
931 |
|
911 |
/* |
932 |
/* |
912 |
* Now, write out the revocation record |
933 |
* Now, write out the revocation record |
913 |
*/ |
934 |
*/ |
Lines 922-934
nfsrv_adminrevoke(struct nfsd_clid *revokep, NFSPROC_T
Link Here
|
922 |
nfsrv_cleanclient(clp, p); |
943 |
nfsrv_cleanclient(clp, p); |
923 |
nfsrv_freedeleglist(&clp->lc_deleg); |
944 |
nfsrv_freedeleglist(&clp->lc_deleg); |
924 |
nfsrv_freedeleglist(&clp->lc_olddeleg); |
945 |
nfsrv_freedeleglist(&clp->lc_olddeleg); |
925 |
NFSLOCKV4ROOTMUTEX(); |
|
|
926 |
nfsv4_unlock(&nfsv4rootfs_lock, 0); |
927 |
NFSUNLOCKV4ROOTMUTEX(); |
928 |
|
929 |
out: |
930 |
NFSEXITCODE(error); |
931 |
return (error); |
932 |
} |
946 |
} |
933 |
|
947 |
|
934 |
/* |
948 |
/* |