941 struct secinfo *secp;
942 seconfig_t *si;
943 bool_t did_traverse = FALSE;
944 int dotdot, walk;
945 nfs_export_t *ne = nfs_get_export();
946
947 dvp = cs->vp;
948 dotdot = (nm[0] == '.' && nm[1] == '.' && nm[2] == '\0');
949
950 /*
951 * If dotdotting, then need to check whether it's above the
952 * root of a filesystem, or above an export point.
953 */
954 if (dotdot) {
955
956 /*
957 * If dotdotting at the root of a filesystem, then
958 * need to traverse back to the mounted-on filesystem
959 * and do the dotdot lookup there.
960 */
961 if (cs->vp->v_flag & VROOT) {
962
963 /*
964 * If at the system root, then can
965 * go up no further.
966 */
967 if (VN_CMP(dvp, ZONE_ROOTVP()))
968 return (puterrno4(ENOENT));
969
970 /*
971 * Traverse back to the mounted-on filesystem
972 */
973 dvp = untraverse(cs->vp);
974
975 /*
976 * Set the different_export flag so we remember
977 * to pick up a new exportinfo entry for
978 * this new filesystem.
979 */
980 different_export = 1;
981 } else {
2688 ASSERT(get_fh4_flag(&cs->fh, FH4_ATTRDIR));
2689 } else {
2690 attrdir = 0;
2691 ASSERT(! get_fh4_flag(&cs->fh, FH4_ATTRDIR));
2692 }
2693
2694 dotdot = (nm[0] == '.' && nm[1] == '.' && nm[2] == '\0');
2695
2696 /*
2697 * If dotdotting, then need to check whether it's
2698 * above the root of a filesystem, or above an
2699 * export point.
2700 */
2701 if (dotdot) {
2702
2703 /*
2704 * If dotdotting at the root of a filesystem, then
2705 * need to traverse back to the mounted-on filesystem
2706 * and do the dotdot lookup there.
2707 */
2708 if (cs->vp->v_flag & VROOT) {
2709
2710 /*
2711 * If at the system root, then can
2712 * go up no further.
2713 */
2714 if (VN_CMP(cs->vp, ZONE_ROOTVP()))
2715 return (puterrno4(ENOENT));
2716
2717 /*
2718 * Traverse back to the mounted-on filesystem
2719 */
2720 cs->vp = untraverse(cs->vp);
2721
2722 /*
2723 * Set the different_export flag so we remember
2724 * to pick up a new exportinfo entry for
2725 * this new filesystem.
2726 */
2727 different_export = 1;
2728 } else {
|
941 struct secinfo *secp;
942 seconfig_t *si;
943 bool_t did_traverse = FALSE;
944 int dotdot, walk;
945 nfs_export_t *ne = nfs_get_export();
946
947 dvp = cs->vp;
948 dotdot = (nm[0] == '.' && nm[1] == '.' && nm[2] == '\0');
949
950 /*
951 * If dotdotting, then need to check whether it's above the
952 * root of a filesystem, or above an export point.
953 */
954 if (dotdot) {
955
956 /*
957 * If dotdotting at the root of a filesystem, then
958 * need to traverse back to the mounted-on filesystem
959 * and do the dotdot lookup there.
960 */
961 if ((cs->vp->v_flag & VROOT) || VN_IS_CURZONEROOT(cs->vp)) {
962
963 /*
964 * If at the system root, then can
965 * go up no further.
966 */
967 if (VN_CMP(dvp, ZONE_ROOTVP()))
968 return (puterrno4(ENOENT));
969
970 /*
971 * Traverse back to the mounted-on filesystem
972 */
973 dvp = untraverse(cs->vp);
974
975 /*
976 * Set the different_export flag so we remember
977 * to pick up a new exportinfo entry for
978 * this new filesystem.
979 */
980 different_export = 1;
981 } else {
2688 ASSERT(get_fh4_flag(&cs->fh, FH4_ATTRDIR));
2689 } else {
2690 attrdir = 0;
2691 ASSERT(! get_fh4_flag(&cs->fh, FH4_ATTRDIR));
2692 }
2693
2694 dotdot = (nm[0] == '.' && nm[1] == '.' && nm[2] == '\0');
2695
2696 /*
2697 * If dotdotting, then need to check whether it's
2698 * above the root of a filesystem, or above an
2699 * export point.
2700 */
2701 if (dotdot) {
2702
2703 /*
2704 * If dotdotting at the root of a filesystem, then
2705 * need to traverse back to the mounted-on filesystem
2706 * and do the dotdot lookup there.
2707 */
2708 if ((cs->vp->v_flag & VROOT) || VN_IS_CURZONEROOT(cs->vp)) {
2709
2710 /*
2711 * If at the system root, then can
2712 * go up no further.
2713 */
2714 if (VN_CMP(cs->vp, ZONE_ROOTVP()))
2715 return (puterrno4(ENOENT));
2716
2717 /*
2718 * Traverse back to the mounted-on filesystem
2719 */
2720 cs->vp = untraverse(cs->vp);
2721
2722 /*
2723 * Set the different_export flag so we remember
2724 * to pick up a new exportinfo entry for
2725 * this new filesystem.
2726 */
2727 different_export = 1;
2728 } else {
|