mirror of
https://git.proxmox.com/git/systemd
synced 2025-06-02 04:31:01 +00:00
New upstream version 244.2
This commit is contained in:
parent
763f54adb3
commit
97e5042fa2
4
README
4
README
@ -174,7 +174,9 @@ REQUIREMENTS:
|
||||
dependencies:
|
||||
|
||||
util-linux >= v2.27.1 required
|
||||
dbus >= 1.11.0 (strictly speaking optional, but recommended)
|
||||
dbus >= 1.4.0 (strictly speaking optional, but recommended)
|
||||
NOTE: If using dbus < 1.9.18, you should override the default
|
||||
policy directory (--with-dbuspolicydir=/etc/dbus-1/system.d).
|
||||
dracut (optional)
|
||||
polkit (optional)
|
||||
|
||||
|
3
TODO
3
TODO
@ -218,7 +218,7 @@ Features:
|
||||
|
||||
* the a-posteriori stopping of units bound to units that disappeared logic
|
||||
should be reworked: there should be a queue of units, and we should only
|
||||
enqeue stop jobs from a defer event that processes queue instead of
|
||||
enqueue stop jobs from a defer event that processes queue instead of
|
||||
right-away when we find a unit that is bound to one that doesn't exist
|
||||
anymore. (similar to how the stop-unneeded queue has been reworked the same
|
||||
way)
|
||||
@ -1050,6 +1050,7 @@ Features:
|
||||
- introduce mix of BindTo and Requisite
|
||||
- add a concept of RemainAfterExit= to scope units
|
||||
- Allow multiple ExecStart= for all Type= settings, so that we can cover rescue.service nicely
|
||||
- add verification of [Install] section to systemd-analyze verify
|
||||
|
||||
* udev-link-config:
|
||||
- Make sure ID_PATH is always exported and complete for
|
||||
|
1538
hwdb.d/20-OUI.hwdb
1538
hwdb.d/20-OUI.hwdb
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
--- 20-acpi-vendor.hwdb.base 2019-11-29 14:29:51.816965218 +0100
|
||||
+++ 20-acpi-vendor.hwdb 2019-11-29 14:29:51.821964280 +0100
|
||||
--- 20-acpi-vendor.hwdb.base 2020-02-04 18:26:50.552863816 +0100
|
||||
+++ 20-acpi-vendor.hwdb 2020-02-04 18:26:50.569863967 +0100
|
||||
@@ -3,6 +3,8 @@
|
||||
# Data imported from:
|
||||
# https://uefi.org/uefi-pnp-export
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -57233,6 +57233,30 @@ usb:v2237*
|
||||
usb:v2237p4161*
|
||||
ID_MODEL_FROM_DATABASE=eReader White
|
||||
|
||||
usb:v224F*
|
||||
ID_VENDOR_FROM_DATABASE=APDM
|
||||
|
||||
usb:v224Fp0001*
|
||||
ID_MODEL_FROM_DATABASE=Access Point
|
||||
|
||||
usb:v224Fp0002*
|
||||
ID_MODEL_FROM_DATABASE=Docking Station
|
||||
|
||||
usb:v224Fp0004*
|
||||
ID_MODEL_FROM_DATABASE=V2 Opal ACM
|
||||
|
||||
usb:v224Fp0005*
|
||||
ID_MODEL_FROM_DATABASE=V2 Opal
|
||||
|
||||
usb:v224Fp0006*
|
||||
ID_MODEL_FROM_DATABASE=V2 Docking Station
|
||||
|
||||
usb:v224Fp0007*
|
||||
ID_MODEL_FROM_DATABASE=V2 Access Point ACM
|
||||
|
||||
usb:v224Fp0008*
|
||||
ID_MODEL_FROM_DATABASE=V2 Access Point
|
||||
|
||||
usb:v225D*
|
||||
ID_VENDOR_FROM_DATABASE=Morpho
|
||||
|
||||
|
@ -479,6 +479,13 @@ evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoideapadY700-14ISK*
|
||||
EVDEV_ABS_35=::27
|
||||
EVDEV_ABS_36=::29
|
||||
|
||||
# Lenovo Ideapad 310S-14ISK
|
||||
evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoideapad310S-14ISK*
|
||||
EVDEV_ABS_00=113:3960:37
|
||||
EVDEV_ABS_01=100:1959:27
|
||||
EVDEV_ABS_35=113:3960:37
|
||||
EVDEV_ABS_36=100:1959:27
|
||||
|
||||
# Lenovo Ideapad 500S-13ISK
|
||||
evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoideapad500S-13ISK*
|
||||
EVDEV_ABS_00=125:3955:37
|
||||
@ -514,6 +521,13 @@ evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoYoga500-14IBD*
|
||||
EVDEV_ABS_35=117:3952:36
|
||||
EVDEV_ABS_36=105:1960:26
|
||||
|
||||
# Lenovo Thinkpad T490
|
||||
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadT490:*
|
||||
EVDEV_ABS_00=::57
|
||||
EVDEV_ABS_01=::33
|
||||
EVDEV_ABS_35=::57
|
||||
EVDEV_ABS_36=::33
|
||||
|
||||
#########################################
|
||||
# Razer
|
||||
#########################################
|
||||
|
@ -207,6 +207,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAlienware*:pn*:pvr*
|
||||
KEYBOARD_KEY_c1=!prog2 #graphics amplifier, undock-button event
|
||||
KEYBOARD_KEY_c2=!power #graphics amplifier, surprise undock event
|
||||
|
||||
# Alienware M17xR3 laptops
|
||||
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAlienware*:pnM17xR3:*
|
||||
KEYBOARD_KEY_89=ejectcd
|
||||
|
||||
###########################################################
|
||||
# Asus
|
||||
###########################################################
|
||||
|
@ -82,10 +82,13 @@ sensor:modalias:acpi:SMO8500:*:dmi:*Acer*:pnOneS1002*
|
||||
|
||||
sensor:modalias:acpi:KIOX0009*:dmi:*:svnAcer:pnOneS1003:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*:svnAcer*:pnSwitchSW312-31:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*svn*Acer*:*pn*Spin*SP111-33*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
#########################################
|
||||
# Archos
|
||||
#########################################
|
||||
@ -102,20 +105,14 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT300CHI*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnTP201SA*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pn*E205SA*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LA*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LD*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
@ -128,6 +125,7 @@ sensor:modalias:acpi:KXJ2109*:dmi:*:svnASUSTeK*:pnME176C*
|
||||
sensor:modalias:acpi:SMO8500*:dmi:*svn*ASUSTeK*:*pn*TP300LJ*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:SMO8500*:dmi:*svn*ASUSTeK*:*pn*TP500LAB*
|
||||
sensor:modalias:acpi:SMO8500*:dmi:*svn*ASUSTeK*:*pn*TP500LB*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
@ -163,8 +161,12 @@ sensor:modalias:acpi:BMA250E*:dmi:bvnINSYDECorp.:bvrG1D_S165*:svnilife:pnS165:*
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnX1D3_C806N:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Chuwi Hi10 (CWI515)
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvr5.11:*:svnDefaultstring:pnDefaultstring:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Chuwi Hi10 (CWI1515)
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvrP02A_C106.60E:*:svnDefaultstring:pnDefaultstring:*
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvrP02A_C106.60E:*:svnDefaultstring:pnDefaultstring:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Chuwi Hi10 Pro
|
||||
@ -223,6 +225,10 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni8-L:*
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*:svnCube:pnI15-TC:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
# Cube iWork 11 Stylus
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svncube:pni8-T:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
#########################################
|
||||
# Cytrix (Mytrix)
|
||||
#########################################
|
||||
@ -429,27 +435,16 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnMEDION:pnAkoyaE2212TMD99720:*
|
||||
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
|
||||
|
||||
# Medion Akoya E2215T MD60198
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*svnMEDION:pnE2215TMD60198:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Medion Akoya E3216 MD60900
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION*:pnE3216*:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Medion Akoya E3221 MD61237
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE3221MD61237:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Medion Akoya E3222 MD62450
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION*:pnE3222*:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Medion Akoya E2292 MD63390
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE2292MD63390:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
# Medion Akoya E2293 MD61130
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE2293MD61130:*
|
||||
# Medion Akoya E2293 MD61144
|
||||
# Medion Akoya E3222 MD62450
|
||||
# and presumably all other Akoya Exxxx
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE*:*
|
||||
# Medion Akoya E3222 MD62450
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnMEDION*:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
#########################################
|
||||
@ -551,25 +546,11 @@ sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvrSCH12i.WJ210Z.Kt
|
||||
#########################################
|
||||
# Teclast
|
||||
#########################################
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnX80Pro:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
#Teclast X80 PLUS (H5C5)
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnDefaultstring:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnX98PlusII:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
# Teclast X98 Plus I (A5C6), generic DMI strings, match entire dmi modalias inc. bios-date
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.011:bd11/03/2015:svnTobefilledbyO.E.M.:pnTobefilledbyO.E.M.:pvrTobefilledbyO.E.M.:rvnAMICorporation:rnCherryTrailCR:rvrTobefilledbyO.E.M.:cvnToBeFilledByO.E.M.:ct3:cvrToBeFilledByO.E.M.:
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
# Teclast F5
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnTECLAST:pnF5:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
# Teclast F6 Pro
|
||||
# Teclast F6 Pro (2 sensors)
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnTECLAST:pnF6Pro:*
|
||||
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
|
||||
ACCEL_LOCATION=display
|
||||
@ -578,6 +559,34 @@ sensor:modalias:acpi:KIOX020A*:dmi:*:svnTECLAST:pnF6Pro:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
ACCEL_LOCATION=base
|
||||
|
||||
# Teclast X80 Plus (H5C5)
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnDefaultstring:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
# Teclast X80 Pro (E3E6)
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnX80Pro:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
# Teclast X89 (E7ED), "tPAD" is too generic also match on BIOS date
|
||||
sensor:modalias:acpi:SMO8500*:dmi:*bd12/19/2014:*:rvnTECLAST:rntPAD:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
# Teclast X98 Plus I (A5C6), generic DMI strings, match entire dmi modalias inc. bios-date
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.011:bd11/03/2015:svnTobefilledbyO.E.M.:pnTobefilledbyO.E.M.:pvrTobefilledbyO.E.M.:rvnAMICorporation:rnCherryTrailCR:rvrTobefilledbyO.E.M.:cvnToBeFilledByO.E.M.:ct3:cvrToBeFilledByO.E.M.:
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
# Teclast X98 Plus II
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnX98PlusII:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
#########################################
|
||||
# Thundersoft
|
||||
#########################################
|
||||
|
||||
# Thundersoft TST168 tablet, generic DMI strings, match entire dmi modalias inc. bios-date
|
||||
sensor:modalias:acpi:BMA250E*:dmi:bvnAmericanMegatrendsInc.:bvr5.6.5:bd04/15/2014:svnTobefilledbyO.E.M.:pnTobefilledbyO.E.M.:pvrTobefilledbyO.E.M.:rvnAMICorporation:rnAptioCRB:rvrTobefilledbyO.E.M.:cvnToBeFilledByO.E.M.:ct3:cvrToBeFilledByO.E.M.:
|
||||
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
|
||||
|
||||
#########################################
|
||||
# Trekstor
|
||||
#########################################
|
||||
@ -585,6 +594,7 @@ sensor:modalias:acpi:BMA250*:dmi:*:bvrTREK.G.WI71C.JGBMRBA*:*:svnInsyde:pnST7041
|
||||
sensor:modalias:acpi:BMA250*:dmi:*:bvrTREK.G.WI71C.JGBMRBA*:*:svnTrekStor:pnSurfTabwintron7.0ST70416-6:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTREKSTOR*:pnPrimetabS11B:*
|
||||
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTREKSTOR:pnPrimetabT13B:*
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*:svnTrekStor*:pnSurfTabtwin11.6:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
@ -449,7 +449,7 @@ mouse:usb:v046dp406a:name:Logitech MX Anywhere 2S:
|
||||
mouse:bluetooth:v046dpb01a:name:MX Anywhere 2S Mouse:
|
||||
MOUSE_WHEEL_CLICK_ANGLE=20
|
||||
|
||||
# Logitech MX Master
|
||||
# Logitech MX Master (via Logitech Unifying Receiver)
|
||||
# Horiz wheel has 14 stops, angle is rounded up
|
||||
mouse:usb:v046dp4060:name:Logitech MX Master:
|
||||
mouse:usb:v046dp4041:name:Logitech MX Master:
|
||||
@ -459,6 +459,15 @@ mouse:usb:v046dp4041:name:Logitech MX Master:
|
||||
MOUSE_WHEEL_CLICK_COUNT=24
|
||||
MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14
|
||||
|
||||
# Logitech MX Master (via Bluetooth)
|
||||
# Horiz wheel has 14 stops, angle is rounded up
|
||||
mouse:bluetooth:v046dpb012:name:MX Master Mouse:
|
||||
MOUSE_DPI=1000@2000
|
||||
MOUSE_WHEEL_CLICK_ANGLE=15
|
||||
MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL=26
|
||||
MOUSE_WHEEL_CLICK_COUNT=24
|
||||
MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14
|
||||
|
||||
# Logitech MX Master 2S (via Logitech Unifying Receiver)
|
||||
# Horiz wheel has 14 stops, angle is rounded up
|
||||
mouse:usb:v046dp4069:name:Logitech MX Master 2s:
|
||||
@ -471,12 +480,16 @@ mouse:usb:v046dp4069:name:Logitech MX Master 2s:
|
||||
# Logitech MX Master 2S (via Bluetooth)
|
||||
# Horiz wheel has 14 stops, angle is rounded up
|
||||
mouse:bluetooth:v046dpb019:name:MX Master 2S Mouse:
|
||||
MOUSE_DPI=2000@2000
|
||||
MOUSE_DPI=1000@2000
|
||||
MOUSE_WHEEL_CLICK_ANGLE=15
|
||||
MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL=26
|
||||
MOUSE_WHEEL_CLICK_COUNT=24
|
||||
MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14
|
||||
|
||||
# Logitech MX Ergo (via Bluetooth)
|
||||
mouse:bluetooth:v046dpb01d:name:MX Ergo Mouse:
|
||||
ID_INPUT_TRACKBALL=1
|
||||
|
||||
## Other ##
|
||||
|
||||
# Logitech M-BJ58 Optical Mouse
|
||||
@ -724,9 +737,9 @@ mouse:usb:v1038p1369:name:SteelSeries Sensei Raw Gaming Mouse:
|
||||
mouse:usb:v145fp01ac:name:HID-compliant Mouse Trust Gaming Mouse:
|
||||
MOUSE_DPI=*800@528 1200@537 1600@536 2400@521
|
||||
|
||||
##########################################
|
||||
# Zelotes
|
||||
##########################################
|
||||
##########################################
|
||||
# Zelotes
|
||||
##########################################
|
||||
|
||||
# Zelotes 5500 DPI 7 Button USB Wired Gaming Mouse
|
||||
mouse:usb:v1d57pad17:*
|
||||
|
2566
hwdb.d/ma-large.txt
2566
hwdb.d/ma-large.txt
File diff suppressed because it is too large
Load Diff
@ -3560,12 +3560,6 @@ E00000-EFFFFF (base 16) Nanjing Yining Intelligent Technology Co., Ltd.
|
||||
Nanjing Jiangsu 210019
|
||||
CN
|
||||
|
||||
B0-B3-53 (hex) Blake UK
|
||||
000000-0FFFFF (base 16) Blake UK
|
||||
177-187, Rutland Road
|
||||
Sheffield --select-- S3 9PT
|
||||
GB
|
||||
|
||||
B0-B3-53 (hex) Beijing Geekplus Technology Co.,Ltd.
|
||||
C00000-CFFFFF (base 16) Beijing Geekplus Technology Co.,Ltd.
|
||||
1st Floor, Building 1, Chaolai High-Tech industrial Part, Chaoyang District
|
||||
@ -3578,12 +3572,150 @@ D00000-DFFFFF (base 16) IPvideo Corporation
|
||||
Bay Shore NY 11706
|
||||
US
|
||||
|
||||
B0-B3-53 (hex) Blake UK
|
||||
000000-0FFFFF (base 16) Blake UK
|
||||
177-187, Rutland Road
|
||||
Sheffield --select-- S3 9PT
|
||||
GB
|
||||
|
||||
B0-B3-53 (hex) Zoox
|
||||
B00000-BFFFFF (base 16) Zoox
|
||||
1149 Chess Drive
|
||||
Foster City CA 94404
|
||||
US
|
||||
|
||||
14-AE-85 (hex) Qingdao iTechene Technologies Co., Ltd.
|
||||
200000-2FFFFF (base 16) Qingdao iTechene Technologies Co., Ltd.
|
||||
UnitA3-A4,Level8,Block A ,International Innovation Park,No.1Keyuanwei Rd.,Laoshan District
|
||||
Qingdao 266100
|
||||
CN
|
||||
|
||||
14-AE-85 (hex) Henfred Technology Co., Ltd.
|
||||
100000-1FFFFF (base 16) Henfred Technology Co., Ltd.
|
||||
3F.-7, No.77, Sec. 1, Xintai 5th Rd
|
||||
New Taipei City Xizhi Dist 221
|
||||
TW
|
||||
|
||||
14-AE-85 (hex) MTA Systems
|
||||
A00000-AFFFFF (base 16) MTA Systems
|
||||
Pemstraße 2
|
||||
Mauthausen 4310
|
||||
AT
|
||||
|
||||
64-62-66 (hex) MiiVii Dynamics Technology CO.,LTD
|
||||
000000-0FFFFF (base 16) MiiVii Dynamics Technology CO.,LTD
|
||||
1408-1415 Tower A BUGG Building,No.18 N. Taipingzhuang Rd,haidian District
|
||||
Beijing Beijing 100000
|
||||
CN
|
||||
|
||||
64-62-66 (hex) Annapurna labs
|
||||
100000-1FFFFF (base 16) Annapurna labs
|
||||
Matam Scientific Industries Center, Building 8.2
|
||||
Mail box 15123 Haifa 3508409
|
||||
IL
|
||||
|
||||
64-62-66 (hex) Bühler AG
|
||||
500000-5FFFFF (base 16) Bühler AG
|
||||
Gupfenstrasse 5
|
||||
Uzwil 9240
|
||||
CH
|
||||
|
||||
64-62-66 (hex) Shenzhen Jie Shi Lian Industrial Co., LTD
|
||||
E00000-EFFFFF (base 16) Shenzhen Jie Shi Lian Industrial Co., LTD
|
||||
6F,C Building,Jinao Industrial Park,Juling Rd,Guanlan Town,Longhua
|
||||
Shenzhen Guangdong 518000
|
||||
CN
|
||||
|
||||
64-62-66 (hex) Leontech Limited
|
||||
800000-8FFFFF (base 16) Leontech Limited
|
||||
1208 WorkingBerg Commercial Buildung, 41-47 Marble Road
|
||||
Hong Kong Hong Kong 00000
|
||||
HK
|
||||
|
||||
94-CC-04 (hex) Sam Nazarko Trading Ltd
|
||||
600000-6FFFFF (base 16) Sam Nazarko Trading Ltd
|
||||
18 Watermill Way
|
||||
London Surrey SW19 2RD
|
||||
GB
|
||||
|
||||
94-CC-04 (hex) Hanzhuo Information Technology(Shanghai) Ltd.
|
||||
D00000-DFFFFF (base 16) Hanzhuo Information Technology(Shanghai) Ltd.
|
||||
Room 2085, building 2, 622 Yingyuan middle Road, Jiading Strict
|
||||
Shanghai 201200
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) hyBee Inc.
|
||||
A00000-AFFFFF (base 16) hyBee Inc.
|
||||
#1003, Innovalley B, 253, Pangyo-ro, Bundang-gu
|
||||
Seongnam-si Gyeonggi-do 13486
|
||||
KR
|
||||
|
||||
94-05-BB (hex) iungo
|
||||
800000-8FFFFF (base 16) iungo
|
||||
Vrouwenlaan 62
|
||||
Zwolle Overijssel 8017 HS
|
||||
NL
|
||||
|
||||
94-CC-04 (hex) Nanjing Yacer Communication Technology Co. Ltd.
|
||||
200000-2FFFFF (base 16) Nanjing Yacer Communication Technology Co. Ltd.
|
||||
333 Taiping South Road Jinling Yujingyuan 19nd floor Unit K Qin Huai District
|
||||
nanjing jiangsu 210000
|
||||
CN
|
||||
|
||||
90-E2-FC (hex) Pars Ertebat Afzar Co.
|
||||
000000-0FFFFF (base 16) Pars Ertebat Afzar Co.
|
||||
1116 – Burlington Tower Business Bay
|
||||
Dubai 90072
|
||||
AE
|
||||
|
||||
94-05-BB (hex) Dongguan CXWE Technology Co.,Ltd.
|
||||
200000-2FFFFF (base 16) Dongguan CXWE Technology Co.,Ltd.
|
||||
Room 805, building 1, No. 16, Keji 4th Road, Songshanhu
|
||||
Dongguan Guangdong 523000
|
||||
CN
|
||||
|
||||
94-05-BB (hex) Zimmer GmbH
|
||||
900000-9FFFFF (base 16) Zimmer GmbH
|
||||
Im Salmenkopf 5
|
||||
Rheinau Baden-Württemberg 77866
|
||||
DE
|
||||
|
||||
94-05-BB (hex) Qingdao Maotran Electronics co., ltd
|
||||
000000-0FFFFF (base 16) Qingdao Maotran Electronics co., ltd
|
||||
Room2907, Building 2 of Minghui International, No.39 of Shiling Road, Laoshan District
|
||||
Qingdao Shandong 266000
|
||||
CN
|
||||
|
||||
94-05-BB (hex) LTE-X, Inc
|
||||
700000-7FFFFF (base 16) LTE-X, Inc
|
||||
2-2-20 Higashi-Shinagawa
|
||||
Shinagawa Tokyo 1400002
|
||||
JP
|
||||
|
||||
94-05-BB (hex) BAE Systems
|
||||
E00000-EFFFFF (base 16) BAE Systems
|
||||
21 continental boulevard
|
||||
Merrimack NH 03054
|
||||
US
|
||||
|
||||
F4-90-CB (hex) Cheetah Medical
|
||||
C00000-CFFFFF (base 16) Cheetah Medical
|
||||
2A Hashlosha st.
|
||||
Tel Aviv 6706055
|
||||
IL
|
||||
|
||||
F4-90-CB (hex) A-dec Inc.
|
||||
B00000-BFFFFF (base 16) A-dec Inc.
|
||||
2601 Crestview Drive
|
||||
Newberg OR 97132
|
||||
US
|
||||
|
||||
F4-90-CB (hex) TEQ SA
|
||||
700000-7FFFFF (base 16) TEQ SA
|
||||
Via al Municipio 16
|
||||
Barbengo Ticino 6917
|
||||
CH
|
||||
|
||||
4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD
|
||||
400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD
|
||||
Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
|
||||
@ -3866,12 +3998,6 @@ D0-C8-57 (hex) Mobicon
|
||||
Suwon-si Gyeonggi-do 16521
|
||||
KR
|
||||
|
||||
D0-C8-57 (hex) IFLYTEK CO.,LTD.
|
||||
D00000-DFFFFF (base 16) IFLYTEK CO.,LTD.
|
||||
National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
|
||||
Heifei An hui 230088
|
||||
CN
|
||||
|
||||
60-95-CE (hex) Synamedia
|
||||
C00000-CFFFFF (base 16) Synamedia
|
||||
Luipaardstraat 12
|
||||
@ -6971,6 +7097,84 @@ C00000-CFFFFF (base 16) Shenzhen zhong ju Fiber optical Co.Ltd
|
||||
Zhuhai Guangdong 519080
|
||||
CN
|
||||
|
||||
90-E2-FC (hex) Huddly AS
|
||||
900000-9FFFFF (base 16) Huddly AS
|
||||
Karenslyst Allé 51
|
||||
Oslo 0279
|
||||
NO
|
||||
|
||||
90-E2-FC (hex) Shenzhen Dingsheng Intelligent Technology Co., Ltd
|
||||
B00000-BFFFFF (base 16) Shenzhen Dingsheng Intelligent Technology Co., Ltd
|
||||
10/F Block C, Skyworth Building, Gaoxin South 1st Rd., Hi-Tech Park, Nanshan District
|
||||
Shenzhen Guangdong 518000
|
||||
CN
|
||||
|
||||
14-AE-85 (hex) Veo Technologies
|
||||
900000-9FFFFF (base 16) Veo Technologies
|
||||
Aldersrogade 6c, 4. sal
|
||||
København Denmark 2100
|
||||
DK
|
||||
|
||||
14-AE-85 (hex) SHENZHEN HONOR ELECTRONIC CO.,LTD
|
||||
700000-7FFFFF (base 16) SHENZHEN HONOR ELECTRONIC CO.,LTD
|
||||
No. A Building, Xinghui Industrial Park, Gushu No. 2Rd,
|
||||
SHEN ZHEN GUANG DONG 518000
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) Shenzhen Link technology Co.,Ltd
|
||||
300000-3FFFFF (base 16) Shenzhen Link technology Co.,Ltd
|
||||
901,9/F,Dahong High TechIndusryPark?NO.6-18,Xinhe Road,Xinqiao Community,Baoan District
|
||||
Shenzhen Guangdong 518000
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) SHENZHEN SANRAY TECHNOLOGY CO.,LTD
|
||||
500000-5FFFFF (base 16) SHENZHEN SANRAY TECHNOLOGY CO.,LTD
|
||||
1B08 2/F Folk Culture Industrial Park,Qunli Second Road, Baoan District
|
||||
Shenzhen GuangDong 518101
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) GOCOAX, INC
|
||||
100000-1FFFFF (base 16) GOCOAX, INC
|
||||
15902A Halliburton Rd #662
|
||||
Hacienda Heights CA 91745
|
||||
US
|
||||
|
||||
94-05-BB (hex) Chengdu Zhongheng Network Co.,Ltd.
|
||||
500000-5FFFFF (base 16) Chengdu Zhongheng Network Co.,Ltd.
|
||||
No.898 Baicao Road, Chengdu High-tech Zone (Western District)
|
||||
Chengdu Sichuan 611731
|
||||
CN
|
||||
|
||||
D0-C8-57 (hex) IFLYTEK CO.,LTD.
|
||||
D00000-DFFFFF (base 16) IFLYTEK CO.,LTD.
|
||||
National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
|
||||
Hefei An hui 230088
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) Shanxi Baixin Information Technology Co., Ltd.
|
||||
C00000-CFFFFF (base 16) Shanxi Baixin Information Technology Co., Ltd.
|
||||
Room 210-213, Room 215-217, Room 219-220, No.2, Yari Street, Taiyuan University Park, Shanxi Comprehensive Reform Demonstration Zone
|
||||
Taiyuan Shanxi 030032
|
||||
CN
|
||||
|
||||
94-05-BB (hex) ZIGPOS GmbH
|
||||
600000-6FFFFF (base 16) ZIGPOS GmbH
|
||||
Räcknitzhöhe 35a
|
||||
Dresden Saxony 01217
|
||||
DE
|
||||
|
||||
94-05-BB (hex) SolarEdge Technologies
|
||||
A00000-AFFFFF (base 16) SolarEdge Technologies
|
||||
1 Abba Eban St.
|
||||
Herzelia 46725
|
||||
IL
|
||||
|
||||
F4-90-CB (hex) Airbeam Wireless Technologies Inc.
|
||||
600000-6FFFFF (base 16) Airbeam Wireless Technologies Inc.
|
||||
#125, 21320 Gordon Way
|
||||
Richmond British Columbia V6W 1J8
|
||||
CA
|
||||
|
||||
20-85-93 (hex) UNILUMIN GROUP CO.,LTD
|
||||
300000-3FFFFF (base 16) UNILUMIN GROUP CO.,LTD
|
||||
No.112 Yongfu Rd.,BaoanDistrict,
|
||||
@ -10406,6 +10610,78 @@ A00000-AFFFFF (base 16) Ledger
|
||||
Paris 75002
|
||||
FR
|
||||
|
||||
14-AE-85 (hex) Trimble LEM
|
||||
800000-8FFFFF (base 16) Trimble LEM
|
||||
10368 Westmoor Dr
|
||||
Westminster CO 80021
|
||||
US
|
||||
|
||||
14-AE-85 (hex) Kayamatics Limited
|
||||
000000-0FFFFF (base 16) Kayamatics Limited
|
||||
Room 1209, Trend Centre, 29 Cheung Lee Street
|
||||
Chaiwan NA NA
|
||||
HK
|
||||
|
||||
64-62-66 (hex) Shenzhen C & D Electronics Co., Ltd.
|
||||
700000-7FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd.
|
||||
9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
|
||||
ShenZhen GuangDong 518000
|
||||
CN
|
||||
|
||||
64-62-66 (hex) Signal Hound
|
||||
B00000-BFFFFF (base 16) Signal Hound
|
||||
1502 SE Commerce Ave Suite 101
|
||||
Battle Ground WA 98604
|
||||
US
|
||||
|
||||
64-62-66 (hex) Chunghwa System Integration Co., Ltd.
|
||||
900000-9FFFFF (base 16) Chunghwa System Integration Co., Ltd.
|
||||
2F., No. 35, Aiguo E. Rd.,
|
||||
Taipei 106
|
||||
TW
|
||||
|
||||
64-62-66 (hex) Protectli
|
||||
200000-2FFFFF (base 16) Protectli
|
||||
1315 Hot Springs Way
|
||||
Vista CA 92081
|
||||
US
|
||||
|
||||
64-62-66 (hex) Redstone Systems, Inc.
|
||||
400000-4FFFFF (base 16) Redstone Systems, Inc.
|
||||
24 School Street, 2nd floor
|
||||
Boston 02108
|
||||
US
|
||||
|
||||
64-62-66 (hex) Kobol Innovations Pte. Ltd.
|
||||
D00000-DFFFFF (base 16) Kobol Innovations Pte. Ltd.
|
||||
101 Cecil Street, #26-01/07 Tong Eng Building
|
||||
Singapore 069533
|
||||
SG
|
||||
|
||||
94-05-BB (hex) AUSTAR HEARING SCIENCE AND TECHNILIGY(XIAMEN)CO.,LTD
|
||||
B00000-BFFFFF (base 16) AUSTAR HEARING SCIENCE AND TECHNILIGY(XIAMEN)CO.,LTD
|
||||
RM201,No.2Gaoqi South 12th Road,HuliDist
|
||||
XIamen Fujian 361006
|
||||
CN
|
||||
|
||||
94-05-BB (hex) LAO INDUSTRIA LTDA
|
||||
C00000-CFFFFF (base 16) LAO INDUSTRIA LTDA
|
||||
AV DR MAURO LINDENBERG MONTEIRO, 1003
|
||||
OSASCO SÃO PAULO 06278010
|
||||
BR
|
||||
|
||||
F4-90-CB (hex) Avilution
|
||||
500000-5FFFFF (base 16) Avilution
|
||||
103 Shoreline Dr
|
||||
Madison AL 35758
|
||||
US
|
||||
|
||||
F4-90-CB (hex) OmniNet
|
||||
400000-4FFFFF (base 16) OmniNet
|
||||
6410 Del Rio Rd
|
||||
Charlotte NC 28277
|
||||
US
|
||||
|
||||
4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd.
|
||||
600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd.
|
||||
22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
|
||||
@ -11186,12 +11462,6 @@ E00000-EFFFFF (base 16) NC-LINK Technology Co., Ltd.
|
||||
Shenzhen Guangdong 518101
|
||||
CN
|
||||
|
||||
7C-BC-84 (hex) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
D00000-DFFFFF (base 16) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
B-11 SECTOR-VII
|
||||
NOIDA UTTAR PRADESH 201301
|
||||
IN
|
||||
|
||||
7C-BC-84 (hex) Shanghai Yitu Technology Co. Ltd
|
||||
300000-3FFFFF (base 16) Shanghai Yitu Technology Co. Ltd
|
||||
23/F, Tower 1, No.523 Loushanguan Road, Changning District
|
||||
@ -13874,6 +14144,90 @@ D00000-DFFFFF (base 16) Beijing Lanxum Computer Technology CO.,LTD.
|
||||
Beijing Beijing 100192
|
||||
CN
|
||||
|
||||
90-E2-FC (hex) ShenZhen Temwey Innovation Technology Co.,Ltd.
|
||||
200000-2FFFFF (base 16) ShenZhen Temwey Innovation Technology Co.,Ltd.
|
||||
Room 1008, 10/F, Bld.B, Bantian International Centre, No. 5 South Huancheng Road, Bantian Street of Shenzhen Longgang District
|
||||
SHENZHEN GUANGDONG 518129
|
||||
CN
|
||||
|
||||
90-E2-FC (hex) Dongguan Kangyong electronics technology Co. Ltd
|
||||
400000-4FFFFF (base 16) Dongguan Kangyong electronics technology Co. Ltd
|
||||
No 9,Yincheng 1st Road, Xiabian Village, Chang’an Town
|
||||
Dongguan GuangDong 523877
|
||||
CN
|
||||
|
||||
90-E2-FC (hex) bitsensing Inc.
|
||||
800000-8FFFFF (base 16) bitsensing Inc.
|
||||
165, Yeoksam-ro,
|
||||
Gangnam-gu, Seoul, Republic of Korea 06247
|
||||
KR
|
||||
|
||||
90-E2-FC (hex) Stanley Security
|
||||
C00000-CFFFFF (base 16) Stanley Security
|
||||
8350 Sunlight Drive
|
||||
Fishers IN 46037
|
||||
US
|
||||
|
||||
14-AE-85 (hex) iSolution Technologies Co.,Ltd.
|
||||
D00000-DFFFFF (base 16) iSolution Technologies Co.,Ltd.
|
||||
5F,Bldg #6, Zhongguan Honghualing Industrial South Park
|
||||
Shenzhen Guangdong 518055
|
||||
CN
|
||||
|
||||
7C-BC-84 (hex) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
D00000-DFFFFF (base 16) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
B3, Bredon House, 321, Tettenhall Road, Tettenhall
|
||||
Wolverhampton West Midlands WV6 0JZ
|
||||
GB
|
||||
|
||||
64-62-66 (hex) FaceHeart Inc.
|
||||
300000-3FFFFF (base 16) FaceHeart Inc.
|
||||
Rm. 8, 19F., No.118, Ciyun Rd., East Dist.
|
||||
Hsinchu Taiwan 300
|
||||
TW
|
||||
|
||||
64-62-66 (hex) Sensoro Co., Ltd.
|
||||
A00000-AFFFFF (base 16) Sensoro Co., Ltd.
|
||||
7F D-Block, Lei Shing Hong Center, No. 8 Guangshun South Street, Chaoyang District,
|
||||
Beijing Beijing 100102
|
||||
CN
|
||||
|
||||
64-62-66 (hex) Pass & Seymour, Inc d/b/a Legrand
|
||||
600000-6FFFFF (base 16) Pass & Seymour, Inc d/b/a Legrand
|
||||
50 Boyd Ave
|
||||
Syracuse NY 13209
|
||||
US
|
||||
|
||||
94-CC-04 (hex) Shandong free optical technology co., ltd.
|
||||
B00000-BFFFFF (base 16) Shandong free optical technology co., ltd.
|
||||
195 East First Street, Industrial First Street, Economic Development Zone, Weifang, Weicheng District,
|
||||
Weifeng Shandong 216000
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) ENTEC Electric & Electronic Co., LTD.
|
||||
900000-9FFFFF (base 16) ENTEC Electric & Electronic Co., LTD.
|
||||
78-2 Buncheon-ri, Bongdam-eup
|
||||
Hwaseong-city Gyungki-do 445-894
|
||||
KR
|
||||
|
||||
94-CC-04 (hex) SynchronicIT BV
|
||||
E00000-EFFFFF (base 16) SynchronicIT BV
|
||||
Spoorstraat 155, room 413
|
||||
Gennep Nederland 6591 GT
|
||||
NL
|
||||
|
||||
F4-90-CB (hex) Simavita (Aust) Pty Ltd
|
||||
D00000-DFFFFF (base 16) Simavita (Aust) Pty Ltd
|
||||
Suite 2.02, L2, 54 Miller Street
|
||||
North Sydney NSW 2060
|
||||
AU
|
||||
|
||||
F4-90-CB (hex) Ricker Lyman Robotic
|
||||
300000-3FFFFF (base 16) Ricker Lyman Robotic
|
||||
319 Main Street
|
||||
Beacon NY 12508
|
||||
US
|
||||
|
||||
20-85-93 (hex) Great Lite International
|
||||
700000-7FFFFF (base 16) Great Lite International
|
||||
11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
|
||||
@ -16421,12 +16775,6 @@ B0-C5-CA (hex) LOWOTEC GmbH
|
||||
Oldenburg Niedersachsen 26129
|
||||
DE
|
||||
|
||||
DC-44-27 (hex) Tesla Motors, Inc
|
||||
100000-1FFFFF (base 16) Tesla Motors, Inc
|
||||
3500 Deer Creek Road
|
||||
Palo Alto CA 94304
|
||||
US
|
||||
|
||||
78-C2-C0 (hex) ShenZhen TuLing Robot CO.,LTD
|
||||
500000-5FFFFF (base 16) ShenZhen TuLing Robot CO.,LTD
|
||||
BLK 9, No 28, Langshan Road, Northern District of High Tech. Industry Park, Nanshan Dist., SZ., PRC.
|
||||
@ -17273,11 +17621,11 @@ B0-B3-53 (hex) Sprocomm Technologies CO.,LTD.
|
||||
shenzhen guangdong 518000
|
||||
CN
|
||||
|
||||
3C-FA-D3 (hex) Mirico
|
||||
E00000-EFFFFF (base 16) Mirico
|
||||
30 DongSan Rd 9th floor Mirico
|
||||
Ansan Gyunggi 15434
|
||||
KR
|
||||
B0-B3-53 (hex) VOXISCOM
|
||||
800000-8FFFFF (base 16) VOXISCOM
|
||||
Rue Jules Ferry
|
||||
PORNIC 44210
|
||||
FR
|
||||
|
||||
B0-B3-53 (hex) Innotas Elektronik GmbH
|
||||
400000-4FFFFF (base 16) Innotas Elektronik GmbH
|
||||
@ -17285,8 +17633,152 @@ B0-B3-53 (hex) Innotas Elektronik GmbH
|
||||
Zittau D-02763
|
||||
DE
|
||||
|
||||
B0-B3-53 (hex) VOXISCOM
|
||||
800000-8FFFFF (base 16) VOXISCOM
|
||||
Rue Jules Ferry
|
||||
PORNIC 44210
|
||||
FR
|
||||
3C-FA-D3 (hex) Mirico
|
||||
E00000-EFFFFF (base 16) Mirico
|
||||
30 DongSan Rd 9th floor Mirico
|
||||
Ansan Gyunggi 15434
|
||||
KR
|
||||
|
||||
90-E2-FC (hex) Power Engineering & Manufacturing, Inc.
|
||||
A00000-AFFFFF (base 16) Power Engineering & Manufacturing, Inc.
|
||||
1463 94th Lane NE
|
||||
Blaine MN 55449
|
||||
US
|
||||
|
||||
90-E2-FC (hex) Sindoh Techno Co., Ltd.
|
||||
600000-6FFFFF (base 16) Sindoh Techno Co., Ltd.
|
||||
Sindoh Bldg., 6, Hyoryeong-ro 61-gil, Seocho-gu
|
||||
Seoul 06643
|
||||
KR
|
||||
|
||||
90-E2-FC (hex) Shenzhen Hisource Technology Development CO.,Ltd.
|
||||
300000-3FFFFF (base 16) Shenzhen Hisource Technology Development CO.,Ltd.
|
||||
Dalang
|
||||
Shenzhen Guangdong 518109
|
||||
CN
|
||||
|
||||
90-E2-FC (hex) TOTALONE TECHNOLOGY CO., LTD.
|
||||
500000-5FFFFF (base 16) TOTALONE TECHNOLOGY CO., LTD.
|
||||
3F.-1, NO.18, LN. 48, XingShan RD.,
|
||||
Taipei Neihu dist 11469
|
||||
TW
|
||||
|
||||
90-E2-FC (hex) Yite technology
|
||||
100000-1FFFFF (base 16) Yite technology
|
||||
No. 56, Xiaobei Rd., North Dist
|
||||
tainan 70448
|
||||
TW
|
||||
|
||||
90-E2-FC (hex) DevCom spol. s r.o.
|
||||
E00000-EFFFFF (base 16) DevCom spol. s r.o.
|
||||
Božanovská 884
|
||||
Praha Select a State 19300
|
||||
CZ
|
||||
|
||||
14-AE-85 (hex) IO Industries Inc.
|
||||
C00000-CFFFFF (base 16) IO Industries Inc.
|
||||
15940 Robin's Hill Rd
|
||||
London Ontario N5V 0A4
|
||||
CA
|
||||
|
||||
14-AE-85 (hex) AZ-TECHNOLOGY SDN BHD
|
||||
500000-5FFFFF (base 16) AZ-TECHNOLOGY SDN BHD
|
||||
A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
|
||||
PETALING JAYA SELANGOR 47301
|
||||
MY
|
||||
|
||||
14-AE-85 (hex) CENTERVUE SPA
|
||||
400000-4FFFFF (base 16) CENTERVUE SPA
|
||||
VIA SAN MARCO 9/H
|
||||
PADOVA PADOVA 35129
|
||||
IT
|
||||
|
||||
90-E2-FC (hex) Fair Winds Digital srl
|
||||
700000-7FFFFF (base 16) Fair Winds Digital srl
|
||||
Via Italo Svevo 85
|
||||
Rome Italy 00137
|
||||
IT
|
||||
|
||||
14-AE-85 (hex) TMG TE GmbH
|
||||
600000-6FFFFF (base 16) TMG TE GmbH
|
||||
Zur Gießerei 10
|
||||
Karlsruhe 776227
|
||||
DE
|
||||
|
||||
14-AE-85 (hex) NTC SOFT
|
||||
B00000-BFFFFF (base 16) NTC SOFT
|
||||
B-805, Gwangmyeong SK Techno park, 60, Haan-ro,
|
||||
Gwangmyeong-si Gyeonggi-do 14322
|
||||
KR
|
||||
|
||||
14-AE-85 (hex) Sercomm Corporation.
|
||||
E00000-EFFFFF (base 16) Sercomm Corporation.
|
||||
3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
|
||||
Miao-Lih Hsuan 115
|
||||
TW
|
||||
|
||||
64-62-66 (hex) Jiangsu Aisida Electronic Co.,Ltd
|
||||
C00000-CFFFFF (base 16) Jiangsu Aisida Electronic Co.,Ltd
|
||||
Aisida Industrial Park,Lanling Road,Danyang Development Zone
|
||||
DanYang JiangSu 212300
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) Hangzhou Yongkong Technology Co., Ltd.
|
||||
000000-0FFFFF (base 16) Hangzhou Yongkong Technology Co., Ltd.
|
||||
Room 503, Building 12, Lefu Zhihui Garden, 28 Xiangyuan Road, Gongshu Distric
|
||||
Hangzhou Zhejiang 310000
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) Gowing Business And Contracting Wenzhou Co., LTD
|
||||
700000-7FFFFF (base 16) Gowing Business And Contracting Wenzhou Co., LTD
|
||||
Room 101, No.4 Liming Industrial District, Lucheng, Wenzhou, China
|
||||
Wenzhou 325000
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) CircuitWerkes, Inc.
|
||||
800000-8FFFFF (base 16) CircuitWerkes, Inc.
|
||||
2805 NW 6th St
|
||||
Gainesville FL 32609
|
||||
US
|
||||
|
||||
14-AE-85 (hex) IFLYTEK CO.,LTD.
|
||||
300000-3FFFFF (base 16) IFLYTEK CO.,LTD.
|
||||
National Intelligent Speech High-tech Industrialization Base, No. 666, Wangjiang Road West,
|
||||
Hefei An hui 230088
|
||||
CN
|
||||
|
||||
94-05-BB (hex) Shenzhen Baolijie Technology Co., Ltd.
|
||||
400000-4FFFFF (base 16) Shenzhen Baolijie Technology Co., Ltd.
|
||||
D2,No.47,Shasan Road,Sha jing Street,Baoan District
|
||||
Shenzhen Kowloon 518104
|
||||
CN
|
||||
|
||||
94-CC-04 (hex) ProConnections, Inc.
|
||||
400000-4FFFFF (base 16) ProConnections, Inc.
|
||||
30 Massachusetts, Ave, Suite 301
|
||||
North Andover MA 01845
|
||||
US
|
||||
|
||||
94-05-BB (hex) Neurik AG
|
||||
300000-3FFFFF (base 16) Neurik AG
|
||||
Im alten Riet 143
|
||||
Schaan SCHAAN 9494
|
||||
LI
|
||||
|
||||
94-05-BB (hex) Dongguan Kingtron Electronics Tech Co., Ltd
|
||||
100000-1FFFFF (base 16) Dongguan Kingtron Electronics Tech Co., Ltd
|
||||
No.3 Fumin North Rd,Shu'an Industrial Park, Humen Town
|
||||
Dongguan Guangdong China 523929
|
||||
CN
|
||||
|
||||
94-05-BB (hex) Sunthink S&T Development Co.,Ltd
|
||||
D00000-DFFFFF (base 16) Sunthink S&T Development Co.,Ltd
|
||||
A3-f1, xinghezhong Technology Green Valley, No.14, luolei Industrial Avenue, Shiyan street, Bao'an District
|
||||
Shenzhen 518100
|
||||
CN
|
||||
|
||||
DC-44-27 (hex) Tesla,Inc.
|
||||
100000-1FFFFF (base 16) Tesla,Inc.
|
||||
3500 Deer Creek Road
|
||||
Palo Alto CA 94304
|
||||
US
|
||||
|
@ -2927,12 +2927,6 @@ D3F000-D3FFFF (base 16) GLOBALCOM ENGINEERING SPA
|
||||
MORNAGO VA 21020
|
||||
IT
|
||||
|
||||
70-B3-D5 (hex) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
6BE000-6BEFFF (base 16) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
B-11 SECTOR-VII
|
||||
NOIDA UTTAR PRADESH 201301
|
||||
IN
|
||||
|
||||
70-B3-D5 (hex) Precitec Optronik GmbH
|
||||
0C5000-0C5FFF (base 16) Precitec Optronik GmbH
|
||||
Schleussnerstraße 54
|
||||
@ -4205,6 +4199,108 @@ EF1000-EF1FFF (base 16) Nanotok LLC
|
||||
Hong Kong Hong Kong 00000
|
||||
HK
|
||||
|
||||
70-B3-D5 (hex) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
6BE000-6BEFFF (base 16) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD
|
||||
B3, Bredon House, 321, Tettenhall Road, Tettenhall
|
||||
Wolverhampton West Midlands WV6 0JZ
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) Todd Digital Limited
|
||||
C9A000-C9AFFF (base 16) Todd Digital Limited
|
||||
Level 15, 95 Customhouse Quay
|
||||
Wellington 6011
|
||||
NZ
|
||||
|
||||
70-B3-D5 (hex) JENG IoT BV
|
||||
5AF000-5AFFFF (base 16) JENG IoT BV
|
||||
Steenbokstraat 33
|
||||
APELDOORN Gelderland 7324 AZ
|
||||
NL
|
||||
|
||||
70-B3-D5 (hex) TXMission Ltd.
|
||||
F47000-F47FFF (base 16) TXMission Ltd.
|
||||
CP House, Otterspool Way
|
||||
Watford Hertfordshire WD25 8HU
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) Technology Link Corporation
|
||||
B1B000-B1BFFF (base 16) Technology Link Corporation
|
||||
Shin-Yokohama Kohoku-ku
|
||||
yokohama kanagawa 222-0033
|
||||
JP
|
||||
|
||||
70-B3-D5 (hex) Tucsen Photonics Co., Ltd.
|
||||
8A7000-8A7FFF (base 16) Tucsen Photonics Co., Ltd.
|
||||
6F NO.1 building Caimao Zone, 756# Qi an Road, Gaishan Town, Cangshan Area, Fuzhou, Fujian, PR, CHINA.
|
||||
fuzhou 350000
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) sensorway
|
||||
C52000-C52FFF (base 16) sensorway
|
||||
A-339 samsong techno valley, 140 tongilro, deockyanggu
|
||||
goyangsi gyeonggido 10594
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) KDT Corp.
|
||||
E72000-E72FFF (base 16) KDT Corp.
|
||||
no1705-1, BLDG 3#, Lantian shixin plaza, keqiao zone
|
||||
shaoxing zhejiang 312030
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) Beijing Yourong Runda Rechnology Development Co.Ltd.
|
||||
980000-980FFF (base 16) Beijing Yourong Runda Rechnology Development Co.Ltd.
|
||||
Changping District Science and Technology Park Advanced Road 37
|
||||
Beijing 6219650
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) R.C. Systems Inc
|
||||
52F000-52FFFF (base 16) R.C. Systems Inc
|
||||
8621 hwy. 6
|
||||
hitchcock TX 77563
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Dalcnet srl
|
||||
1CF000-1CFFFF (base 16) Dalcnet srl
|
||||
Via Meucci 35
|
||||
Brendola Vicenza 36040
|
||||
IT
|
||||
|
||||
70-B3-D5 (hex) AUTOMATICA Y REGULACION S.A.
|
||||
EBF000-EBFFFF (base 16) AUTOMATICA Y REGULACION S.A.
|
||||
Condell 1735, Nunoa
|
||||
Santiago RM 7770331
|
||||
CL
|
||||
|
||||
70-B3-D5 (hex) Digital Solutions JSC
|
||||
D9F000-D9FFFF (base 16) Digital Solutions JSC
|
||||
room 4, office 1, 3rd floor, building 7, house 9a, 2nd Sinichkina Str.
|
||||
Moscow 111020
|
||||
RU
|
||||
|
||||
70-B3-D5 (hex) Oculii
|
||||
B96000-B96FFF (base 16) Oculii
|
||||
829 Space Dr
|
||||
Beavercreek OH 45434
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) XPS ELETRONICA LTDA
|
||||
4F3000-4F3FFF (base 16) XPS ELETRONICA LTDA
|
||||
AVENIDA JAÇANÃ, 470/474 - VILA NELSON
|
||||
SÃO PAULO SÃO PAULO 02273-001
|
||||
BR
|
||||
|
||||
70-B3-D5 (hex) Firecom, Inc.
|
||||
331000-331FFF (base 16) Firecom, Inc.
|
||||
3927 59th Street
|
||||
Woodside NY 11377
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) DOGA
|
||||
62A000-62AFFF (base 16) DOGA
|
||||
11 rue Lavoisier
|
||||
MAUREPAS 78310
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) EVCO SPA
|
||||
A80000-A80FFF (base 16) EVCO SPA
|
||||
VIA FELTRE N. 81
|
||||
@ -8507,6 +8603,84 @@ F80000-F80FFF (base 16) Guan Show Technologe Co., Ltd.
|
||||
BRUGES 33520
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) Newtec A/S
|
||||
18F000-18FFFF (base 16) Newtec A/S
|
||||
Stærmosegårdsvej 18
|
||||
Odense SV Region Syd 5230
|
||||
DK
|
||||
|
||||
70-B3-D5 (hex) AUDIO VISUAL DIGITAL SYSTEMS
|
||||
A7F000-A7FFFF (base 16) AUDIO VISUAL DIGITAL SYSTEMS
|
||||
PLOT NO.180 PHASE V SECTOR56, HSIIDC I.E KUNDLI SONEPAT
|
||||
SONEPAT HARYANA 131028
|
||||
IN
|
||||
|
||||
70-B3-D5 (hex) DEUTA-WERKE GmbH
|
||||
1BF000-1BFFFF (base 16) DEUTA-WERKE GmbH
|
||||
Paffrather Str. 140
|
||||
Bergisch Gladbach North Rhine-Westphalia 51465
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) DONG IL VISION Co., Ltd.
|
||||
038000-038FFF (base 16) DONG IL VISION Co., Ltd.
|
||||
#9 Ftrek tower, 11-25, Simindaero 327 beongil,Dongan-gu
|
||||
Anyangi-Si Gyeonggi-Do 14055
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) Cetitec GmbH
|
||||
B36000-B36FFF (base 16) Cetitec GmbH
|
||||
Mannheimer Strasse 17
|
||||
Pforzheim 75179
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) Kamacho Scale Co., Ltd.
|
||||
385000-385FFF (base 16) Kamacho Scale Co., Ltd.
|
||||
2246 Mure
|
||||
Takamatsu-shi Kagawa-ken 761-0196
|
||||
JP
|
||||
|
||||
70-B3-D5 (hex) Vessel Technology Ltd
|
||||
44D000-44DFFF (base 16) Vessel Technology Ltd
|
||||
Banchory Business Centre, Burn O'Bennie Road
|
||||
Banchory Aberdeenshire AB31 5ZU
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) Munters
|
||||
FA8000-FA8FFF (base 16) Munters
|
||||
Hasivim 18
|
||||
Pethch Tikva Israel 4959376
|
||||
IL
|
||||
|
||||
70-B3-D5 (hex) Visual Robotics
|
||||
0F4000-0F4FFF (base 16) Visual Robotics
|
||||
38 Irving Rd
|
||||
Eugene OR 97404
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) TangRen C&S CO., Ltd
|
||||
3FC000-3FCFFF (base 16) TangRen C&S CO., Ltd
|
||||
3a-5d, Tingwei Daxia, Tingwei Industrial Park, No. 6, Liufang Road, Bao'an District
|
||||
Shenzhen Guangdong 518052
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) TEX COMPUTER SRL
|
||||
6C2000-6C2FFF (base 16) TEX COMPUTER SRL
|
||||
VIA MERCADANTE 35
|
||||
CATTOLICA RIMINI 47841
|
||||
IT
|
||||
|
||||
70-B3-D5 (hex) LOTES TM OOO
|
||||
EA5000-EA5FFF (base 16) LOTES TM OOO
|
||||
Barklaya 22, str.1
|
||||
Moscow 121309
|
||||
RU
|
||||
|
||||
70-B3-D5 (hex) Yi An Electronics Co., Ltd
|
||||
F28000-F28FFF (base 16) Yi An Electronics Co., Ltd
|
||||
5F.-2, No. 81, Sec. 1, Xintai 5th Rd., Xizhi Dist
|
||||
New Taipei City 22101
|
||||
TW
|
||||
|
||||
70-B3-D5 (hex) System West dba ICS Electronics
|
||||
E06000-E06FFF (base 16) System West dba ICS Electronics
|
||||
7034 Commerce Circle Suite A
|
||||
@ -8939,12 +9113,6 @@ A7D000-A7DFFF (base 16) Prior Scientific Instruments Ltd
|
||||
Cambridge Cambridgeshire CB21 5ET
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) Taejin InforTech
|
||||
A75000-A75FFF (base 16) Taejin InforTech
|
||||
40, Imi-ro, A-411
|
||||
Uiwang-si Gyeonggi-do 16006
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) AUTOMATIZACION Y CONECTIVIDAD SA DE CV
|
||||
59B000-59BFFF (base 16) AUTOMATIZACION Y CONECTIVIDAD SA DE CV
|
||||
LA GARITA ANDADOR 6 DUPLEX 1 CASA 2
|
||||
@ -9281,12 +9449,6 @@ C05000-C05FFF (base 16) KST technology
|
||||
Songpa-gu Seoul 05636
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) Coheros Oy
|
||||
D2E000-D2EFFF (base 16) Coheros Oy
|
||||
Korkeakoulunkatu 1
|
||||
Tampere 33720
|
||||
FI
|
||||
|
||||
70-B3-D5 (hex) EA Elektroautomatik GmbH & Co. KG
|
||||
26C000-26CFFF (base 16) EA Elektroautomatik GmbH & Co. KG
|
||||
Helmholtzstraße 31-33
|
||||
@ -12722,6 +12884,12 @@ CFB000-CFBFFF (base 16) Screen Innovations
|
||||
Bingen WA 98605
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) German Power GmbH
|
||||
C31000-C31FFF (base 16) German Power GmbH
|
||||
Freiburger Strasse 7
|
||||
Pforzheim 75179
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) Lyse AS
|
||||
F23000-F23FFF (base 16) Lyse AS
|
||||
Breiflåtveien 18
|
||||
@ -12734,6 +12902,162 @@ F23000-F23FFF (base 16) Lyse AS
|
||||
Paris 75006
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) Hefei STAROT Technology Co.,Ltd
|
||||
4D3000-4D3FFF (base 16) Hefei STAROT Technology Co.,Ltd
|
||||
406, 4th Floor, Quality Control Building, Saipu Science Park, No. 6 Yunfei Road, High-tech Zone
|
||||
hefei anhui 230000
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) SysCom Automationstechnik GmbH
|
||||
117000-117FFF (base 16) SysCom Automationstechnik GmbH
|
||||
An der Lehmkaute 13
|
||||
Bad Marienberg Rheinland-Pfalz 56470
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) Walton Hi-Tech Industries Ltd.
|
||||
E5C000-E5CFFF (base 16) Walton Hi-Tech Industries Ltd.
|
||||
HOLDING NO. I-65/2, WARD NO-07
|
||||
CHANDRA, KALIAKOIR, GAZIPUR. 1750
|
||||
BD
|
||||
|
||||
70-B3-D5 (hex) Flextronics International Kft
|
||||
699000-699FFF (base 16) Flextronics International Kft
|
||||
38. Zrinyi Str.
|
||||
Zalaegerszeg Zala 8900
|
||||
HU
|
||||
|
||||
70-B3-D5 (hex) JFA Electronics Industry and Commerce EIRELI
|
||||
5F7000-5F7FFF (base 16) JFA Electronics Industry and Commerce EIRELI
|
||||
Rua Flor das Pedras, 175
|
||||
Belo Horizonte Minas Gerais 30810-000
|
||||
BR
|
||||
|
||||
70-B3-D5 (hex) Hubbell Power Systems
|
||||
858000-858FFF (base 16) Hubbell Power Systems
|
||||
353 Powerville Road
|
||||
Boonton Township NJ 07005
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) aquila biolabs GmbH
|
||||
7DB000-7DBFFF (base 16) aquila biolabs GmbH
|
||||
Arnold-Sommerfeld-Ring 2
|
||||
Baesweiler NRW 52499
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) Sicon srl
|
||||
C82000-C82FFF (base 16) Sicon srl
|
||||
Via Sila 1/3
|
||||
Isola Vicentina Vicenza 36033
|
||||
IT
|
||||
|
||||
70-B3-D5 (hex) LGE
|
||||
DAE000-DAEFFF (base 16) LGE
|
||||
10, Magokjungang 10-ro, Gangseo-gu
|
||||
Seoul 07796
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) Jonsa Australia Pty Ltd
|
||||
335000-335FFF (base 16) Jonsa Australia Pty Ltd
|
||||
Unit D2 3-29 Birnie Ave
|
||||
Lidcombe NSW 2141
|
||||
AU
|
||||
|
||||
70-B3-D5 (hex) GreenWake Technologies
|
||||
467000-467FFF (base 16) GreenWake Technologies
|
||||
56 boulevard Niels Bohr, CEI2
|
||||
Villeurbanne 69100
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) shenzhen suofeixiang technology Co.,Ltd
|
||||
EEB000-EEBFFF (base 16) shenzhen suofeixiang technology Co.,Ltd
|
||||
sales09@sfxhd.com
|
||||
shenzhen 518000
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) RCH Vietnam Limited Liability Company
|
||||
97D000-97DFFF (base 16) RCH Vietnam Limited Liability Company
|
||||
Workshop F.01B-2, Lot No. F.01B Long Hau
|
||||
Ho Chi Minh City Ho Chi Minh 70000
|
||||
VN
|
||||
|
||||
70-B3-D5 (hex) SNK, Inc.
|
||||
E12000-E12FFF (base 16) SNK, Inc.
|
||||
Rm 302 Inobiz park, 1646, Yuseong-daero, Yuseong-gu
|
||||
Daejeon 34054
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) SYLink Technologie
|
||||
466000-466FFF (base 16) SYLink Technologie
|
||||
18 rue de la conche
|
||||
Mirefleurs Auvergne 63730
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) silicom
|
||||
F64000-F64FFF (base 16) silicom
|
||||
14 Atir-Yeda St/
|
||||
Kfar-Sava Israel 44000
|
||||
IL
|
||||
|
||||
70-B3-D5 (hex) NSP Europe Ltd
|
||||
18A000-18AFFF (base 16) NSP Europe Ltd
|
||||
Unit 5, Devonshire Business Park
|
||||
Borehamwood Hert WD6 1NA
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) Kospel S.A.
|
||||
249000-249FFF (base 16) Kospel S.A.
|
||||
Olchowa 1
|
||||
Koszalin 75-136
|
||||
PL
|
||||
|
||||
70-B3-D5 (hex) Microchip Technology Germany II GmbH&Co.KG
|
||||
77F000-77FFFF (base 16) Microchip Technology Germany II GmbH&Co.KG
|
||||
Emmy-Noether-Straße 14
|
||||
Karlsruhe 76131
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) Trust Automation
|
||||
C98000-C98FFF (base 16) Trust Automation
|
||||
125 Venture Dr
|
||||
San Luis Obispo CA 93401
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) ARCLAN'SYSTEM
|
||||
25C000-25CFFF (base 16) ARCLAN'SYSTEM
|
||||
1140 rue Ampère - Actimart II - Lot 9
|
||||
AIX EN PROVENCE 13290
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) Taejin InfoTech
|
||||
A75000-A75FFF (base 16) Taejin InfoTech
|
||||
40, Imi-ro, A-411
|
||||
Uiwang-si Gyeonggi-do 16006
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) Coheros Oy
|
||||
D2E000-D2EFFF (base 16) Coheros Oy
|
||||
Tammukkakatu 6
|
||||
Nokia 37130
|
||||
FI
|
||||
|
||||
70-B3-D5 (hex) Gogo Business Aviation
|
||||
E24000-E24FFF (base 16) Gogo Business Aviation
|
||||
105 Edgeview Dr., Suite 300
|
||||
Broomfield CO 80021
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Smart Embedded Systems
|
||||
A09000-A09FFF (base 16) Smart Embedded Systems
|
||||
6701 Koll Center Parkway #250
|
||||
Pleasonton CA 94566
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Guan Show Technologe Co., Ltd.
|
||||
F6A000-F6AFFF (base 16) Guan Show Technologe Co., Ltd.
|
||||
No.127, Jianguo 1st Rd., Lingya Dist.
|
||||
Kaohsiung City 802
|
||||
TW
|
||||
|
||||
70-B3-D5 (hex) YUYAMA MFG Co.,Ltd
|
||||
BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd
|
||||
3-3-1
|
||||
@ -16859,12 +17183,6 @@ BB2000-BB2FFF (base 16) Mettler Toledo
|
||||
Lutz FL 33558
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) SFR
|
||||
B12000-B12FFF (base 16) SFR
|
||||
12 rue jean-philippe Rameau CS 80001
|
||||
La plaine saint denis FRANCE 93634
|
||||
FR
|
||||
|
||||
70-B3-D5 (hex) S.E.I. CO.,LTD.
|
||||
12D000-12DFFF (base 16) S.E.I. CO.,LTD.
|
||||
59 Nirayama Tada
|
||||
@ -16985,17 +17303,167 @@ BE0000-BE0FFF (base 16) Cognosos, Inc.
|
||||
Taoyuan 330
|
||||
TW
|
||||
|
||||
70-B3-D5 (hex) PolyTech A/S
|
||||
F4C000-F4CFFF (base 16) PolyTech A/S
|
||||
HI Park 445
|
||||
Herning Herning 7400
|
||||
DK
|
||||
|
||||
70-B3-D5 (hex) Zhuhai Lonl electric Co.,Ltd.
|
||||
EA9000-EA9FFF (base 16) Zhuhai Lonl electric Co.,Ltd.
|
||||
2nd floor, building B3, nanfang software park, xiangzhou district
|
||||
Zhuhai Guangdong 519000
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) PolyTech A/S
|
||||
F4C000-F4CFFF (base 16) PolyTech A/S
|
||||
HI Park 445
|
||||
Herning Herning 7400
|
||||
DK
|
||||
70-B3-D5 (hex) Shanghai Tiancheng Communication Technology Corporation
|
||||
1C3000-1C3FFF (base 16) Shanghai Tiancheng Communication Technology Corporation
|
||||
No.618,Guangxing Rd.,Songjiang
|
||||
shanghai 200090
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) SAMBO HITECH
|
||||
282000-282FFF (base 16) SAMBO HITECH
|
||||
469,Seokjung-ro,Namdong-Gu
|
||||
Incheon 21501
|
||||
KR
|
||||
|
||||
70-B3-D5 (hex) M.A.C. Solutions (UK) Ltd
|
||||
F9F000-F9FFFF (base 16) M.A.C. Solutions (UK) Ltd
|
||||
Units 6-7 Kingfisher Business Park, Arthur Street
|
||||
Redditch Worcestershire B98 8LG
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) ERA TOYS LIMITED
|
||||
193000-193FFF (base 16) ERA TOYS LIMITED
|
||||
Room 505, 5th Floor, Beverley Commercial Centre, 87-105 Chatham Road South
|
||||
Tsim Sha Tsui Kowloon 0000
|
||||
HK
|
||||
|
||||
70-B3-D5 (hex) T&M Media Pty Ltd
|
||||
B41000-B41FFF (base 16) T&M Media Pty Ltd
|
||||
6, 476 Gardeners Road
|
||||
Alexandria NSW 2015
|
||||
AU
|
||||
|
||||
70-B3-D5 (hex) A&T Corporation
|
||||
32E000-32EFFF (base 16) A&T Corporation
|
||||
2023-1
|
||||
Endo, Fujisawa, Kanagawa 252-0816
|
||||
JP
|
||||
|
||||
70-B3-D5 (hex) Scorpion Precision Industry (HK)CO. Ltd.
|
||||
02B000-02BFFF (base 16) Scorpion Precision Industry (HK)CO. Ltd.
|
||||
16th Floor, Excelsior Industrial Building,68-76 Sha Tsui Road,
|
||||
Tsuen Wan New Territories 999077
|
||||
HK
|
||||
|
||||
70-B3-D5 (hex) Shenzhen CAMERAY ELECTRONIC CO., LTD
|
||||
1E2000-1E2FFF (base 16) Shenzhen CAMERAY ELECTRONIC CO., LTD
|
||||
4-5FL, Building 1, Guanghui Science, and Technology Park; Minqing Road, Longhua Town
|
||||
shenzhen GD 518109
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) Vulcan Wireless Inc.
|
||||
E4D000-E4DFFF (base 16) Vulcan Wireless Inc.
|
||||
2218 Faraday Ave Suite 110
|
||||
Carlsbad CA 92008
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) MIVO Technology AB
|
||||
1D5000-1D5FFF (base 16) MIVO Technology AB
|
||||
Hornsbergsvägen 28
|
||||
Stockholm 11215
|
||||
SE
|
||||
|
||||
70-B3-D5 (hex) Cryptotronix LLC
|
||||
0DB000-0DBFFF (base 16) Cryptotronix LLC
|
||||
P.O. Box 273029
|
||||
Fort Collins CO 80525
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) TOMEI TSUSHIN KOGYO CO,.LTD
|
||||
FB1000-FB1FFF (base 16) TOMEI TSUSHIN KOGYO CO,.LTD
|
||||
100-3, Amaike Kodacho
|
||||
Inazawa Shi Aichi ken 4928274
|
||||
JP
|
||||
|
||||
70-B3-D5 (hex) RCH Vietnam Limited Liability Company
|
||||
C09000-C09FFF (base 16) RCH Vietnam Limited Liability Company
|
||||
Workshop F.01B-2, Lot No. F.01B Long Hau
|
||||
Ho Chi Minh City Ho Chi Minh 70000
|
||||
VN
|
||||
|
||||
70-B3-D5 (hex) Copper Labs, Inc.
|
||||
F69000-F69FFF (base 16) Copper Labs, Inc.
|
||||
3015 Sterling Circle #200
|
||||
Boulder CO 80301
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) DogWatch Inc
|
||||
1E7000-1E7FFF (base 16) DogWatch Inc
|
||||
10 Michigan Drive
|
||||
Natick 01760
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Grossenbacher Systeme AG
|
||||
B75000-B75FFF (base 16) Grossenbacher Systeme AG
|
||||
Spinnereistrasse 10
|
||||
St. Gallen 9008
|
||||
CH
|
||||
|
||||
70-B3-D5 (hex) ITsynergy Ltd
|
||||
D2A000-D2AFFF (base 16) ITsynergy Ltd
|
||||
9 Bonhill Street
|
||||
London EC2A 4DJ
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) SHENZHEN HUINENGYUAN Technology Co., Ltd
|
||||
A83000-A83FFF (base 16) SHENZHEN HUINENGYUAN Technology Co., Ltd
|
||||
Room 206, 3 Building, Hongwanchuangke Center, Gushu, Xixiang, Baoan District
|
||||
Shenzhen Guangdong 518126
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) Vars Technology
|
||||
C94000-C94FFF (base 16) Vars Technology
|
||||
Squires gate industrial estate Unit 14
|
||||
Blackpool lancashire FY4 3RN
|
||||
GB
|
||||
|
||||
70-B3-D5 (hex) Burk Technology
|
||||
641000-641FFF (base 16) Burk Technology
|
||||
7 Beaver Brook road
|
||||
Littleton MA 01460
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Inventeq B.V.
|
||||
529000-529FFF (base 16) Inventeq B.V.
|
||||
Ravenlaan 27
|
||||
Blaricum 1261WT
|
||||
NL
|
||||
|
||||
70-B3-D5 (hex) Vaunix Technology Corporation
|
||||
EE6000-EE6FFF (base 16) Vaunix Technology Corporation
|
||||
7 New Pasture Rd
|
||||
Newburyport MA 01950
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Portrait Displays, Inc.
|
||||
D77000-D77FFF (base 16) Portrait Displays, Inc.
|
||||
6663 OWENS DR
|
||||
PLEASANTON CA 94588
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) chargeBIG
|
||||
869000-869FFF (base 16) chargeBIG
|
||||
Pragstraße 26-46
|
||||
Stuttgart 70376
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) Tricom Research Inc.
|
||||
601000-601FFF (base 16) Tricom Research Inc.
|
||||
17791 Sky Park Circle Suite GHJ
|
||||
Irvine CA 92614
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) DISMUNTEL SAL
|
||||
92C000-92CFFF (base 16) DISMUNTEL SAL
|
||||
@ -21292,3 +21760,111 @@ F5D000-F5DFFF (base 16) Potter Electric Signal Co. LLC
|
||||
via Cupa Vicinale S.Aniello, 88
|
||||
Naples 80146
|
||||
IT
|
||||
|
||||
70-B3-D5 (hex) ITK Dr. Kassen GmbH
|
||||
58A000-58AFFF (base 16) ITK Dr. Kassen GmbH
|
||||
Beim Eberacker 3
|
||||
D-35633 Lahnau
|
||||
DE
|
||||
|
||||
70-B3-D5 (hex) RCH Vietnam Limited Liability Company
|
||||
88E000-88EFFF (base 16) RCH Vietnam Limited Liability Company
|
||||
Workshop F.01B-2, Lot No. F.01B Long Hau
|
||||
Ho Chi Minh City Ho Chi Minh 70000
|
||||
VN
|
||||
|
||||
70-B3-D5 (hex) Privafy, Inc
|
||||
A6A000-A6AFFF (base 16) Privafy, Inc
|
||||
2 Burlington Woods Dr. Suite 200
|
||||
Burlington MA 01803
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) Contec Americas Inc.
|
||||
5D2000-5D2FFF (base 16) Contec Americas Inc.
|
||||
3991 Sarno Rd
|
||||
Melbourne FL 32934
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) elements
|
||||
62D000-62DFFF (base 16) elements
|
||||
Townsgate Road Suite 200
|
||||
Westlake Village CA 91361
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) DAT Informatics Pvt Ltd
|
||||
244000-244FFF (base 16) DAT Informatics Pvt Ltd
|
||||
Plot No 109 HPSIDC Industria Estate Davni, Baddi
|
||||
Baddi HIMACHAL PRADESH 173205
|
||||
IN
|
||||
|
||||
70-B3-D5 (hex) Abbott Diagnostics Technologies AS
|
||||
6C6000-6C6FFF (base 16) Abbott Diagnostics Technologies AS
|
||||
P. O. Box 6863 Rodeløkka
|
||||
Oslo Oslo 0504
|
||||
NO
|
||||
|
||||
70-B3-D5 (hex) RCH Vietnam Limited Liability Company
|
||||
6BD000-6BDFFF (base 16) RCH Vietnam Limited Liability Company
|
||||
Workshop F.01B-2, Lot No. F.01B Long Hau
|
||||
Ho Chi Minh City Ho Chi Minh 70000
|
||||
VN
|
||||
|
||||
70-B3-D5 (hex) Gamber Johnson-LLC
|
||||
E34000-E34FFF (base 16) Gamber Johnson-LLC
|
||||
3001 Borham Ave
|
||||
Stevens Point WI 54481
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) YUYAMA MFG Co.,Ltd
|
||||
C2B000-C2BFFF (base 16) YUYAMA MFG Co.,Ltd
|
||||
3-3-1
|
||||
TOYONAKASHI OSAKA 561-0841
|
||||
JP
|
||||
|
||||
70-B3-D5 (hex) YUYAMA MFG Co.,Ltd
|
||||
1F2000-1F2FFF (base 16) YUYAMA MFG Co.,Ltd
|
||||
3-3-1
|
||||
TOYONAKASHI OSAKA 561-0841
|
||||
JP
|
||||
|
||||
70-B3-D5 (hex) QUALITTEQ LLC
|
||||
614000-614FFF (base 16) QUALITTEQ LLC
|
||||
16th Parkovaya 26/1
|
||||
Moscow 105484
|
||||
RU
|
||||
|
||||
70-B3-D5 (hex) Adcole Maryland Aerospace
|
||||
922000-922FFF (base 16) Adcole Maryland Aerospace
|
||||
669 Forest St
|
||||
Marlborough MA 01752
|
||||
US
|
||||
|
||||
70-B3-D5 (hex) eSMART Technologies SA
|
||||
979000-979FFF (base 16) eSMART Technologies SA
|
||||
Chemin de la Rueyre, 118
|
||||
Renens VD 1020
|
||||
CH
|
||||
|
||||
70-B3-D5 (hex) Axnes AS
|
||||
65F000-65FFFF (base 16) Axnes AS
|
||||
Terje Løvåsvei 1
|
||||
Grimstad 4879
|
||||
NO
|
||||
|
||||
70-B3-D5 (hex) Duplomatic MS spa
|
||||
DE1000-DE1FFF (base 16) Duplomatic MS spa
|
||||
Via Re Depaolini 24
|
||||
Parabiago Milan 20015
|
||||
IT
|
||||
|
||||
70-B3-D5 (hex) Nanjing Pingguang Electronic Technology Co., Ltd
|
||||
541000-541FFF (base 16) Nanjing Pingguang Electronic Technology Co., Ltd
|
||||
B30/B31 4th Floor, Building#11, Shengtai Road, JiangNing District
|
||||
NanJing 211100
|
||||
CN
|
||||
|
||||
70-B3-D5 (hex) thingdust AG
|
||||
3C1000-3C1FFF (base 16) thingdust AG
|
||||
Moosstrasse 7
|
||||
Lucerne Lucerne 6003
|
||||
CH
|
||||
|
@ -196,10 +196,11 @@ def check_one_mount_matrix(prop, value):
|
||||
def check_one_keycode(prop, value):
|
||||
if value != '!' and ecodes is not None:
|
||||
key = 'KEY_' + value.upper()
|
||||
if key not in ecodes:
|
||||
key = value.upper()
|
||||
if key not in ecodes:
|
||||
error('Keycode {} unknown', key)
|
||||
if not (key in ecodes or
|
||||
value.upper() in ecodes or
|
||||
# new keys added in kernel 5.5
|
||||
'KBD_LCD_MENU' in key):
|
||||
error('Keycode {} unknown', key)
|
||||
|
||||
def check_properties(groups):
|
||||
grammar = property_grammar()
|
||||
|
303
hwdb.d/pci.ids
303
hwdb.d/pci.ids
File diff suppressed because it is too large
Load Diff
@ -9,8 +9,8 @@
|
||||
# The latest version can be obtained from
|
||||
# http://www.linux-usb.org/usb.ids
|
||||
#
|
||||
# Version: 2019.11.05
|
||||
# Date: 2019-11-05 20:34:06
|
||||
# Version: 2020.01.09
|
||||
# Date: 2020-01-09 20:34:06
|
||||
#
|
||||
|
||||
# Vendors, devices and interfaces. Please keep sorted.
|
||||
@ -19098,6 +19098,14 @@
|
||||
6323 USB Electronic Scale
|
||||
2237 Kobo Inc.
|
||||
4161 eReader White
|
||||
224f APDM
|
||||
0001 Access Point
|
||||
0002 Docking Station
|
||||
0004 V2 Opal ACM
|
||||
0005 V2 Opal
|
||||
0006 V2 Docking Station
|
||||
0007 V2 Access Point ACM
|
||||
0008 V2 Access Point
|
||||
225d Morpho
|
||||
0001 FINGER VP Multimodal Biometric Sensor
|
||||
0008 CBM-E3 Fingerprint Sensor
|
||||
|
135
man/bootup.xml
135
man/bootup.xml
@ -92,49 +92,59 @@
|
||||
|
||||
<!-- note: do not use unicode ellipsis here, because docbook will replace that
|
||||
with three dots anyway, messing up alignment -->
|
||||
<programlisting>local-fs-pre.target
|
||||
|
|
||||
v
|
||||
(various mounts and (various swap (various cryptsetup
|
||||
fsck services...) devices...) devices...) (various low-level (various low-level
|
||||
| | | services: udevd, API VFS mounts:
|
||||
v v v tmpfiles, random mqueue, configfs,
|
||||
local-fs.target swap.target cryptsetup.target seed, sysctl, ...) debugfs, ...)
|
||||
| | | | |
|
||||
\__________________|_________________ | ___________________|____________________/
|
||||
\|/
|
||||
v
|
||||
sysinit.target
|
||||
|
|
||||
____________________________________/|\________________________________________
|
||||
/ | | | \
|
||||
| | | | |
|
||||
v v | v v
|
||||
(various (various | (various rescue.service
|
||||
timers...) paths...) | sockets...) |
|
||||
| | | | v
|
||||
v v | v <emphasis>rescue.target</emphasis>
|
||||
timers.target paths.target | sockets.target
|
||||
| | | |
|
||||
v \_________________ | ___________________/
|
||||
\|/
|
||||
v
|
||||
basic.target
|
||||
|
|
||||
____________________________________/| emergency.service
|
||||
/ | | |
|
||||
| | | v
|
||||
v v v <emphasis>emergency.target</emphasis>
|
||||
display- (various system (various system
|
||||
manager.service services services)
|
||||
| required for |
|
||||
| graphical UIs) v
|
||||
| | <emphasis>multi-user.target</emphasis>
|
||||
| | |
|
||||
\_________________ | _________________/
|
||||
\|/
|
||||
v
|
||||
<emphasis>graphical.target</emphasis></programlisting>
|
||||
<programlisting> cryptsetup-pre.target
|
||||
|
|
||||
(various low-level v
|
||||
API VFS mounts: (various cryptsetup devices...)
|
||||
mqueue, configfs, | |
|
||||
debugfs, ...) v |
|
||||
| cryptsetup.target |
|
||||
| (various swap | | remote-fs-pre.target
|
||||
| devices...) | | | |
|
||||
| | | | | v
|
||||
| v local-fs-pre.target | | | (network file systems)
|
||||
| swap.target | | v v |
|
||||
| | v | remote-cryptsetup.target |
|
||||
| | (various low-level (various mounts and | | |
|
||||
| | services: udevd, fsck services...) | | remote-fs.target
|
||||
| | tmpfiles, random | | | /
|
||||
| | seed, sysctl, ...) v | | /
|
||||
| | | local-fs.target | | /
|
||||
| | | | | | /
|
||||
\____|______|_______________ ______|___________/ | /
|
||||
\ / | /
|
||||
v | /
|
||||
sysinit.target | /
|
||||
| | /
|
||||
______________________/|\_____________________ | /
|
||||
/ | | | \ | /
|
||||
| | | | | | /
|
||||
v v | v | | /
|
||||
(various (various | (various | |/
|
||||
timers...) paths...) | sockets...) | |
|
||||
| | | | | |
|
||||
v v | v | |
|
||||
timers.target paths.target | sockets.target | |
|
||||
| | | | v |
|
||||
v \_______ | _____/ rescue.service |
|
||||
\|/ | |
|
||||
v v |
|
||||
basic.target <emphasis>rescue.target</emphasis> |
|
||||
| |
|
||||
________v____________________ |
|
||||
/ | \ |
|
||||
| | | |
|
||||
v v v |
|
||||
display- (various system (various system |
|
||||
manager.service services services) |
|
||||
| required for | |
|
||||
| graphical UIs) v v
|
||||
| | <emphasis>multi-user.target</emphasis>
|
||||
emergency.service | | |
|
||||
| \_____________ | _____________/
|
||||
v \|/
|
||||
<emphasis>emergency.target</emphasis> v
|
||||
<emphasis>graphical.target</emphasis></programlisting>
|
||||
|
||||
<para>Target units that are commonly used as boot targets are
|
||||
<emphasis>emphasized</emphasis>. These units are good choices as
|
||||
@ -150,6 +160,45 @@
|
||||
later in boot.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>User manager startup</title>
|
||||
|
||||
<para>The system manager starts the <filename>user@<replaceable>uid</replaceable>.service</filename> unit
|
||||
for each user, which launches a separate unprivileged instance of <command>systemd</command> for each
|
||||
user — the user manager. Similarly to the system manager, the user manager starts units which are pulled
|
||||
in by <filename>default.target</filename>. The following chart is a structural overview of the well-known
|
||||
user units. For non-graphical sessions, <filename>default.target</filename> is used. Whenever the user
|
||||
logs into a graphical session, the login manager will start the
|
||||
<filename>graphical-session.target</filename> target that is used to pull in units required for the
|
||||
grahpical session. A number of targets (shown on the right side) are started when specific hardware is
|
||||
available to the user.</para>
|
||||
|
||||
<programlisting>
|
||||
(various (various (various
|
||||
timers...) paths...) sockets...) (sound devices)
|
||||
| | | |
|
||||
v v v v
|
||||
timers.target paths.target sockets.target sound.target
|
||||
| | |
|
||||
\______________ _|_________________/ (bluetooth devices)
|
||||
\ / |
|
||||
V v
|
||||
basic.target bluetooth.target
|
||||
|
|
||||
__________/ \_______ (smartcard devices)
|
||||
/ \ |
|
||||
| | v
|
||||
| v smartcard.target
|
||||
v graphical-session-pre.target
|
||||
(various user services) | (printers)
|
||||
| v |
|
||||
| (services for the graphical sesion) v
|
||||
| | printer.target
|
||||
v v
|
||||
<emphasis>default.target</emphasis> graphical-session.target</programlisting>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Bootup in the Initial RAM Disk (initrd)</title>
|
||||
<para>The initial RAM disk implementation (initrd) can be set up
|
||||
|
@ -110,8 +110,11 @@
|
||||
<listitem><para>Controls whether to split up journal files per user, either <literal>uid</literal> or
|
||||
<literal>none</literal>. Split journal files are primarily useful for access control: on UNIX/Linux access
|
||||
control is managed per file, and the journal daemon will assign users read access to their journal files. If
|
||||
<literal>uid</literal>, all regular users will each get their own journal files, and system users will log to
|
||||
the system journal. If <literal>none</literal>, journal files are not split up by user and all messages are
|
||||
<literal>uid</literal>, all regular users (with UID outside the range of system users, dynamic service users,
|
||||
and the nobody user) will each get their own journal files, and system users will log to the system journal.
|
||||
See <ulink url="https://systemd.io/UIDS-GIDS">Users, Groups, UIDs and GIDs on systemd systems</ulink>
|
||||
for more details about UID ranges.
|
||||
If <literal>none</literal>, journal files are not split up by user and all messages are
|
||||
instead stored in the single system journal. In this mode unprivileged users generally do not have access to
|
||||
their own log data. Note that splitting up journal files by user is only available for journals stored
|
||||
persistently. If journals are stored on volatile storage (see <varname>Storage=</varname> above), only a single
|
||||
@ -317,7 +320,7 @@
|
||||
<term><varname>MaxLevelWall=</varname></term>
|
||||
|
||||
<listitem><para>Controls the maximum log level of messages
|
||||
that are stored on disk, forwarded to syslog, kmsg, the
|
||||
that are stored in the journal, forwarded to syslog, kmsg, the
|
||||
console or wall (if that is enabled, see above). As argument,
|
||||
takes one of
|
||||
<literal>emerg</literal>,
|
||||
@ -333,8 +336,8 @@
|
||||
are stored/forwarded, messages above are dropped. Defaults to
|
||||
<literal>debug</literal> for <varname>MaxLevelStore=</varname>
|
||||
and <varname>MaxLevelSyslog=</varname>, to ensure that the all
|
||||
messages are written to disk and forwarded to syslog. Defaults
|
||||
to
|
||||
messages are stored in the journal and forwarded to syslog.
|
||||
Defaults to
|
||||
<literal>notice</literal> for <varname>MaxLevelKMsg=</varname>,
|
||||
<literal>info</literal> for <varname>MaxLevelConsole=</varname>,
|
||||
and <literal>emerg</literal> for
|
||||
|
@ -203,7 +203,7 @@ multi-user.target reached after 47.820s in userspace
|
||||
jobs (and in particular not jobs that timed out).</para>
|
||||
|
||||
<example>
|
||||
<title><command>systemd-analyze time</command></title>
|
||||
<title><command>systemd-analyze critical-chain</command></title>
|
||||
|
||||
<programlisting>$ systemd-analyze critical-chain
|
||||
multi-user.target @47.820s
|
||||
|
@ -200,8 +200,11 @@ systemd-tmpfiles --create --prefix /var/log/journal</programlisting>
|
||||
writable. Adding a user to this group thus enables them to read
|
||||
the journal files.</para>
|
||||
|
||||
<para>By default, each logged in user will get their own set of
|
||||
journal files in <filename>/var/log/journal/</filename>. These
|
||||
<para>By default, each user, with a UID outside the range of system users,
|
||||
dynamic service users, and the nobody user, will get their own set of
|
||||
journal files in <filename>/var/log/journal/</filename>. See
|
||||
<ulink url="https://systemd.io/UIDS-GIDS">Users, Groups, UIDs and GIDs on systemd systems</ulink>
|
||||
for more details about UID ranges. These journal
|
||||
files will not be owned by the user, however, in order to avoid
|
||||
that the user can write to them directly. Instead, file system
|
||||
ACLs are used to ensure the user gets read access only.</para>
|
||||
|
@ -63,6 +63,7 @@
|
||||
<citerefentry project='man-pages'><refentrytitle>ext4</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
||||
btrfs (see
|
||||
<citerefentry project='man-pages'><refentrytitle>btrfs-man5</refentrytitle><manvolnum>5</manvolnum></citerefentry>),
|
||||
<citerefentry project='man-pages'><refentrytitle>xfs</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
||||
<!-- yes, that's what the man page is called. -->
|
||||
and dm-crypt partitions (see
|
||||
<citerefentry project='die-net'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>).
|
||||
|
@ -1902,7 +1902,8 @@ SystemCallErrorNumber=EPERM</programlisting>
|
||||
|
||||
<para>The files listed with this directive will be read shortly before the process is executed (more
|
||||
specifically, after all processes from a previous unit state terminated. This means you can generate these
|
||||
files in one unit state, and read it with this option in the next).</para>
|
||||
files in one unit state, and read it with this option in the next. The files are read from the file
|
||||
system of the service manager, before any file system changes like bind mounts take place).</para>
|
||||
|
||||
<para>Settings from these files override settings made with <varname>Environment=</varname>. If the same
|
||||
variable is set twice from these files, the files will be read in the order they are specified and the later
|
||||
|
@ -211,9 +211,9 @@
|
||||
<term><option>x-systemd.before=</option></term>
|
||||
<term><option>x-systemd.after=</option></term>
|
||||
|
||||
<listitem><para>Configures a <varname>Before=</varname>
|
||||
dependency or <varname>After=</varname> between the created
|
||||
mount unit and another systemd unit, such as a mount unit.
|
||||
<listitem><para>In the created mount unit, configures a
|
||||
<varname>Before=</varname> or <varname>After=</varname>
|
||||
dependency on another systemd unit, such as a mount unit.
|
||||
The argument should be a unit name or an absolute path
|
||||
to a mount point. This option may be specified more than once.
|
||||
This option is particularly useful for mount point declarations
|
||||
|
@ -94,8 +94,8 @@
|
||||
<varlistentry>
|
||||
<term><varname>ID_NET_NAME_ONBOARD=<replaceable>prefix</replaceable><constant>o</constant><replaceable>number</replaceable></varname></term>
|
||||
|
||||
<listitem><para>This name is set based on the ordering information given by the firmware for
|
||||
on-board devices. The name consists of the prefix, letter <constant>o</constant>, and a number
|
||||
<listitem><para>This name is set based on the numeric ordering information given by the firmware
|
||||
for on-board devices. The name consists of the prefix, letter <constant>o</constant>, and a number
|
||||
specified by the firmware. This is only available for PCI devices.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@ -103,8 +103,9 @@
|
||||
<varlistentry>
|
||||
<term><varname>ID_NET_LABEL_ONBOARD=<replaceable>prefix</replaceable> <replaceable>label</replaceable></varname></term>
|
||||
|
||||
<listitem><para>This property is set based on label given by the firmware for on-board devices. The
|
||||
name consists of the prefix concatenated with the label. This is only available for PCI devices.
|
||||
<listitem><para>This property is set based on textual label given by the firmware for on-board
|
||||
devices. The name consists of the prefix concatenated with the label. This is only available for
|
||||
PCI devices.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@ -121,15 +122,15 @@
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]</varname></term>
|
||||
<term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable><constant>v</constant><replaceable>slot</replaceable></varname></term>
|
||||
<term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>b</constant><replaceable>number</replaceable></varname></term>
|
||||
<term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>u</constant><replaceable>port</replaceable>…[<constant>c</constant><replaceable>config</replaceable>][<constant>i</constant><replaceable>interface</replaceable>]</varname></term>
|
||||
<term><varname>ID_NET_NAME_SLOT=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>v</constant><replaceable>slot</replaceable></varname></term>
|
||||
|
||||
<listitem><para>This property describes the slot position. Different schemes are used depending on
|
||||
the bus type, as described in the table below. In all cases, PCI slot information must be known. In
|
||||
case of USB, BCMA, and SR-VIO devices, the full name consists of the prefix, PCI slot identifier,
|
||||
and USB or BCMA or SR-VIO slot identifier. The first two parts are denoted as "…" in the table
|
||||
below.</para>
|
||||
the bus type, as described in the table below. In case of USB, BCMA, and SR-VIO devices, the full
|
||||
name consists of the prefix, PCI slot identifier, and USB or BCMA or SR-VIO slot identifier. The
|
||||
first two parts are denoted as "…" in the table below.</para>
|
||||
|
||||
<table>
|
||||
<title>Slot naming schemes</title>
|
||||
@ -148,6 +149,11 @@
|
||||
<entry>PCI slot number</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><replaceable>prefix</replaceable> <constant>v</constant><replaceable>slot</replaceable></entry>
|
||||
<entry>VIO slot number (IBM PowerVM)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>… <constant>b</constant><replaceable>number</replaceable></entry>
|
||||
<entry>Broadcom bus (BCMA) core number</entry>
|
||||
@ -177,11 +183,11 @@
|
||||
<para>For USB devices the full chain of port numbers of hubs is composed. If the name gets longer
|
||||
than the maximum number of 15 characters, the name is not exported. The usual USB configuration
|
||||
number 1 and interface number 0 values are suppressed.</para>
|
||||
</listitem>
|
||||
|
||||
<para>SR-IOV virtual devices are named based on the name of the parent interface, with a suffix of
|
||||
<constant>v</constant> and the virtual device number, with any leading zeros removed. The bus
|
||||
number is ignored. This device type is found in IBM PowerVMs.</para>
|
||||
number is ignored.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
|
@ -2109,7 +2109,7 @@ Endpoint=wireguard.example.com:51820</programlisting>
|
||||
|
||||
<example>
|
||||
<title>/etc/systemd/network/27-xfrm.netdev</title>
|
||||
<programlisting>[Xfrm]
|
||||
<programlisting>[NetDev]
|
||||
Name=xfrm0
|
||||
Kind=xfrm
|
||||
|
||||
|
@ -1004,12 +1004,10 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>PrefixRoute=</varname></term>
|
||||
<term><varname>AddPrefixRoute=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean. When adding or modifying an IPv6 address, the userspace
|
||||
application needs a way to suppress adding a prefix route. This is for example relevant
|
||||
together with IFA_F_MANAGERTEMPADDR, where userspace creates autoconf generated addresses,
|
||||
but depending on on-link, no route for the prefix should be added. Defaults to false.</para>
|
||||
<para>Takes a boolean. When true, the prefix route for the address is automatically added.
|
||||
Defaults to true.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
|
@ -467,10 +467,12 @@
|
||||
<programlisting>systemd-analyze --user unit-paths</programlisting>
|
||||
</para>
|
||||
|
||||
<para>Moreover, additional units might be loaded into systemd ("linked") from
|
||||
directories not on the unit load path. See the <command>link</command> command
|
||||
for
|
||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
|
||||
<para>Moreover, additional units might be loaded into systemd from
|
||||
directories not on the unit load path by creating a symlink pointing to a
|
||||
unit file in the directories. You can use <command>systemctl link</command>
|
||||
for this operation. See
|
||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
for its usage and precaution.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
@ -1545,7 +1547,7 @@
|
||||
|
||||
<para>Note: <varname>ConsistsOf=</varname>, <varname>BoundBy=</varname>,
|
||||
<varname>RequisiteOf=</varname>, <varname>ConflictedBy=</varname> are created
|
||||
implicitly along with their reverse and cannot be specified directly.</para>
|
||||
implicitly along with their reverses and cannot be specified directly.</para>
|
||||
|
||||
<para>Note: <varname>Triggers=</varname> is created implicitly between a socket,
|
||||
path unit, or an automount unit, and the unit they activate. By default a unit
|
||||
@ -1557,7 +1559,7 @@
|
||||
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
||||
and
|
||||
<citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||
for details. <varname>TriggersBy=</varname> is created implicitly on the
|
||||
for details. <varname>TriggeredBy=</varname> is created implicitly on the
|
||||
triggered unit.</para>
|
||||
|
||||
<para>Note: <varname>Following=</varname> is used to group device aliases and points to the
|
||||
|
@ -535,7 +535,7 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
|
||||
guaranteed to be resolvable during early boot. If this field references users/groups that only become
|
||||
resolveable during later boot (i.e. after NIS, LDAP or a similar networked directory service become
|
||||
available), execution of the operations declared by the line will likely fail. Also see <ulink
|
||||
url="https://systemd.io/UIDS-GIDS.html#notes-on-resolvability-of-user-and-group-names">Notes on
|
||||
url="https://systemd.io/UIDS-GIDS/#notes-on-resolvability-of-user-and-group-names">Notes on
|
||||
Resolvability of User and Group Names</ulink> for more information on requirements on system user/group
|
||||
definitions.</para>
|
||||
</refsect2>
|
||||
|
@ -3170,8 +3170,8 @@ if conf.get('ENABLE_EFI') == 1
|
||||
status += [
|
||||
'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
|
||||
'EFI CC @0@'.format(' '.join(efi_cc)),
|
||||
'EFI lib directory: @0@'.format(efi_libdir),
|
||||
'EFI lds directory: @0@'.format(efi_ldsdir),
|
||||
'EFI lds: @0@'.format(efi_lds),
|
||||
'EFI crt0: @0@'.format(efi_crt0),
|
||||
'EFI include directory: @0@'.format(efi_incdir)]
|
||||
endif
|
||||
endif
|
||||
|
@ -309,8 +309,6 @@ option('efi-ld', type : 'string',
|
||||
description : 'the linker to use for EFI modules')
|
||||
option('efi-libdir', type : 'string',
|
||||
description : 'path to the EFI lib directory')
|
||||
option('efi-ldsdir', type : 'string',
|
||||
description : 'path to the EFI lds directory')
|
||||
option('efi-includedir', type : 'string', value : '/usr/include/efi',
|
||||
description : 'path to the EFI header directory')
|
||||
option('tpm-pcrindex', type : 'integer', value : 8,
|
||||
|
@ -7,8 +7,9 @@
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# These ones should be enabled by default, even if distributions
|
||||
# generally follow a default-off policy.
|
||||
# Settings for systemd units distributed with systemd itself. Most of these
|
||||
# should be enabled by default, even if the distribution follows a general
|
||||
# default-off policy.
|
||||
|
||||
enable remote-fs.target
|
||||
enable remote-cryptsetup.target
|
||||
@ -34,3 +35,18 @@ disable syslog.socket
|
||||
disable systemd-journal-gatewayd.*
|
||||
disable systemd-journal-remote.*
|
||||
disable systemd-journal-upload.*
|
||||
|
||||
# Passive targets: always off by default, since they should only be pulled in
|
||||
# by dependent units.
|
||||
|
||||
disable cryptsetup-pre.target
|
||||
disable getty-pre.target
|
||||
disable local-fs-pre.target
|
||||
disable network.target
|
||||
disable network-pre.target
|
||||
disable nss-lookup.target
|
||||
disable nss-user-lookup.target
|
||||
disable remote-fs-pre.target
|
||||
disable rpcbind.target
|
||||
disable time-set.target
|
||||
disable time-sync.target
|
||||
|
@ -7,8 +7,15 @@
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# These ones should be enabled by default, even if distributions
|
||||
# generally follow a default-off policy.
|
||||
# Settings for systemd units distributed with systemd itself. These should be
|
||||
# enabled by default, even if the distribution follows a general default-off
|
||||
# policy.
|
||||
|
||||
enable systemd-tmpfiles-setup.service
|
||||
enable systemd-tmpfiles-clean.timer
|
||||
|
||||
# Passive targets: always off by default, since they should only be pulled in
|
||||
# by dependent units.
|
||||
|
||||
disable graphical-session-pre.target
|
||||
disable graphical-session.target
|
||||
|
@ -12,8 +12,22 @@ KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcac
|
||||
# ignore partitions that span the entire disk
|
||||
TEST=="whole_disk", GOTO="persistent_storage_end"
|
||||
|
||||
# for partitions import parent information
|
||||
ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
|
||||
# For partitions import parent disk ID_* information, except ID_FS_*.
|
||||
#
|
||||
# This is particularly important on media where a filesystem superblock and
|
||||
# partition table are found on the same level, e.g. common Linux distro ISO
|
||||
# installation media.
|
||||
#
|
||||
# In the case where a partition device points to the same filesystem that
|
||||
# was detected on the parent disk, the ID_FS_* information is already
|
||||
# present on the partition devices as well as the parent, so no need to
|
||||
# propagate it. In the case where the partition device points to a different
|
||||
# filesystem, merging the parent ID_FS_ properties would lead to
|
||||
# inconsistencies, so we avoid doing so.
|
||||
ENV{DEVTYPE}=="partition", \
|
||||
IMPORT{parent}="ID_[!F]*", IMPORT{parent}="ID_", \
|
||||
IMPORT{parent}="ID_F[!S]*", IMPORT{parent}="ID_F", \
|
||||
IMPORT{parent}="ID_FS[!_]*", IMPORT{parent}="ID_FS"
|
||||
|
||||
# NVMe
|
||||
KERNEL=="nvme*[0-9]n*[0-9]", ATTR{wwid}=="?*", SYMLINK+="disk/by-id/nvme-$attr{wwid}"
|
||||
|
@ -306,7 +306,7 @@ static int assess_root_directory(
|
||||
assert(ret_description);
|
||||
|
||||
*ret_badness =
|
||||
empty_or_root(info->root_directory) ||
|
||||
empty_or_root(info->root_directory) &&
|
||||
empty_or_root(info->root_image);
|
||||
*ret_description = NULL;
|
||||
|
||||
@ -746,7 +746,7 @@ static const struct security_assessor security_assessor_table[] = {
|
||||
{
|
||||
.id = "ProtectControlGroups=",
|
||||
.description_good = "Service cannot modify the control group file system",
|
||||
.description_bad = "Service may modify to the control group file system",
|
||||
.description_bad = "Service may modify the control group file system",
|
||||
.url = "https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectControlGroups=",
|
||||
.weight = 1000,
|
||||
.range = 1,
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "strv.h"
|
||||
#include "time-util.h"
|
||||
#include "utf8.h"
|
||||
#include "virt.h"
|
||||
|
||||
#if ENABLE_EFI
|
||||
|
||||
@ -220,6 +221,41 @@ int efi_set_variable_string(sd_id128_t vendor, const char *name, const char *v)
|
||||
return efi_set_variable(vendor, name, u16, (char16_strlen(u16) + 1) * sizeof(char16_t));
|
||||
}
|
||||
|
||||
bool is_efi_boot(void) {
|
||||
if (detect_container() > 0)
|
||||
return false;
|
||||
|
||||
return access("/sys/firmware/efi/", F_OK) >= 0;
|
||||
}
|
||||
|
||||
static int read_flag(const char *varname) {
|
||||
_cleanup_free_ void *v = NULL;
|
||||
uint8_t b;
|
||||
size_t s;
|
||||
int r;
|
||||
|
||||
if (!is_efi_boot()) /* If this is not an EFI boot, assume the queried flags are zero */
|
||||
return 0;
|
||||
|
||||
r = efi_get_variable(EFI_VENDOR_GLOBAL, varname, NULL, &v, &s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (s != 1)
|
||||
return -EINVAL;
|
||||
|
||||
b = *(uint8_t *)v;
|
||||
return !!b;
|
||||
}
|
||||
|
||||
bool is_efi_secure_boot(void) {
|
||||
return read_flag("SecureBoot") > 0;
|
||||
}
|
||||
|
||||
bool is_efi_secure_boot_setup_mode(void) {
|
||||
return read_flag("SetupMode") > 0;
|
||||
}
|
||||
|
||||
int systemd_efi_options_variable(char **line) {
|
||||
const char *e;
|
||||
int r;
|
||||
|
@ -28,6 +28,10 @@ int efi_get_variable_string(sd_id128_t vendor, const char *name, char **p);
|
||||
int efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size);
|
||||
int efi_set_variable_string(sd_id128_t vendor, const char *name, const char *p);
|
||||
|
||||
bool is_efi_boot(void);
|
||||
bool is_efi_secure_boot(void);
|
||||
bool is_efi_secure_boot_setup_mode(void);
|
||||
|
||||
int systemd_efi_options_variable(char **line);
|
||||
|
||||
#else
|
||||
@ -52,6 +56,18 @@ static inline int efi_set_variable_string(sd_id128_t vendor, const char *name, c
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline bool is_efi_boot(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool is_efi_secure_boot(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool is_efi_secure_boot_setup_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int systemd_efi_options_variable(char **line) {
|
||||
return -ENODATA;
|
||||
}
|
||||
|
@ -39,6 +39,18 @@ int proc_cmdline(char **ret) {
|
||||
return read_one_line_file("/proc/cmdline", ret);
|
||||
}
|
||||
|
||||
/* In SecureBoot mode this is probably not what you want. As your cmdline is
|
||||
* cryptographically signed like when using Type #2 EFI Unified Kernel Images
|
||||
* (https://systemd.io/BOOT_LOADER_SPECIFICATION/) The user's intention is then
|
||||
* that the cmdline should not be modified. You want to make sure that the
|
||||
* system starts up as exactly specified in the signed artifact. */
|
||||
static int systemd_options_variable(char **line) {
|
||||
if (is_efi_secure_boot())
|
||||
return -ENODATA;
|
||||
|
||||
return systemd_efi_options_variable(line);
|
||||
}
|
||||
|
||||
static int proc_cmdline_extract_first(const char **p, char **ret_word, ProcCmdlineFlags flags) {
|
||||
const char *q = *p;
|
||||
int r;
|
||||
@ -119,7 +131,7 @@ int proc_cmdline_parse(proc_cmdline_parse_t parse_item, void *data, ProcCmdlineF
|
||||
|
||||
/* We parse the EFI variable first, because later settings have higher priority. */
|
||||
|
||||
r = systemd_efi_options_variable(&line);
|
||||
r = systemd_options_variable(&line);
|
||||
if (r < 0 && r != -ENODATA)
|
||||
log_debug_errno(r, "Failed to get SystemdOptions EFI variable, ignoring: %m");
|
||||
|
||||
@ -250,7 +262,7 @@ int proc_cmdline_get_key(const char *key, ProcCmdlineFlags flags, char **ret_val
|
||||
return r;
|
||||
|
||||
line = mfree(line);
|
||||
r = systemd_efi_options_variable(&line);
|
||||
r = systemd_options_variable(&line);
|
||||
if (r == -ENODATA)
|
||||
return false; /* Not found */
|
||||
if (r < 0)
|
||||
|
@ -1500,8 +1500,29 @@ int time_change_fd(void) {
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
if (timerfd_settime(fd, TFD_TIMER_ABSTIME|TFD_TIMER_CANCEL_ON_SET, &its, NULL) < 0)
|
||||
return -errno;
|
||||
if (timerfd_settime(fd, TFD_TIMER_ABSTIME|TFD_TIMER_CANCEL_ON_SET, &its, NULL) >= 0)
|
||||
return TAKE_FD(fd);
|
||||
|
||||
return TAKE_FD(fd);
|
||||
/* So apparently there are systems where time_t is 64bit, but the kernel actually doesn't support
|
||||
* 64bit time_t. In that case configuring a timer to TIME_T_MAX will fail with EOPNOTSUPP or a
|
||||
* similar error. If that's the case let's try with INT32_MAX instead, maybe that works. It's a bit
|
||||
* of a black magic thing though, but what can we do?
|
||||
*
|
||||
* We don't want this code on x86-64, hence let's conditionalize this for systems with 64bit time_t
|
||||
* but where "long" is shorter than 64bit, i.e. 32bit archs.
|
||||
*
|
||||
* See: https://github.com/systemd/systemd/issues/14362 */
|
||||
|
||||
#if SIZEOF_TIME_T == 8 && ULONG_MAX < UINT64_MAX
|
||||
if (ERRNO_IS_NOT_SUPPORTED(errno) || errno == EOVERFLOW) {
|
||||
static const struct itimerspec its32 = {
|
||||
.it_value.tv_sec = INT32_MAX,
|
||||
};
|
||||
|
||||
if (timerfd_settime(fd, TFD_TIMER_ABSTIME|TFD_TIMER_CANCEL_ON_SET, &its32, NULL) >= 0)
|
||||
return TAKE_FD(fd);
|
||||
}
|
||||
#endif
|
||||
|
||||
return -errno;
|
||||
}
|
||||
|
@ -404,10 +404,10 @@ static VOID print_status(Config *config, CHAR16 *loaded_image_path) {
|
||||
Print(L"random-seed-mode: off\n");
|
||||
break;
|
||||
case RANDOM_SEED_WITH_SYSTEM_TOKEN:
|
||||
Print(L"random-seed-node: with-system-token\n");
|
||||
Print(L"random-seed-mode: with-system-token\n");
|
||||
break;
|
||||
case RANDOM_SEED_ALWAYS:
|
||||
Print(L"random-seed-node: always\n");
|
||||
Print(L"random-seed-mode: always\n");
|
||||
break;
|
||||
default:
|
||||
;
|
||||
@ -1951,7 +1951,7 @@ static VOID config_entry_add_linux(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcmpa((CHAR8 *)"VERSION_ID", key) == 0) {
|
||||
if (strcmpa((CHAR8 *)"VERSION", key) == 0) {
|
||||
FreePool(os_version);
|
||||
os_version = stra_to_str(value);
|
||||
continue;
|
||||
|
@ -64,12 +64,19 @@ if conf.get('ENABLE_EFI') == 1 and get_option('gnu-efi') != 'false'
|
||||
|
||||
efi_libdir = get_option('efi-libdir')
|
||||
if efi_libdir == ''
|
||||
ret = run_command(efi_cc + ['-print-multi-os-directory'])
|
||||
if ret.returncode() == 0
|
||||
path = join_paths('/usr/lib', ret.stdout().strip())
|
||||
ret = run_command('realpath', '-e', path)
|
||||
if ret.returncode() == 0
|
||||
efi_libdir = ret.stdout().strip()
|
||||
# New location first introduced with gnu-efi 3.0.11
|
||||
efi_libdir = join_paths('/usr/lib/gnuefi', EFI_MACHINE_TYPE_NAME)
|
||||
cmd = run_command('test', '-e', efi_libdir)
|
||||
|
||||
if cmd.returncode() != 0
|
||||
# Fall back to the old approach
|
||||
cmd = run_command(efi_cc + ['-print-multi-os-directory'])
|
||||
if cmd.returncode() == 0
|
||||
path = join_paths('/usr/lib', cmd.stdout().strip())
|
||||
cmd = run_command('realpath', '-e', path)
|
||||
if cmd.returncode() == 0
|
||||
efi_libdir = cmd.stdout().strip()
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@ -95,20 +102,35 @@ if have_gnu_efi
|
||||
|
||||
objcopy = find_program('objcopy')
|
||||
|
||||
efi_ldsdir = get_option('efi-ldsdir')
|
||||
arch_lds = 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)
|
||||
if efi_ldsdir == ''
|
||||
efi_ldsdir = join_paths(efi_libdir, 'gnuefi')
|
||||
cmd = run_command('test', '-f', join_paths(efi_ldsdir, arch_lds))
|
||||
if cmd.returncode() != 0
|
||||
efi_ldsdir = efi_libdir
|
||||
cmd = run_command('test', '-f', join_paths(efi_ldsdir, arch_lds))
|
||||
if cmd.returncode() != 0
|
||||
error('Cannot find @0@'.format(arch_lds))
|
||||
efi_location_map = [
|
||||
# New locations first introduced with gnu-efi 3.0.11
|
||||
[join_paths(efi_libdir, 'efi.lds'),
|
||||
join_paths(efi_libdir, 'crt0.o')],
|
||||
# Older locations...
|
||||
[join_paths(efi_libdir, 'gnuefi', 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
|
||||
join_paths(efi_libdir, 'gnuefi', 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))],
|
||||
[join_paths(efi_libdir, 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
|
||||
join_paths(efi_libdir, 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))]]
|
||||
efi_lds = ''
|
||||
foreach location : efi_location_map
|
||||
if efi_lds == ''
|
||||
cmd = run_command('test', '-f', location[0])
|
||||
if cmd.returncode() == 0
|
||||
efi_lds = location[0]
|
||||
efi_crt0 = location[1]
|
||||
endif
|
||||
endif
|
||||
endforeach
|
||||
if efi_lds == ''
|
||||
if get_option('gnu-efi') == 'true'
|
||||
error('gnu-efi support requested, but cannot find efi.lds')
|
||||
else
|
||||
have_gnu_efi = false
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
if have_gnu_efi
|
||||
compile_args = ['-Wall',
|
||||
'-Wextra',
|
||||
'-std=gnu90',
|
||||
@ -145,14 +167,13 @@ if have_gnu_efi
|
||||
compile_args += ['-O2']
|
||||
endif
|
||||
|
||||
efi_ldflags = ['-T',
|
||||
join_paths(efi_ldsdir, arch_lds),
|
||||
efi_ldflags = ['-T', efi_lds,
|
||||
'-shared',
|
||||
'-Bsymbolic',
|
||||
'-nostdlib',
|
||||
'-znocombreloc',
|
||||
'-L', efi_libdir,
|
||||
join_paths(efi_ldsdir, 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))]
|
||||
efi_crt0]
|
||||
if efi_arch == 'aarch64' or efi_arch == 'arm'
|
||||
# Aarch64 and ARM32 don't have an EFI capable objcopy. Use 'binary'
|
||||
# instead, and add required symbols manually.
|
||||
@ -219,11 +240,9 @@ if have_gnu_efi
|
||||
set_variable(tuple[0].underscorify(), so)
|
||||
set_variable(tuple[0].underscorify() + '_stub', stub)
|
||||
endforeach
|
||||
endif
|
||||
|
||||
############################################################
|
||||
############################################################
|
||||
|
||||
if have_gnu_efi
|
||||
test_efi_disk_img = custom_target(
|
||||
'test-efi-disk.img',
|
||||
input : [systemd_boot_so, stub_so_stub],
|
||||
|
@ -55,7 +55,7 @@ static inline void FileHandleClosep(EFI_FILE_HANDLE *handle) {
|
||||
uefi_call_wrapper((*handle)->Close, 1, *handle);
|
||||
}
|
||||
|
||||
const EFI_GUID loader_guid;
|
||||
extern const EFI_GUID loader_guid;
|
||||
|
||||
#define UINTN_MAX (~(UINTN)0)
|
||||
#define INTN_MAX ((INTN)(UINTN_MAX>>1))
|
||||
|
@ -2334,29 +2334,39 @@ unsigned manager_dispatch_cgroup_realize_queue(Manager *m) {
|
||||
static void unit_add_siblings_to_cgroup_realize_queue(Unit *u) {
|
||||
Unit *slice;
|
||||
|
||||
/* This adds the siblings of the specified unit and the
|
||||
* siblings of all parent units to the cgroup queue. (But
|
||||
* neither the specified unit itself nor the parents.) */
|
||||
/* This adds the siblings of the specified unit and the siblings of all parent units to the cgroup
|
||||
* queue. (But neither the specified unit itself nor the parents.)
|
||||
*
|
||||
* Propagation of realization "side-ways" (i.e. towards siblings) is in relevant on cgroup-v1 where
|
||||
* scheduling become very weird if two units that own processes reside in the same slice, but one is
|
||||
* realized in the "cpu" hierarchy and once is not (for example because one has CPUWeight= set and
|
||||
* the other does not), because that means processes need to be scheduled against groups. Let's avoid
|
||||
* this asymmetry by always ensuring that units below a slice that are realized at all are hence
|
||||
* always realized in *all* their hierarchies, and it is sufficient for a unit's sibling to be
|
||||
* realized for a unit to be realized too. */
|
||||
|
||||
while ((slice = UNIT_DEREF(u->slice))) {
|
||||
Iterator i;
|
||||
Unit *m;
|
||||
void *v;
|
||||
|
||||
HASHMAP_FOREACH_KEY(v, m, u->dependencies[UNIT_BEFORE], i) {
|
||||
/* Skip units that have a dependency on the slice
|
||||
* but aren't actually in it. */
|
||||
HASHMAP_FOREACH_KEY(v, m, slice->dependencies[UNIT_BEFORE], i) {
|
||||
|
||||
/* Skip units that have a dependency on the slice but aren't actually in it. */
|
||||
if (UNIT_DEREF(m->slice) != slice)
|
||||
continue;
|
||||
|
||||
/* No point in doing cgroup application for units
|
||||
* without active processes. */
|
||||
/* No point in doing cgroup application for units without active processes. */
|
||||
if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(m)))
|
||||
continue;
|
||||
|
||||
/* If the unit doesn't need any new controllers
|
||||
* and has current ones realized, it doesn't need
|
||||
* any changes. */
|
||||
/* We only enqueue siblings if they were realized once at least, in the main
|
||||
* hierarchy. */
|
||||
if (!m->cgroup_realized)
|
||||
continue;
|
||||
|
||||
/* If the unit doesn't need any new controllers and has current ones realized, it
|
||||
* doesn't need any changes. */
|
||||
if (unit_has_mask_realized(m,
|
||||
unit_get_target_mask(m),
|
||||
unit_get_enable_mask(m)))
|
||||
@ -2652,6 +2662,7 @@ void unit_add_to_cgroup_empty_queue(Unit *u) {
|
||||
/* Let's verify that the cgroup is really empty */
|
||||
if (!u->cgroup_path)
|
||||
return;
|
||||
|
||||
r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path);
|
||||
if (r < 0) {
|
||||
log_unit_debug_errno(u, r, "Failed to determine whether cgroup %s is empty: %m", u->cgroup_path);
|
||||
|
@ -1902,6 +1902,12 @@ static int install_error(
|
||||
"Unit %s is transient or generated.", changes[i].path);
|
||||
goto found;
|
||||
|
||||
case -EUCLEAN:
|
||||
r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
|
||||
"\"%s\" is not a valid unit name.",
|
||||
changes[i].path);
|
||||
goto found;
|
||||
|
||||
case -ELOOP:
|
||||
r = sd_bus_error_setf(error, BUS_ERROR_UNIT_LINKED,
|
||||
"Refusing to operate on alias name or linked unit file: %s",
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bpf-firewall.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "condition.h"
|
||||
#include "dbus-job.h"
|
||||
@ -2012,6 +2013,21 @@ static int bus_unit_set_transient_property(
|
||||
if (d >= 0) {
|
||||
const char *other;
|
||||
|
||||
if (!IN_SET(d,
|
||||
UNIT_REQUIRES,
|
||||
UNIT_REQUISITE,
|
||||
UNIT_WANTS,
|
||||
UNIT_BINDS_TO,
|
||||
UNIT_PART_OF,
|
||||
UNIT_CONFLICTS,
|
||||
UNIT_BEFORE,
|
||||
UNIT_AFTER,
|
||||
UNIT_ON_FAILURE,
|
||||
UNIT_PROPAGATES_RELOAD_TO,
|
||||
UNIT_RELOAD_PROPAGATED_FROM,
|
||||
UNIT_JOINS_NAMESPACE_OF))
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Dependency type %s may not be created transiently.", unit_dependency_to_string(d));
|
||||
|
||||
r = sd_bus_message_enter_container(message, 'a', "s");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-error.h"
|
||||
#include "bus-internal.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "dbus-automount.h"
|
||||
#include "dbus-cgroup.h"
|
||||
#include "dbus-device.h"
|
||||
|
@ -4702,7 +4702,9 @@ int unit_load_fragment(Unit *u) {
|
||||
return r;
|
||||
|
||||
if (null_or_empty(&st)) {
|
||||
u->load_state = UNIT_MASKED;
|
||||
/* Unit file is masked */
|
||||
|
||||
u->load_state = u->perpetual ? UNIT_LOADED : UNIT_MASKED; /* don't allow perpetual units to ever be masked */
|
||||
u->fragment_mtime = 0;
|
||||
} else {
|
||||
u->load_state = UNIT_LOADED;
|
||||
|
@ -197,6 +197,8 @@ endforeach
|
||||
|
||||
install_data('org.freedesktop.systemd1.conf',
|
||||
install_dir : dbuspolicydir)
|
||||
install_data('org.freedesktop.systemd1.service',
|
||||
install_dir : dbussystemservicedir)
|
||||
|
||||
policy = configure_file(
|
||||
input : 'org.freedesktop.systemd1.policy.in',
|
||||
|
@ -537,10 +537,9 @@ static int mount_verify(Mount *m) {
|
||||
}
|
||||
|
||||
p = get_mount_parameters_fragment(m);
|
||||
if (p && !p->what) {
|
||||
log_unit_error(UNIT(m), "What= setting is missing. Refusing.");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
if (p && !p->what && !UNIT(m)->perpetual)
|
||||
return log_unit_error_errno(UNIT(m), SYNTHETIC_ERRNO(ENOEXEC),
|
||||
"What= setting is missing. Refusing.");
|
||||
|
||||
if (m->exec_context.pam_name && m->kill_context.kill_mode != KILL_CONTROL_GROUP) {
|
||||
log_unit_error(UNIT(m), "Unit has PAM enabled. Kill mode must be set to control-group'. Refusing.");
|
||||
@ -1568,7 +1567,7 @@ static int mount_setup_existing_unit(
|
||||
if (r > 0)
|
||||
flags |= MOUNT_PROC_JUST_CHANGED;
|
||||
|
||||
if (!MOUNT(u)->from_proc_self_mountinfo || FLAGS_SET(MOUNT(u)->proc_flags, MOUNT_PROC_JUST_MOUNTED))
|
||||
if (!MOUNT(u)->from_proc_self_mountinfo || FLAGS_SET(MOUNT(u)->proc_flags, MOUNT_PROC_JUST_MOUNTED) || MOUNT(u)->state == MOUNT_MOUNTING)
|
||||
flags |= MOUNT_PROC_JUST_MOUNTED;
|
||||
|
||||
MOUNT(u)->from_proc_self_mountinfo = true;
|
||||
|
13
src/core/org.freedesktop.systemd1.service
Normal file
13
src/core/org.freedesktop.systemd1.service
Normal file
@ -0,0 +1,13 @@
|
||||
# SPDX-License-Identifier: LGPL-2.1+
|
||||
#
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
[D-BUS Service]
|
||||
Name=org.freedesktop.systemd1
|
||||
Exec=/bin/false
|
||||
User=root
|
@ -650,24 +650,37 @@ static int service_add_default_dependencies(Service *s) {
|
||||
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
|
||||
}
|
||||
|
||||
static void service_fix_output(Service *s) {
|
||||
static void service_fix_stdio(Service *s) {
|
||||
assert(s);
|
||||
|
||||
/* If nothing has been explicitly configured, patch default output in. If input is socket/tty we avoid this
|
||||
* however, since in that case we want output to default to the same place as we read input from. */
|
||||
|
||||
if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
|
||||
s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
|
||||
s->exec_context.std_input == EXEC_INPUT_NULL)
|
||||
s->exec_context.std_error = UNIT(s)->manager->default_std_error;
|
||||
|
||||
if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
|
||||
s->exec_context.std_input == EXEC_INPUT_NULL)
|
||||
s->exec_context.std_output = UNIT(s)->manager->default_std_output;
|
||||
/* Note that EXEC_INPUT_NULL and EXEC_OUTPUT_INHERIT play a special role here: they are both the
|
||||
* default value that is subject to automatic overriding triggered by other settings and an explicit
|
||||
* choice the user can make. We don't distuingish between these cases currently. */
|
||||
|
||||
if (s->exec_context.std_input == EXEC_INPUT_NULL &&
|
||||
s->exec_context.stdin_data_size > 0)
|
||||
s->exec_context.std_input = EXEC_INPUT_DATA;
|
||||
|
||||
if (IN_SET(s->exec_context.std_input,
|
||||
EXEC_INPUT_TTY,
|
||||
EXEC_INPUT_TTY_FORCE,
|
||||
EXEC_INPUT_TTY_FAIL,
|
||||
EXEC_INPUT_SOCKET,
|
||||
EXEC_INPUT_NAMED_FD))
|
||||
return;
|
||||
|
||||
/* We assume these listed inputs refer to bidirectional streams, and hence duplicating them from
|
||||
* stdin to stdout/stderr makes sense and hence leaving EXEC_OUTPUT_INHERIT in place makes sense,
|
||||
* too. Outputs such as regular files or sealed data memfds otoh don't really make sense to be
|
||||
* duplicated for both input and output at the same time (since they then would cause a feedback
|
||||
* loop), hence override EXEC_OUTPUT_INHERIT with the default stderr/stdout setting. */
|
||||
|
||||
if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
|
||||
s->exec_context.std_output == EXEC_OUTPUT_INHERIT)
|
||||
s->exec_context.std_error = UNIT(s)->manager->default_std_error;
|
||||
|
||||
if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT)
|
||||
s->exec_context.std_output = UNIT(s)->manager->default_std_output;
|
||||
}
|
||||
|
||||
static int service_setup_bus_name(Service *s) {
|
||||
@ -715,7 +728,7 @@ static int service_add_extras(Service *s) {
|
||||
if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
|
||||
s->timeout_start_usec = USEC_INFINITY;
|
||||
|
||||
service_fix_output(s);
|
||||
service_fix_stdio(s);
|
||||
|
||||
r = unit_patch_contexts(UNIT(s));
|
||||
if (r < 0)
|
||||
|
@ -3257,7 +3257,12 @@ static void socket_trigger_notify(Unit *u, Unit *other) {
|
||||
assert(other);
|
||||
|
||||
/* Filter out invocations with bogus state */
|
||||
if (other->load_state != UNIT_LOADED || other->type != UNIT_SERVICE)
|
||||
if (!IN_SET(other->load_state,
|
||||
UNIT_LOADED,
|
||||
UNIT_NOT_FOUND,
|
||||
UNIT_BAD_SETTING,
|
||||
UNIT_ERROR,
|
||||
UNIT_MASKED) || other->type != UNIT_SERVICE)
|
||||
return;
|
||||
|
||||
/* Don't propagate state changes from the service if we are already down */
|
||||
|
@ -21,6 +21,8 @@ systemdsystemunitpath=${systemdsystemconfdir}:/etc/systemd/system:/run/systemd/s
|
||||
systemduserunitpath=${systemduserconfdir}:/etc/systemd/user:/run/systemd/user:/usr/local/lib/systemd/user:/usr/local/share/systemd/user:${systemduserunitdir}:/usr/lib/systemd/user:/usr/share/systemd/user
|
||||
systemdsystemgeneratordir=${rootprefix}/lib/systemd/system-generators
|
||||
systemdusergeneratordir=${prefix}/lib/systemd/user-generators
|
||||
systemdsystemgeneratorpath=/run/systemd/system-generators:/etc/systemd/system-generators:/usr/local/lib/systemd/system-generators:${systemdsystemgeneratordir}
|
||||
systemdusergeneratorpath=/run/systemd/user-generators:/etc/systemd/user-generators:/usr/local/lib/systemd/user-generators:${systemdusergeneratordir}
|
||||
systemdsleepdir=${rootprefix}/lib/systemd/system-sleep
|
||||
systemdshutdowndir=${rootprefix}/lib/systemd/system-shutdown
|
||||
tmpfilesdir=${prefix}/lib/tmpfiles.d
|
||||
|
@ -362,7 +362,7 @@ static int create_disk(
|
||||
|
||||
r = generator_write_timeouts(arg_dest, device, name, options, &filtered);
|
||||
if (r < 0)
|
||||
return r;
|
||||
log_warning_errno(r, "Failed to write device timeout drop-in: %m");
|
||||
|
||||
if (filtered) {
|
||||
filtered_escaped = specifier_escape(filtered);
|
||||
@ -415,11 +415,11 @@ static int create_disk(
|
||||
return r;
|
||||
|
||||
if (!noauto && !nofail) {
|
||||
r = write_drop_in(arg_dest, dmname, 90, "device-timeout",
|
||||
"# Automatically generated by systemd-cryptsetup-generator \n\n"
|
||||
r = write_drop_in(arg_dest, dmname, 40, "device-timeout",
|
||||
"# Automatically generated by systemd-cryptsetup-generator\n\n"
|
||||
"[Unit]\nJobTimeoutSec=0");
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to write device drop-in: %m");
|
||||
log_warning_errno(r, "Failed to write device timeout drop-in: %m");
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -646,7 +646,6 @@ static int add_proc_cmdline_devices(void) {
|
||||
crypto_device *d;
|
||||
|
||||
HASHMAP_FOREACH(d, arg_disks, i) {
|
||||
const char *options;
|
||||
_cleanup_free_ char *device = NULL;
|
||||
|
||||
if (!d->create)
|
||||
@ -662,14 +661,11 @@ static int add_proc_cmdline_devices(void) {
|
||||
if (!device)
|
||||
return log_oom();
|
||||
|
||||
if (d->options)
|
||||
options = d->options;
|
||||
else if (arg_default_options)
|
||||
options = arg_default_options;
|
||||
else
|
||||
options = "timeout=0";
|
||||
|
||||
r = create_disk(d->name, device, d->keyfile ?: arg_default_keyfile, d->keydev, options);
|
||||
r = create_disk(d->name,
|
||||
device,
|
||||
d->keyfile ?: arg_default_keyfile,
|
||||
d->keydev,
|
||||
d->options ?: arg_default_options);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
@ -381,6 +381,19 @@ static int add_automount(
|
||||
return generator_add_symlink(arg_dest, SPECIAL_LOCAL_FS_TARGET, "wants", unit);
|
||||
}
|
||||
|
||||
static const char *esp_or_xbootldr_options(const DissectedPartition *p) {
|
||||
assert(p);
|
||||
|
||||
/* if we probed vfat or have no idea about the file system then assume these file systems are vfat
|
||||
* and thus understand "umask=0077". If we detected something else then don't specify any options and
|
||||
* use kernel defaults. */
|
||||
|
||||
if (!p->fstype || streq(p->fstype, "vfat"))
|
||||
return "umask=0077";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int add_xbootldr(DissectedPartition *p) {
|
||||
int r;
|
||||
|
||||
@ -410,7 +423,7 @@ static int add_xbootldr(DissectedPartition *p) {
|
||||
"/boot",
|
||||
p->fstype,
|
||||
true,
|
||||
"umask=0077",
|
||||
esp_or_xbootldr_options(p),
|
||||
"Boot Loader Partition",
|
||||
120 * USEC_PER_SEC);
|
||||
}
|
||||
@ -484,7 +497,7 @@ static int add_esp(DissectedPartition *p, bool has_xbootldr) {
|
||||
esp_path,
|
||||
p->fstype,
|
||||
true,
|
||||
"umask=0077",
|
||||
esp_or_xbootldr_options(p),
|
||||
"EFI System Partition Automount",
|
||||
120 * USEC_PER_SEC);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "def.h"
|
||||
#include "env-file-label.h"
|
||||
#include "env-file.h"
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "def.h"
|
||||
#include "fd-util.h"
|
||||
#include "float.h"
|
||||
@ -694,6 +694,7 @@ static int method_import_tar_or_raw(sd_bus_message *msg, void *userdata, sd_bus_
|
||||
const char *local, *object;
|
||||
Manager *m = userdata;
|
||||
TransferType type;
|
||||
struct stat st;
|
||||
uint32_t id;
|
||||
|
||||
assert(msg);
|
||||
@ -717,9 +718,11 @@ static int method_import_tar_or_raw(sd_bus_message *msg, void *userdata, sd_bus_
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = fd_verify_regular(fd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (fstat(fd, &st) < 0)
|
||||
return -errno;
|
||||
|
||||
if (!S_ISREG(st.st_mode) && !S_ISFIFO(st.st_mode))
|
||||
return -EINVAL;
|
||||
|
||||
if (!machine_name_is_valid(local))
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Local name %s is invalid", local);
|
||||
@ -829,6 +832,7 @@ static int method_export_tar_or_raw(sd_bus_message *msg, void *userdata, sd_bus_
|
||||
const char *local, *object, *format;
|
||||
Manager *m = userdata;
|
||||
TransferType type;
|
||||
struct stat st;
|
||||
uint32_t id;
|
||||
|
||||
assert(msg);
|
||||
@ -855,9 +859,11 @@ static int method_export_tar_or_raw(sd_bus_message *msg, void *userdata, sd_bus_
|
||||
if (!machine_name_is_valid(local))
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Local name %s is invalid", local);
|
||||
|
||||
r = fd_verify_regular(fd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (fstat(fd, &st) < 0)
|
||||
return -errno;
|
||||
|
||||
if (!S_ISREG(st.st_mode) && !S_ISFIFO(st.st_mode))
|
||||
return -EINVAL;
|
||||
|
||||
type = streq_ptr(sd_bus_message_get_member(msg), "ExportTar") ? TRANSFER_EXPORT_TAR : TRANSFER_EXPORT_RAW;
|
||||
|
||||
|
@ -2428,15 +2428,6 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
r = sd_journal_previous(j);
|
||||
|
||||
} else if (arg_lines >= 0) {
|
||||
r = sd_journal_seek_tail(j);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to seek to tail: %m");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
r = sd_journal_previous_skip(j, arg_lines);
|
||||
|
||||
} else if (arg_reverse) {
|
||||
r = sd_journal_seek_tail(j);
|
||||
if (r < 0) {
|
||||
@ -2446,6 +2437,15 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = sd_journal_previous(j);
|
||||
|
||||
} else if (arg_lines >= 0) {
|
||||
r = sd_journal_seek_tail(j);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to seek to tail: %m");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
r = sd_journal_previous_skip(j, arg_lines);
|
||||
|
||||
} else {
|
||||
r = sd_journal_seek_head(j);
|
||||
if (r < 0) {
|
||||
@ -2514,7 +2514,7 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
}
|
||||
if (usec > arg_until)
|
||||
goto finish;
|
||||
break;
|
||||
}
|
||||
|
||||
if (arg_since_set && arg_reverse) {
|
||||
@ -2526,7 +2526,7 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
}
|
||||
if (usec < arg_since)
|
||||
goto finish;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!arg_merge && !arg_quiet) {
|
||||
@ -2632,29 +2632,6 @@ int main(int argc, char *argv[]) {
|
||||
if (!arg_follow) {
|
||||
if (n_shown == 0 && !arg_quiet)
|
||||
printf("-- No entries --\n");
|
||||
|
||||
if (arg_show_cursor || arg_cursor_file) {
|
||||
_cleanup_free_ char *cursor = NULL;
|
||||
|
||||
r = sd_journal_get_cursor(j, &cursor);
|
||||
if (r < 0 && r != -EADDRNOTAVAIL)
|
||||
log_error_errno(r, "Failed to get cursor: %m");
|
||||
else if (r >= 0) {
|
||||
if (arg_show_cursor)
|
||||
printf("-- cursor: %s\n", cursor);
|
||||
|
||||
if (arg_cursor_file) {
|
||||
r = write_string_file(arg_cursor_file, cursor,
|
||||
WRITE_STRING_FILE_CREATE |
|
||||
WRITE_STRING_FILE_ATOMIC);
|
||||
if (r < 0)
|
||||
log_error_errno(r,
|
||||
"Failed to write new cursor to %s: %m",
|
||||
arg_cursor_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2667,6 +2644,28 @@ int main(int argc, char *argv[]) {
|
||||
first_line = false;
|
||||
}
|
||||
|
||||
if (arg_show_cursor || arg_cursor_file) {
|
||||
_cleanup_free_ char *cursor = NULL;
|
||||
|
||||
r = sd_journal_get_cursor(j, &cursor);
|
||||
if (r < 0 && r != -EADDRNOTAVAIL)
|
||||
log_error_errno(r, "Failed to get cursor: %m");
|
||||
else if (r >= 0) {
|
||||
if (arg_show_cursor)
|
||||
printf("-- cursor: %s\n", cursor);
|
||||
|
||||
if (arg_cursor_file) {
|
||||
r = write_string_file(arg_cursor_file, cursor,
|
||||
WRITE_STRING_FILE_CREATE |
|
||||
WRITE_STRING_FILE_ATOMIC);
|
||||
if (r < 0)
|
||||
log_error_errno(r,
|
||||
"Failed to write new cursor to %s: %m",
|
||||
arg_cursor_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
finish:
|
||||
pager_close();
|
||||
|
||||
|
@ -161,7 +161,7 @@ static int match_is_valid(const void *data, size_t size) {
|
||||
if (size < 2)
|
||||
return false;
|
||||
|
||||
if (startswith(data, "__"))
|
||||
if (((char*) data)[0] == '_' && ((char*) data)[1] == '_')
|
||||
return false;
|
||||
|
||||
b = data;
|
||||
|
@ -675,8 +675,7 @@ static int client_timeout_resend_expire(sd_event_source *s, uint64_t usec, void
|
||||
}
|
||||
|
||||
static usec_t client_timeout_compute_random(usec_t val) {
|
||||
return val - val / 10 +
|
||||
(random_u32() % (2 * USEC_PER_SEC)) * val / 10 / USEC_PER_SEC;
|
||||
return val - (random_u32() % USEC_PER_SEC) * val / 10 / USEC_PER_SEC;
|
||||
}
|
||||
|
||||
static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userdata) {
|
||||
|
@ -160,7 +160,7 @@ int introspect_write_interface(struct introspect *i, const sd_bus_vtable *v) {
|
||||
case _SD_BUS_VTABLE_SIGNAL:
|
||||
fprintf(i->f, " <signal name=\"%s\">\n", v->x.signal.member);
|
||||
if (bus_vtable_has_names(vtable))
|
||||
names = strempty(v->x.method.names);
|
||||
names = strempty(v->x.signal.names);
|
||||
introspect_write_arguments(i, strempty(v->x.signal.signature), &names, NULL);
|
||||
introspect_write_flags(i, v->type, v->flags);
|
||||
fputs(" </signal>\n", i->f);
|
||||
|
@ -225,3 +225,4 @@ void bus_message_set_sender_local(sd_bus *bus, sd_bus_message *m);
|
||||
|
||||
sd_bus_message* bus_message_ref_queued(sd_bus_message *m, sd_bus *bus);
|
||||
sd_bus_message* bus_message_unref_queued(sd_bus_message *m, sd_bus *bus);
|
||||
int sd_bus_enqueue_for_read(sd_bus *bus, sd_bus_message *m);
|
||||
|
@ -4207,3 +4207,27 @@ _public_ int sd_bus_get_close_on_exit(sd_bus *bus) {
|
||||
|
||||
return bus->close_on_exit;
|
||||
}
|
||||
|
||||
int sd_bus_enqueue_for_read(sd_bus *bus, sd_bus_message *m) {
|
||||
int r;
|
||||
|
||||
assert_return(bus, -EINVAL);
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
assert_return(m, -EINVAL);
|
||||
assert_return(m->sealed, -EINVAL);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state))
|
||||
return -ENOTCONN;
|
||||
|
||||
/* Re-enqueue a message for reading. This is primarily useful for PolicyKit-style authentication,
|
||||
* where we accept a message, then determine we need to interactively authenticate the user, and then
|
||||
* we want to process the message again. */
|
||||
|
||||
r = bus_rqueue_make_room(bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
bus->rqueue[bus->rqueue_size++] = bus_message_ref_queued(m, bus);
|
||||
return 0;
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ fail:
|
||||
static int client(struct context *c) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
|
||||
_cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
|
||||
sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
assert_se(sd_bus_new(&bus) >= 0);
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "env-file-label.h"
|
||||
#include "env-file.h"
|
||||
#include "env-util.h"
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bus-error.h"
|
||||
#include "bus-message.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "def.h"
|
||||
#include "keymap-util.h"
|
||||
#include "locale-util.h"
|
||||
@ -33,7 +33,7 @@ static int locale_update_system_manager(Context *c, sd_bus *bus) {
|
||||
_cleanup_free_ char **l_unset = NULL;
|
||||
_cleanup_strv_free_ char **l_set = NULL;
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
size_t c_set, c_unset;
|
||||
LocaleVariable p;
|
||||
int r;
|
||||
|
@ -32,9 +32,12 @@ SUBSYSTEM=="pci", ENV{ID_PCI_CLASS_FROM_DATABASE}=="Display controller", \
|
||||
SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat"
|
||||
SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat"
|
||||
|
||||
# 'Plugable' USB hub, sound, network, graphics adapter
|
||||
# 'Plugable UD-160' USB hub, sound, network, graphics adapter
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1"
|
||||
|
||||
# 'Plugable UD-PRO8' USB hub, sound, network, graphics adapter
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="1a40", ATTR{idProduct}=="0201", ENV{ID_AUTOSEAT}="1"
|
||||
|
||||
# qemu (version 2.4+) has a PCI-PCI bridge (-device pci-bridge-seat) to group
|
||||
# devices belonging to one seat. See:
|
||||
# http://git.qemu.org/?p=qemu.git;a=blob;f=docs/multiseat.txt
|
||||
|
@ -981,7 +981,6 @@ static int show_seat(int argc, char *argv[], void *userdata) {
|
||||
static int activate(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
sd_bus *bus = userdata;
|
||||
char *short_argv[3];
|
||||
int r, i;
|
||||
|
||||
assert(bus);
|
||||
@ -990,12 +989,20 @@ static int activate(int argc, char *argv[], void *userdata) {
|
||||
polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
|
||||
|
||||
if (argc < 2) {
|
||||
short_argv[0] = argv[0];
|
||||
short_argv[1] = (char*) "";
|
||||
short_argv[2] = NULL;
|
||||
r = sd_bus_call_method(
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1/session/auto",
|
||||
"org.freedesktop.login1.Session",
|
||||
streq(argv[0], "lock-session") ? "Lock" :
|
||||
streq(argv[0], "unlock-session") ? "Unlock" :
|
||||
streq(argv[0], "terminate-session") ? "Terminate" :
|
||||
"Activate",
|
||||
&error, NULL, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to issue method call: %s", bus_error_message(&error, r));
|
||||
|
||||
argv = short_argv;
|
||||
argc = 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
|
@ -12,13 +12,14 @@
|
||||
#include "bootspec.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-error.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-unit-util.h"
|
||||
#include "bus-util.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "device-util.h"
|
||||
#include "dirent-util.h"
|
||||
#include "efivars.h"
|
||||
#include "efi-loader.h"
|
||||
#include "efivars.h"
|
||||
#include "env-util.h"
|
||||
#include "escape.h"
|
||||
#include "fd-util.h"
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-label.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "logind-dbus.h"
|
||||
#include "logind-seat-dbus.h"
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-label.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "logind-brightness.h"
|
||||
@ -249,7 +250,11 @@ static int method_set_idle_hint(sd_bus_message *message, void *userdata, sd_bus_
|
||||
if (uid != 0 && uid != s->user->uid)
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Only owner of session may set idle hint");
|
||||
|
||||
session_set_idle_hint(s, b);
|
||||
r = session_set_idle_hint(s, b);
|
||||
if (r == -ENOTTY)
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Idle hint control is not supported on non-graphical sessions.");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return sd_bus_reply_method_return(message, NULL);
|
||||
}
|
||||
|
@ -932,63 +932,57 @@ static int get_process_ctty_atime(pid_t pid, usec_t *atime) {
|
||||
}
|
||||
|
||||
int session_get_idle_hint(Session *s, dual_timestamp *t) {
|
||||
usec_t atime = 0, n;
|
||||
usec_t atime = 0;
|
||||
int r;
|
||||
|
||||
assert(s);
|
||||
|
||||
/* Explicit idle hint is set */
|
||||
if (s->idle_hint) {
|
||||
/* Graphical sessions have an explicit idle hint */
|
||||
if (SESSION_TYPE_IS_GRAPHICAL(s->type)) {
|
||||
if (t)
|
||||
*t = s->idle_hint_timestamp;
|
||||
|
||||
return s->idle_hint;
|
||||
}
|
||||
|
||||
/* Graphical sessions should really implement a real
|
||||
* idle hint logic */
|
||||
if (SESSION_TYPE_IS_GRAPHICAL(s->type))
|
||||
goto dont_know;
|
||||
|
||||
/* For sessions with an explicitly configured tty, let's check
|
||||
* its atime */
|
||||
/* For sessions with an explicitly configured tty, let's check its atime */
|
||||
if (s->tty) {
|
||||
r = get_tty_atime(s->tty, &atime);
|
||||
if (r >= 0)
|
||||
goto found_atime;
|
||||
}
|
||||
|
||||
/* For sessions with a leader but no explicitly configured
|
||||
* tty, let's check the controlling tty of the leader */
|
||||
/* For sessions with a leader but no explicitly configured tty, let's check the controlling tty of
|
||||
* the leader */
|
||||
if (pid_is_valid(s->leader)) {
|
||||
r = get_process_ctty_atime(s->leader, &atime);
|
||||
if (r >= 0)
|
||||
goto found_atime;
|
||||
}
|
||||
|
||||
dont_know:
|
||||
if (t)
|
||||
*t = s->idle_hint_timestamp;
|
||||
*t = DUAL_TIMESTAMP_NULL;
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
found_atime:
|
||||
if (t)
|
||||
dual_timestamp_from_realtime(t, atime);
|
||||
|
||||
n = now(CLOCK_REALTIME);
|
||||
|
||||
if (s->manager->idle_action_usec <= 0)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
return atime + s->manager->idle_action_usec <= n;
|
||||
return usec_add(atime, s->manager->idle_action_usec) <= now(CLOCK_REALTIME);
|
||||
}
|
||||
|
||||
void session_set_idle_hint(Session *s, bool b) {
|
||||
int session_set_idle_hint(Session *s, bool b) {
|
||||
assert(s);
|
||||
|
||||
if (!SESSION_TYPE_IS_GRAPHICAL(s->type))
|
||||
return -ENOTTY;
|
||||
|
||||
if (s->idle_hint == b)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
s->idle_hint = b;
|
||||
dual_timestamp_get(&s->idle_hint_timestamp);
|
||||
@ -1000,6 +994,8 @@ void session_set_idle_hint(Session *s, bool b) {
|
||||
|
||||
user_send_changed(s->user, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic", NULL);
|
||||
manager_send_changed(s->manager, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic", NULL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int session_get_locked_hint(Session *s) {
|
||||
|
@ -132,7 +132,7 @@ void session_add_to_gc_queue(Session *s);
|
||||
int session_activate(Session *s);
|
||||
bool session_is_active(Session *s);
|
||||
int session_get_idle_hint(Session *s, dual_timestamp *t);
|
||||
void session_set_idle_hint(Session *s, bool b);
|
||||
int session_set_idle_hint(Session *s, bool b);
|
||||
int session_get_locked_hint(Session *s);
|
||||
void session_set_locked_hint(Session *s, bool b);
|
||||
int session_create_fifo(Session *s);
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <errno.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "format-util.h"
|
||||
#include "logind-dbus.h"
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-error.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "def.h"
|
||||
#include "device-util.h"
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-label.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "copy.h"
|
||||
#include "dissect-image.h"
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-internal.h"
|
||||
#include "bus-label.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "copy.h"
|
||||
#include "env-file.h"
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "btrfs-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "errno-util.h"
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-error.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "dirent-util.h"
|
||||
#include "fd-util.h"
|
||||
|
@ -729,7 +729,7 @@ static void ipip_sit_init(NetDev *n) {
|
||||
assert(t);
|
||||
|
||||
t->pmtudisc = true;
|
||||
t->fou_encap_type = FOU_ENCAP_DIRECT;
|
||||
t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
|
||||
t->isatap = -1;
|
||||
}
|
||||
|
||||
@ -771,7 +771,7 @@ static void gre_erspan_init(NetDev *n) {
|
||||
|
||||
t->pmtudisc = true;
|
||||
t->gre_erspan_sequence = -1;
|
||||
t->fou_encap_type = FOU_ENCAP_DIRECT;
|
||||
t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
|
||||
}
|
||||
|
||||
static void ip6gre_init(NetDev *n) {
|
||||
|
@ -32,6 +32,7 @@ int address_new(Address **ret) {
|
||||
.scope = RT_SCOPE_UNIVERSE,
|
||||
.cinfo.ifa_prefered = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||
.cinfo.ifa_valid = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||
.prefix_route = true,
|
||||
};
|
||||
|
||||
*ret = TAKE_PTR(address);
|
||||
@ -593,7 +594,7 @@ int address_configure(
|
||||
if (address->manage_temporary_address)
|
||||
address->flags |= IFA_F_MANAGETEMPADDR;
|
||||
|
||||
if (address->prefix_route)
|
||||
if (!address->prefix_route)
|
||||
address->flags |= IFA_F_NOPREFIXROUTE;
|
||||
|
||||
if (address->autojoin)
|
||||
@ -908,6 +909,8 @@ int config_parse_address_flags(const char *unit,
|
||||
else if (streq(lvalue, "ManageTemporaryAddress"))
|
||||
n->manage_temporary_address = r;
|
||||
else if (streq(lvalue, "PrefixRoute"))
|
||||
n->prefix_route = !r;
|
||||
else if (streq(lvalue, "AddPrefixRoute"))
|
||||
n->prefix_route = r;
|
||||
else if (streq(lvalue, "AutoJoin"))
|
||||
n->autojoin = r;
|
||||
|
@ -111,10 +111,10 @@ static int route_scope_from_address(const Route *route, const struct in_addr *se
|
||||
return RT_SCOPE_UNIVERSE;
|
||||
}
|
||||
|
||||
static bool link_noprefixroute(Link *link) {
|
||||
return link->network->dhcp_route_table_set &&
|
||||
link->network->dhcp_route_table != RT_TABLE_MAIN &&
|
||||
!link->manager->dhcp4_prefix_root_cannot_set_table;
|
||||
static bool link_prefixroute(Link *link) {
|
||||
return !link->network->dhcp_route_table_set ||
|
||||
link->network->dhcp_route_table == RT_TABLE_MAIN ||
|
||||
link->manager->dhcp4_prefix_root_cannot_set_table;
|
||||
}
|
||||
|
||||
static int dhcp_route_configure(Route **route, Link *link) {
|
||||
@ -254,7 +254,7 @@ static int link_set_dhcp_routes(Link *link) {
|
||||
if (r < 0)
|
||||
return log_link_warning_errno(link, r, "DHCP error: could not get address: %m");
|
||||
|
||||
if (link_noprefixroute(link)) {
|
||||
if (!link_prefixroute(link)) {
|
||||
_cleanup_(route_freep) Route *prefix_route = NULL;
|
||||
|
||||
r = dhcp_prefix_route_from_lease(link->dhcp_lease, table, &address, &prefix_route);
|
||||
@ -516,7 +516,7 @@ static int dhcp_remove_dns_routes(Link *link, sd_dhcp_lease *lease, const struct
|
||||
(void) route_remove(route, link, NULL);
|
||||
}
|
||||
|
||||
if (link_noprefixroute(link)) {
|
||||
if (!link_prefixroute(link)) {
|
||||
_cleanup_(route_freep) Route *prefix_route = NULL;
|
||||
|
||||
r = dhcp_prefix_route_from_lease(lease, table, address, &prefix_route);
|
||||
@ -719,7 +719,7 @@ static int dhcp4_update_address(Link *link,
|
||||
addr->cinfo.ifa_valid = lifetime;
|
||||
addr->prefixlen = prefixlen;
|
||||
addr->broadcast.s_addr = address->s_addr | ~netmask->s_addr;
|
||||
addr->prefix_route = link_noprefixroute(link);
|
||||
addr->prefix_route = link_prefixroute(link);
|
||||
|
||||
/* allow reusing an existing address and simply update its lifetime
|
||||
* in case it already exists */
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "dns-domain.h"
|
||||
#include "networkd-link-bus.h"
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "networkd-link-bus.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-manager-bus.h"
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "sd-netlink.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "def.h"
|
||||
@ -682,8 +683,8 @@ int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message,
|
||||
strnull(addr_str), strnull(lladdr_str));
|
||||
(void) neighbor_free(neighbor);
|
||||
} else
|
||||
log_link_info(link, "Kernel removed a neighbor we don't remember: %s->%s, ignoring.",
|
||||
strnull(addr_str), strnull(lladdr_str));
|
||||
log_link_debug(link, "Kernel removed a neighbor we don't remember: %s->%s, ignoring.",
|
||||
strnull(addr_str), strnull(lladdr_str));
|
||||
|
||||
break;
|
||||
|
||||
@ -839,9 +840,9 @@ int manager_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message,
|
||||
valid_str ? "for " : "forever", strempty(valid_str));
|
||||
(void) address_drop(address);
|
||||
} else
|
||||
log_link_info(link, "Kernel removed an address we don't remember: %s/%u (valid %s%s), ignoring.",
|
||||
strnull(buf), prefixlen,
|
||||
valid_str ? "for " : "forever", strempty(valid_str));
|
||||
log_link_debug(link, "Kernel removed an address we don't remember: %s/%u (valid %s%s), ignoring.",
|
||||
strnull(buf), prefixlen,
|
||||
valid_str ? "for " : "forever", strempty(valid_str));
|
||||
|
||||
break;
|
||||
|
||||
|
@ -107,7 +107,8 @@ Address.PreferredLifetime, config_parse_lifetime,
|
||||
Address.HomeAddress, config_parse_address_flags, 0, 0
|
||||
Address.DuplicateAddressDetection, config_parse_address_flags, 0, 0
|
||||
Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0
|
||||
Address.PrefixRoute, config_parse_address_flags, 0, 0
|
||||
Address.PrefixRoute, config_parse_address_flags, 0, 0 /* deprecated */
|
||||
Address.AddPrefixRoute, config_parse_address_flags, 0, 0
|
||||
Address.AutoJoin, config_parse_address_flags, 0, 0
|
||||
Address.Scope, config_parse_address_scope, 0, 0
|
||||
IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "btrfs-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "fd-util.h"
|
||||
#include "io-util.h"
|
||||
#include "machine-image.h"
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-label.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include "sd-daemon.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "def.h"
|
||||
#include "main-func.h"
|
||||
#include "portabled-bus.h"
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "dns-domain.h"
|
||||
#include "memory-util.h"
|
||||
|
@ -20,11 +20,6 @@
|
||||
|
||||
static const char trust_anchor_dirs[] = CONF_PATHS_NULSTR("dnssec-trust-anchors.d");
|
||||
|
||||
/* The first DS RR from https://data.iana.org/root-anchors/root-anchors.xml, retrieved December 2015 */
|
||||
static const uint8_t root_digest1[] =
|
||||
{ 0x49, 0xAA, 0xC1, 0x1D, 0x7B, 0x6F, 0x64, 0x46, 0x70, 0x2E, 0x54, 0xA1, 0x60, 0x73, 0x71, 0x60,
|
||||
0x7A, 0x1A, 0x41, 0x85, 0x52, 0x00, 0xFD, 0x2C, 0xE1, 0xCD, 0xDE, 0x32, 0xF2, 0x4E, 0x8F, 0xB5 };
|
||||
|
||||
/* The second DS RR from https://data.iana.org/root-anchors/root-anchors.xml, retrieved February 2017 */
|
||||
static const uint8_t root_digest2[] =
|
||||
{ 0xE0, 0x6D, 0x44, 0xB8, 0x0B, 0x8F, 0x1D, 0x39, 0xA9, 0x5C, 0x0B, 0x0D, 0x7C, 0x65, 0xD0, 0x84,
|
||||
@ -96,11 +91,7 @@ static int dns_trust_anchor_add_builtin_positive(DnsTrustAnchor *d) {
|
||||
if (!answer)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Add the two RRs from https://data.iana.org/root-anchors/root-anchors.xml */
|
||||
r = add_root_ksk(answer, key, 19036, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest1, sizeof(root_digest1));
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Add the currently valid RRs from https://data.iana.org/root-anchors/root-anchors.xml */
|
||||
r = add_root_ksk(answer, key, 20326, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest2, sizeof(root_digest2));
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -1,9 +1,10 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "missing_capability.h"
|
||||
#include "resolved-dnssd.h"
|
||||
#include "resolved-dnssd-bus.h"
|
||||
#include "resolved-dnssd.h"
|
||||
#include "resolved-link.h"
|
||||
#include "strv.h"
|
||||
#include "user-util.h"
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "bus-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "resolve-util.h"
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#include "af-list.h"
|
||||
#include "alloc-util.h"
|
||||
#include "bus-util.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "dirent-util.h"
|
||||
#include "dns-domain.h"
|
||||
#include "fd-util.h"
|
||||
|
@ -162,6 +162,7 @@ void boot_config_free(BootConfig *config) {
|
||||
free(config->auto_entries);
|
||||
free(config->auto_firmware);
|
||||
free(config->console_mode);
|
||||
free(config->random_seed_mode);
|
||||
|
||||
free(config->entry_oneshot);
|
||||
free(config->entry_default);
|
||||
@ -227,6 +228,8 @@ static int boot_loader_read_conf(const char *path, BootConfig *config) {
|
||||
r = free_and_strdup(&config->auto_firmware, p);
|
||||
else if (streq(field, "console-mode"))
|
||||
r = free_and_strdup(&config->console_mode, p);
|
||||
else if (streq(field, "random-seed-mode"))
|
||||
r = free_and_strdup(&config->random_seed_mode, p);
|
||||
else {
|
||||
log_notice("%s:%u: Unknown line \"%s\", ignoring.", path, line, field);
|
||||
continue;
|
||||
|
@ -42,6 +42,7 @@ typedef struct BootConfig {
|
||||
char *auto_entries;
|
||||
char *auto_firmware;
|
||||
char *console_mode;
|
||||
char *random_seed_mode;
|
||||
|
||||
char *entry_oneshot;
|
||||
char *entry_default;
|
||||
|
416
src/shared/bus-polkit.c
Normal file
416
src/shared/bus-polkit.c
Normal file
@ -0,0 +1,416 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
|
||||
#include "bus-internal.h"
|
||||
#include "bus-message.h"
|
||||
#include "bus-polkit.h"
|
||||
#include "strv.h"
|
||||
#include "user-util.h"
|
||||
|
||||
static int check_good_user(sd_bus_message *m, uid_t good_user) {
|
||||
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||
uid_t sender_uid;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
|
||||
if (good_user == UID_INVALID)
|
||||
return 0;
|
||||
|
||||
r = sd_bus_query_sender_creds(m, SD_BUS_CREDS_EUID, &creds);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Don't trust augmented credentials for authorization */
|
||||
assert_return((sd_bus_creds_get_augmented_mask(creds) & SD_BUS_CREDS_EUID) == 0, -EPERM);
|
||||
|
||||
r = sd_bus_creds_get_euid(creds, &sender_uid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return sender_uid == good_user;
|
||||
}
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
static int bus_message_append_strv_key_value(
|
||||
sd_bus_message *m,
|
||||
const char **l) {
|
||||
|
||||
const char **k, **v;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
|
||||
r = sd_bus_message_open_container(m, 'a', "{ss}");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
STRV_FOREACH_PAIR(k, v, l) {
|
||||
r = sd_bus_message_append(m, "{ss}", *k, *v);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_bus_message_close_container(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
|
||||
int bus_test_polkit(
|
||||
sd_bus_message *call,
|
||||
int capability,
|
||||
const char *action,
|
||||
const char **details,
|
||||
uid_t good_user,
|
||||
bool *_challenge,
|
||||
sd_bus_error *ret_error) {
|
||||
|
||||
int r;
|
||||
|
||||
assert(call);
|
||||
assert(action);
|
||||
|
||||
/* Tests non-interactively! */
|
||||
|
||||
r = check_good_user(call, good_user);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_query_sender_privilege(call, capability);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else if (r > 0)
|
||||
return 1;
|
||||
#if ENABLE_POLKIT
|
||||
else {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *request = NULL;
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||
int authorized = false, challenge = false;
|
||||
const char *sender;
|
||||
|
||||
sender = sd_bus_message_get_sender(call);
|
||||
if (!sender)
|
||||
return -EBADMSG;
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
call->bus,
|
||||
&request,
|
||||
"org.freedesktop.PolicyKit1",
|
||||
"/org/freedesktop/PolicyKit1/Authority",
|
||||
"org.freedesktop.PolicyKit1.Authority",
|
||||
"CheckAuthorization");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(
|
||||
request,
|
||||
"(sa{sv})s",
|
||||
"system-bus-name", 1, "name", "s", sender,
|
||||
action);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = bus_message_append_strv_key_value(request, details);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(request, "us", 0, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_call(call->bus, request, 0, ret_error, &reply);
|
||||
if (r < 0) {
|
||||
/* Treat no PK available as access denied */
|
||||
if (sd_bus_error_has_name(ret_error, SD_BUS_ERROR_SERVICE_UNKNOWN)) {
|
||||
sd_bus_error_free(ret_error);
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_bus_message_enter_container(reply, 'r', "bba{ss}");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read(reply, "bb", &authorized, &challenge);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (authorized)
|
||||
return 1;
|
||||
|
||||
if (_challenge) {
|
||||
*_challenge = challenge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
|
||||
typedef struct AsyncPolkitQuery {
|
||||
char *action;
|
||||
char **details;
|
||||
|
||||
sd_bus_message *request, *reply;
|
||||
sd_bus_slot *slot;
|
||||
|
||||
Hashmap *registry;
|
||||
sd_event_source *defer_event_source;
|
||||
} AsyncPolkitQuery;
|
||||
|
||||
static void async_polkit_query_free(AsyncPolkitQuery *q) {
|
||||
if (!q)
|
||||
return;
|
||||
|
||||
sd_bus_slot_unref(q->slot);
|
||||
|
||||
if (q->registry && q->request)
|
||||
hashmap_remove(q->registry, q->request);
|
||||
|
||||
sd_bus_message_unref(q->request);
|
||||
sd_bus_message_unref(q->reply);
|
||||
|
||||
free(q->action);
|
||||
strv_free(q->details);
|
||||
|
||||
sd_event_source_disable_unref(q->defer_event_source);
|
||||
free(q);
|
||||
}
|
||||
|
||||
static int async_polkit_defer(sd_event_source *s, void *userdata) {
|
||||
AsyncPolkitQuery *q = userdata;
|
||||
|
||||
assert(s);
|
||||
|
||||
/* This is called as idle event source after we processed the async polkit reply, hopefully after the
|
||||
* method call we re-enqueued has been properly processed. */
|
||||
|
||||
async_polkit_query_free(q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
|
||||
AsyncPolkitQuery *q = userdata;
|
||||
int r;
|
||||
|
||||
assert(reply);
|
||||
assert(q);
|
||||
|
||||
assert(q->slot);
|
||||
q->slot = sd_bus_slot_unref(q->slot);
|
||||
|
||||
assert(!q->reply);
|
||||
q->reply = sd_bus_message_ref(reply);
|
||||
|
||||
/* Now, let's dispatch the original message a second time be re-enqueing. This will then traverse the
|
||||
* whole message processing again, and thus re-validating and re-retrieving the "userdata" field
|
||||
* again.
|
||||
*
|
||||
* We install an idle event loop event to clean-up the PolicyKit request data when we are idle again,
|
||||
* i.e. after the second time the message is processed is complete. */
|
||||
|
||||
assert(!q->defer_event_source);
|
||||
r = sd_event_add_defer(sd_bus_get_event(sd_bus_message_get_bus(reply)), &q->defer_event_source, async_polkit_defer, q);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
r = sd_event_source_set_priority(q->defer_event_source, SD_EVENT_PRIORITY_IDLE);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
r = sd_event_source_set_enabled(q->defer_event_source, SD_EVENT_ONESHOT);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
r = sd_bus_message_rewind(q->request, true);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
r = sd_bus_enqueue_for_read(sd_bus_message_get_bus(q->request), q->request);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
return 1;
|
||||
|
||||
fail:
|
||||
log_debug_errno(r, "Processing asynchronous PolicyKit reply failed, ignoring: %m");
|
||||
(void) sd_bus_reply_method_errno(q->request, r, NULL);
|
||||
async_polkit_query_free(q);
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int bus_verify_polkit_async(
|
||||
sd_bus_message *call,
|
||||
int capability,
|
||||
const char *action,
|
||||
const char **details,
|
||||
bool interactive,
|
||||
uid_t good_user,
|
||||
Hashmap **registry,
|
||||
sd_bus_error *ret_error) {
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *pk = NULL;
|
||||
AsyncPolkitQuery *q;
|
||||
int c;
|
||||
#endif
|
||||
const char *sender;
|
||||
int r;
|
||||
|
||||
assert(call);
|
||||
assert(action);
|
||||
assert(registry);
|
||||
|
||||
r = check_good_user(call, good_user);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
q = hashmap_get(*registry, call);
|
||||
if (q) {
|
||||
int authorized, challenge;
|
||||
|
||||
/* This is the second invocation of this function, and there's already a response from
|
||||
* polkit, let's process it */
|
||||
assert(q->reply);
|
||||
|
||||
/* If the operation we want to authenticate changed between the first and the second time,
|
||||
* let's not use this authentication, it might be out of date as the object and context we
|
||||
* operate on might have changed. */
|
||||
if (!streq(q->action, action) ||
|
||||
!strv_equal(q->details, (char**) details))
|
||||
return -ESTALE;
|
||||
|
||||
if (sd_bus_message_is_method_error(q->reply, NULL)) {
|
||||
const sd_bus_error *e;
|
||||
|
||||
e = sd_bus_message_get_error(q->reply);
|
||||
|
||||
/* Treat no PK available as access denied */
|
||||
if (sd_bus_error_has_name(e, SD_BUS_ERROR_SERVICE_UNKNOWN) ||
|
||||
sd_bus_error_has_name(e, SD_BUS_ERROR_NAME_HAS_NO_OWNER))
|
||||
return -EACCES;
|
||||
|
||||
/* Copy error from polkit reply */
|
||||
sd_bus_error_copy(ret_error, e);
|
||||
return -sd_bus_error_get_errno(e);
|
||||
}
|
||||
|
||||
r = sd_bus_message_enter_container(q->reply, 'r', "bba{ss}");
|
||||
if (r >= 0)
|
||||
r = sd_bus_message_read(q->reply, "bb", &authorized, &challenge);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (authorized)
|
||||
return 1;
|
||||
|
||||
if (challenge)
|
||||
return sd_bus_error_set(ret_error, SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED, "Interactive authentication required.");
|
||||
|
||||
return -EACCES;
|
||||
}
|
||||
#endif
|
||||
|
||||
r = sd_bus_query_sender_privilege(call, capability);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else if (r > 0)
|
||||
return 1;
|
||||
|
||||
sender = sd_bus_message_get_sender(call);
|
||||
if (!sender)
|
||||
return -EBADMSG;
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
c = sd_bus_message_get_allow_interactive_authorization(call);
|
||||
if (c < 0)
|
||||
return c;
|
||||
if (c > 0)
|
||||
interactive = true;
|
||||
|
||||
r = hashmap_ensure_allocated(registry, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
call->bus,
|
||||
&pk,
|
||||
"org.freedesktop.PolicyKit1",
|
||||
"/org/freedesktop/PolicyKit1/Authority",
|
||||
"org.freedesktop.PolicyKit1.Authority",
|
||||
"CheckAuthorization");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(
|
||||
pk,
|
||||
"(sa{sv})s",
|
||||
"system-bus-name", 1, "name", "s", sender,
|
||||
action);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = bus_message_append_strv_key_value(pk, details);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(pk, "us", interactive, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
q = new(AsyncPolkitQuery, 1);
|
||||
if (!q)
|
||||
return -ENOMEM;
|
||||
|
||||
*q = (AsyncPolkitQuery) {
|
||||
.request = sd_bus_message_ref(call),
|
||||
};
|
||||
|
||||
q->action = strdup(action);
|
||||
if (!q->action) {
|
||||
async_polkit_query_free(q);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
q->details = strv_copy((char**) details);
|
||||
if (!q->details) {
|
||||
async_polkit_query_free(q);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
r = hashmap_put(*registry, call, q);
|
||||
if (r < 0) {
|
||||
async_polkit_query_free(q);
|
||||
return r;
|
||||
}
|
||||
|
||||
q->registry = *registry;
|
||||
|
||||
r = sd_bus_call_async(call->bus, &q->slot, pk, async_polkit_callback, q, 0);
|
||||
if (r < 0) {
|
||||
async_polkit_query_free(q);
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
void bus_verify_polkit_async_registry_free(Hashmap *registry) {
|
||||
#if ENABLE_POLKIT
|
||||
hashmap_free_with_destructor(registry, async_polkit_query_free);
|
||||
#endif
|
||||
}
|
11
src/shared/bus-polkit.h
Normal file
11
src/shared/bus-polkit.h
Normal file
@ -0,0 +1,11 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
#pragma once
|
||||
|
||||
#include "sd-bus.h"
|
||||
|
||||
#include "hashmap.h"
|
||||
|
||||
int bus_test_polkit(sd_bus_message *call, int capability, const char *action, const char **details, uid_t good_user, bool *_challenge, sd_bus_error *e);
|
||||
|
||||
int bus_verify_polkit_async(sd_bus_message *call, int capability, const char *action, const char **details, bool interactive, uid_t good_user, Hashmap **registry, sd_bus_error *error);
|
||||
void bus_verify_polkit_async_registry_free(Hashmap *registry);
|
@ -9,7 +9,6 @@
|
||||
#include <sys/socket.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "sd-bus-protocol.h"
|
||||
#include "sd-bus.h"
|
||||
#include "sd-daemon.h"
|
||||
#include "sd-event.h"
|
||||
@ -22,15 +21,12 @@
|
||||
#include "bus-util.h"
|
||||
#include "cap-list.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "def.h"
|
||||
#include "escape.h"
|
||||
#include "fd-util.h"
|
||||
#include "mountpoint-util.h"
|
||||
#include "nsflags.h"
|
||||
#include "parse-util.h"
|
||||
#include "path-util.h"
|
||||
#include "proc-cmdline.h"
|
||||
#include "rlimit-util.h"
|
||||
#include "socket-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "strv.h"
|
||||
#include "user-util.h"
|
||||
@ -185,357 +181,6 @@ int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error) {
|
||||
return has_owner;
|
||||
}
|
||||
|
||||
static int check_good_user(sd_bus_message *m, uid_t good_user) {
|
||||
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||
uid_t sender_uid;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
|
||||
if (good_user == UID_INVALID)
|
||||
return 0;
|
||||
|
||||
r = sd_bus_query_sender_creds(m, SD_BUS_CREDS_EUID, &creds);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Don't trust augmented credentials for authorization */
|
||||
assert_return((sd_bus_creds_get_augmented_mask(creds) & SD_BUS_CREDS_EUID) == 0, -EPERM);
|
||||
|
||||
r = sd_bus_creds_get_euid(creds, &sender_uid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return sender_uid == good_user;
|
||||
}
|
||||
|
||||
int bus_test_polkit(
|
||||
sd_bus_message *call,
|
||||
int capability,
|
||||
const char *action,
|
||||
const char **details,
|
||||
uid_t good_user,
|
||||
bool *_challenge,
|
||||
sd_bus_error *e) {
|
||||
|
||||
int r;
|
||||
|
||||
assert(call);
|
||||
assert(action);
|
||||
|
||||
/* Tests non-interactively! */
|
||||
|
||||
r = check_good_user(call, good_user);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_query_sender_privilege(call, capability);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else if (r > 0)
|
||||
return 1;
|
||||
#if ENABLE_POLKIT
|
||||
else {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *request = NULL;
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||
int authorized = false, challenge = false;
|
||||
const char *sender, **k, **v;
|
||||
|
||||
sender = sd_bus_message_get_sender(call);
|
||||
if (!sender)
|
||||
return -EBADMSG;
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
call->bus,
|
||||
&request,
|
||||
"org.freedesktop.PolicyKit1",
|
||||
"/org/freedesktop/PolicyKit1/Authority",
|
||||
"org.freedesktop.PolicyKit1.Authority",
|
||||
"CheckAuthorization");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(
|
||||
request,
|
||||
"(sa{sv})s",
|
||||
"system-bus-name", 1, "name", "s", sender,
|
||||
action);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_open_container(request, 'a', "{ss}");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
STRV_FOREACH_PAIR(k, v, details) {
|
||||
r = sd_bus_message_append(request, "{ss}", *k, *v);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_bus_message_close_container(request);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(request, "us", 0, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_call(call->bus, request, 0, e, &reply);
|
||||
if (r < 0) {
|
||||
/* Treat no PK available as access denied */
|
||||
if (sd_bus_error_has_name(e, SD_BUS_ERROR_SERVICE_UNKNOWN)) {
|
||||
sd_bus_error_free(e);
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_bus_message_enter_container(reply, 'r', "bba{ss}");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read(reply, "bb", &authorized, &challenge);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (authorized)
|
||||
return 1;
|
||||
|
||||
if (_challenge) {
|
||||
*_challenge = challenge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
|
||||
typedef struct AsyncPolkitQuery {
|
||||
sd_bus_message *request, *reply;
|
||||
sd_bus_message_handler_t callback;
|
||||
void *userdata;
|
||||
sd_bus_slot *slot;
|
||||
Hashmap *registry;
|
||||
} AsyncPolkitQuery;
|
||||
|
||||
static void async_polkit_query_free(AsyncPolkitQuery *q) {
|
||||
|
||||
if (!q)
|
||||
return;
|
||||
|
||||
sd_bus_slot_unref(q->slot);
|
||||
|
||||
if (q->registry && q->request)
|
||||
hashmap_remove(q->registry, q->request);
|
||||
|
||||
sd_bus_message_unref(q->request);
|
||||
sd_bus_message_unref(q->reply);
|
||||
|
||||
free(q);
|
||||
}
|
||||
|
||||
static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
|
||||
AsyncPolkitQuery *q = userdata;
|
||||
int r;
|
||||
|
||||
assert(reply);
|
||||
assert(q);
|
||||
|
||||
q->slot = sd_bus_slot_unref(q->slot);
|
||||
q->reply = sd_bus_message_ref(reply);
|
||||
|
||||
r = sd_bus_message_rewind(q->request, true);
|
||||
if (r < 0) {
|
||||
r = sd_bus_reply_method_errno(q->request, r, NULL);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
r = q->callback(q->request, q->userdata, &error_buffer);
|
||||
r = bus_maybe_reply_error(q->request, r, &error_buffer);
|
||||
|
||||
finish:
|
||||
async_polkit_query_free(q);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int bus_verify_polkit_async(
|
||||
sd_bus_message *call,
|
||||
int capability,
|
||||
const char *action,
|
||||
const char **details,
|
||||
bool interactive,
|
||||
uid_t good_user,
|
||||
Hashmap **registry,
|
||||
sd_bus_error *error) {
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *pk = NULL;
|
||||
AsyncPolkitQuery *q;
|
||||
const char *sender, **k, **v;
|
||||
sd_bus_message_handler_t callback;
|
||||
void *userdata;
|
||||
int c;
|
||||
#endif
|
||||
int r;
|
||||
|
||||
assert(call);
|
||||
assert(action);
|
||||
assert(registry);
|
||||
|
||||
r = check_good_user(call, good_user);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
q = hashmap_get(*registry, call);
|
||||
if (q) {
|
||||
int authorized, challenge;
|
||||
|
||||
/* This is the second invocation of this function, and
|
||||
* there's already a response from polkit, let's
|
||||
* process it */
|
||||
assert(q->reply);
|
||||
|
||||
if (sd_bus_message_is_method_error(q->reply, NULL)) {
|
||||
const sd_bus_error *e;
|
||||
|
||||
e = sd_bus_message_get_error(q->reply);
|
||||
|
||||
/* Treat no PK available as access denied */
|
||||
if (sd_bus_error_has_name(e, SD_BUS_ERROR_SERVICE_UNKNOWN) ||
|
||||
sd_bus_error_has_name(e, SD_BUS_ERROR_NAME_HAS_NO_OWNER))
|
||||
return -EACCES;
|
||||
|
||||
/* Copy error from polkit reply */
|
||||
sd_bus_error_copy(error, e);
|
||||
return -sd_bus_error_get_errno(e);
|
||||
}
|
||||
|
||||
r = sd_bus_message_enter_container(q->reply, 'r', "bba{ss}");
|
||||
if (r >= 0)
|
||||
r = sd_bus_message_read(q->reply, "bb", &authorized, &challenge);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (authorized)
|
||||
return 1;
|
||||
|
||||
if (challenge)
|
||||
return sd_bus_error_set(error, SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED, "Interactive authentication required.");
|
||||
|
||||
return -EACCES;
|
||||
}
|
||||
#endif
|
||||
|
||||
r = sd_bus_query_sender_privilege(call, capability);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else if (r > 0)
|
||||
return 1;
|
||||
|
||||
#if ENABLE_POLKIT
|
||||
if (sd_bus_get_current_message(call->bus) != call)
|
||||
return -EINVAL;
|
||||
|
||||
callback = sd_bus_get_current_handler(call->bus);
|
||||
if (!callback)
|
||||
return -EINVAL;
|
||||
|
||||
userdata = sd_bus_get_current_userdata(call->bus);
|
||||
|
||||
sender = sd_bus_message_get_sender(call);
|
||||
if (!sender)
|
||||
return -EBADMSG;
|
||||
|
||||
c = sd_bus_message_get_allow_interactive_authorization(call);
|
||||
if (c < 0)
|
||||
return c;
|
||||
if (c > 0)
|
||||
interactive = true;
|
||||
|
||||
r = hashmap_ensure_allocated(registry, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
call->bus,
|
||||
&pk,
|
||||
"org.freedesktop.PolicyKit1",
|
||||
"/org/freedesktop/PolicyKit1/Authority",
|
||||
"org.freedesktop.PolicyKit1.Authority",
|
||||
"CheckAuthorization");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(
|
||||
pk,
|
||||
"(sa{sv})s",
|
||||
"system-bus-name", 1, "name", "s", sender,
|
||||
action);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_open_container(pk, 'a', "{ss}");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
STRV_FOREACH_PAIR(k, v, details) {
|
||||
r = sd_bus_message_append(pk, "{ss}", *k, *v);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_bus_message_close_container(pk);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_append(pk, "us", interactive, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
q = new0(AsyncPolkitQuery, 1);
|
||||
if (!q)
|
||||
return -ENOMEM;
|
||||
|
||||
q->request = sd_bus_message_ref(call);
|
||||
q->callback = callback;
|
||||
q->userdata = userdata;
|
||||
|
||||
r = hashmap_put(*registry, call, q);
|
||||
if (r < 0) {
|
||||
async_polkit_query_free(q);
|
||||
return r;
|
||||
}
|
||||
|
||||
q->registry = *registry;
|
||||
|
||||
r = sd_bus_call_async(call->bus, &q->slot, pk, async_polkit_callback, q, 0);
|
||||
if (r < 0) {
|
||||
async_polkit_query_free(q);
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
void bus_verify_polkit_async_registry_free(Hashmap *registry) {
|
||||
#if ENABLE_POLKIT
|
||||
hashmap_free_with_destructor(registry, async_polkit_query_free);
|
||||
#endif
|
||||
}
|
||||
|
||||
int bus_check_peercred(sd_bus *c) {
|
||||
struct ucred ucred;
|
||||
int fd, r;
|
||||
|
@ -9,8 +9,8 @@
|
||||
#include "sd-bus.h"
|
||||
#include "sd-event.h"
|
||||
|
||||
#include "hashmap.h"
|
||||
#include "macro.h"
|
||||
#include "set.h"
|
||||
#include "string-util.h"
|
||||
#include "time-util.h"
|
||||
|
||||
@ -52,11 +52,6 @@ int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error);
|
||||
|
||||
int bus_check_peercred(sd_bus *c);
|
||||
|
||||
int bus_test_polkit(sd_bus_message *call, int capability, const char *action, const char **details, uid_t good_user, bool *_challenge, sd_bus_error *e);
|
||||
|
||||
int bus_verify_polkit_async(sd_bus_message *call, int capability, const char *action, const char **details, bool interactive, uid_t good_user, Hashmap **registry, sd_bus_error *error);
|
||||
void bus_verify_polkit_async_registry_free(Hashmap *registry);
|
||||
|
||||
int bus_connect_system_systemd(sd_bus **_bus);
|
||||
int bus_connect_user_systemd(sd_bus **_bus);
|
||||
|
||||
|
@ -230,7 +230,6 @@ int unit_file_find_dropin_paths(
|
||||
char ***ret) {
|
||||
|
||||
_cleanup_strv_free_ char **dirs = NULL;
|
||||
UnitType type = _UNIT_TYPE_INVALID;
|
||||
char *name, **p;
|
||||
Iterator i;
|
||||
int r;
|
||||
@ -240,22 +239,24 @@ int unit_file_find_dropin_paths(
|
||||
/* All the names in the unit are of the same type so just grab one. */
|
||||
name = (char*) set_first(names);
|
||||
if (name) {
|
||||
UnitType type = _UNIT_TYPE_INVALID;
|
||||
|
||||
type = unit_name_to_type(name);
|
||||
if (type < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to to derive unit type from unit name: %s",
|
||||
name);
|
||||
}
|
||||
|
||||
/* Special top level drop in for "<unit type>.<suffix>". Add this first as it's the most generic
|
||||
* and should be able to be overridden by more specific drop-ins. */
|
||||
STRV_FOREACH(p, lookup_path)
|
||||
(void) unit_file_find_dirs(original_root,
|
||||
unit_path_cache,
|
||||
*p,
|
||||
unit_type_to_string(type),
|
||||
dir_suffix,
|
||||
&dirs);
|
||||
/* Special top level drop in for "<unit type>.<suffix>". Add this first as it's the most generic
|
||||
* and should be able to be overridden by more specific drop-ins. */
|
||||
STRV_FOREACH(p, lookup_path)
|
||||
(void) unit_file_find_dirs(original_root,
|
||||
unit_path_cache,
|
||||
*p,
|
||||
unit_type_to_string(type),
|
||||
dir_suffix,
|
||||
&dirs);
|
||||
}
|
||||
|
||||
SET_FOREACH(name, names, i)
|
||||
STRV_FOREACH(p, lookup_path)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user