VirtualBox

Changeset 39062 in vbox


Ignore:
Timestamp:
Oct 20, 2011 4:14:11 PM (13 years ago)
Author:
vboxsync
Message:

Additions/solaris/SharedFolders: implemented dmode, fmode, dmask and fmask parameters. (untested)

Location:
trunk/src/VBox/Additions/solaris/SharedFolders
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c

    r33540 r39062  
    239239        uid_t uid = 0;
    240240        gid_t gid = 0;
     241        mode_t dmode = ~0;
     242        mode_t fmode = ~0;
     243        mode_t dmask = 0;
     244        mode_t fmask = 0;
    241245        int stat_ttl = DEF_STAT_TTL_MS;
    242246        int fsync = 0;
     
    303307
    304308        /*
     309         * dmode to use for all directories
     310         */
     311        if (vfs_optionisset(vfsp, "dmode", &optval) &&
     312                ddi_strtol(optval, NULL, 10, &val) == 0 &&
     313                (mode_t)val == val)
     314                dmode = val;
     315
     316        /*
     317         * fmode to use for all files
     318         */
     319        if (vfs_optionisset(vfsp, "fmode", &optval) &&
     320                ddi_strtol(optval, NULL, 10, &val) == 0 &&
     321                (mode_t)val == val)
     322                fmode = val;
     323
     324        /*
     325         * dmask to use for all directories
     326         */
     327        if (vfs_optionisset(vfsp, "dmask", &optval) &&
     328                ddi_strtol(optval, NULL, 10, &val) == 0 &&
     329                (mode_t)val == val)
     330                dmask = val;
     331
     332        /*
     333         * fmask to use for all files
     334         */
     335        if (vfs_optionisset(vfsp, "fmask", &optval) &&
     336                ddi_strtol(optval, NULL, 10, &val) == 0 &&
     337                (mode_t)val == val)
     338                fmask = val;
     339
     340        /*
    305341         * ttl to use for stat caches
    306342         */
     
    367403        sffs->sf_uid = uid;
    368404        sffs->sf_gid = gid;
     405        sffs->sf_dmode = dmode;
     406        sffs->sf_fmode = fmode;
     407        sffs->sf_dmask = dmask;
     408        sffs->sf_fmask = fmask;
    369409        sffs->sf_stat_ttl = stat_ttl;
    370410        sffs->sf_fsync = fsync;
     
    515555        Log(("    uid_t sf_uid = 0x%l\n", (ulong_t)sffs->sf_uid));
    516556        Log(("    gid_t sf_gid = 0x%l\n", (ulong_t)sffs->sf_gid));
     557        Log(("    mode_t sf_dmode = 0x%l\n", (ulong_t)sffs->sf_dmode));
     558        Log(("    mode_t sf_fmode = 0x%l\n", (ulong_t)sffs->sf_fmode));
     559        Log(("    mode_t sf_dmask = 0x%l\n", (ulong_t)sffs->sf_dmask));
     560        Log(("    mode_t sf_fmask = 0x%l\n", (ulong_t)sffs->sf_fmask));
    517561        Log(("    char *sf_share_name = %s\n", sffs->sf_share_name));
    518562        Log(("    char *sf_mntpath = %s\n", sffs->sf_mntpath));
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.h

    r31691 r39062  
    4040        uid_t           sf_uid;         /* owner of all shared folders */
    4141        gid_t           sf_gid;         /* group of all shared folders */
     42        mode_t      sf_dmode;   /* mode of all directories */
     43        mode_t      sf_fmode;   /* mode of all files */
     44        mode_t      sf_dmask;   /* mask of all directories */
     45        mode_t      sf_fmask;   /* mask of all files */
    4246        int             sf_stat_ttl;    /* ttl for stat caches (in ms) */
    4347        int             sf_fsync;       /* whether to honor fsync or not */
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c

    r39009 r39062  
    858858        vap->va_mode = mode & MODEMASK;
    859859        if (S_ISDIR(mode))
     860        {
    860861                vap->va_type = VDIR;
     862                vap->va_mode = sffs->sf_dmode != ~0 ? (sffs->sf_dmode & 0777) : vap->va_mode;
     863                vap->va_mode &= ~sffs->sf_dmask;
     864                vap->va_mode |= S_IFDIR;
     865        }
    861866        else if (S_ISREG(mode))
     867        {
    862868                vap->va_type = VREG;
     869                vap->va_mode = sffs->sf_fmask != ~0 ? (sffs->sf_fmode & 0777) : vap->va_mode;
     870                vap->va_mode &= ~sffs->sf_fmask;
     871                vap->va_mode |= S_IFREG;
     872        }
    863873        else if (S_ISFIFO(mode))
    864874                vap->va_type = VFIFO;
     
    868878                vap->va_type = VBLK;
    869879        else if (S_ISLNK(mode))
     880        {
    870881                vap->va_type = VLNK;
     882                vap->va_mode = sffs->sf_fmask != ~0 ? (sffs->sf_fmode & 0777) : vap->va_mode;
     883                vap->va_mode &= ~sffs->sf_fmask;
     884                vap->va_mode |= S_IFLNK;
     885        }
    871886        else if (S_ISSOCK(mode))
    872887                vap->va_type = VSOCK;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette