Print this page
Try to remove assumption that zone's root vnode is marked VROOT


 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 {