From: Szabolcs S. <sz...@us...> - 2008-02-16 15:21:56
|
Update of /cvsroot/ntfs-3g/ntfs-3g/src In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv15281/src Modified Files: ntfs-3g.c Log Message: explain unprivileged block device mount failure with external FUSE Index: ntfs-3g.c =================================================================== RCS file: /cvsroot/ntfs-3g/ntfs-3g/src/ntfs-3g.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -d -r1.103 -r1.104 --- ntfs-3g.c 16 Feb 2008 14:25:23 -0000 1.103 +++ ntfs-3g.c 16 Feb 2008 15:21:56 -0000 1.104 @@ -179,9 +179,16 @@ static int restore_privs(void) { return 0; } static const char *setuid_msg = -"Mount is denied because setuid and setgid root ntfs-3g is insecure with an\n" +"Mount is denied because setuid and setgid root ntfs-3g is insecure with the\n" "external FUSE library. Either remove the setuid/setgid bit from the binary\n" -"or rebuild NTFS-3G with integrated FUSE support.\n"; +"or rebuild NTFS-3G with integrated FUSE support and make it setuid root.\n" +"Please see more information at http://ntfs-3g.org/support.html#unprivileged\n"; + +static const char *unpriv_fuseblk_msg = +"Unprivileged user can not mount NTFS block devices using the external FUSE\n" +"library. Either mount the volume as root, or rebuild NTFS-3G with integrated\n" +"FUSE support and make it setuid root. Please see more information at\n" +"http://ntfs-3g.org/support.html#unprivileged\n"; #endif @@ -2247,8 +2254,10 @@ return NTFS_VOLUME_SYNTAX_ERROR; } - if (ntfs_fuse_init()) - return NTFS_VOLUME_OUT_OF_MEMORY; + if (ntfs_fuse_init()) { + err = NTFS_VOLUME_OUT_OF_MEMORY; + goto err2; + } parsed_options = parse_mount_options(opts.options); if (!parsed_options) { @@ -2281,6 +2290,12 @@ if (S_ISBLK(sbuf.st_mode) && (fstype != FSTYPE_FUSE)) ctx->blkdev = TRUE; +#ifndef FUSE_INTERNAL + if (getuid() && ctx->blkdev) { + ntfs_log_error("%s", unpriv_fuseblk_msg); + goto err2; + } +#endif err = ntfs_open(opts.device); if (err) goto err_out; @@ -2311,6 +2326,7 @@ fuse_destroy(fh); err_out: utils_mount_error(opts.device, opts.mnt_point, err); +err2: ntfs_close(); free(ctx); free(parsed_options); |