udev rules: Restore mode/group configuration

uaccess grants seat sessions access to the devices, but there might be
robot-like setups which need access as well. So, restore the mode/group
configuration and grant users in the `plugdev` group read/write
access. This does not conflict with uaccess.

Change-Id: Icf3e2582d7c4313b53a946880d1330079b1e0074
Signed-off-by: Felix Singer <felixsinger@posteo.net>
Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/320
Tested-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Nico Huber <nico.h@gmx.de>
diff --git a/util/50-flashprog.rules b/util/50-flashprog.rules
index 6077d29..b6dec34 100644
--- a/util/50-flashprog.rules
+++ b/util/50-flashprog.rules
@@ -22,87 +22,87 @@
 SUBSYSTEM!="usb|usb_device", GOTO="flashprog_rules_end"
 
 # Altera Blaster
-ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", TAG+="uaccess"
+ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Amontec JTAGkey(2)
 # http://www.amontec.com/jtagkey.shtml
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Buspirate
 # http://dangerousprototypes.com/2009/10/08/bus-pirate-raw-spi-mode/
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Dediprog SF100
 # http://www.dediprog.com/SPI-flash-in-circuit-programming/SF100
-ATTRS{idVendor}=="0483", ATTRS{idProduct}=="dada", TAG+="uaccess"
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="dada", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # DirtyJTAG dongle "Generic Jean THOMAS DirtyJTAG"
-ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c0ca", TAG+="uaccess"
+ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c0ca", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # DLP Design DLP-USB1232H
 # http://www.dlpdesign.com/usb/usb1232h.shtml
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # FIC OpenMoko Neo1973 Debug board (V2+)
 # http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v2
-ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", TAG+="uaccess"
+ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # FTDI FT4232H Mini-Module
 # http://www.ftdichip.com/Products/EvaluationKits/FT4232H_MiniModule.htm
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # FTDI FT232H Mini-Module
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # FTDI FT4222H Mini-Module
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601c", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601c", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # GOEPEL PicoTAP
 # http://www.goepel.com/jtagboundary-scan/hardware/picotap.html
-ATTRS{idVendor}=="096c", ATTRS{idProduct}=="1449", TAG+="uaccess"
+ATTRS{idVendor}=="096c", ATTRS{idProduct}=="1449", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Google servo debug board
 # https://www.chromium.org/chromium-os/servo
-ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5001", TAG+="uaccess"
-ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5002", TAG+="uaccess"
-ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5003", TAG+="uaccess"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5001", MODE="660", GROUP="plugdev", TAG+="uaccess"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5002", MODE="660", GROUP="plugdev", TAG+="uaccess"
+ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5003", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Kristech KT-LINK
 # https://kristech.pl/files/KT-LINK-UM-ENG.pdf
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bbe2", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bbe2", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Microchip Technology, Inc. PICkit2
-ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="0033", TAG+="uaccess"
+ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="0033", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Olimex ARM-USB-OCD
 # http://olimex.com/dev/arm-usb-ocd.html
-ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", TAG+="uaccess"
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Olimex ARM-USB-OCD-H
 # http://olimex.com/dev/arm-usb-ocd-h.html
-ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", TAG+="uaccess"
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Olimex ARM-USB-TINY
 # http://olimex.com/dev/arm-usb-tiny.html
-ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", TAG+="uaccess"
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Olimex ARM-USB-TINY-H
 # http://olimex.com/dev/arm-usb-tiny-h.html
-ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", TAG+="uaccess"
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA)
 # http://www.diygadget.com/tiao-usb-multi-protocol-adapter-jtag-spi-i2c-serial.html
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA) Lite
 # http://www.tiaowiki.com/w/TIAO_USB_Multi_Protocol_Adapter_Lite_User's_Manual
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", TAG+="uaccess"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Winchiphead (WCH) CH341a based programmer
-ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5512", TAG+="uaccess"
+ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5512", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 # Winchiphead (WCH) CH347T/F based programmers
-ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55db", TAG+="uaccess"
-ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55de", TAG+="uaccess"
+ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55db", MODE="660", GROUP="plugdev", TAG+="uaccess"
+ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55de", MODE="660", GROUP="plugdev", TAG+="uaccess"
 
 LABEL="flashprog_rules_end"