|
@@ -869,16 +869,16 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
|
|
}
|
|
}
|
|
unconf = clp;
|
|
unconf = clp;
|
|
}
|
|
}
|
|
- /* CASE 1:
|
|
|
|
- * unconf record that matches input clientid and input confirm.
|
|
|
|
- * conf record that matches input clientid.
|
|
|
|
- * conf and unconf records match names, verifiers
|
|
|
|
- */
|
|
|
|
if ((conf && unconf) &&
|
|
if ((conf && unconf) &&
|
|
(cmp_verf(&unconf->cl_confirm, &confirm)) &&
|
|
(cmp_verf(&unconf->cl_confirm, &confirm)) &&
|
|
(cmp_verf(&conf->cl_verifier, &unconf->cl_verifier)) &&
|
|
(cmp_verf(&conf->cl_verifier, &unconf->cl_verifier)) &&
|
|
(same_name(conf->cl_recdir,unconf->cl_recdir)) &&
|
|
(same_name(conf->cl_recdir,unconf->cl_recdir)) &&
|
|
(!cmp_verf(&conf->cl_confirm, &unconf->cl_confirm))) {
|
|
(!cmp_verf(&conf->cl_confirm, &unconf->cl_confirm))) {
|
|
|
|
+ /* CASE 1:
|
|
|
|
+ * unconf record that matches input clientid and input confirm.
|
|
|
|
+ * conf record that matches input clientid.
|
|
|
|
+ * conf and unconf records match names, verifiers
|
|
|
|
+ */
|
|
if (!cmp_creds(&conf->cl_cred, &unconf->cl_cred))
|
|
if (!cmp_creds(&conf->cl_cred, &unconf->cl_cred))
|
|
status = nfserr_clid_inuse;
|
|
status = nfserr_clid_inuse;
|
|
else {
|
|
else {
|
|
@@ -891,29 +891,29 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
|
|
status = nfs_ok;
|
|
status = nfs_ok;
|
|
|
|
|
|
}
|
|
}
|
|
- }
|
|
|
|
- /* CASE 2:
|
|
|
|
- * conf record that matches input clientid.
|
|
|
|
- * if unconf record that matches input clientid, then unconf->cl_name
|
|
|
|
- * or unconf->cl_verifier don't match the conf record.
|
|
|
|
- */
|
|
|
|
- else if ((conf && !unconf) ||
|
|
|
|
|
|
+ } else if ((conf && !unconf) ||
|
|
((conf && unconf) &&
|
|
((conf && unconf) &&
|
|
(!cmp_verf(&conf->cl_verifier, &unconf->cl_verifier) ||
|
|
(!cmp_verf(&conf->cl_verifier, &unconf->cl_verifier) ||
|
|
!same_name(conf->cl_recdir, unconf->cl_recdir)))) {
|
|
!same_name(conf->cl_recdir, unconf->cl_recdir)))) {
|
|
|
|
+ /* CASE 2:
|
|
|
|
+ * conf record that matches input clientid.
|
|
|
|
+ * if unconf record matches input clientid, then
|
|
|
|
+ * unconf->cl_name or unconf->cl_verifier don't match the
|
|
|
|
+ * conf record.
|
|
|
|
+ */
|
|
if (!cmp_creds(&conf->cl_cred,&rqstp->rq_cred)) {
|
|
if (!cmp_creds(&conf->cl_cred,&rqstp->rq_cred)) {
|
|
status = nfserr_clid_inuse;
|
|
status = nfserr_clid_inuse;
|
|
} else {
|
|
} else {
|
|
clp = conf;
|
|
clp = conf;
|
|
status = nfs_ok;
|
|
status = nfs_ok;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- /* CASE 3:
|
|
|
|
- * conf record not found.
|
|
|
|
- * unconf record found.
|
|
|
|
- * unconf->cl_confirm matches input confirm
|
|
|
|
- */
|
|
|
|
- else if (!conf && unconf && cmp_verf(&unconf->cl_confirm, &confirm)) {
|
|
|
|
|
|
+ } else if (!conf && unconf
|
|
|
|
+ && cmp_verf(&unconf->cl_confirm, &confirm)) {
|
|
|
|
+ /* CASE 3:
|
|
|
|
+ * conf record not found.
|
|
|
|
+ * unconf record found.
|
|
|
|
+ * unconf->cl_confirm matches input confirm
|
|
|
|
+ */
|
|
if (!cmp_creds(&unconf->cl_cred, &rqstp->rq_cred)) {
|
|
if (!cmp_creds(&unconf->cl_cred, &rqstp->rq_cred)) {
|
|
status = nfserr_clid_inuse;
|
|
status = nfserr_clid_inuse;
|
|
} else {
|
|
} else {
|
|
@@ -928,18 +928,17 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
|
|
move_to_confirmed(unconf);
|
|
move_to_confirmed(unconf);
|
|
status = nfs_ok;
|
|
status = nfs_ok;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- /* CASE 4:
|
|
|
|
- * conf record not found, or if conf, then conf->cl_confirm does not
|
|
|
|
- * match input confirm.
|
|
|
|
- * unconf record not found, or if unconf, then unconf->cl_confirm
|
|
|
|
- * does not match input confirm.
|
|
|
|
- */
|
|
|
|
- else if ((!conf || (conf && !cmp_verf(&conf->cl_confirm, &confirm))) &&
|
|
|
|
- (!unconf || (unconf && !cmp_verf(&unconf->cl_confirm, &confirm)))) {
|
|
|
|
|
|
+ } else if ((!conf || (conf && !cmp_verf(&conf->cl_confirm, &confirm)))
|
|
|
|
+ && (!unconf || (unconf && !cmp_verf(&unconf->cl_confirm,
|
|
|
|
+ &confirm)))) {
|
|
|
|
+ /* CASE 4:
|
|
|
|
+ * conf record not found, or if conf, conf->cl_confirm does not
|
|
|
|
+ * match input confirm.
|
|
|
|
+ * unconf record not found, or if unconf, unconf->cl_confirm
|
|
|
|
+ * does not match input confirm.
|
|
|
|
+ */
|
|
status = nfserr_stale_clientid;
|
|
status = nfserr_stale_clientid;
|
|
- }
|
|
|
|
- else {
|
|
|
|
|
|
+ } else {
|
|
/* check that we have hit one of the cases...*/
|
|
/* check that we have hit one of the cases...*/
|
|
status = nfserr_clid_inuse;
|
|
status = nfserr_clid_inuse;
|
|
}
|
|
}
|