mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 03:28:38 -05:00 
			
		
		
		
	fuse: add create_umask option
This commit is contained in:
		| @@ -34,6 +34,7 @@ struct fsp_fuse_core_opt_data | |||||||
|     int help, debug; |     int help, debug; | ||||||
|     HANDLE DebugLogHandle; |     HANDLE DebugLogHandle; | ||||||
|     int set_umask, umask, |     int set_umask, umask, | ||||||
|  |         set_create_umask, create_umask, | ||||||
|         set_uid, uid, |         set_uid, uid, | ||||||
|         set_gid, gid, |         set_gid, gid, | ||||||
|         set_attr_timeout, attr_timeout, |         set_attr_timeout, attr_timeout, | ||||||
| @@ -69,6 +70,8 @@ static struct fuse_opt fsp_fuse_core_opts[] = | |||||||
|     FUSE_OPT_KEY("noauto_cache", FUSE_OPT_KEY_DISCARD), |     FUSE_OPT_KEY("noauto_cache", FUSE_OPT_KEY_DISCARD), | ||||||
|     FSP_FUSE_CORE_OPT("umask=", set_umask, 1), |     FSP_FUSE_CORE_OPT("umask=", set_umask, 1), | ||||||
|     FSP_FUSE_CORE_OPT("umask=%o", umask, 0), |     FSP_FUSE_CORE_OPT("umask=%o", umask, 0), | ||||||
|  |     FSP_FUSE_CORE_OPT("create_umask=", set_create_umask, 1), | ||||||
|  |     FSP_FUSE_CORE_OPT("create_umask=%o", create_umask, 0), | ||||||
|     FSP_FUSE_CORE_OPT("uid=", set_uid, 1), |     FSP_FUSE_CORE_OPT("uid=", set_uid, 1), | ||||||
|     FSP_FUSE_CORE_OPT("uid=%d", uid, 0), |     FSP_FUSE_CORE_OPT("uid=%d", uid, 0), | ||||||
|     FSP_FUSE_CORE_OPT("gid=", set_gid, 1), |     FSP_FUSE_CORE_OPT("gid=", set_gid, 1), | ||||||
| @@ -472,6 +475,7 @@ static int fsp_fuse_core_opt_proc(void *opt_data0, const char *arg, int key, | |||||||
|         FspServiceLog(EVENTLOG_ERROR_TYPE, L"" |         FspServiceLog(EVENTLOG_ERROR_TYPE, L"" | ||||||
|             FSP_FUSE_LIBRARY_NAME " options:\n" |             FSP_FUSE_LIBRARY_NAME " options:\n" | ||||||
|             "    -o umask=MASK              set file permissions (octal)\n" |             "    -o umask=MASK              set file permissions (octal)\n" | ||||||
|  |             "    -o create_umask=MASK       set newly created file permissions (octal)\n" | ||||||
|             "    -o uid=N                   set file owner (-1 for mounting user id)\n" |             "    -o uid=N                   set file owner (-1 for mounting user id)\n" | ||||||
|             "    -o gid=N                   set file group (-1 for mounting user group)\n" |             "    -o gid=N                   set file group (-1 for mounting user group)\n" | ||||||
|             "    -o rellinks                interpret absolute symlinks as volume relative\n" |             "    -o rellinks                interpret absolute symlinks as volume relative\n" | ||||||
| @@ -628,6 +632,7 @@ FSP_FUSE_API struct fuse *fsp_fuse_new(struct fsp_fuse_env *env, | |||||||
|  |  | ||||||
|     f->env = env; |     f->env = env; | ||||||
|     f->set_umask = opt_data.set_umask; f->umask = opt_data.umask; |     f->set_umask = opt_data.set_umask; f->umask = opt_data.umask; | ||||||
|  |     f->set_create_umask = opt_data.set_create_umask; f->create_umask = opt_data.create_umask; | ||||||
|     f->set_uid = opt_data.set_uid; f->uid = opt_data.uid; |     f->set_uid = opt_data.set_uid; f->uid = opt_data.uid; | ||||||
|     f->set_gid = opt_data.set_gid; f->gid = opt_data.gid; |     f->set_gid = opt_data.set_gid; f->gid = opt_data.gid; | ||||||
|     f->rellinks = opt_data.rellinks; |     f->rellinks = opt_data.rellinks; | ||||||
|   | |||||||
| @@ -762,6 +762,8 @@ static NTSTATUS fsp_fuse_intf_Create(FSP_FILE_SYSTEM *FileSystem, | |||||||
|             goto exit; |             goto exit; | ||||||
|     } |     } | ||||||
|     Mode &= ~context->umask; |     Mode &= ~context->umask; | ||||||
|  |     if (f->set_create_umask) | ||||||
|  |         Mode = 0777 & ~f->create_umask; | ||||||
|  |  | ||||||
|     memset(&fi, 0, sizeof fi); |     memset(&fi, 0, sizeof fi); | ||||||
|     if ('C' == f->env->environment) /* Cygwin */ |     if ('C' == f->env->environment) /* Cygwin */ | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ struct fuse | |||||||
| { | { | ||||||
|     struct fsp_fuse_env *env; |     struct fsp_fuse_env *env; | ||||||
|     int set_umask, umask; |     int set_umask, umask; | ||||||
|  |     int set_create_umask, create_umask; | ||||||
|     int set_uid, uid; |     int set_uid, uid; | ||||||
|     int set_gid, gid; |     int set_gid, gid; | ||||||
|     int rellinks; |     int rellinks; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user