/*
- * $Id: directory.c,v 1.89 2008-12-23 07:51:12 didg Exp $
+ * $Id: directory.c,v 1.90 2009-01-30 04:57:42 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
ma.ma_world = *buf++;
ma.ma_group = *buf++;
ma.ma_owner = *buf++;
- mpriv = mtoumode( &ma ) | vol->v_perm;
+ mpriv = mtoumode( &ma ) | vol->v_dperm;
if (dir_rx_set(mpriv) && setdirmode( vol, upath, mpriv) < 0 ) {
err = set_dir_errors(path, "setdirmode", errno);
bitmap = 0;
change_parent_mdate = 1;
memcpy( &upriv, buf, sizeof( upriv ));
buf += sizeof( upriv );
- upriv = ntohl (upriv) | vol->v_perm;
+ upriv = ntohl (upriv) | vol->v_dperm;
if (dir_rx_set(upriv)) {
/* maybe we are trying to set perms back */
if ( setdirunixmode(vol, upath, upriv) < 0 ) {
/*
- * $Id: filedir.c,v 1.51 2008-08-31 13:25:58 didg Exp $
+ * $Id: filedir.c,v 1.52 2009-01-30 04:57:42 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#endif /* DROPKLUDGE */
/* if unix priv don't try to match perm with dest folder */
if (!isdir && !vol_unix_priv(vol)) {
- int admode = ad_mode("", 0777) | vol->v_perm;
+ int admode = ad_mode("", 0777) | vol->v_fperm;
setfilmode(upath, admode, NULL);
vol->vfs->rf_setfilmode(vol, upath, admode, NULL);
/*
- * $Id: unix.c,v 1.50 2008-12-03 18:35:44 didg Exp $
+ * $Id: unix.c,v 1.51 2009-01-30 04:57:42 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
return -1;
}
- mode |= vol->v_perm;
+ mode |= vol->v_fperm;
if (setfilmode( path->u_name, mode, &path->st) < 0)
return -1;
{
int dropbox = (vol->v_flags & AFPVOL_DROPBOX);
- mode |= vol->v_perm;
+ mode |= vol->v_dperm;
if (dir_rx_set(mode)) {
/* extending right? dir first then .AppleDouble in rf_setdirmode */
int osx = vol->v_adouble == AD_VERSION2_OSX;
int dropbox = (vol->v_flags & AFPVOL_DROPBOX);
- mode |= vol->v_perm;
+ mode |= vol->v_dperm;
hf_mode = ad_hf_mode(mode);
if (dir_rx_set(mode)) {
/*
- * $Id: volume.c,v 1.75 2009-01-26 15:09:31 didg Exp $
+ * $Id: volume.c,v 1.76 2009-01-30 04:57:42 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#define VOLOPT_FORCEUID 19 /* force uid for username x */
#define VOLOPT_FORCEGID 20 /* force gid for group x */
-#define VOLOPT_UMASK 21
-#define VOLOPT_DFLTPERM 22
-#else
-#define VOLOPT_UMASK 19
-#define VOLOPT_DFLTPERM 20
#endif /* FORCE_UIDGID */
+#define VOLOPT_UMASK 21
+#define VOLOPT_DPERM 22 /* dperm default directories perms */
+#define VOLOPT_FPERM 23 /* fperm default files perms */
+#define VOLOPT_DFLTPERM 24 /* perm */
+
#define VOLOPT_MAX (VOLOPT_DFLTPERM +1)
#define VOLOPT_NUM (VOLOPT_MAX + 1)
options[VOLOPT_UMASK].i_value = (int)strtol(val +1, NULL, 8);
} else if (optionok(tmp, "perm:", val)) {
options[VOLOPT_DFLTPERM].i_value = (int)strtol(val+1, NULL, 8);
+ } else if (optionok(tmp, "dperm:", val)) {
+ options[VOLOPT_DPERM].i_value = (int)strtol(val+1, NULL, 8);
+ } else if (optionok(tmp, "fperm:", val)) {
+ options[VOLOPT_FPERM].i_value = (int)strtol(val+1, NULL, 8);
} else if (optionok(tmp, "mapchars:",val)) {
setoption(options, save, VOLOPT_MAPCHARS, val);
if (options[VOLOPT_UMASK].i_value)
volume->v_umask = (mode_t)options[VOLOPT_UMASK].i_value;
+ if (options[VOLOPT_DPERM].i_value)
+
if (options[VOLOPT_DFLTPERM].i_value)
volume->v_perm = (mode_t)options[VOLOPT_DFLTPERM].i_value;
volume->v_root_postexec = volxlate(obj, NULL, MAXPATHLEN, options[VOLOPT_ROOTPOSTEXEC].c_value, pwd, path, name);
}
}
+ volume->v_dperm |= volume->v_perm;
+ volume->v_fperm |= volume->v_perm;
volume->v_next = Volumes;
Volumes = volume;
/*
- * $Id: volume.h,v 1.25 2008-08-31 13:26:00 didg Exp $
+ * $Id: volume.h,v 1.26 2009-01-30 04:57:42 didg Exp $
*
* Copyright (c) 1990,1994 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
char v_stamp[ADEDLEN_PRIVSYN];
mode_t v_umask;
mode_t v_perm; /* default permission value OR with requested perm*/
+ mode_t v_dperm; /* default directories permission value OR with requested perm*/
+ mode_t v_fperm; /* default files permission value OR with requested perm*/
#ifdef FORCE_UIDGID
char *v_forceuid;