X-Git-Url: http://git.tdb.fi/?p=pmount-gui.git;a=blobdiff_plain;f=main.c;h=609db229f90787cd076fa1d245b6c6d864ceb99b;hp=cd95cc943cc78cabd0142b2b881367847bda9567;hb=03333fb47e0bc27da1f74313618d4acf8ee10847;hpb=077926116bdc4f245a9f6b0542eba8dabe1ca01c diff --git a/main.c b/main.c index cd95cc9..609db22 100644 --- a/main.c +++ b/main.c @@ -211,6 +211,16 @@ char **get_mounted_devices(void) return get_mount_entries("/etc/mtab", NULL); } +int is_user_mountable(struct mntent *me) +{ + return hasmntopt(me, "user")!=NULL; +} + +char **get_fstab_devices(void) +{ + return get_mount_entries("/etc/fstab", &is_user_mountable); +} + int is_in_array(char **names, char *devname) { int i; @@ -298,11 +308,19 @@ int check_buses(char *devpath, char **buses) return 0; } -int can_mount(Property *props) +int can_mount(Property *props, char **allowed) { static char *removable_buses[] = { "usb", "firewire", 0 }; + char *devname; char *devpath; - int i; + char *bus; + + devname = get_property_value(props, "DEVNAME"); + if(is_in_array(allowed, devname)) + return 1; + + if(match_property_value(props, "ID_TYPE", "cd") && match_property_value(props, "ID_CDROM_MEDIA", "1")) + return 1; if(!match_property_value(props, "DEVTYPE", "partition")) return 0; @@ -311,9 +329,9 @@ int can_mount(Property *props) if(is_removable(devpath)) return 1; - for(i=0; removable_buses[i]; ++i) - if(match_property_value(props, "ID_BUS", removable_buses[i])) - return 1; + bus = get_property_value(props, "ID_BUS"); + if(is_in_array(removable_buses, bus)) + return 1; return check_buses(devpath, removable_buses); } @@ -400,10 +418,12 @@ Device *get_devices(void) Device *devices = NULL; int n_devices = 0; char **mounted = NULL; + char **fstab = NULL; int i; nodes = get_device_nodes("/dev/disk/by-id"); mounted = get_mounted_devices(); + fstab = get_fstab_devices(); for(i=0; nodes[i]; ++i) { @@ -425,7 +445,7 @@ Device *get_devices(void) printf(" %s = %s\n", props[j].name, props[j].value); } - if(can_mount(props)) + if(can_mount(props, fstab)) { char *devname; char *label;