422 }
423 }
424
425 dva.va_mask = AT_ALL;
426 dvap = VOP_GETATTR(dvp, &dva, 0, cr, NULL) ? NULL : &dva;
427
428 if (args->what.name == nfs3nametoolong) {
429 resp->status = NFS3ERR_NAMETOOLONG;
430 goto out1;
431 }
432
433 if (args->what.name == NULL || *(args->what.name) == '\0') {
434 resp->status = NFS3ERR_ACCES;
435 goto out1;
436 }
437
438 fhp = &args->what.dir;
439 if (strcmp(args->what.name, "..") == 0 &&
440 EQFID(&exi->exi_fid, FH3TOFIDP(fhp))) {
441 if ((exi->exi_export.ex_flags & EX_NOHIDE) &&
442 (dvp->v_flag & VROOT)) {
443 /*
444 * special case for ".." and 'nohide'exported root
445 */
446 if (rfs_climb_crossmnt(&dvp, &exi, cr) != 0) {
447 resp->status = NFS3ERR_ACCES;
448 goto out1;
449 }
450 } else {
451 resp->status = NFS3ERR_NOENT;
452 goto out1;
453 }
454 }
455
456 ca = (struct sockaddr *)svc_getrpccaller(req->rq_xprt)->buf;
457 name = nfscmd_convname(ca, exi, args->what.name,
458 NFSCMD_CONV_INBOUND, MAXPATHLEN + 1);
459
460 if (name == NULL) {
461 resp->status = NFS3ERR_ACCES;
462 goto out1;
|
422 }
423 }
424
425 dva.va_mask = AT_ALL;
426 dvap = VOP_GETATTR(dvp, &dva, 0, cr, NULL) ? NULL : &dva;
427
428 if (args->what.name == nfs3nametoolong) {
429 resp->status = NFS3ERR_NAMETOOLONG;
430 goto out1;
431 }
432
433 if (args->what.name == NULL || *(args->what.name) == '\0') {
434 resp->status = NFS3ERR_ACCES;
435 goto out1;
436 }
437
438 fhp = &args->what.dir;
439 if (strcmp(args->what.name, "..") == 0 &&
440 EQFID(&exi->exi_fid, FH3TOFIDP(fhp))) {
441 if ((exi->exi_export.ex_flags & EX_NOHIDE) &&
442 ((dvp->v_flag & VROOT) || VN_IS_CURZONEROOT(dvp))) {
443 /*
444 * special case for ".." and 'nohide'exported root
445 */
446 if (rfs_climb_crossmnt(&dvp, &exi, cr) != 0) {
447 resp->status = NFS3ERR_ACCES;
448 goto out1;
449 }
450 } else {
451 resp->status = NFS3ERR_NOENT;
452 goto out1;
453 }
454 }
455
456 ca = (struct sockaddr *)svc_getrpccaller(req->rq_xprt)->buf;
457 name = nfscmd_convname(ca, exi, args->what.name,
458 NFSCMD_CONV_INBOUND, MAXPATHLEN + 1);
459
460 if (name == NULL) {
461 resp->status = NFS3ERR_ACCES;
462 goto out1;
|