# volume being mounted.
# nostat -> don't stat volume path when enumerating volumes list
# upriv -> use unix privilege.
+# perm -> default permission value OR with the client requested perm
#
#
# dbpath:path -> store the database stuff in the following path.
/*
- * $Id: directory.c,v 1.80 2005-05-14 12:54:50 didg Exp $
+ * $Id: directory.c,v 1.81 2005-06-02 12:32:17 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
u_int16_t bitmap = d_bitmap;
u_char finder_buf[32];
u_int32_t upriv;
- mode_t mpriv; /* uninitialized, OK 310105 */
+ mode_t mpriv = 0;
u_int16_t upriv_bit = 0;
bit = 0;
ma.ma_world = *buf++;
ma.ma_group = *buf++;
ma.ma_owner = *buf++;
- mpriv = mtoumode( &ma );
+ mpriv = mtoumode( &ma ) | vol->v_perm;
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);
+ upriv = ntohl (upriv) | vol->v_perm;
if (dir_rx_set(upriv)) {
/* maybe we are trying to set perms back */
if ( setdirunixmode(vol, upath, upriv) < 0 ) {
bitmap = 0;
- err = set_dir_errors(path, "setdirmode", errno);
+ err = set_dir_errors(path, "setdirunixmode", errno);
}
}
else {
}
if ( upriv_bit && setdirunixmode(vol, upath, upriv) < 0 ) {
- err = set_dir_errors(path, "setdirmode", errno);
+ err = set_dir_errors(path, "setdirunixmode", errno);
goto setdirparam_done;
}
break;
/*
- * $Id: filedir.c,v 1.49 2005-05-14 12:54:53 didg Exp $
+ * $Id: filedir.c,v 1.50 2005-06-02 12:32:17 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);
+ int admode = ad_mode("", 0777) | vol->v_perm;
setfilmode(upath, admode, NULL);
vol->vfs->rf_setfilmode(vol, upath, admode, NULL);
/*
- * $Id: unix.c,v 1.47 2005-05-25 18:19:33 didg Exp $
+ * $Id: unix.c,v 1.48 2005-06-02 12:32:18 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
return -1;
}
+ mode |= vol->v_perm;
+
if (setfilmode( path->u_name, mode, &path->st) < 0)
return -1;
/* we need to set write perm if read set for resource fork */
int setdirunixmode( vol, name, mode )
const struct vol *vol;
const char *name;
-const mode_t mode;
+mode_t mode;
{
int dropbox = (vol->v_flags & AFPVOL_DROPBOX);
+ mode |= vol->v_perm;
if (dir_rx_set(mode)) {
/* extending right? dir first then .AppleDouble in rf_setdirmode */
int setdirmode( vol, name, mode )
const struct vol *vol;
const char *name;
-const mode_t mode;
+mode_t mode;
{
struct stat st;
struct dirent *dirp;
DIR *dir;
+ mode_t hf_mode;
int osx = vol->v_adouble == AD_VERSION2_OSX;
- mode_t hf_mode = ad_hf_mode(mode);
int dropbox = (vol->v_flags & AFPVOL_DROPBOX);
+ mode |= vol->v_perm;
+ hf_mode = ad_hf_mode(mode);
+
if (dir_rx_set(mode)) {
/* extending right? dir first */
if ( stickydirmode(name, DIRBITS | mode, dropbox) < 0 )
/*
- * $Id: unix.h,v 1.19 2005-06-01 13:03:29 didg Exp $
+ * $Id: unix.h,v 1.20 2005-06-02 12:32:18 didg Exp $
*/
#ifndef AFPD_UNIX_H
extern int gmem __P((const gid_t));
extern int setdeskmode __P((const mode_t));
-extern int setdirunixmode __P((const struct vol *, const char *, const mode_t));
-extern int setdirmode __P((const struct vol *, const char *, const mode_t));
+extern int setdirunixmode __P((const struct vol *, const char *, mode_t));
+extern int setdirmode __P((const struct vol *, const char *, mode_t));
extern int setdeskowner __P((const uid_t, const gid_t));
extern int setdirowner __P((const struct vol *, const char *, const uid_t, const gid_t));
extern int setfilmode __P((const char *, mode_t , struct stat *));
/*
- * $Id: volume.c,v 1.61 2005-05-25 18:30:50 didg Exp $
+ * $Id: volume.c,v 1.62 2005-06-02 12:32:18 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_MAX (VOLOPT_UMASK +1)
+#define VOLOPT_MAX (VOLOPT_DFLTPERM +1)
#define VOLOPT_NUM (VOLOPT_MAX + 1)
setoption(options, save, VOLOPT_DBPATH, val);
} else if (optionok(tmp, "umask:", val)) {
- options[VOLOPT_UMASK].i_value = (int)strtol(val +1, (char **)NULL, 8);
+ 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, "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_DFLTPERM].i_value)
+ volume->v_perm = (mode_t)options[VOLOPT_DFLTPERM].i_value;
+
if (options[VOLOPT_ADOUBLE].i_value)
volume->v_adouble = options[VOLOPT_ADOUBLE].i_value;
else
/*
- * $Id: volume.h,v 1.22 2005-04-30 21:33:41 didg Exp $
+ * $Id: volume.h,v 1.23 2005-06-02 12:32:18 didg Exp $
*
* Copyright (c) 1990,1994 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
struct _cnid_db *v_cdb;
char v_stamp[ADEDLEN_PRIVSYN];
mode_t v_umask;
+ mode_t v_perm; /* default permission value OR with requested perm*/
#ifdef FORCE_UIDGID
char *v_forceuid;