[LEDE-DEV] [PATCH mountd] filesystem mount options in uci config

John Crispin john at phrozen.org
Sun Jun 12 22:03:16 PDT 2016


Hi,

comment inline.

On 10/06/2016 11:18, olivier.hardouin at gmail.com wrote:
> Move (previously hardcoded) mount option to UCI to allow different configuration 
> like charset (utf-8 or iso) and filesystem driver (if alternative ones are used).
> The fs names are changed in lowercase to comply with UCI general naming.
> 
> Signed-off-by: Olivier Hardouin <olivier.hardouin at gmail.com>
> ---
>  mount.c | 69 ++++++++++++++++++++++++++---------------------------------------
>  1 file changed, 28 insertions(+), 41 deletions(-)
> 
> diff --git a/mount.c b/mount.c
> index 8892040..c8f7ea6 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -51,15 +51,15 @@ struct mount {
>  char *fs_names[] = {
>  	"",
>  	"",
> -	"MBR",
> -	"EXT2",
> -	"EXT3",
> -	"FAT",
> -	"HFSPLUS",
> +	"mbr",
> +	"ext2",
> +	"ext3",
> +	"fat",
> +	"hfsplus",
>  	"",
> -	"NTFS",
> +	"ntfs",
>  	"",
> -	"EXT4"
> +	"ext4"
>  };
>  
>  #define MAX_MOUNTED		32
> @@ -227,42 +227,29 @@ int mount_new(char *path, char *dev)
>  	pid = autofs_safe_fork();
>  	if(!pid)
>  	{
> -		if(mount->fs == EXFAT)
> +		if(mount->fs > MBR && mount->fs <= EXT4)
>  		{
> -			log_printf("mount -t exfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
> -			ret = system_printf("mount -t exfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
> -		}
> -		if(mount->fs == FAT)
> -		{
> -			log_printf("mount -t vfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
> -			ret = system_printf("mount -t vfat -o rw,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
> -		}
> -		if(mount->fs == EXT4)
> -		{
> -			log_printf("mount -t ext4 -o rw,defaults /dev/%s %s", mount->dev, tmp);
> -			ret = system_printf("mount -t ext4 -o rw,defaults /dev/%s %s", mount->dev, tmp);
> -		}
> -		if(mount->fs == EXT3)
> -		{
> -			log_printf("mount -t ext3 -o rw,defaults /dev/%s %s", mount->dev, tmp);
> -			ret = system_printf("mount -t ext3 -o rw,defaults /dev/%s %s", mount->dev, tmp);
> -		}
> -		if(mount->fs == EXT2)
> -		{
> -			log_printf("mount -t ext2 -o rw,defaults /dev/%s %s", mount->dev, tmp);
> -			ret = system_printf("mount -t ext2 -o rw,defaults /dev/%s %s", mount->dev, tmp);
> -		}
> -		if(mount->fs == HFSPLUS)
> -		{
> -			log_printf("mount -t hfsplus -o rw,defaults,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
> -			ret = system_printf("mount -t hfsplus -o rw,defaults,uid=1000,gid=1000 /dev/%s %s", mount->dev, tmp);
> -		}
> -		if(mount->fs == NTFS)
> -		{
> -			log_printf("ntfs-3g /dev/%s %s -o force", mount->dev, tmp);
> -			ret = system_printf("ntfs-3g /dev/%s %s -o force", mount->dev, tmp);
> +			struct uci_context *ctx;
> +			char *options, *fstype;
> +			ctx = ucix_init("mountd");
> +			options = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "options");
> +			fstype = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "fstype");

this might be NULL but is used below without checking for NULL. i am not
sure these even needs to be loaded from uci as it is the same as
fs_names[mount->fs].

could you look into this and then resend the patch ?

	John

> +			ucix_cleanup(ctx);
> +			if(!fstype)
> +			{
> +				log_printf("mounting /dev/%s failed, expecting 'fstype' uci parameter (kernel driver) for %s", mount->dev, fs_names[mount->fs]);
> +			} else {
> +				if(!options)
> +				{
> +					log_printf("mount -t %s /dev/%s %s", fstype, mount->dev, tmp);
> +					ret = system_printf("mount -t %s /dev/%s %s", fstype, mount->dev, tmp);
> +				} else {
> +					log_printf("mount -t %s -o %s /dev/%s %s", fstype, options, mount->dev, tmp);
> +					ret = system_printf("mount -t %s -o %s /dev/%s %s", fstype, options, mount->dev, tmp);
> +				}
> +			}
> +			exit(WEXITSTATUS(ret));
>  		}
> -		exit(WEXITSTATUS(ret));
>  	}
>  	pid = waitpid(pid, &ret, 0);
>  	ret = WEXITSTATUS(ret);
> 



More information about the Lede-dev mailing list