X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Ffloppy%2Fcreate_floppy_devices.c;h=3e73aa83c353f5b55494f60ac8574a5231e295d2;hb=1893cf588f3d428a35a46030deca4ea54be71320;hp=7b61ef05b18a935c5f8a9d2995066e7dd321f783;hpb=e5f76f66138d8ef50d04034dcd4d3272eb00b740;p=elogind.git diff --git a/extras/floppy/create_floppy_devices.c b/extras/floppy/create_floppy_devices.c index 7b61ef05b..3e73aa83c 100644 --- a/extras/floppy/create_floppy_devices.c +++ b/extras/floppy/create_floppy_devices.c @@ -24,8 +24,8 @@ #include #include -#include "../../udev.h" -#include "../../udev_selinux.h" +#include "../../udev/udev.h" +#include "../../udev/udev_selinux.h" static char *table[] = { "", "d360", "h1200", "u360", "u720", "h360", "h720", @@ -69,26 +69,21 @@ void log_message(int priority, const char *format, ...) int main(int argc, char **argv) { char *dev; + char *devname; char node[64]; int type = 0, i, fdnum, c; int major = 2, minor; uid_t uid = 0; gid_t gid = 0; - mode_t mode = 0; + mode_t mode = 0660; int create_nodes = 0; int print_nodes = 0; - int unlink_nodes = 0; int is_err = 0; while ((c = getopt(argc, argv, "cudm:U:G:M:t:")) != -1) { switch (c) { case 'c': create_nodes = 1; - unlink_nodes = 0; - break; - case 'u': - unlink_nodes = 1; - create_nodes = 0; break; case 'd': print_nodes = 1; @@ -129,12 +124,17 @@ int main(int argc, char **argv) } dev = argv[optind]; - if (dev[strlen(dev) - 3] != 'f' || dev[strlen(dev) -2 ] != 'd') { + devname = strrchr(dev, '/'); + if (devname != NULL) + devname = &devname[1]; + else + devname = dev; + if (strncmp(devname, "fd", 2) != 0) { fprintf(stderr,"Device '%s' is not a floppy device\n", dev); return 1; } - fdnum = strtol(dev + 2, NULL, 10); + fdnum = strtol(&devname[2], NULL, 10); if (fdnum < 0 || fdnum > 7) { fprintf(stderr,"Floppy device number %d out of range (0-7)\n", fdnum); return 1; @@ -155,6 +155,7 @@ int main(int argc, char **argv) if (type == 0) return 0; + udev_config_init(); selinux_init(); i = 0; @@ -165,10 +166,11 @@ int main(int argc, char **argv) printf("%s b %d %d %d\n", node, mode, major, minor); if (create_nodes) { unlink(node); - selinux_setfscreatecon(node, NULL, mode); + selinux_setfscreatecon(node, NULL, S_IFBLK | mode); mknod(node, S_IFBLK | mode, makedev(major,minor)); selinux_resetfscreatecon(); chown(node, uid, gid); + chmod(node, S_IFBLK | mode); } i++; }