@@ -159,6 +159,9 @@ static struct Settings {
159
159
XATTR_READ_WRITE
160
160
}xattr_policy ;
161
161
162
+ int delete_deny ;
163
+ int rename_deny ;
164
+
162
165
int mirrored_users_only ;
163
166
uid_t * mirrored_users ;
164
167
int num_mirrored_users ;
@@ -184,10 +187,6 @@ static struct Settings {
184
187
int enable_lock_forwarding ;
185
188
186
189
int enable_ioctl ;
187
-
188
- /* should probably be handled with enum... */
189
- int block_delete ;
190
- int block_rename ;
191
190
192
191
uid_t uid_offset ;
193
192
gid_t gid_offset ;
@@ -480,10 +479,9 @@ static int delete_file(const char *path, int (*target_delete_func)(const char *)
480
479
char * unlink_first = NULL ;
481
480
int (* main_delete_func )(const char * )= target_delete_func ;
482
481
483
- if (settings .block_delete )
482
+ if (settings .delete_deny )
484
483
return - EPERM ;
485
484
486
-
487
485
real_path = process_path (path , false);
488
486
if (real_path == NULL )
489
487
return - errno ;
@@ -824,8 +822,8 @@ static int bindfs_rename(const char *from, const char *to)
824
822
{
825
823
int res ;
826
824
char * real_from ,* real_to ;
827
-
828
- if (settings .block_rename )
825
+
826
+ if (settings .rename_deny )
829
827
return - EPERM ;
830
828
831
829
real_from = process_path (from , false);
@@ -1469,6 +1467,10 @@ static void print_usage(const char *progname)
1469
1467
" --xattr-ro Read-only xattr operations.\n"
1470
1468
" --xattr-rw Read-write xattr operations (the default).\n"
1471
1469
"\n"
1470
+ "Other file operations:\n"
1471
+ " --delete-deny Disallow deleting files.\n"
1472
+ " --rename-deny Disallow renaming files (within the mount).\n"
1473
+ "\n"
1472
1474
"Rate limits:\n"
1473
1475
" --read-rate=... Limit to bytes/sec that can be read.\n"
1474
1476
" --write-rate=... Limit to bytes/sec that can be written.\n"
@@ -1519,16 +1521,16 @@ enum OptionKey {
1519
1521
OPTKEY_XATTR_NONE ,
1520
1522
OPTKEY_XATTR_READ_ONLY ,
1521
1523
OPTKEY_XATTR_READ_WRITE ,
1524
+ OPTKEY_DELETE_DENY ,
1525
+ OPTKEY_RENAME_DENY ,
1522
1526
OPTKEY_REALISTIC_PERMISSIONS ,
1523
1527
OPTKEY_CTIME_FROM_MTIME ,
1524
1528
OPTKEY_ENABLE_LOCK_FORWARDING ,
1525
1529
OPTKEY_DISABLE_LOCK_FORWARDING ,
1526
1530
OPTKEY_ENABLE_IOCTL ,
1527
1531
OPTKEY_HIDE_HARD_LINKS ,
1528
1532
OPTKEY_RESOLVE_SYMLINKS ,
1529
- OPTKEY_BLOCK_DEVICES_AS_FILES ,
1530
- OPTKEY_BLOCK_DELETE ,
1531
- OPTKEY_BLOCK_RENAME
1533
+ OPTKEY_BLOCK_DEVICES_AS_FILES
1532
1534
};
1533
1535
1534
1536
static int process_option (void * data ,const char * arg ,int key ,
@@ -1600,6 +1602,13 @@ static int process_option(void *data, const char *arg, int key,
1600
1602
settings .xattr_policy = XATTR_READ_WRITE ;
1601
1603
return 0 ;
1602
1604
1605
+ case OPTKEY_DELETE_DENY :
1606
+ settings .delete_deny = 1 ;
1607
+ return 0 ;
1608
+ case OPTKEY_RENAME_DENY :
1609
+ settings .rename_deny = 1 ;
1610
+ return 0 ;
1611
+
1603
1612
case OPTKEY_REALISTIC_PERMISSIONS :
1604
1613
settings .realistic_permissions = 1 ;
1605
1614
return 0 ;
@@ -1625,14 +1634,6 @@ static int process_option(void *data, const char *arg, int key,
1625
1634
settings .block_devices_as_files = 1 ;
1626
1635
return 0 ;
1627
1636
1628
- case OPTKEY_BLOCK_DELETE :
1629
- settings .block_delete = 1 ;
1630
- return 0 ;
1631
-
1632
- case OPTKEY_BLOCK_RENAME :
1633
- settings .block_rename = 1 ;
1634
- return 0 ;
1635
-
1636
1637
case OPTKEY_NONOPTION :
1637
1638
if (!settings .mntsrc ) {
1638
1639
settings .mntsrc = realpath (arg ,NULL );
@@ -1960,6 +1961,9 @@ int main(int argc, char *argv[])
1960
1961
OPT2 ("--xattr-ro" ,"xattr-ro" ,OPTKEY_XATTR_READ_ONLY ),
1961
1962
OPT2 ("--xattr-rw" ,"xattr-rw" ,OPTKEY_XATTR_READ_WRITE ),
1962
1963
1964
+ OPT2 ("--delete-deny" ,"delete-deny" ,OPTKEY_DELETE_DENY ),
1965
+ OPT2 ("--rename-deny" ,"rename-deny" ,OPTKEY_RENAME_DENY ),
1966
+
1963
1967
OPT2 ("--hide-hard-links" ,"hide-hard-links" ,OPTKEY_HIDE_HARD_LINKS ),
1964
1968
OPT2 ("--resolve-symlinks" ,"resolve-symlinks" ,OPTKEY_RESOLVE_SYMLINKS ),
1965
1969
OPT_OFFSET2 ("--resolved-symlink-deletion=%s" ,"resolved-symlink-deletion=%s" ,resolved_symlink_deletion ,-1 ),
@@ -1974,9 +1978,6 @@ int main(int argc, char *argv[])
1974
1978
OPT_OFFSET2 ("--uid-offset=%s" ,"uid-offset=%s" ,uid_offset ,0 ),
1975
1979
OPT_OFFSET2 ("--gid-offset=%s" ,"gid-offset=%s" ,gid_offset ,0 ),
1976
1980
1977
- OPT2 ("--block-delete" ,"block-delete" ,OPTKEY_BLOCK_DELETE ),
1978
- OPT2 ("--block-rename" ,"block-rename" ,OPTKEY_BLOCK_RENAME ),
1979
-
1980
1981
1981
1982
1982
1983
@@ -2010,6 +2011,8 @@ int main(int argc, char *argv[])
2010
2011
settings .chmod_allow_x = 0 ;
2011
2012
settings .chmod_permchain = permchain_create ();
2012
2013
settings .xattr_policy = XATTR_READ_WRITE ;
2014
+ settings .delete_deny = 0 ;
2015
+ settings .rename_deny = 0 ;
2013
2016
settings .mirrored_users_only = 0 ;
2014
2017
settings .mirrored_users = NULL ;
2015
2018
settings .num_mirrored_users = 0 ;
@@ -2025,9 +2028,6 @@ int main(int argc, char *argv[])
2025
2028
settings .enable_ioctl = 0 ;
2026
2029
settings .uid_offset = 0 ;
2027
2030
settings .gid_offset = 0 ;
2028
-
2029
- settings .block_delete = 0 ;
2030
- settings .block_rename = 0 ;
2031
2031
2032
2032
atexit (& atexit_func );
2033
2033