char *fs_names[] = {
"",
"",
- "MBR",
- "EXT2",
- "EXT3",
- "FAT",
- "HFSPLUS",
+ "mbr",
+ "ext2",
+ "ext3",
+ "fat",
+ "hfsplus",
"",
- "NTFS",
+ "ntfs",
"",
- "EXT4"
+ "exfat",
+ "ext4",
+ "hfsplusjournal"
};
#define MAX_MOUNTED 32
ucix_add_option(ctx, mountd, q->serial, "rev", q->rev);
snprintf(t, 64, "size%d", atoi(&q->dev[3]));
ucix_add_option(ctx, mountd, q->serial, t, q->size);
- if(q->fs > MBR && q->fs <= EXT4)
+ if(q->fs > MBR && q->fs <= LASTFS)
{
snprintf(t, 64, "fs%d", atoi(&q->dev[3]));
ucix_add_option(ctx, mountd, q->serial, t, fs_names[q->fs]);
{
struct mount *mount;
char tmp[64], tmp2[64];
- if(fs <= MBR || fs > EXT4)
+ if(fs <= MBR || fs > LASTFS)
return;
mount = malloc(sizeof(struct mount));
INIT_LIST_HEAD(&mount->list);
mount->mounted = 0;
mount->fs = fs;
list_add(&mount->list, &mounts);
- if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= EXT4))
+ if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= LASTFS))
{
log_printf("new mount : %s -> %s (%s)\n", name, dev, fs_names[mount->fs]);
snprintf(tmp, 64, "%s%s", uci_path, name);
snprintf(tmp2, 64, "/tmp/run/mountd/%s", dev);
symlink(tmp2, tmp);
mount_new("/tmp/run/mountd/", dev);
+ system_printf("ACTION=add DEVICE=%s NAME=%s /sbin/hotplug-call mount", dev, name);
}
}
pid = autofs_safe_fork();
if(!pid)
{
+ char *options, *fstype;
if(mount->fs == EXFAT)
{
- 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);
+ options = "rw,uid=1000,gid=1000";
+ fstype = "exfat";
}
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);
+ options = "rw,uid=1000,gid=1000";
+ fstype = "vfat";
}
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);
+ options = "rw,defaults";
+ fstype = "ext4";
}
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);
+ options = "rw,defaults";
+ fstype = "ext3";
}
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);
+ options = "rw,defaults";
+ fstype = "ext2";
}
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);
+ options = "rw,defaults,uid=1000,gid=1000";
+ fstype = "hfsplus";
+ }
+ if(mount->fs == HFSPLUSJOURNAL)
+ {
+ options = "ro,defaults,uid=1000,gid=1000";
+ fstype = "hfsplus";
}
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);
+ options = "force";
+ fstype = "ntfs-3g";
+ }
+ if(mount->fs > MBR && mount->fs <= LASTFS)
+ {
+ struct uci_context *ctx;
+ char *uci_options, *uci_fstype;
+ ctx = ucix_init("mountd");
+ if(fs_names[mount->fs])
+ {
+ uci_options = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "options");
+ uci_fstype = ucix_get_option(ctx, "mountd", fs_names[mount->fs], "fstype");
+ if(uci_options)
+ options = uci_options;
+ if(uci_fstype)
+ fstype = uci_fstype;
+ 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);
+ }
+ ucix_cleanup(ctx);
}
exit(WEXITSTATUS(ret));
}
char tmp[64];
snprintf(tmp, 64, "/sys/block/%s/", namelist[n]->d_name);
m = scandir(tmp, &namelist2, dir_filter2, dir_sort);
- while(m--)
+ if(m > 0)
{
- strncpy(&block[blk_cnt][0], namelist2[m]->d_name, MAX_BLOCK);
+ while(m--)
+ {
+ strncpy(&block[blk_cnt][0], namelist2[m]->d_name, MAX_BLOCK);
+ blk_cnt++;
+ free(namelist2[m]);
+ }
+ free(namelist2);
+ } else {
+ strncpy(&block[blk_cnt][0], namelist[n]->d_name, MAX_BLOCK);
blk_cnt++;
- free(namelist2[m]);
}
- free(namelist2);
}
free(namelist[n]);
}
log_printf("removing %s\n", q->dev);
snprintf(tmp, 64, "%s%s", uci_path, q->name);
unlink(tmp);
- system_printf("/etc/mountd/event remove %s %s", q->dev, q->name);
+ system_printf("ACTION=remove DEVICE=%s NAME=%s /sbin/hotplug-call mount", q->dev, q->name);
free(q);
mount_dump_uci_state();
system_printf("/etc/fonstated/ReloadSamba");