+ACTION!="add", GOTO="permissions_end"
+
+# workarounds needed to synchronize with sysfs
+# only needed for kernels < v2.6.18-rc1
+ENV{PHYSDEVPATH}!="?*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus"
+SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
+# only needed for kernels < 2.6.16
+SUBSYSTEM=="net", WAIT_FOR_SYSFS="address"
+# only needed for kernels < 2.6.17
+SUBSYSTEM=="net", ENV{DRIVER}=="?*", WAIT_FOR_SYSFS="device/driver"
+
+# devices needed to load the drivers providing them
+KERNEL=="tun", OPTIONS+="ignore_remove"
+KERNEL=="ppp", OPTIONS+="ignore_remove"
+KERNEL=="loop[0-9]*", OPTIONS+="ignore_remove"
+
# default permissions for block devices
-SUBSYSTEM="block", GROUP="disk"
-SUBSYSTEM="block", SYSFS{removable}="1", GROUP="floppy"
+SUBSYSTEM=="block", GROUP="disk"
+# the aacraid driver is broken and reports that disks removable (see #404927)
+SUBSYSTEM=="block", ATTRS{removable}=="1", \
+ DRIVERS!="aacraid", GROUP="floppy"
+# all block devices on these buses are "removable"
+SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="floppy"
# IDE devices
-BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", \
- PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom*", GROUP="cdrom"
-BUS="ide", KERNEL="ht[0-9]*", GROUP="tape"
-BUS="ide", KERNEL="nht[0-9]*", GROUP="tape"
+KERNEL=="hd[a-z]|pcd[0-9]*", DRIVERS=="ide-cdrom|pcd", \
+ IMPORT{program}="cdrom_id --export $tempnode"
+ENV{ID_CDROM}=="?*", GROUP="cdrom"
+KERNEL=="ht[0-9]*", GROUP="tape"
+KERNEL=="nht[0-9]*", GROUP="tape"
# SCSI devices
-BUS="scsi", SYSFS{type}="1", GROUP="tape"
-BUS="scsi", SYSFS{type}="5", GROUP="cdrom"
-BUS="scsi", SYSFS{type}="6", GROUP="scanner"
+KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
+SUBSYSTEMS=="scsi", ATTRS{type}=="1", GROUP="tape"
+SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="HP", GROUP="scanner"
+SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="Epson", GROUP="scanner"
+SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="EPSON", GROUP="scanner"
+SUBSYSTEMS=="scsi", ATTRS{type}=="4", GROUP="cdrom"
+SUBSYSTEMS=="scsi", ATTRS{type}=="5", GROUP="cdrom"
+SUBSYSTEMS=="scsi", ATTRS{type}=="6", GROUP="scanner"
+SUBSYSTEMS=="scsi", ATTRS{type}=="8", GROUP="tape"
# USB devices
-BUS="usb", KERNEL="legousbtower*", MODE="0666"
+KERNEL=="legousbtower*", MODE="0666"
+KERNEL=="lp[0-9]*", SUBSYSTEMS=="usb", GROUP="lp"
+
+# usbfs-like devices
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
+ MODE="0664"
+
+# iRiver music players
+SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="plugdev", \
+ ATTRS{idVendor}=="4102", ATTRS{idProduct}=="10[01][135789]"
# serial devices
-SUBSYSTEM="tty", GROUP="dialout"
-SUBSYSTEM="capi", GROUP="dialout"
+SUBSYSTEM=="tty", GROUP="dialout"
+SUBSYSTEM=="capi", GROUP="dialout"
+SUBSYSTEM=="slamr", GROUP="dialout"
+SUBSYSTEM=="zaptel", GROUP="dialout"
# vc devices (all members of the tty subsystem)
-KERNEL="ptmx", MODE="0666", GROUP="root"
-KERNEL="console", MODE="0600", GROUP="root"
-KERNEL="tty", MODE="0666", GROUP="root"
-KERNEL="tty[0-9]*", GROUP="root"
+KERNEL=="ptmx", MODE="0666", GROUP="root"
+KERNEL=="console", MODE="0600", GROUP="root"
+KERNEL=="tty", MODE="0666", GROUP="root"
+KERNEL=="tty[0-9]*", GROUP="root"
+KERNEL=="pty*", MODE="0666", GROUP="tty"
# video devices
-SUBSYSTEM="video4linux", GROUP="video"
-SUBSYSTEM="dvb", GROUP="video"
-SUBSYSTEM="graphics", GROUP="video"
-SUBSYSTEM="nvidia", GROUP="video"
-SUBSYSTEM="drm", GROUP="video"
+SUBSYSTEM=="video4linux", GROUP="video"
+SUBSYSTEM=="drm", GROUP="video"
+SUBSYSTEM=="dvb", GROUP="video"
+SUBSYSTEM=="em8300", GROUP="video"
+SUBSYSTEM=="graphics", GROUP="video"
+SUBSYSTEM=="nvidia", GROUP="video"
# misc devices
-KERNEL="random", MODE="0666"
-KERNEL="urandom", MODE="0444"
-KERNEL="mem", MODE="0640", GROUP="kmem"
-KERNEL="kmem", MODE="0640", GROUP="kmem"
-KERNEL="port", MODE="0640", GROUP="kmem"
-KERNEL="full", MODE="0666"
-KERNEL="null", MODE="0666"
-KERNEL="zero", MODE="0666"
-KERNEL="inotify", MODE="0666"
-KERNEL="sgi_fetchop", MODE="0666"
-KERNEL="sonypi", MODE="0666"
-KERNEL="agpgart", GROUP="video"
-KERNEL="nvram", GROUP="nvram"
-KERNEL="rtc", MODE="0660", GROUP="audio"
-
-KERNEL="cdemu[0-9]*", GROUP="cdrom"
-KERNEL="pktcdvd[0-9]*", GROUP="cdrom"
-KERNEL="pktcdvd", MODE="0644"
+KERNEL=="random", MODE="0666"
+KERNEL=="urandom", MODE="0666"
+KERNEL=="mem", MODE="0640", GROUP="kmem"
+KERNEL=="kmem", MODE="0640", GROUP="kmem"
+KERNEL=="port", MODE="0640", GROUP="kmem"
+KERNEL=="full", MODE="0666"
+KERNEL=="null", MODE="0666"
+KERNEL=="zero", MODE="0666"
+KERNEL=="inotify", MODE="0666"
+KERNEL=="sgi_fetchop", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="agpgart", GROUP="video"
+KERNEL=="nvram", GROUP="nvram"
+KERNEL=="rtc|rtc[0-9]*", GROUP="audio"
+KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
+KERNEL=="fuse", GROUP="fuse"
+KERNEL=="kqemu", MODE="0666"
+KERNEL=="kvm", GROUP="kvm"
+KERNEL=="tun", MODE="0666",
+
+KERNEL=="cdemu[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
+KERNEL=="pktcdvd", MODE="0644"
+
+KERNEL=="uverbs*", GROUP="rdma"
+KERNEL=="ucm*", GROUP="rdma"
+KERNEL=="rdma_ucm", GROUP="rdma"
# printers and parallel devices
-SUBSYSTEM="printer", GROUP="lp"
-SUBSYSTEM="ppdev", GROUP="lp"
-KERNEL="pt[0-9]*", GROUP="tape"
-KERNEL="pht[0-9]*", GROUP="tape"
+SUBSYSTEM=="printer", GROUP="lp"
+SUBSYSTEM=="ppdev", GROUP="lp"
+KERNEL=="irlpt*", GROUP="lp"
+KERNEL=="pt[0-9]*", GROUP="tape"
+KERNEL=="pht[0-9]*", GROUP="tape"
# sound devices
-SUBSYSTEM="sound", GROUP="audio"
+SUBSYSTEM=="sound", GROUP="audio"
+
+# ieee1394 devices
+KERNEL=="raw1394", GROUP="disk"
+KERNEL=="dv1394*", GROUP="video"
+KERNEL=="video1394*", GROUP="video"
# input devices
-KERNEL="event[0-9]*", PROGRAM="/etc/udev/scripts/inputdev.sh %k", \
- RESULT="inputdev", MODE="0664", GROUP="video"
-KERNEL="js[0-9]*", MODE="0664"
+KERNEL=="event[0-9]*", ATTRS{name}=="*dvb*|*DVB*|* IR *" \
+ MODE="0664", GROUP="video"
+KERNEL=="js[0-9]*", MODE="0664"
+KERNEL=="lirc[0-9]*", GROUP="video"
# AOE character devices
-SUBSYSTEM="aoe", MODE="0220", GROUP="disk"
-SUBSYSTEM="aoe", KERNEL="err", MODE="0440"
+SUBSYSTEM=="aoe", MODE="0220", GROUP="disk"
+SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
+
+LABEL="permissions_end"