sys-apps/systemd: add v256.5 with musl libc patches

- https://code.atwilcox.tech/sphen/scaly/systemd
- https://catfox.life/2024/09/05/porting-systemd-to-musl-libc-powered-linux/
This commit is contained in:
Alexander Miroshnichenko 2024-09-25 22:42:59 +03:00
parent b22938ee78
commit 538fd3f7b3
Signed by: alex
GPG Key ID: E93720C6C73A77F4
41 changed files with 6318 additions and 0 deletions

View File

@ -1,8 +1,49 @@
AUX 0001-Allow-building-on-musl-libc.patch 99748 BLAKE2B f3556996debaf72d38873e444187dd3fe431a9dfad0a22a500f90c02d087ab170d4b0eee36cd34fd45b5caa44d7bf5c434ee9dfa527f4391cfbd41ee8ddc0399 SHA512 5b3b3d165c293d54f96c4566b1bf30d29a743499c7bdbc82db581e6b613a56895d32dedc47db4c1f5eb13bc98749d33e0e050c9cb735804b43abcb28feb04511 AUX 0001-Allow-building-on-musl-libc.patch 99748 BLAKE2B f3556996debaf72d38873e444187dd3fe431a9dfad0a22a500f90c02d087ab170d4b0eee36cd34fd45b5caa44d7bf5c434ee9dfa527f4391cfbd41ee8ddc0399 SHA512 5b3b3d165c293d54f96c4566b1bf30d29a743499c7bdbc82db581e6b613a56895d32dedc47db4c1f5eb13bc98749d33e0e050c9cb735804b43abcb28feb04511
AUX 0001-Revert-Drop-split-usr-and-unmerged-usr-support.patch 117312 BLAKE2B 997866ba44e9ac435c024b1a5f5dd943df472fce8ea8f645b803f4e5d9666a14ff6a20e50d39c8b4e00c42703497569978fdd63c18c8425f6cb28cc7a76ad845 SHA512 25f6e3b8f888cf892ff6aeed2089f10603937ecb3ff699a09bc6c4429cae376a34f7afcdfb6be4e34fbf7daf1726ace1022af7a79a9449e285022e2f95b57787
AUX 0002-Use-XSI-strerror_r-instead-of-GNU-strerror_r.patch 6398 BLAKE2B e2c4c34d22602db83aa71ff0e6ba46c9b33d33d4e25691fbfd49de284ad8a8ee2f2340ff9bf92c63dea007031457fc3c321e61192543f420984bdebe6ba93829 SHA512 80869ff3df2e5f4174a77fdfd09fbfe230b1500f821a58738619af031cbec22d1b5b8f3448efe91e9901426e59cba50b08adbb81d939b6f2d0f17564810aac6f
AUX 0003-fileio-Disable-use-of-disabling-write-buffer.patch 1080 BLAKE2B 6c666c9672a97490a7df52e98cd03089bd2c81dd75f48c59cff71d80c8615547ae957a5c851d5b2437bbe4e7a45347cf77c98e264c9203cc73e780beadb7fea5 SHA512 d1b768ba9b1b1e4bc88fbd974aa365c71a52d1175e7b8aec5aadfd0e2dd2c1498428d1929ecc2dd986f8dc77753509442f93459ad5bc1288fe3308354ac3394e
AUX 0004-fs-util-Handle-musl-O_ACCMODE-containing-O_PATH.patch 1247 BLAKE2B 73a57386eee5f3dd2c7f2d81d457899922dbd9cc818a3b07ad780eb15239a749d1c5dbd670387064fe71b06c3568cdcfbba72c29d64316e3d063cf4e4f76f70c SHA512 eb3cce9f5d2f2d668ef257ad9028be8e76d20b6fbce20156dac3f839d4fe66b1c98a42a7fc4cc4cc2ea25c4ef8af49dca20cf474baae5c40586f52e3f674012d
AUX 0005-Use-libc-over-Linux-UAPI-headers-when-possible.patch 24508 BLAKE2B 706b19b1312ee570b2686f64cd506e5f586d3ec7f219c766f8821afaecdcbaa7348edee699ffab6bc9c70d0b92065475ae51c14c6aef250e640a9871588703bc SHA512 361444abb9325b3ec61c414d3750d56c7c9d41e1109254ec0541cf991a8f7e915a4425a24e0879dcb57153494630abfa4174f1becdff7c951a4a94ed5c9407c4
AUX 0006-test-PATH-sbin-so-fstab-generator-finds-fsck.patch 1106 BLAKE2B 450a1e4646b217d23397341455ced64d89b8a90b7d58e4dd34758feccd63ed7eba3a8f668a35f7efe2dfaf8f32443e671a651dc91f5959da39fc76d5a8eb52f6 SHA512 9656f02297a30f4f40540f02d2121ccf39fcbf69bedd736354d5fbed0f3e29ba913fba8ecd9066258b45d6a18bd3a392b0a7c4008abe68ac75b1a524193aae1a
AUX 0007-Handle-lack-of-printf.h.patch 13471 BLAKE2B 62c32077727779fac72ca22182683e86407406f0e51e11c802290b34b91611093c02c45d43c431c8afeac59b251dc4d97248594feaa1908b86fef4d42174b69e SHA512 7be3e9ab92fa1639a7c86b2ba9db7b3f8b6990235820628a7735f38cf4a6a623772ed27815b9921607f5978c52b3b5fac57e43d7f0dea49ee7daa5e1cc635320
AUX 0008-test-Ensure-sysusers-test-11-passes-on-musl-libc.patch 912 BLAKE2B 956662ca637be7acd3372500db6aa2701daaee7f63f0f91a737affe1967acf81fdc6d931234a8706f11bb4b3383c2556f0fc67e68245235c670715cbd3474e81 SHA512 a3c7db17ddaa70ba6e399caddd57da2ab3bef4f6e58d5248911647ff565b99f9f35aba0202e68ac9df847a58f4c5a952d9035cf23c372cf3293dfeaab7f13e9d
AUX 0009-test-Change-expected-message-for-unhappy-sysusers.patch 948 BLAKE2B 7ba21aca8810817f2b8a0b2b6737b02174b9dca60a0f8d544e9009151ccd6aad621dbc73b4a459a9e0abdbd6c2a12c8c8502dbf14795362f55f83ffab6746e85 SHA512 417bd0f2c1f13717e0907d3c1124833e8d36446b5e2e29140c5cafdff54543925d019b171cd0737362ee3c790fe9368660c6acb41764dc22f520d70acfb365bc
AUX 0010-basic-Support-musl-definition-of-rlim_t.patch 901 BLAKE2B 9eae85812719b454b666a1602edafd4c3acd8ee335af954a986ce6e9af1952032a93b2c90cf32b42a38a800d18b7d885db2afde1d7a8b3beb01992bdd4f7b612 SHA512 87f96782647eed828c23b2276ae296aa718edffe834431eb8329b1628026929b4f88eeffbfe19a1b57b52d2ed2fddaebcafaefaf1807fae02b804014a216d716
AUX 0011-Handle-musl-lack-of-GLOB_BRACE.patch 4786 BLAKE2B 30099112f2b3950effe568c657bb6b7b9bbac0fa0c3e76f48615032aded245a3140a8a43333e232293cf408b11d41b10b05e7dd015140ca3fd2c3b22c3e05214 SHA512 8cd480fce5c69fd86020f62ac6c8f59dc64467a5c087b2b02778d4f94016327fd3145846fb7ec0be0f9e9e1fb0d6f8bfe5bb762c49b619b57d96d7f011e2dc57
AUX 0012-Handle-musl-s-longer-HOST_NAME_MAX-hardcode-64.patch 2198 BLAKE2B 434709bf3379c6a1e4cb4df5ea02cb26ab10943b8921405adc980b22f824af9d5f525cb02f2d9b251827d3bffc44fdf1bf3540ae7b78ce2e2a67c9945fd1c0cf SHA512 ae42ffbb831e1f55f185a713fc8c1762caf425b36ad419f280815490da8a44b5d1efc7c40fe27163a3719824b855bd58a5f05178e84064a5f6b26f57bd12cb62
AUX 0013-basic-Handle-musl-lack-of-NI_IDN.patch 898 BLAKE2B 4d210b2820599ae9ce3191d66f4d423f2de5a68b4cb1e4e3c39a50d8dab37be08d0a0047e9e85479a32fd15c34078c84b219ee1af433eaac1445a3601e42d6bc SHA512 4e039d2149be3985f51ee9850b7ad14620805bcdf5b00f4173c1a0081b0940ee93f1c7e77d444334e075035d47dd969a6daef3a0a7ca656d110616e962446dfa
AUX 0014-basic-Define-comparison_fn_t-in-sort-util.h.patch 1184 BLAKE2B d2b3f5a2602e629fadf8736f8ff0356336d868066c85eb5fd65c194be680836985cfd6e9ad0a3bb755cd744f7b1390b64bf965c0aa6b163be5476756e1cd80a5 SHA512 e6b01ed21707fbd3e346d0a42cbf0ab1ec446f26bf7d038d9ad6edcf8d4ca29e9c19abf6dd73ac385eea4707843a5c776116c2a841af3aae36e733cf6ec5939a
AUX 0015-basic-Define-our-own-basename.patch 1201 BLAKE2B f198148b55a3a486d7af8e90daec52e9578a2a135accb3ae95e046bf10434480a0f4d274133680811804d81f265f6c52d5c1f6c3f83ae2da2b90bc07ca57a326 SHA512 33d8d05c58dc512dd6476aed70de754d47b9b7140e72173d3036e2bdce0269be3a4498b1368d31d8572afadb04b72f37549556f449536bcf1277a363e2f8701c
AUX 0016-test-Handle-musl-s-interesting-locale-decisions.patch 1740 BLAKE2B 72bbea733fd9965a26633548508c5cea8edda62ecf336072cad3d7306be269fa4a1a5842b7e3445f1a4f1c053bcd203e2baae25c1c10bd3e27225e9a7ca3bed6 SHA512 d060952b0d8648bc4d1980711b8aa9106af6bc5922a662a2db546d600ab0ac65df5fb224e2bf2174e20bbe394d0a7152c0937783d3e73c00d35dc5353d7c53cd
AUX 0017-Port-to-s6-utmps.patch 1869 BLAKE2B 74657985830501fd8158be70fe3222729d385055f94d880d188c03661253d7c415ea392741ac730f0de9218e4bd1ed3f706b0f38693be570881c0876282c2879 SHA512 a0442b6d9f81d7ef7281bd26cdc6eb1899007948f45106cd82a6dc874660710b7fa979a90d1bd48bd483c58853c2d1ff8e19eaf6941235a84bd7f7dd20b71319
AUX 0018-test-Add-definition-for-__cpu_set-type.patch 884 BLAKE2B 1d739270a5a07e9852c75f8d2f00d96d69972812dbd041cc51ea8eabf2a7f4965a06ca58de1a5b6ae9237b209ce4bf086be2f0c68afbfcb53cff5bc1e3230abc SHA512 c69195fbc9fc6b4e10ae49c5a0a0d9922721e30b37c536a3f563193dac075ef8c99c4a928bcfe7cab31b979bf045ef07b728ef361eae2878847984be0ddc03a8
AUX 0019-test-Don-t-assume-unknown-errors-have-their-codes.patch 1568 BLAKE2B 79000dd81dc935009f25c3850b87aa042a36ecde1fb046185d7892498dccde5a82c624c6e626a247174c7ecaf181a1ba6ab4adb6464b9435249baeddef280739 SHA512 c89bad8e878ef85a68ce7fca43cc19faab89953772c62c6eb84251dbb6c25cc00edb92b616d5adf2cacc45a81ecff3f3e3e5bb5af9bbebf6b2ca3c883f8adb85
AUX 0020-test-time-util-Use-whole-fractions-no-4-digit-TZ.patch 6181 BLAKE2B edf10a4fce1081247cad1ba44a7bb2e7445681ff479351198a5dca593ea2338b5843b420393dc95ddc8f785cae294b335ffc90801df8cc12a2722c3a309dd72c SHA512 08f28b2915260dee0030118a19b3993cf0c21afeb13f14f147b73c78bce2f4da5fbaeb0ea6b7c2c3487ef6c66fffa071d41eb1fad98a80d59622d552db6fcd87
AUX 0021-Don-t-use-malloc_trim-or-malloc_info.patch 2437 BLAKE2B 221a575793161a2a419aa722b5db5465fc317a7b48641cb3ee6d05d05b45c49ea943d07a1ce65e587c1fa7d440d11ecba604c123c3fa5d65abfb14bda6bcb104 SHA512 c7a22625d2219c2a5c622661340620182cd80785b3a9ed35e85429223af3355dd2f916b2ff504aaf9a8c0ff276487471facf2c64acd310d552b60c4f2625ad4b
AUX 0022-Port-to-musl-strptime.patch 4151 BLAKE2B 0c701dab8a2f04612dd9197e795aa11c8910bf33f16ecf85aef82a4545e15ea3395f9a87127b49c13d804ebb263fde666f2ed1701824d403e29b48dc026859e3 SHA512 04fa2e0c1ea35f61cfa2b52169138956527aa0fb801fb02475827bf10fdc334aeb28a67f09d4c55b914971a8a6912bb30a04d0331d4ae88aaed1b89ca2cdb28a
AUX 0023-shared-Conditionalise-sgrp-on-ENABLE_GSHADOW.patch 6550 BLAKE2B 80d3315b8cd4772770cf9ab7f841765950bcb63c54e551964cf47d25bad8bdec2f4f69ce3915de274cd9498e71edee0271937018cd738e6e7f238cc3af52ca6b SHA512 44eeb3b1d2359399d99cc8b839690cbf4530663c0ef4d57795384b914b204911598de3e851f6ec7790feec89514e2036645b31a0058080c3f1a17601bd7649d7
AUX 0024-basic-Use-sys-prctl.h-vs-linux-prctl.h.patch 833 BLAKE2B 97c77ebf75a81e7ad476199ca0270d3fe4f1300151436da83477be0c6c9402c007ecbdddf2b357608058815e4ba35a8baeee27c04a2997180b9c3eec29639758 SHA512 aef482032a87775bcd966ca841cb5b519592263787b057919b384ead8e68b0dda208a0641bae7a3966985bc02bf5a6559300c43613c5afe03a5d0d0b97d906ca
AUX 0025-man-Ensure-notify-example-includes-string.h.patch 1014 BLAKE2B e2f82ba0efdfbea62d05a23c6594654fae044b83a1147035ddd7865d2c0f431b1af27ef969d914ce76eebb4cf21e3339d5add821964bcaea8ecb4e6039f5af03 SHA512 a2a95214fe6439dad28642be0d19841783563ef8a94ec7b435aa448e15079119cea0efb7dd47914735eb25ba34de7689726db78a76c8bc142755a7aeff23083c
AUX 0026-basic-Add-needed-signal.h-to-pidref.h.patch 872 BLAKE2B c3661ed273f302a78b1382779e0c09f3549f4e9bd5f2e2b2922b57ecbcfc229dca8682e74b49fcb7344655ad82b694d55ecdf2baffcfeba8690bde84fbec95d1 SHA512 2388122f4bb63818255726eae3c5a2cd813b3405d5ff090f3b1f360c6dd583cacbd3e93a2934a78f1e30c437a36782d91523a8369b7f76e05d192efb59f13ac9
AUX 0027-Add-sys-file.h-include-for-LOCK_-definitions.patch 770 BLAKE2B 62cb2df3f92dff8b9760dc3ae74ad356060ceac32739a7fee2cad086a23f7a89fe3a4139d6873228e11e52b52257ab0300482f164b22af7415c9fb2ca1643d67 SHA512 9a6c9f36608c592a051c4fced42ac3b7d9c66d57b85e716c814eb2837578b8b8805c7a24bb5599f109ffc6a71c72cc83d96a4a72270f0745db87da27def4e9a7
AUX 0028-basic-Handle-NIS-compat-entries-ourselves.patch 2034 BLAKE2B a16aa5a1ea79ee08ad6c34dfe7778a77f79083cfb9da44b00dd05dd26f1d27c2be0f882dd61fb5455564f395a5d58c0cae1a2d85f7facec2b682b7e1a4057575 SHA512 71ac20d5d7e2c52a075f4c7be0e007c8778b2510cc9f4804327d5f67c321c8e37a2667589d447b6fcb102046bcb925d65b8a3dc21005ace216f9ec7785d5f527
AUX 0029-edit-util-Don-t-clobber-reserved-identifier-stdin.patch 3756 BLAKE2B 93c15e9b3c967f401242f028fbd7a8dcba7268ef05bfce3e0550d098dd37439907bcb287c911ccb94586f07dc8d41be8f96dd84e1a1222529ad0f1899ff7a8df SHA512 90cedef281ddb32fe66698f198dbdbb14c4254460c657c5dd5bd60e0067a9a89e11581c138c781897724cc5eee5e46c567cbea5f3b136895b32ce868b54b6a77
AUX 0030-test-Define-FTW_CONTINUE-if-not-already-defined.patch 810 BLAKE2B df79842d464c7fb2049bd7dbb2a89d68c597acd550919e1e405ad37a5fe64d71ab2a212872b2d40e640f72409508ef2db3798792b4559533033e3a5056b9b125 SHA512 da26399fcd9f41bcbea866d3b94ae161643b56842614ac584caf9af77c543f6d758fd1c17e8adcb81ff3b23af55cd69e7f13326498f9c441f4ca7ebe787d464a
AUX 0031-os-util-Handle-negative-time_t-values-properly.patch 1350 BLAKE2B d2bc8739470c243ac3094d2c52cc25512b0ae3cdd5066f871eed72bbbfcc943a2dcea7cde53956f506085c56b6f63e2240878406e1d4d9b029358e89fd713a91 SHA512 706c6d934a6c7be5803d86988207df011eb0c31d34498ffb0d3dd7e6c5897ed4224014e2ab02fa49b7021d27f6d36efbdac27f45931aecd5e9ccd67057637d71
AUX 0032-test-Disable-fileio-test-that-fails-on-musl.patch 958 BLAKE2B 4056c7dd25e4ed9eba2a722e8eab0fb6dd4cc83d3150dbdd78abbd778db9e973022c6a8c734023a06aa0760af73fa77d44ba9d74653409074b348cd38148f421 SHA512 7d1296c4b5c120d342ec23c9369df1437552132fdd2138fd19159fc8e18c5d95f7efd5576ec9e3f05afa5307a6a4e98a66ffafc754e2b4e9e588bff7c07e39c5
AUX 0033-recurse-dir-Perform-correct-pointer-math-on-de.patch 1371 BLAKE2B cc31893f3db90d85849a5ad6853c6583b76b7e3c0b50a3c0cd44b56e5ad67cd43921107189e050aa624c34a2588b9df6d7c2abd49d88e7873d5ed9c677e26877 SHA512 0e13cf60e768d1f65ea8dbee9a84cfa26f23b6fb2b23a089b58b92fa107d7298ca64095cb6da6c5e1a1a1489adbc71895ffdff3b02a5011970b69d373f5cf89d
AUX 0034-build-path-Disable-for-now.patch 1304 BLAKE2B 2ba2eae8bfe046faa1255e9d684474b350a7cb912f1e0b0de43d5050044ddd19ebacb223752c5438b7fd2b0e548923c3dc06bb36f8a4fdd07cd72e0b125ec04a SHA512 dce04705983b4f0bf219e5cef65c9bfbadeeef888f824f392bdc96d3097d071045c227f029656140da8740129f7247126c9199c78cffb32f8c3961ef5e432648
AUX 256-bpf-gcc.patch 1044 BLAKE2B 856e9ab9f7067ad616419a5ac42e84cd726c3d464cc2415bd2ea5236df9eb306f91cd54dedc3c762cfd627aba330f1c5126046a725576d8748b89d7f4485ef93 SHA512 59a3da348f68b6202062cf01024713173f3143d8413177f66833b03ca4a47ce1e3439615c7eba5c160daf45cf16d0eaae36e63e69945e4d3fc9d9a3fa14d008d
AUX gentoo-generator-path-r2.patch 994 BLAKE2B 2bfb42623221291030fa9f7310e9bf747351a26f6ffd842628298787b74d4ec562bacaa9fc5365f7e854f695dab5f74bc06883fefc1f210dce4fd415926817ac SHA512 98054222ea232e120625573b6a532c312eccc02fe657152610b7d056b964bb2165fffae9d17fd986cf547af885d44c26b117fe68df5b24e2607d37f3729d0ada AUX gentoo-generator-path-r2.patch 994 BLAKE2B 2bfb42623221291030fa9f7310e9bf747351a26f6ffd842628298787b74d4ec562bacaa9fc5365f7e854f695dab5f74bc06883fefc1f210dce4fd415926817ac SHA512 98054222ea232e120625573b6a532c312eccc02fe657152610b7d056b964bb2165fffae9d17fd986cf547af885d44c26b117fe68df5b24e2607d37f3729d0ada
AUX gentoo-journald-audit-r1.patch 1941 BLAKE2B 93f1a0ba8dd575359e5ab4bd04f99ed3172dbe1ba14d8cade6fc08b0158e66847900d8531898ee9ec3855ac3857cf07a3e10804a3cb67719f0e9378437eba836 SHA512 affbe58aa65ebca7c1c6d790f9f68ffc44bda70a08165f5298ee4a84ab1c16cf534950ac50ffdb61b647e5eb068f51c333a76e39d8336e21e5d1b0199192139c
AUX gentoo-journald-audit.patch 1485 BLAKE2B 9cba28ce907330bbc1eafcf04a837987ed68272fcfa9cc34a309ff5d4cc2230f71a6f7fed42c79afb1c96605df141e8e40b2d8290d12ad3c18038269814f2df8 SHA512 d77d4dae9f8a7819c6d4855476f3163ee19f52b20f66a93e25818f0747404462c47e3cafbd82ba85ce1b3d2fdbabdd96a0398b71149b318c540d82403f8ad0ad AUX gentoo-journald-audit.patch 1485 BLAKE2B 9cba28ce907330bbc1eafcf04a837987ed68272fcfa9cc34a309ff5d4cc2230f71a6f7fed42c79afb1c96605df141e8e40b2d8290d12ad3c18038269814f2df8 SHA512 d77d4dae9f8a7819c6d4855476f3163ee19f52b20f66a93e25818f0747404462c47e3cafbd82ba85ce1b3d2fdbabdd96a0398b71149b318c540d82403f8ad0ad
AUX gentoo-systemctl-disable-sysv-sync-r1.patch 821 BLAKE2B f5ef796725e023bb1ed83b34a3e4d45bb008de9a134892a5321b37b56809c7a44530d18e33c7877177e8b64b2d89dfc2de844bed433db6d5e57831d20fbfb456 SHA512 8d697dbd305f6b95a4ddc47cf9d99a0e954f54e161bd59164917b62a78ff5c23fa2d5be2614569c0a2297595dae59e1ee71bb04da72cbe0c0807e1abd7da974d AUX gentoo-systemctl-disable-sysv-sync-r1.patch 821 BLAKE2B f5ef796725e023bb1ed83b34a3e4d45bb008de9a134892a5321b37b56809c7a44530d18e33c7877177e8b64b2d89dfc2de844bed433db6d5e57831d20fbfb456 SHA512 8d697dbd305f6b95a4ddc47cf9d99a0e954f54e161bd59164917b62a78ff5c23fa2d5be2614569c0a2297595dae59e1ee71bb04da72cbe0c0807e1abd7da974d
AUX legacy.conf 80 BLAKE2B 23eca4dd1743a5cf77767894d23d419c1663147c5aee6be971da64fdea0531eadfe97ac8bc4e63b44404dcf89940d438de6b7081158b78639945ce0fadbb103c SHA512 f74f05991102b644dee7822a80cb8e6c14cd1eb48bd9342bc662d5947b9f04d32e875d2a5e6476a67bdbface4d2b2159b99c11d72eb4658c5cb4caf595f138be
AUX nsswitch.conf 734 BLAKE2B 5f5a7821a84f6c8aa31fe9a68c29a1a0f24be578d427a623f14a9ef795e7da481f226efe5511d92932b5edf5638fa719808a0c3a0b8fd340799dd6bcb703a0a1 SHA512 dcbd51dacaaebdff32edb3840cc7b9b47b6521009b8786690e3673a2e78bc60bfd8e591b1048c5d452117c6659b9917ae2864462f5057cc39b704b0130522e60 AUX nsswitch.conf 734 BLAKE2B 5f5a7821a84f6c8aa31fe9a68c29a1a0f24be578d427a623f14a9ef795e7da481f226efe5511d92932b5edf5638fa719808a0c3a0b8fd340799dd6bcb703a0a1 SHA512 dcbd51dacaaebdff32edb3840cc7b9b47b6521009b8786690e3673a2e78bc60bfd8e591b1048c5d452117c6659b9917ae2864462f5057cc39b704b0130522e60
AUX systemd-test-process-util.patch 1077 BLAKE2B 0f01ea7641366cdb01a9e310d326ea73052dd0e6fe8b4217e45d0632aa2af3f2ee33b8a8f6dfe70c3b4e3f240f0e2c738a6c4d28f6f38d9e36c4f408b2ac0202 SHA512 ca23effa72da5875ec6ee112e25db51229bf1a03b61053ce4bf2b81becceb31456c137ce9f0fa05071fe1bfc2fe705fa6b885df88d9fe093fc87970936feb071
AUX systemd-user.pam 122 BLAKE2B cccc07cab47dfc0481438e503c34fa1a0b2c6b1f8ab282197719a523421d2a526f19230bb459e0347cbeb2046e35a407c78178a3fb5b79619e987cbc4ac7d5e4 SHA512 c5437677ff00fbb45798fe594e8d61b1c2bfc2d103105d7bd82e476240452477ac263700800f5d0ba91ddc895eb85f4517d5cb15c80611ec1680a686d47cd781
DIST systemd-256.5.tar.gz 15664466 BLAKE2B 334f197b53b9d35e3784bcdf81af426806339250a01a249c80392c4e7cc26633a94356581fb59edb3d042c35fb80fadcc077ebbc79eac488c18469030552d0b0 SHA512 40558194e05a17b218adf3d6df48b738c866855d43d09c1e9381c2c568a44a8f1617b64476736fc7e34416ad9e8d25dc023cf9de090b4ef9079866919377009f
DIST systemd-stable-248.6.tar.gz 10388927 BLAKE2B a102d0fd37a3422f673ced2bbd5bb88b6589195e1f436f43231fd91d79aaf9f548154a3ab2a62a9b409527b3f2e7a9ea735925364ece15c2e151d06c0e4f303f SHA512 35a9d4a9ae04423959c71ad0175d04a1792b9ab39897a497776b93cea166de58b8fb111207c104c0e747d3ffbd85480d8b0cab38e3dc0defbbf09b15211954ce DIST systemd-stable-248.6.tar.gz 10388927 BLAKE2B a102d0fd37a3422f673ced2bbd5bb88b6589195e1f436f43231fd91d79aaf9f548154a3ab2a62a9b409527b3f2e7a9ea735925364ece15c2e151d06c0e4f303f SHA512 35a9d4a9ae04423959c71ad0175d04a1792b9ab39897a497776b93cea166de58b8fb111207c104c0e747d3ffbd85480d8b0cab38e3dc0defbbf09b15211954ce
EBUILD systemd-248.6.ebuild 15713 BLAKE2B 8ef44ddd78bd0e71f3b3f09edea5e3dca67f4e042d5ce384b410d19dd84623271913d07c6725bf886602801c55050f8b19490025a318e1c726f1324a119cb074 SHA512 5f3e7a5e9d56371d3e45133fbb7aa4287280ed8e691f622cc488df50c0594b45d2603c4c616a242901763ee8354a30a409175da4177c07837523560b6ced1d30 EBUILD systemd-248.6.ebuild 15713 BLAKE2B 8ef44ddd78bd0e71f3b3f09edea5e3dca67f4e042d5ce384b410d19dd84623271913d07c6725bf886602801c55050f8b19490025a318e1c726f1324a119cb074 SHA512 5f3e7a5e9d56371d3e45133fbb7aa4287280ed8e691f622cc488df50c0594b45d2603c4c616a242901763ee8354a30a409175da4177c07837523560b6ced1d30
EBUILD systemd-256.5.ebuild 18526 BLAKE2B 5e99f3cc8a8097785af9c289b6539164d8d451657851a827bcb01bc29a4c14120bd53ca8ea71cac862af575a975a4f76a1775bebc7f41dadd27e34e3076532e4 SHA512 3716918ac6c4d13f453f59d9e91c255edf8618bc04d86fd26dbb443fa1bb3fc2d87cb687141f0b598c558ac04491a78534d6a532343d54a12e4d1a8d12dbe716
MISC metadata.xml 2373 BLAKE2B fac7a9db4c217998f84bcbb5bc490eee748a35f9d991962d5aa21c6ec562d494af06b67fe35879ee2b245445d22ea7eadc4db6305215f393c4565b86665b3130 SHA512 e2d999684255f6c6509af7dca1b9e1411eac9a4cde6f30d9631c5b9d2bbe749a40f3d08c067d2cad5eb1cdd8ad823c3afb6844cc5e3c1d455fbd8cd20d87a696 MISC metadata.xml 2373 BLAKE2B fac7a9db4c217998f84bcbb5bc490eee748a35f9d991962d5aa21c6ec562d494af06b67fe35879ee2b245445d22ea7eadc4db6305215f393c4565b86665b3130 SHA512 e2d999684255f6c6509af7dca1b9e1411eac9a4cde6f30d9631c5b9d2bbe749a40f3d08c067d2cad5eb1cdd8ad823c3afb6844cc5e3c1d455fbd8cd20d87a696

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,165 @@
From efaf94d0fde9fcd2ed890f4f8674c0c456d14610 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:01:56 -0500
Subject: [PATCH 02/34] Use XSI strerror_r instead of GNU strerror_r
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This cannot go upstream.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/errno-util.h | 2 +-
src/libsystemd/sd-bus/bus-error.c | 56 ++++++++----------------
src/libsystemd/sd-bus/test-bus-error.c | 1 -
src/libsystemd/sd-journal/journal-send.c | 7 +--
4 files changed, 20 insertions(+), 46 deletions(-)
diff --git a/src/basic/errno-util.h b/src/basic/errno-util.h
index 48b76e4bf70d..c48679c55cfd 100644
--- a/src/basic/errno-util.h
+++ b/src/basic/errno-util.h
@@ -15,7 +15,7 @@
* https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks
*
* Note that we use the GNU variant of strerror_r() here. */
-#define STRERROR(errnum) strerror_r(abs(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN)
+#define STRERROR(errnum) strerror(abs(errnum))
/* A helper to print an error message or message for functions that return 0 on EOF.
* Note that we can't use ({ … }) to define a temporary variable, so errnum is
diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c
index f415797700ef..34bc7307bbcf 100644
--- a/src/libsystemd/sd-bus/bus-error.c
+++ b/src/libsystemd/sd-bus/bus-error.c
@@ -403,15 +403,13 @@ static void bus_error_strerror(sd_bus_error *e, int error) {
assert(e);
for (;;) {
- char *x;
-
m = new(char, k);
if (!m)
return;
errno = 0;
- x = strerror_r(error, m, k);
- if (errno == ERANGE || strlen(x) >= k - 1) {
+ strerror_r(error, m, k);
+ if (errno == ERANGE) {
free(m);
k *= 2;
continue;
@@ -422,43 +420,24 @@ static void bus_error_strerror(sd_bus_error *e, int error) {
return;
}
- if (x == m) {
- if (e->_need_free > 0) {
- /* Error is already dynamic, let's just update the message */
- free((char*) e->message);
- e->message = x;
-
- } else {
- char *t;
- /* Error was const so far, let's make it dynamic, if we can */
-
- t = strdup(e->name);
- if (!t) {
- free(m);
- return;
- }
+ if (e->_need_free > 0) {
+ /* Error is already dynamic, let's just update the message */
+ free((char*) e->message);
+ e->message = m;
- e->_need_free = 1;
- e->name = t;
- e->message = x;
- }
} else {
- free(m);
-
- if (e->_need_free > 0) {
- char *t;
-
- /* Error is dynamic, let's hence make the message also dynamic */
- t = strdup(x);
- if (!t)
- return;
+ char *t;
+ /* Error was const so far, let's make it dynamic, if we can */
- free((char*) e->message);
- e->message = t;
- } else {
- /* Error is const, hence we can just override */
- e->message = x;
+ t = strdup(e->name);
+ if (!t) {
+ free(m);
+ return;
}
+
+ e->_need_free = 1;
+ e->name = t;
+ e->message = m;
}
return;
@@ -596,7 +575,8 @@ const char* _bus_error_message(const sd_bus_error *e, int error, char buf[static
if (e && e->message)
return e->message;
- return strerror_r(abs(error), buf, ERRNO_BUF_LEN);
+ strerror_r(abs(error), buf, ERRNO_BUF_LEN);
+ return buf;
}
static bool map_ok(const sd_bus_error_map *map) {
diff --git a/src/libsystemd/sd-bus/test-bus-error.c b/src/libsystemd/sd-bus/test-bus-error.c
index 91045c06c2ae..af3332d29a23 100644
--- a/src/libsystemd/sd-bus/test-bus-error.c
+++ b/src/libsystemd/sd-bus/test-bus-error.c
@@ -232,7 +232,6 @@ TEST(sd_bus_error_set_errnof) {
errno = EACCES;
assert_se(asprintf(&str, "%m") >= 0);
assert_se(streq(error.message, str));
- assert_se(error._need_free == 0);
str = mfree(str);
sd_bus_error_free(&error);
diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c
index 7d02b57d7b42..1eea1e885620 100644
--- a/src/libsystemd/sd-journal/journal-send.c
+++ b/src/libsystemd/sd-journal/journal-send.c
@@ -2,7 +2,6 @@
#include <errno.h>
#include <fcntl.h>
-#include <printf.h>
#include <stddef.h>
#include <sys/un.h>
#include <unistd.h>
@@ -358,16 +357,12 @@ static int fill_iovec_perror_and_send(const char *message, int skip, struct iove
for (;;) {
char buffer[n];
- char* j;
errno = 0;
- j = strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k);
+ strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k);
if (errno == 0) {
char error[STRLEN("ERRNO=") + DECIMAL_STR_MAX(int) + 1];
- if (j != buffer + 8 + k)
- memmove(buffer + 8 + k, j, strlen(j)+1);
-
memcpy(buffer, "MESSAGE=", 8);
if (k > 0) {
--
2.41.0

View File

@ -0,0 +1,34 @@
From e14c8f31006bda5cdc2e42d9f7dcc9c00bca1f06 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:02:34 -0500
Subject: [PATCH 03/34] fileio: Disable use of disabling write buffer
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
It doesn't work properly on musl and it breaks more than it fixes.
This cannot be sent upstream.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/fileio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 523378177fb7..2e2875ec171c 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -311,8 +311,8 @@ int write_string_file_ts_at(
if (r < 0)
goto fail;
- if (flags & WRITE_STRING_FILE_DISABLE_BUFFER)
- setvbuf(f, NULL, _IONBF, 0);
+ /*if (flags & WRITE_STRING_FILE_DISABLE_BUFFER)
+ setvbuf(f, NULL, _IONBF, 0);*/
r = write_string_stream_ts(f, line, flags, ts);
if (r < 0)
--
2.41.0

View File

@ -0,0 +1,32 @@
From df3fdeb9091977698a3c6775ed835b68105b6ae6 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:09:55 -0500
Subject: [PATCH 04/34] fs-util: Handle musl O_ACCMODE containing O_PATH
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
O_ACCMODE strictly includes 'O_SEARCH', but that is defined as 'O_PATH'
in musl. This makes the read-only test fail when O_PATH is specified as
a flag for open_mkdir_at.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/fs-util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c
index 64d309317d52..744ce847ffe5 100644
--- a/src/basic/fs-util.c
+++ b/src/basic/fs-util.c
@@ -1036,7 +1036,7 @@ int open_mkdir_at_full(int dirfd, const char *path, int flags, XOpenFlags xopen_
if (flags & ~(O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_EXCL|O_NOATIME|O_NOFOLLOW|O_PATH))
return -EINVAL;
- if ((flags & O_ACCMODE) != O_RDONLY)
+ if (((flags & O_ACCMODE) & ~O_PATH) != O_RDONLY)
return -EINVAL;
/* Note that O_DIRECTORY|O_NOFOLLOW is implied, but we allow specifying it anyway. The following
--
2.41.0

View File

@ -0,0 +1,760 @@
From f423321481330c5f2f9158c490162b2e62b4c8bd Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:15:10 -0500
Subject: [PATCH 05/34] Use libc over Linux UAPI headers when possible
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
The Linux UAPI headers cause a lot of breakage. I can see that upstream
has started doing this already with some of the comments, so it is
possible this might need to be massaged and upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/arphrd-util.c | 3 ++-
src/basic/generate-arphrd-list.sh | 2 +-
src/basic/socket-util.h | 2 +-
src/libsystemd-network/sd-dhcp6-client.c | 3 ++-
src/libsystemd/sd-netlink/netlink-message-rtnl.c | 1 +
src/libsystemd/sd-netlink/netlink-types-rtnl.c | 1 +
src/network/netdev/bareudp.c | 3 ++-
src/network/netdev/batadv.c | 2 +-
src/network/netdev/bond.c | 3 ++-
src/network/netdev/bridge.c | 5 +++--
src/network/netdev/dummy.c | 2 +-
src/network/netdev/geneve.c | 2 +-
src/network/netdev/ifb.c | 2 +-
src/network/netdev/ipoib.c | 2 +-
src/network/netdev/ipvlan.c | 2 +-
src/network/netdev/macsec.c | 3 ++-
src/network/netdev/macvlan.c | 2 +-
src/network/netdev/netdev-gperf.gperf | 1 +
src/network/netdev/netdev.c | 3 ++-
src/network/netdev/netdevsim.c | 2 +-
src/network/netdev/nlmon.c | 2 +-
src/network/netdev/tunnel.c | 3 ++-
src/network/netdev/tuntap.c | 2 +-
src/network/netdev/vcan.c | 2 +-
src/network/netdev/veth.c | 2 +-
src/network/netdev/vlan.c | 2 +-
src/network/netdev/vrf.c | 2 +-
src/network/netdev/vxcan.c | 2 +-
src/network/netdev/vxlan.c | 2 +-
src/network/netdev/wireguard.c | 5 +++--
src/network/netdev/xfrm.c | 2 +-
src/network/networkctl.c | 1 +
src/network/networkd-bridge-mdb.c | 2 ++
src/network/networkd-bridge-vlan.c | 1 +
src/network/networkd-dhcp-common.c | 4 +++-
src/network/networkd-dhcp-prefix-delegation.c | 1 +
src/network/networkd-dhcp-server.c | 3 ++-
src/network/networkd-dhcp4.c | 3 ++-
src/network/networkd-ipv6ll.c | 2 +-
src/network/networkd-link.c | 3 ++-
src/network/networkd-ndisc.c | 3 ++-
src/network/networkd-network.c | 1 +
src/network/networkd-route.c | 1 +
src/network/networkd-setlink.c | 3 ++-
src/network/networkd-sysctl.c | 2 +-
src/network/test-network-tables.c | 1 +
src/shared/ethtool-util.c | 1 +
src/shared/netif-util.c | 2 +-
src/test/test-arphrd-util.c | 2 +-
src/udev/net/link-config.c | 1 +
src/udev/udev-builtin-net_id.c | 3 ++-
51 files changed, 71 insertions(+), 41 deletions(-)
diff --git a/src/basic/arphrd-util.c b/src/basic/arphrd-util.c
index 3ea2c9d09a90..e21b60957376 100644
--- a/src/basic/arphrd-util.c
+++ b/src/basic/arphrd-util.c
@@ -1,8 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <errno.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include <linux/if_infiniband.h>
#include <string.h>
diff --git a/src/basic/generate-arphrd-list.sh b/src/basic/generate-arphrd-list.sh
index ca1ba7cad4d1..2e8fb64ba305 100755
--- a/src/basic/generate-arphrd-list.sh
+++ b/src/basic/generate-arphrd-list.sh
@@ -3,6 +3,6 @@
set -eu
set -o pipefail
-${1:?} -dM -include linux/if_arp.h -include "${2:?}" - </dev/null | \
+${1:?} -dM -include net/if_arp.h -include "${2:?}" - </dev/null | \
awk '/^#define[ \t]+ARPHRD_[^ \t]+[ \t]+[^ \t]/ { print $2; }' | \
sed -e 's/ARPHRD_//'
diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h
index c784125ccb42..4b759a42e648 100644
--- a/src/basic/socket-util.h
+++ b/src/basic/socket-util.h
@@ -3,7 +3,7 @@
#include <inttypes.h>
#include <linux/netlink.h>
-#include <linux/if_ether.h>
+#include <netinet/if_ether.h>
#include <linux/if_infiniband.h>
#include <linux/if_packet.h>
#include <netinet/in.h>
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
index 3e992d7cadcd..131bc83c614c 100644
--- a/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/libsystemd-network/sd-dhcp6-client.c
@@ -4,8 +4,9 @@
***/
#include <errno.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <sys/ioctl.h>
-#include <linux/if_arp.h>
#include <linux/if_infiniband.h>
#include "sd-dhcp6-client.h"
diff --git a/src/libsystemd/sd-netlink/netlink-message-rtnl.c b/src/libsystemd/sd-netlink/netlink-message-rtnl.c
index fb11c7e02bb2..5159b122653c 100644
--- a/src/libsystemd/sd-netlink/netlink-message-rtnl.c
+++ b/src/libsystemd/sd-netlink/netlink-message-rtnl.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <linux/fib_rules.h>
#include <linux/if_addrlabel.h>
diff --git a/src/libsystemd/sd-netlink/netlink-types-rtnl.c b/src/libsystemd/sd-netlink/netlink-types-rtnl.c
index e39a75cfe475..dbf2583dd815 100644
--- a/src/libsystemd/sd-netlink/netlink-types-rtnl.c
+++ b/src/libsystemd/sd-netlink/netlink-types-rtnl.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <linux/batman_adv.h>
diff --git a/src/network/netdev/bareudp.c b/src/network/netdev/bareudp.c
index 1df886573ba2..d324c716917b 100644
--- a/src/network/netdev/bareudp.c
+++ b/src/network/netdev/bareudp.c
@@ -1,8 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later
* Copyright © 2020 VMware, Inc. */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include "bareudp.h"
#include "netlink-util.h"
diff --git a/src/network/netdev/batadv.c b/src/network/netdev/batadv.c
index 26da0231d459..dbdfc7f80ee2 100644
--- a/src/network/netdev/batadv.c
+++ b/src/network/netdev/batadv.c
@@ -1,9 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <inttypes.h>
+#include <net/if_arp.h>
#include <netinet/in.h>
#include <linux/genetlink.h>
-#include <linux/if_arp.h>
#include "batadv.h"
#include "fileio.h"
diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c
index 52a7f126b6db..dc5d1fedb229 100644
--- a/src/network/netdev/bond.c
+++ b/src/network/netdev/bond.c
@@ -1,7 +1,8 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include "alloc-util.h"
#include "bond.h"
diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c
index d426c0c5019f..0f60a7dfae9b 100644
--- a/src/network/netdev/bridge.c
+++ b/src/network/netdev/bridge.c
@@ -2,9 +2,10 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
-#include <linux/if_arp.h>
-#include <linux/if_bridge.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
+#include <linux/if_bridge.h>
#include "bridge.h"
#include "netlink-util.h"
diff --git a/src/network/netdev/dummy.c b/src/network/netdev/dummy.c
index 00df1d278737..9e03d02b42ea 100644
--- a/src/network/netdev/dummy.c
+++ b/src/network/netdev/dummy.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "dummy.h"
diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c
index 22c2b00e1b70..170aeddfd597 100644
--- a/src/network/netdev/geneve.c
+++ b/src/network/netdev/geneve.c
@@ -2,7 +2,7 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include <netinet/in.h>
#include "alloc-util.h"
diff --git a/src/network/netdev/ifb.c b/src/network/netdev/ifb.c
index d7ff44cb9ea6..747733139ac7 100644
--- a/src/network/netdev/ifb.c
+++ b/src/network/netdev/ifb.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later
* Copyright © 2019 VMware, Inc. */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "ifb.h"
diff --git a/src/network/netdev/ipoib.c b/src/network/netdev/ipoib.c
index d5fe299b7b43..a3d9309d7b5e 100644
--- a/src/network/netdev/ipoib.c
+++ b/src/network/netdev/ipoib.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include <linux/if_link.h>
#include "ipoib.h"
diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c
index 51ae64341db2..5908733b6b57 100644
--- a/src/network/netdev/ipvlan.c
+++ b/src/network/netdev/ipvlan.c
@@ -2,8 +2,8 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include "conf-parser.h"
#include "ipvlan.h"
diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c
index 4b9f19cc95cf..58729ad29461 100644
--- a/src/network/netdev/macsec.c
+++ b/src/network/netdev/macsec.c
@@ -1,7 +1,8 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include <linux/if_ether.h>
#include <linux/if_macsec.h>
#include <linux/genetlink.h>
diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c
index 21933d3970a1..adbe9817e7b3 100644
--- a/src/network/netdev/macvlan.c
+++ b/src/network/netdev/macvlan.c
@@ -2,8 +2,8 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include "conf-parser.h"
#include "macvlan.h"
diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf
index 4883a2652d46..3d2b560941de 100644
--- a/src/network/netdev/netdev-gperf.gperf
+++ b/src/network/netdev/netdev-gperf.gperf
@@ -3,6 +3,7 @@
#if __GNUC__ >= 7
_Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"")
#endif
+#include <netinet/if_ether.h>
#include <stddef.h>
#include "bareudp.h"
#include "batadv.h"
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
index 2b411425ba16..db44e67df621 100644
--- a/src/network/netdev/netdev.c
+++ b/src/network/netdev/netdev.c
@@ -2,8 +2,9 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include <unistd.h>
#include "alloc-util.h"
diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c
index 15d5c132f967..8b1d3440325b 100644
--- a/src/network/netdev/netdevsim.c
+++ b/src/network/netdev/netdevsim.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "netdevsim.h"
diff --git a/src/network/netdev/nlmon.c b/src/network/netdev/nlmon.c
index ff372092e614..3118df501054 100644
--- a/src/network/netdev/nlmon.c
+++ b/src/network/netdev/nlmon.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "nlmon.h"
diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c
index db84e7cf6eeb..1789f532b762 100644
--- a/src/network/netdev/tunnel.c
+++ b/src/network/netdev/tunnel.c
@@ -1,8 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <linux/fou.h>
-#include <linux/if_arp.h>
#include <linux/if_tunnel.h>
#include <linux/ip.h>
#include <linux/ip6_tunnel.h>
diff --git a/src/network/netdev/tuntap.c b/src/network/netdev/tuntap.c
index f5be31ed9438..06a0c3e616f0 100644
--- a/src/network/netdev/tuntap.c
+++ b/src/network/netdev/tuntap.c
@@ -2,10 +2,10 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <netinet/if_ether.h>
#include <errno.h>
#include <fcntl.h>
#include <linux/if_tun.h>
-#include <netinet/if_ether.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
diff --git a/src/network/netdev/vcan.c b/src/network/netdev/vcan.c
index 380547ee1e85..5dbf74f10c4d 100644
--- a/src/network/netdev/vcan.c
+++ b/src/network/netdev/vcan.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "vcan.h"
diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c
index 78555286d1a4..4dc4ed146a8a 100644
--- a/src/network/netdev/veth.c
+++ b/src/network/netdev/veth.c
@@ -2,8 +2,8 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
#include <errno.h>
-#include <linux/if_arp.h>
#include <linux/veth.h>
#include <netinet/in.h>
diff --git a/src/network/netdev/vlan.c b/src/network/netdev/vlan.c
index 60e49a5b8a9a..1dd2b962ac86 100644
--- a/src/network/netdev/vlan.c
+++ b/src/network/netdev/vlan.c
@@ -2,8 +2,8 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
#include <errno.h>
-#include <linux/if_arp.h>
#include <linux/if_vlan.h>
#include "parse-util.h"
diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c
index 24079a7203c8..9108c891cc13 100644
--- a/src/network/netdev/vrf.c
+++ b/src/network/netdev/vrf.c
@@ -2,7 +2,7 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include <netinet/in.h>
#include "vrf.h"
diff --git a/src/network/netdev/vxcan.c b/src/network/netdev/vxcan.c
index c0343f45b621..7d74950c33fa 100644
--- a/src/network/netdev/vxcan.c
+++ b/src/network/netdev/vxcan.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
#include <linux/can/vxcan.h>
-#include <linux/if_arp.h>
#include "vxcan.h"
diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c
index 37f65967a6bd..065b3966bd79 100644
--- a/src/network/netdev/vxlan.c
+++ b/src/network/netdev/vxlan.c
@@ -2,8 +2,8 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include "conf-parser.h"
#include "alloc-util.h"
diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c
index fed1be8d1104..ff4d1c1bc501 100644
--- a/src/network/netdev/wireguard.c
+++ b/src/network/netdev/wireguard.c
@@ -5,9 +5,10 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
-#include <linux/if_arp.h>
-#include <linux/ipv6_route.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
+#include <linux/ipv6_route.h>
#include <sys/ioctl.h>
#include "sd-resolve.h"
diff --git a/src/network/netdev/xfrm.c b/src/network/netdev/xfrm.c
index 905bfc0bdf03..c4a226da19a0 100644
--- a/src/network/netdev/xfrm.c
+++ b/src/network/netdev/xfrm.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "missing_network.h"
#include "xfrm.h"
diff --git a/src/network/networkctl.c b/src/network/networkctl.c
index a447c39a6414..0dbdbe0837f2 100644
--- a/src/network/networkctl.c
+++ b/src/network/networkctl.c
@@ -2,6 +2,7 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/ethernet.h>
#include <arpa/inet.h>
#include <getopt.h>
#include <linux/if_addrlabel.h>
diff --git a/src/network/networkd-bridge-mdb.c b/src/network/networkd-bridge-mdb.c
index 7ff4a1884671..9b417e3bf58b 100644
--- a/src/network/networkd-bridge-mdb.c
+++ b/src/network/networkd-bridge-mdb.c
@@ -2,6 +2,8 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <netinet/if_ether.h>
+#include <netinet/in.h>
#include <linux/if_bridge.h>
#include "netlink-util.h"
diff --git a/src/network/networkd-bridge-vlan.c b/src/network/networkd-bridge-vlan.c
index 0deffa46510d..94b15550205a 100644
--- a/src/network/networkd-bridge-vlan.c
+++ b/src/network/networkd-bridge-vlan.c
@@ -3,6 +3,7 @@
Copyright © 2016 BISDN GmbH. All rights reserved.
***/
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <linux/if_bridge.h>
#include <stdbool.h>
diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c
index 9f0268d934e4..a452dafb8a97 100644
--- a/src/network/networkd-dhcp-common.c
+++ b/src/network/networkd-dhcp-common.c
@@ -1,7 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include "bus-error.h"
#include "bus-locator.h"
diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c
index 2e660b77631a..25b3fb747406 100644
--- a/src/network/networkd-dhcp-prefix-delegation.c
+++ b/src/network/networkd-dhcp-prefix-delegation.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <netinet/in.h>
#include <linux/ipv6_route.h>
#include "dhcp6-lease-internal.h"
diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
index c35102af74a5..8fb7700e8cd3 100644
--- a/src/network/networkd-dhcp-server.c
+++ b/src/network/networkd-dhcp-server.c
@@ -1,7 +1,8 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
-#include <linux/if_arp.h>
#include <linux/if.h>
#include "sd-dhcp-server.h"
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index 4dd6044b1897..359a8bd3b5e2 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -1,9 +1,10 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include "alloc-util.h"
#include "dhcp-client-internal.h"
diff --git a/src/network/networkd-ipv6ll.c b/src/network/networkd-ipv6ll.c
index 32229a3fc70e..5e5d2926f3e2 100644
--- a/src/network/networkd-ipv6ll.c
+++ b/src/network/networkd-ipv6ll.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include "in-addr-util.h"
#include "networkd-address.h"
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 9ce75361fdca..17ab1b38be15 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -2,9 +2,10 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include <linux/if_link.h>
#include <linux/netdevice.h>
#include <sys/socket.h>
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index 84558a5afc5c..23a0dc06172f 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -4,9 +4,10 @@
***/
#include <arpa/inet.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/icmp6.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include "sd-ndisc.h"
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 8232db06c934..fd3599420831 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -2,6 +2,7 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <linux/netdevice.h>
#include <unistd.h>
diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
index d596fd81e63c..e2dcc87f6c2e 100644
--- a/src/network/networkd-route.c
+++ b/src/network/networkd-route.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <netinet/in.h>
#include <linux/ipv6_route.h>
#include <linux/nexthop.h>
diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c
index 058bc00ba10b..3f84f9ca58a5 100644
--- a/src/network/networkd-setlink.c
+++ b/src/network/networkd-setlink.c
@@ -1,8 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <netinet/in.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include <linux/if_bridge.h>
#include "missing_network.h"
diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c
index 68c23e0eb796..fb56ee006fdc 100644
--- a/src/network/networkd-sysctl.c
+++ b/src/network/networkd-sysctl.c
@@ -1,8 +1,8 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
#include <netinet/in.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include "af-list.h"
#include "missing_network.h"
diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c
index f4e14c6d9b30..bc8378c9c946 100644
--- a/src/network/test-network-tables.c
+++ b/src/network/test-network-tables.c
@@ -2,6 +2,7 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/ethernet.h>
#include <linux/if.h>
#include "bond.h"
diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c
index 1e100c35ef53..2a28b14d6fc5 100644
--- a/src/shared/ethtool-util.c
+++ b/src/shared/ethtool-util.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <net/if.h>
+#include <netinet/if_ether.h>
#include <sys/ioctl.h>
#include <linux/ethtool.h>
#include <linux/netdevice.h>
diff --git a/src/shared/netif-util.c b/src/shared/netif-util.c
index 8adc2c89c814..393db78123ca 100644
--- a/src/shared/netif-util.c
+++ b/src/shared/netif-util.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <net/if_arp.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include "arphrd-util.h"
#include "device-util.h"
diff --git a/src/test/test-arphrd-util.c b/src/test/test-arphrd-util.c
index 15b799775043..00072979111a 100644
--- a/src/test/test-arphrd-util.c
+++ b/src/test/test-arphrd-util.c
@@ -2,7 +2,7 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
-#include <linux/if_arp.h>
+#include <net/if_arp.h>
#include "arphrd-util.h"
#include "string-util.h"
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index 647cdeeb9dba..0325cb3a8e97 100644
--- a/src/udev/net/link-config.c
+++ b/src/udev/net/link-config.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <netinet/if_ether.h>
#include <linux/netdevice.h>
#include <netinet/ether.h>
#include <unistd.h>
diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
index 384a1f31cbc4..2c97e9651eda 100644
--- a/src/udev/udev-builtin-net_id.c
+++ b/src/udev/udev-builtin-net_id.c
@@ -14,12 +14,13 @@
/* Make sure the net/if.h header is included before any linux/ one */
#include <net/if.h>
+#include <net/if_arp.h>
+#include <netinet/if_ether.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <unistd.h>
#include <linux/if.h>
-#include <linux/if_arp.h>
#include <linux/netdevice.h>
#include <linux/pci_regs.h>
--
2.41.0

View File

@ -0,0 +1,33 @@
From 8c528bcfd198d318fc25b4e75874e74449c2f020 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:26:39 -0500
Subject: [PATCH 06/34] test: $PATH += /sbin so fstab-generator finds fsck
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Our fsck is in /sbin, not /usr/sbin. (Likely, Debian's was in /sbin
before the ill-advised usr-merge, too.)
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
test/test-fstab-generator.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test-fstab-generator.sh b/test/test-fstab-generator.sh
index 476312133e43..c265c60e03d6 100755
--- a/test/test-fstab-generator.sh
+++ b/test/test-fstab-generator.sh
@@ -17,7 +17,7 @@ fi
src="$(dirname "$0")/testdata/test-fstab-generator"
# fsck(8) is located in /usr/sbin on Debian
-PATH=$PATH:/usr/sbin
+PATH=$PATH:/usr/sbin:/sbin
# systemd-pcrfs@.service could be enabled or not, depending on the host state
# of the host system. Override the measurement to avoid the issue.
--
2.41.0

View File

@ -0,0 +1,416 @@
From 93a4b034c58490d73a7eaae26d262b7de3d19ef6 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:32:31 -0500
Subject: [PATCH 07/34] Handle lack of <printf.h>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
We are more portable about it than most other patchsets, and we
conditionalise it well enough, but I doubt upstream will accept this.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
meson.build | 1 +
src/basic/meson.build | 5 +
src/basic/parse-printf-format.c | 273 ++++++++++++++++++++++++++++++++
src/basic/parse-printf-format.h | 57 +++++++
src/basic/stdio-util.h | 6 +-
5 files changed, 341 insertions(+), 1 deletion(-)
create mode 100644 src/basic/parse-printf-format.c
create mode 100644 src/basic/parse-printf-format.h
diff --git a/meson.build b/meson.build
index c068acc169a3..b11f73dc0c20 100644
--- a/meson.build
+++ b/meson.build
@@ -800,6 +800,7 @@ foreach header : ['crypt.h',
'linux/memfd.h',
'linux/time_types.h',
'linux/vm_sockets.h',
+ 'printf.h',
'sys/auxv.h',
'sys/sdt.h',
'threads.h',
diff --git a/src/basic/meson.build b/src/basic/meson.build
index b538775576ab..ed5ce81876bc 100644
--- a/src/basic/meson.build
+++ b/src/basic/meson.build
@@ -189,6 +189,11 @@ endforeach
basic_sources += generated_gperf_headers
+if conf.get('HAVE_PRINTF_H') != 1
+ basic_sources += [files('parse-printf-format.c')]
+endif
+
+
############################################################
arch_list = [
diff --git a/src/basic/parse-printf-format.c b/src/basic/parse-printf-format.c
new file mode 100644
index 000000000000..49437e544540
--- /dev/null
+++ b/src/basic/parse-printf-format.c
@@ -0,0 +1,273 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2014 Emil Renner Berthing <systemd@esmil.dk>
+
+ With parts from the musl C library
+ Copyright 2005-2014 Rich Felker, et al.
+
+ 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.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stddef.h>
+#include <string.h>
+
+#include "parse-printf-format.h"
+
+static const char *consume_nonarg(const char *fmt)
+{
+ do {
+ if (*fmt == '\0')
+ return fmt;
+ } while (*fmt++ != '%');
+ return fmt;
+}
+
+static const char *consume_num(const char *fmt)
+{
+ for (;*fmt >= '0' && *fmt <= '9'; fmt++)
+ /* do nothing */;
+ return fmt;
+}
+
+static const char *consume_argn(const char *fmt, size_t *arg)
+{
+ const char *p = fmt;
+ size_t val = 0;
+
+ if (*p < '1' || *p > '9')
+ return fmt;
+ do {
+ val = 10*val + (*p++ - '0');
+ } while (*p >= '0' && *p <= '9');
+
+ if (*p != '$')
+ return fmt;
+ *arg = val;
+ return p+1;
+}
+
+static const char *consume_flags(const char *fmt)
+{
+ while (1) {
+ switch (*fmt) {
+ case '#':
+ case '0':
+ case '-':
+ case ' ':
+ case '+':
+ case '\'':
+ case 'I':
+ fmt++;
+ continue;
+ }
+ return fmt;
+ }
+}
+
+enum state {
+ BARE,
+ LPRE,
+ LLPRE,
+ HPRE,
+ HHPRE,
+ BIGLPRE,
+ ZTPRE,
+ JPRE,
+ STOP
+};
+
+enum type {
+ NONE,
+ PTR,
+ INT,
+ UINT,
+ ULLONG,
+ LONG,
+ ULONG,
+ SHORT,
+ USHORT,
+ CHAR,
+ UCHAR,
+ LLONG,
+ SIZET,
+ IMAX,
+ UMAX,
+ PDIFF,
+ UIPTR,
+ DBL,
+ LDBL,
+ MAXTYPE
+};
+
+static const short pa_types[MAXTYPE] = {
+ [NONE] = PA_INT,
+ [PTR] = PA_POINTER,
+ [INT] = PA_INT,
+ [UINT] = PA_INT,
+ [ULLONG] = PA_INT | PA_FLAG_LONG_LONG,
+ [LONG] = PA_INT | PA_FLAG_LONG,
+ [ULONG] = PA_INT | PA_FLAG_LONG,
+ [SHORT] = PA_INT | PA_FLAG_SHORT,
+ [USHORT] = PA_INT | PA_FLAG_SHORT,
+ [CHAR] = PA_CHAR,
+ [UCHAR] = PA_CHAR,
+ [LLONG] = PA_INT | PA_FLAG_LONG_LONG,
+ [SIZET] = PA_INT | PA_FLAG_LONG,
+ [IMAX] = PA_INT | PA_FLAG_LONG_LONG,
+ [UMAX] = PA_INT | PA_FLAG_LONG_LONG,
+ [PDIFF] = PA_INT | PA_FLAG_LONG_LONG,
+ [UIPTR] = PA_INT | PA_FLAG_LONG,
+ [DBL] = PA_DOUBLE,
+ [LDBL] = PA_DOUBLE | PA_FLAG_LONG_DOUBLE
+};
+
+#define S(x) [(x)-'A']
+#define E(x) (STOP + (x))
+
+static const unsigned char states[]['z'-'A'+1] = {
+ { /* 0: bare types */
+ S('d') = E(INT), S('i') = E(INT),
+ S('o') = E(UINT),S('u') = E(UINT),S('x') = E(UINT), S('X') = E(UINT),
+ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL),
+ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL),
+ S('c') = E(CHAR),S('C') = E(INT),
+ S('s') = E(PTR), S('S') = E(PTR), S('p') = E(UIPTR),S('n') = E(PTR),
+ S('m') = E(NONE),
+ S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE,
+ S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE
+ }, { /* 1: l-prefixed */
+ S('d') = E(LONG), S('i') = E(LONG),
+ S('o') = E(ULONG),S('u') = E(ULONG),S('x') = E(ULONG),S('X') = E(ULONG),
+ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL),
+ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL),
+ S('c') = E(INT), S('s') = E(PTR), S('n') = E(PTR),
+ S('l') = LLPRE
+ }, { /* 2: ll-prefixed */
+ S('d') = E(LLONG), S('i') = E(LLONG),
+ S('o') = E(ULLONG),S('u') = E(ULLONG),
+ S('x') = E(ULLONG),S('X') = E(ULLONG),
+ S('n') = E(PTR)
+ }, { /* 3: h-prefixed */
+ S('d') = E(SHORT), S('i') = E(SHORT),
+ S('o') = E(USHORT),S('u') = E(USHORT),
+ S('x') = E(USHORT),S('X') = E(USHORT),
+ S('n') = E(PTR),
+ S('h') = HHPRE
+ }, { /* 4: hh-prefixed */
+ S('d') = E(CHAR), S('i') = E(CHAR),
+ S('o') = E(UCHAR),S('u') = E(UCHAR),
+ S('x') = E(UCHAR),S('X') = E(UCHAR),
+ S('n') = E(PTR)
+ }, { /* 5: L-prefixed */
+ S('e') = E(LDBL),S('f') = E(LDBL),S('g') = E(LDBL), S('a') = E(LDBL),
+ S('E') = E(LDBL),S('F') = E(LDBL),S('G') = E(LDBL), S('A') = E(LDBL),
+ S('n') = E(PTR)
+ }, { /* 6: z- or t-prefixed (assumed to be same size) */
+ S('d') = E(PDIFF),S('i') = E(PDIFF),
+ S('o') = E(SIZET),S('u') = E(SIZET),
+ S('x') = E(SIZET),S('X') = E(SIZET),
+ S('n') = E(PTR)
+ }, { /* 7: j-prefixed */
+ S('d') = E(IMAX), S('i') = E(IMAX),
+ S('o') = E(UMAX), S('u') = E(UMAX),
+ S('x') = E(UMAX), S('X') = E(UMAX),
+ S('n') = E(PTR)
+ }
+};
+
+size_t parse_printf_format(const char *fmt, size_t n, int *types)
+{
+ size_t i = 0;
+ size_t last = 0;
+
+ memset(types, 0, n);
+
+ while (1) {
+ size_t arg;
+ unsigned int state;
+
+ fmt = consume_nonarg(fmt);
+ if (*fmt == '\0')
+ break;
+ if (*fmt == '%') {
+ fmt++;
+ continue;
+ }
+ arg = 0;
+ fmt = consume_argn(fmt, &arg);
+ /* flags */
+ fmt = consume_flags(fmt);
+ /* width */
+ if (*fmt == '*') {
+ size_t warg = 0;
+ fmt = consume_argn(fmt+1, &warg);
+ if (warg == 0)
+ warg = ++i;
+ if (warg > last)
+ last = warg;
+ if (warg <= n && types[warg-1] == NONE)
+ types[warg-1] = INT;
+ } else
+ fmt = consume_num(fmt);
+ /* precision */
+ if (*fmt == '.') {
+ fmt++;
+ if (*fmt == '*') {
+ size_t parg = 0;
+ fmt = consume_argn(fmt+1, &parg);
+ if (parg == 0)
+ parg = ++i;
+ if (parg > last)
+ last = parg;
+ if (parg <= n && types[parg-1] == NONE)
+ types[parg-1] = INT;
+ } else {
+ if (*fmt == '-')
+ fmt++;
+ fmt = consume_num(fmt);
+ }
+ }
+ /* length modifier and conversion specifier */
+ state = BARE;
+ do {
+ unsigned char c = *fmt++;
+
+ if (c < 'A' || c > 'z')
+ continue;
+ state = states[state]S(c);
+ if (state == 0)
+ continue;
+ } while (state < STOP);
+
+ if (state == E(NONE))
+ continue;
+
+ if (arg == 0)
+ arg = ++i;
+ if (arg > last)
+ last = arg;
+ if (arg <= n)
+ types[arg-1] = state - STOP;
+ }
+
+ if (last > n)
+ last = n;
+ for (i = 0; i < last; i++)
+ types[i] = pa_types[types[i]];
+
+ return last;
+}
diff --git a/src/basic/parse-printf-format.h b/src/basic/parse-printf-format.h
new file mode 100644
index 000000000000..47be7522d7fa
--- /dev/null
+++ b/src/basic/parse-printf-format.h
@@ -0,0 +1,57 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2014 Emil Renner Berthing <systemd@esmil.dk>
+
+ With parts from the GNU C Library
+ Copyright 1991-2014 Free Software Foundation, Inc.
+
+ 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.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#pragma once
+
+#include "config.h"
+
+#if HAVE_PRINTF_H
+#include <printf.h>
+#else
+
+#include <stddef.h>
+
+enum { /* C type: */
+ PA_INT, /* int */
+ PA_CHAR, /* int, cast to char */
+ PA_WCHAR, /* wide char */
+ PA_STRING, /* const char *, a '\0'-terminated string */
+ PA_WSTRING, /* const wchar_t *, wide character string */
+ PA_POINTER, /* void * */
+ PA_FLOAT, /* float */
+ PA_DOUBLE, /* double */
+ PA_LAST
+};
+
+/* Flag bits that can be set in a type returned by `parse_printf_format'. */
+#define PA_FLAG_MASK 0xff00
+#define PA_FLAG_LONG_LONG (1 << 8)
+#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG
+#define PA_FLAG_LONG (1 << 9)
+#define PA_FLAG_SHORT (1 << 10)
+#define PA_FLAG_PTR (1 << 11)
+
+size_t parse_printf_format(const char *fmt, size_t n, int *types);
+
+#endif /* HAVE_PRINTF_H */
diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h
index 0a2239d02259..259255fc651d 100644
--- a/src/basic/stdio-util.h
+++ b/src/basic/stdio-util.h
@@ -1,12 +1,16 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
-#include <printf.h>
#include <stdarg.h>
#include <stdio.h>
#include <sys/types.h>
#include "macro.h"
+#if HAVE_PRINTF_H
+#include <printf.h>
+#else
+#include "parse-printf-format.h"
+#endif
_printf_(3, 4)
static inline char* snprintf_ok(char *buf, size_t len, const char *format, ...) {
--
2.41.0

View File

@ -0,0 +1,28 @@
From eb5cb893099e14f9228a114b3647df602a1c831e Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:34:01 -0500
Subject: [PATCH 08/34] test: Ensure sysusers test 11 passes on musl libc
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
musl will skip invalid lines, like the o1 group in the sysusers test.
Make the line valid so that the test passes.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
test/test-sysusers/test-11.initial-group | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test-sysusers/test-11.initial-group b/test/test-sysusers/test-11.initial-group
index 88d31f2c729a..df98ae771c5f 100644
--- a/test/test-sysusers/test-11.initial-group
+++ b/test/test-sysusers/test-11.initial-group
@@ -1,4 +1,4 @@
-o1:x:100
+o1:x:100:
+giant:::bill,tina,alan,hetty
-transport:::
+:::
--
2.41.0

View File

@ -0,0 +1,26 @@
From 8356019ca35e557a98fbb5ccfbc5b60f64ea38d5 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:34:45 -0500
Subject: [PATCH 09/34] test: Change expected message for unhappy sysusers
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
The error string for ERANGE is different between musl and glibc.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
test/test-sysusers/unhappy-1.expected-err | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test-sysusers/unhappy-1.expected-err b/test/test-sysusers/unhappy-1.expected-err
index f6b1b3c5e6f0..17da5bd2537b 100644
--- a/test/test-sysusers/unhappy-1.expected-err
+++ b/test/test-sysusers/unhappy-1.expected-err
@@ -1 +1 @@
- Failed to parse UID: '9999999999': Numerical result out of range
+ Failed to parse UID: '9999999999': Result not representable
--
2.41.0

View File

@ -0,0 +1,30 @@
From ff5d3856b452bc6890b54a94b40302029195d965 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:44:04 -0500
Subject: [PATCH 10/34] basic: Support musl definition of rlim_t
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This cannot be upstreamed, but we should find a better way anyway.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/format-util.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/format-util.h b/src/basic/format-util.h
index ba7cff6a8b55..6239051d5f88 100644
--- a/src/basic/format-util.h
+++ b/src/basic/format-util.h
@@ -43,7 +43,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32_t));
#endif
#if SIZEOF_RLIM_T == 8
-# define RLIM_FMT "%" PRIu64
+# define RLIM_FMT "%llu"
#elif SIZEOF_RLIM_T == 4
# define RLIM_FMT "%" PRIu32
#else
--
2.41.0

View File

@ -0,0 +1,160 @@
From 14f2aeac2ca72df478bc9ddd33070f7ec850baa3 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:45:11 -0500
Subject: [PATCH 11/34] Handle musl lack of GLOB_BRACE
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Based on OE patch. This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/glob-util.c | 12 ++++++++++++
src/test/test-glob-util.c | 39 +++++++--------------------------------
src/tmpfiles/tmpfiles.c | 10 ++++++++++
3 files changed, 29 insertions(+), 32 deletions(-)
diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c
index 802ca8c655fc..23818a67c680 100644
--- a/src/basic/glob-util.c
+++ b/src/basic/glob-util.c
@@ -12,6 +12,12 @@
#include "path-util.h"
#include "strv.h"
+/* Don't fail if the standard library
+ * doesn't provide brace expansion */
+#ifndef GLOB_BRACE
+#define GLOB_BRACE 0
+#endif
+
static void closedir_wrapper(void* v) {
(void) closedir(v);
}
@@ -19,6 +25,7 @@ static void closedir_wrapper(void* v) {
int safe_glob(const char *path, int flags, glob_t *pglob) {
int k;
+#ifdef GLOB_ALTDIRFUNC
/* We want to set GLOB_ALTDIRFUNC ourselves, don't allow it to be set. */
assert(!(flags & GLOB_ALTDIRFUNC));
@@ -32,9 +39,14 @@ int safe_glob(const char *path, int flags, glob_t *pglob) {
pglob->gl_lstat = lstat;
if (!pglob->gl_stat)
pglob->gl_stat = stat;
+#endif
errno = 0;
+#ifdef GLOB_ALTDIRFUNC
k = glob(path, flags | GLOB_ALTDIRFUNC, NULL, pglob);
+#else
+ k = glob(path, flags, NULL, pglob);
+#endif
if (k == GLOB_NOMATCH)
return -ENOENT;
if (k == GLOB_NOSPACE)
diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c
index 49d71f15c714..65ae0b230dd5 100644
--- a/src/test/test-glob-util.c
+++ b/src/test/test-glob-util.c
@@ -34,6 +34,12 @@ TEST(glob_first) {
ASSERT_NULL(first);
}
+/* Don't fail if the standard library
+ * doesn't provide brace expansion */
+#ifndef GLOB_BRACE
+#define GLOB_BRACE 0
+#endif
+
TEST(glob_exists) {
char name[] = "/tmp/test-glob_exists.XXXXXX";
int fd = -EBADF;
@@ -52,37 +58,6 @@ TEST(glob_exists) {
assert_se(r == 0);
}
-static void closedir_wrapper(void* v) {
- (void) closedir(v);
-}
-
-TEST(glob_no_dot) {
- char template[] = "/tmp/test-glob-util.XXXXXXX";
- const char *fn;
-
- _cleanup_globfree_ glob_t g = {
- .gl_closedir = closedir_wrapper,
- .gl_readdir = (struct dirent *(*)(void *)) readdir_no_dot,
- .gl_opendir = (void *(*)(const char *)) opendir,
- .gl_lstat = lstat,
- .gl_stat = stat,
- };
-
- int r;
-
- assert_se(mkdtemp(template));
-
- fn = strjoina(template, "/*");
- r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g);
- assert_se(r == GLOB_NOMATCH);
-
- fn = strjoina(template, "/.*");
- r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g);
- assert_se(r == GLOB_NOMATCH);
-
- (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL);
-}
-
TEST(safe_glob) {
char template[] = "/tmp/test-glob-util.XXXXXXX";
const char *fn, *fn2, *fname;
@@ -96,7 +71,7 @@ TEST(safe_glob) {
r = safe_glob(fn, 0, &g);
assert_se(r == -ENOENT);
- fn2 = strjoina(template, "/.*");
+ fn2 = strjoina(template, "/.f*");
r = safe_glob(fn2, GLOB_NOSORT|GLOB_BRACE, &g);
assert_se(r == -ENOENT);
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 8cc8c1ccd61f..96111b512b14 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -73,6 +73,12 @@
#include "user-util.h"
#include "virt.h"
+/* Don't fail if the standard library
+ * doesn't provide brace expansion */
+#ifndef GLOB_BRACE
+#define GLOB_BRACE 0
+#endif
+
/* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates
* them in the file system. This is intended to be used to create
* properly owned directories beneath /tmp, /var/tmp, /run, which are
@@ -2570,7 +2576,9 @@ finish:
static int glob_item(Context *c, Item *i, action_t action) {
_cleanup_globfree_ glob_t g = {
+#ifdef GLOB_ALTDIRFUNC
.gl_opendir = (void *(*)(const char *)) opendir_nomod,
+#endif
};
int r;
@@ -2598,7 +2606,9 @@ static int glob_item_recursively(
fdaction_t action) {
_cleanup_globfree_ glob_t g = {
+#ifdef GLOB_ALTDIRFUNC
.gl_opendir = (void *(*)(const char *)) opendir_nomod,
+#endif
};
int r;
--
2.41.0

View File

@ -0,0 +1,58 @@
From 2704e56cc30d04c56943ba1a3133dfcafa73c4dd Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:46:06 -0500
Subject: [PATCH 12/34] Handle musl's longer HOST_NAME_MAX: hardcode 64
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
There are multiple places in systemd, both runtime and test, that assume
that HOST_NAME_MAX is 64. Really, that should be fixed, but to make it
work at all, we start with hardcoding 64.
This cannot be upstreamed, but any work to actually fix the 64
assumption probably could.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/hostname-util.c | 4 ++--
src/shared/hostname-setup.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c
index e743033b1ea1..0581b1b26a06 100644
--- a/src/basic/hostname-util.c
+++ b/src/basic/hostname-util.c
@@ -128,7 +128,7 @@ bool hostname_is_valid(const char *s, ValidHostnameFlags flags) {
if (hyphen)
return false;
- if (p-s > HOST_NAME_MAX) /* Note that HOST_NAME_MAX is 64 on Linux, but DNS allows domain names up to
+ if (p-s > 64) /* Note that HOST_NAME_MAX is 64 on Linux, but DNS allows domain names up to
* 255 characters */
return false;
@@ -141,7 +141,7 @@ char* hostname_cleanup(char *s) {
assert(s);
- for (p = s, d = s, dot = hyphen = true; *p && d - s < HOST_NAME_MAX; p++)
+ for (p = s, d = s, dot = hyphen = true; *p && d - s < 64; p++)
if (*p == '.') {
if (dot || hyphen)
continue;
diff --git a/src/shared/hostname-setup.c b/src/shared/hostname-setup.c
index 6cfd4b54bf63..4de610fb50f1 100644
--- a/src/shared/hostname-setup.c
+++ b/src/shared/hostname-setup.c
@@ -66,7 +66,7 @@ int shorten_overlong(const char *s, char **ret) {
if (p)
*p = 0;
- strshorten(h, HOST_NAME_MAX);
+ strshorten(h, 64);
if (!hostname_is_valid(h, /* flags= */ 0))
return -EDOM;
--
2.41.0

View File

@ -0,0 +1,33 @@
From 149d6484096f5eb328a625357aff063335902208 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:48:52 -0500
Subject: [PATCH 13/34] basic: Handle musl lack of NI_IDN
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Hopefully musl will grow support for IDN in the stub resolver soon, and
this won't matter.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/socket-util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
index 6e304e840d2d..11a03f40dad1 100644
--- a/src/basic/socket-util.c
+++ b/src/basic/socket-util.c
@@ -36,7 +36,7 @@
#include "user-util.h"
#include "utf8.h"
-#if ENABLE_IDN
+#if ENABLE_IDN && defined(NI_IDN)
# define IDN_FLAGS NI_IDN
#else
# define IDN_FLAGS 0
--
2.41.0

View File

@ -0,0 +1,33 @@
From d5dff016a76259ebe40f3739f98d9c2eb47b5172 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:49:49 -0500
Subject: [PATCH 14/34] basic: Define comparison_fn_t in sort-util.h
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
glibc may define a public comparison_fn_t type, but musl libc doesn't.
This cannot be upstreamed. Really, we should consider adding it to our
musl patchset.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/sort-util.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h
index 9c818bd74706..94069443cf09 100644
--- a/src/basic/sort-util.h
+++ b/src/basic/sort-util.h
@@ -5,6 +5,8 @@
#include "macro.h"
+typedef int (*comparison_fn_t)(const void *, const void *);
+
/* This is the same as glibc's internal __compar_d_fn_t type. glibc exports a public comparison_fn_t, for the
* external type __compar_fn_t, but doesn't do anything similar for __compar_d_fn_t. Let's hence do that
* ourselves, picking a name that is obvious, but likely enough to not clash with glibc's choice of naming if
--
2.41.0

View File

@ -0,0 +1,34 @@
From 6ef506dbf1d28618d92f0b9bb2b2fa2b989acd99 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:50:50 -0500
Subject: [PATCH 15/34] basic: Define our own basename
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This prevents issues where the POSIX basename is not the same as the GNU
basename. I think maybe upstream could be convinced since glibc does
provide the POSIX one as well, but until then, let's do this.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/string-util.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
index ff5efbcf557b..656f5100e202 100644
--- a/src/basic/string-util.h
+++ b/src/basic/string-util.h
@@ -26,6 +26,8 @@
#define URI_UNRESERVED ALPHANUMERICAL "-._~" /* [RFC3986] */
#define URI_VALID URI_RESERVED URI_UNRESERVED /* [RFC3986] */
+#define basename(src) (strrchr(src,'/') ? strrchr(src,'/')+1 : src)
+
static inline char* strstr_ptr(const char *haystack, const char *needle) {
if (!haystack || !needle)
return NULL;
--
2.41.0

View File

@ -0,0 +1,53 @@
From 61770e8d6c24c01d6a0e35518ba16ec8d4fa8e6a Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 02:53:59 -0500
Subject: [PATCH 16/34] test: Handle musl's interesting locale decisions
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
All locales exist! But they don't do anything!
This cannot be upstreamed. And some day, this should be dropable.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/test/test-locale-util.c | 2 +-
src/test/test-parse-util.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c
index ab2d1f5746cf..9c95debcae35 100644
--- a/src/test/test-locale-util.c
+++ b/src/test/test-locale-util.c
@@ -51,7 +51,7 @@ TEST(locale_is_installed) {
assert_se(locale_is_installed("\x01gar\x02 bage\x03") == 0);
/* Definitely not installed */
- assert_se(locale_is_installed("zz_ZZ") == 0);
+ //assert_se(locale_is_installed("zz_ZZ") == 0);
}
TEST(keymaps) {
diff --git a/src/test/test-parse-util.c b/src/test/test-parse-util.c
index 58d22b6cfeed..3003b891b552 100644
--- a/src/test/test-parse-util.c
+++ b/src/test/test-parse-util.c
@@ -809,6 +809,7 @@ TEST(safe_atod) {
assert_se(r == -EINVAL);
/* Check if this really is locale independent */
+#ifdef __GLIBC__
if (setlocale(LC_NUMERIC, "de_DE.utf8")) {
r = safe_atod("0.2244", &d);
@@ -824,6 +825,7 @@ TEST(safe_atod) {
r = safe_atod("", &d);
assert_se(r == -EINVAL);
}
+#endif
/* And check again, reset */
assert_se(setlocale(LC_NUMERIC, "C"));
--
2.41.0

View File

@ -0,0 +1,72 @@
From 09647d86120432cf9581e340b72a550df3dc2eb7 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:00:43 -0500
Subject: [PATCH 17/34] Port to s6-utmps
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/user-util.c | 2 +-
src/shared/utmp-wtmp.h | 2 ++
src/sysusers/sysusers.c | 2 +-
src/userdb/userdbctl.c | 2 +-
4 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/basic/user-util.c b/src/basic/user-util.c
index 6bdf5bf1cdc9..42fbabec7892 100644
--- a/src/basic/user-util.c
+++ b/src/basic/user-util.c
@@ -9,7 +9,7 @@
#include <sys/file.h>
#include <sys/stat.h>
#include <unistd.h>
-#include <utmp.h>
+#include <utmpx.h>
#include "sd-messages.h"
diff --git a/src/shared/utmp-wtmp.h b/src/shared/utmp-wtmp.h
index 2e04fac40472..f8018ddc0141 100644
--- a/src/shared/utmp-wtmp.h
+++ b/src/shared/utmp-wtmp.h
@@ -8,6 +8,8 @@
#if ENABLE_UTMP
#include <utmpx.h>
+#define _PATH_UTMPX UTMPX_FILE
+#define _PATH_WTMPX WTMPX_FILE
int utmp_get_runlevel(int *runlevel, int *previous);
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 7758267b17ab..3e2c91bfa323 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <getopt.h>
-#include <utmp.h>
+#include <utmpx.h>
#include "alloc-util.h"
#include "build.h"
diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c
index 1718419407bc..1da975ed7807 100644
--- a/src/userdb/userdbctl.c
+++ b/src/userdb/userdbctl.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <getopt.h>
-#include <utmp.h>
+#include <utmpx.h>
#include "build.h"
#include "dirent-util.h"
--
2.41.0

View File

@ -0,0 +1,32 @@
From 2ac7d5c27b23f082c7e7741fa40875f76747ba6a Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:02:43 -0500
Subject: [PATCH 18/34] test: Add definition for __cpu_set type
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
glibc defines this type, but musl does not.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/test/test-cpu-set-util.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/test/test-cpu-set-util.c b/src/test/test-cpu-set-util.c
index ccb52c96d4d6..5892b7a5c214 100644
--- a/src/test/test-cpu-set-util.c
+++ b/src/test/test-cpu-set-util.c
@@ -6,6 +6,8 @@
#include "tests.h"
#include "macro.h"
+typedef unsigned long int __cpu_mask;
+
TEST(parse_cpu_set) {
CPUSet c = {};
_cleanup_free_ char *str = NULL;
--
2.41.0

View File

@ -0,0 +1,44 @@
From 1e4e3a0b8024f005919317f51644b98a446a9426 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:03:22 -0500
Subject: [PATCH 19/34] test: Don't assume unknown errors have their codes
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
glibc will give "Unknown error 200", but musl just says "No error
information", which makes these tests seem to fail.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/test/test-errno-util.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/test/test-errno-util.c b/src/test/test-errno-util.c
index ab463bd1b394..eafa3624b80e 100644
--- a/src/test/test-errno-util.c
+++ b/src/test/test-errno-util.c
@@ -27,8 +27,8 @@ TEST(STRERROR) {
log_info("STRERROR(%d), STRERROR(%d) → %s, %s", 200, 201, STRERROR(200), STRERROR(201));
const char *a = STRERROR(200), *b = STRERROR(201);
- assert_se(strstr(a, "200"));
- assert_se(strstr(b, "201"));
+ /*assert_se(strstr(a, "200"));
+ assert_se(strstr(b, "201"));*/
/* Check with negative values */
ASSERT_STREQ(a, STRERROR(-200));
@@ -38,7 +38,7 @@ TEST(STRERROR) {
char buf[DECIMAL_STR_MAX(int)];
xsprintf(buf, "%d", INT_MAX); /* INT_MAX is hexadecimal, use printf to convert to decimal */
log_info("STRERROR(%d) → %s", INT_MAX, c);
- assert_se(strstr(c, buf));
+ //assert_se(strstr(c, buf));
}
TEST(STRERROR_OR_ELSE) {
--
2.41.0

View File

@ -0,0 +1,126 @@
From b4439d419462902b19cfc72777e476d66a3a878b Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:04:53 -0500
Subject: [PATCH 20/34] test-time-util: Use whole fractions, no 4 digit TZ
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Both of these things are unsupported by musl strptime.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/test/test-time-util.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
index 9943923be30a..bd3292698a0b 100644
--- a/src/test/test-time-util.c
+++ b/src/test/test-time-util.c
@@ -25,13 +25,13 @@ TEST(parse_sec) {
assert_se(u == 5 * USEC_PER_SEC + 500 * USEC_PER_MSEC);
assert_se(parse_sec(" 5.5s 0.5ms ", &u) >= 0);
assert_se(u == 5 * USEC_PER_SEC + 500 * USEC_PER_MSEC + 500);
- assert_se(parse_sec(" .22s ", &u) >= 0);
+ assert_se(parse_sec(" 0.22s ", &u) >= 0);
assert_se(u == 220 * USEC_PER_MSEC);
- assert_se(parse_sec(" .50y ", &u) >= 0);
+ assert_se(parse_sec(" 0.50y ", &u) >= 0);
assert_se(u == USEC_PER_YEAR / 2);
assert_se(parse_sec("2.5", &u) >= 0);
assert_se(u == 2500 * USEC_PER_MSEC);
- assert_se(parse_sec(".7", &u) >= 0);
+ assert_se(parse_sec("0.7", &u) >= 0);
assert_se(u == 700 * USEC_PER_MSEC);
assert_se(parse_sec("23us", &u) >= 0);
assert_se(u == 23);
@@ -45,11 +45,11 @@ TEST(parse_sec) {
assert_se(u == USEC_INFINITY);
assert_se(parse_sec("+3.1s", &u) >= 0);
assert_se(u == 3100 * USEC_PER_MSEC);
- assert_se(parse_sec("3.1s.2", &u) >= 0);
+ assert_se(parse_sec("3.1s0.2", &u) >= 0);
assert_se(u == 3300 * USEC_PER_MSEC);
- assert_se(parse_sec("3.1 .2", &u) >= 0);
+ assert_se(parse_sec("3.1 0.2", &u) >= 0);
assert_se(u == 3300 * USEC_PER_MSEC);
- assert_se(parse_sec("3.1 sec .2 sec", &u) >= 0);
+ assert_se(parse_sec("3.1 sec 0.2 sec", &u) >= 0);
assert_se(u == 3300 * USEC_PER_MSEC);
assert_se(parse_sec("3.1 sec 1.2 sec", &u) >= 0);
assert_se(u == 4300 * USEC_PER_MSEC);
@@ -145,13 +145,13 @@ TEST(parse_nsec) {
assert_se(u == 5 * NSEC_PER_SEC + 500 * NSEC_PER_MSEC);
assert_se(parse_nsec(" 5.5s 0.5ms ", &u) >= 0);
assert_se(u == 5 * NSEC_PER_SEC + 500 * NSEC_PER_MSEC + 500 * NSEC_PER_USEC);
- assert_se(parse_nsec(" .22s ", &u) >= 0);
+ assert_se(parse_nsec(" 0.22s ", &u) >= 0);
assert_se(u == 220 * NSEC_PER_MSEC);
- assert_se(parse_nsec(" .50y ", &u) >= 0);
+ assert_se(parse_nsec(" 0.50y ", &u) >= 0);
assert_se(u == NSEC_PER_YEAR / 2);
assert_se(parse_nsec("2.5", &u) >= 0);
assert_se(u == 2);
- assert_se(parse_nsec(".7", &u) >= 0);
+ assert_se(parse_nsec("0.7", &u) >= 0);
assert_se(u == 0);
assert_se(parse_nsec("infinity", &u) >= 0);
assert_se(u == NSEC_INFINITY);
@@ -159,11 +159,11 @@ TEST(parse_nsec) {
assert_se(u == NSEC_INFINITY);
assert_se(parse_nsec("+3.1s", &u) >= 0);
assert_se(u == 3100 * NSEC_PER_MSEC);
- assert_se(parse_nsec("3.1s.2", &u) >= 0);
+ assert_se(parse_nsec("3.1s0.2", &u) >= 0);
assert_se(u == 3100 * NSEC_PER_MSEC);
- assert_se(parse_nsec("3.1 .2s", &u) >= 0);
+ assert_se(parse_nsec("3.1 0.2s", &u) >= 0);
assert_se(u == 200 * NSEC_PER_MSEC + 3);
- assert_se(parse_nsec("3.1 sec .2 sec", &u) >= 0);
+ assert_se(parse_nsec("3.1 sec 0.2 sec", &u) >= 0);
assert_se(u == 3300 * NSEC_PER_MSEC);
assert_se(parse_nsec("3.1 sec 1.2 sec", &u) >= 0);
assert_se(u == 4300 * NSEC_PER_MSEC);
@@ -734,9 +734,9 @@ static void test_parse_timestamp_impl(const char *tz) {
assert_se(parse_timestamp("today UTC", &today) == 0);
assert_se(parse_timestamp("todayZ", &today2) == 0);
assert_se(today == today2);
- assert_se(parse_timestamp("today +0200", &today) == 0);
+ //assert_se(parse_timestamp("today +0200", &today) == 0);
assert_se(parse_timestamp("today+02:00", &today2) == 0);
- assert_se(today == today2);
+ //assert_se(today == today2);
/* https://ijmacd.github.io/rfc3339-iso8601/ */
test_parse_timestamp_one("2023-09-06 12:49:27-00:00", 0, 1694004567 * USEC_PER_SEC + 000000);
@@ -879,7 +879,7 @@ static void test_parse_timestamp_impl(const char *tz) {
test_parse_timestamp_one("69-12-31 18:00:01.0010 -06", 0, USEC_PER_SEC + 1000);
/* -0600 */
- test_parse_timestamp_one("Wed 1969-12-31 18:01 -0600", 0, USEC_PER_MINUTE);
+ /*test_parse_timestamp_one("Wed 1969-12-31 18:01 -0600", 0, USEC_PER_MINUTE);
test_parse_timestamp_one("Wed 1969-12-31 18:00:01 -0600", 0, USEC_PER_SEC);
test_parse_timestamp_one("Wed 1969-12-31 18:00:01.001 -0600", 0, USEC_PER_SEC + 1000);
test_parse_timestamp_one("Wed 1969-12-31 18:00:01.0010 -0600", 0, USEC_PER_SEC + 1000);
@@ -897,7 +897,7 @@ static void test_parse_timestamp_impl(const char *tz) {
test_parse_timestamp_one("69-12-31 18:01 -0600", 0, USEC_PER_MINUTE);
test_parse_timestamp_one("69-12-31 18:00:01 -0600", 0, USEC_PER_SEC);
test_parse_timestamp_one("69-12-31 18:00:01.001 -0600", 0, USEC_PER_SEC + 1000);
- test_parse_timestamp_one("69-12-31 18:00:01.0010 -0600", 0, USEC_PER_SEC + 1000);
+ test_parse_timestamp_one("69-12-31 18:00:01.0010 -0600", 0, USEC_PER_SEC + 1000);*/
/* -06:00 */
test_parse_timestamp_one("Wed 1969-12-31 18:01 -06:00", 0, USEC_PER_MINUTE);
@@ -1063,7 +1063,7 @@ TEST(in_utc_timezone) {
assert_se(setenv("TZ", ":UTC", 1) >= 0);
assert_se(in_utc_timezone());
ASSERT_STREQ(tzname[0], "UTC");
- ASSERT_STREQ(tzname[1], "UTC");
+ //ASSERT_STREQ(tzname[1], "UTC");
assert_se(timezone == 0);
assert_se(daylight == 0);
--
2.41.0

View File

@ -0,0 +1,74 @@
From aa166c09ba2b70fa093a6ca1d2995e461b16a4c0 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:08:13 -0500
Subject: [PATCH 21/34] Don't use malloc_trim or malloc_info
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
The musl allocator does not define these functions.
This probably cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/libsystemd/sd-event/sd-event.c | 2 +-
src/shared/bus-util.c | 4 +++-
src/shared/common-signal.c | 2 ++
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
index 73a95e7fa135..c62dc07165ab 100644
--- a/src/libsystemd/sd-event/sd-event.c
+++ b/src/libsystemd/sd-event/sd-event.c
@@ -1891,7 +1891,7 @@ _public_ int sd_event_trim_memory(void) {
usec_t before_timestamp = now(CLOCK_MONOTONIC);
hashmap_trim_pools();
- r = malloc_trim(0);
+ r = 0;
usec_t after_timestamp = now(CLOCK_MONOTONIC);
if (r > 0)
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 30f9602b1edb..b1a8da36612b 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -755,7 +755,7 @@ static int method_dump_memory_state_by_fd(sd_bus_message *message, void *userdat
_cleanup_close_ int fd = -EBADF;
size_t dump_size;
FILE *f;
- int r;
+ int r = 0;
assert(message);
@@ -763,7 +763,9 @@ static int method_dump_memory_state_by_fd(sd_bus_message *message, void *userdat
if (!f)
return -ENOMEM;
+#ifdef __GLIBC__
r = RET_NERRNO(malloc_info(/* options= */ 0, f));
+#endif
if (r < 0)
return r;
diff --git a/src/shared/common-signal.c b/src/shared/common-signal.c
index 8e70e365dd69..bb68fc56b664 100644
--- a/src/shared/common-signal.c
+++ b/src/shared/common-signal.c
@@ -66,10 +66,12 @@ int sigrtmin18_handler(sd_event_source *s, const struct signalfd_siginfo *si, vo
break;
}
+#ifdef __GLIBC__
if (malloc_info(0, f) < 0) {
log_error_errno(errno, "Failed to invoke malloc_info(): %m");
break;
}
+#endif
(void) memstream_dump(LOG_INFO, &m);
break;
--
2.41.0

View File

@ -0,0 +1,90 @@
From 3c9ab22f9323726710b931ed478e6d5dd81dca2e Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:09:47 -0500
Subject: [PATCH 22/34] Port to musl strptime
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/time-util.c | 25 ++++++++++++++++++++-----
src/import/curl-util.c | 6 +++---
2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index b94f37c31c31..1200833a88c5 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -915,6 +915,7 @@ parse_usec:
from_tm:
assert(plus == 0);
assert(minus == 0);
+ tm.tm_wday = weekday;
if (weekday >= 0 && tm.tm_wday != weekday)
return -EINVAL;
@@ -1003,9 +1004,12 @@ int parse_timestamp(const char *t, usec_t *ret) {
return parse_timestamp_impl(t, t_len - 1, /* utc = */ true, /* isdst = */ -1, /* gmtoff = */ 0, ret);
if (t_len > 7 && IN_SET(t[t_len - 6], '+', '-') && t[t_len - 7] != ' ') { /* RFC3339-style welded offset: "1990-12-31T15:59:60-08:00" */
- k = strptime(&t[t_len - 6], "%z", &tm);
- if (k && *k == '\0')
+ k = strptime(&t[t_len - 5], "%R", &tm);
+ if (k && *k == '\0') {
+ tm.tm_gmtoff = ((tm.tm_hour * 60) + tm.tm_min) * 60;
+ if (t[t_len - 6] == '-') tm.tm_gmtoff *= -1;
return parse_timestamp_impl(t, t_len - 6, /* utc = */ true, /* isdst = */ -1, /* gmtoff = */ tm.tm_gmtoff, ret);
+ }
}
tz = strrchr(t, ' ');
@@ -1022,9 +1026,20 @@ int parse_timestamp(const char *t, usec_t *ret) {
/* If the timezone is compatible with RFC-822/ISO 8601 (e.g. +06, or -03:00) then parse the string as
* UTC and shift the result. Note, this must be earlier than the timezone check with tzname[], as
* tzname[] may be in the same format. */
- k = strptime(tz, "%z", &tm);
- if (k && *k == '\0')
- return parse_timestamp_impl(t, max_len, /* utc = */ true, /* isdst = */ -1, /* gmtoff = */ tm.tm_gmtoff, ret);
+ if (*tz == '+' || *tz == '-') {
+ k = strptime(tz+1, "%R", &tm);
+ if (k && *k == '\0') {
+ tm.tm_gmtoff = ((tm.tm_hour * 60) + tm.tm_min) * 60;
+ if (*tz == '-') tm.tm_gmtoff *= -1;
+ return parse_timestamp_impl(t, max_len, /* utc = */ true, /* isdst = */ -1, /* gmtoff = */ tm.tm_gmtoff, ret);
+ }
+ k = strptime(tz+1, "%H", &tm);
+ if (k && *k == '\0') {
+ tm.tm_gmtoff = tm.tm_hour * 3600;
+ if (*tz == '-') tm.tm_gmtoff *= -1;
+ return parse_timestamp_impl(t, max_len, /* utc = */ true, /* isdst = */ -1, /* gmtoff = */ tm.tm_gmtoff, ret);
+ }
+ }
/* If the last word is not a timezone file (e.g. Asia/Tokyo), then let's check if it matches
* tzname[] of the local timezone, e.g. JST or CEST. */
diff --git a/src/import/curl-util.c b/src/import/curl-util.c
index 1628f833a970..4a3003b3e848 100644
--- a/src/import/curl-util.c
+++ b/src/import/curl-util.c
@@ -396,13 +396,13 @@ int curl_parse_http_time(const char *t, usec_t *ret) {
return -errno;
/* RFC822 */
- e = strptime_l(t, "%a, %d %b %Y %H:%M:%S %Z", &tm, loc);
+ e = strptime(t, "%a, %d %b %Y %H:%M:%S %Z", &tm);
if (!e || *e != 0)
/* RFC 850 */
- e = strptime_l(t, "%A, %d-%b-%y %H:%M:%S %Z", &tm, loc);
+ e = strptime(t, "%A, %d-%b-%y %H:%M:%S %Z", &tm);
if (!e || *e != 0)
/* ANSI C */
- e = strptime_l(t, "%a %b %d %H:%M:%S %Y", &tm, loc);
+ e = strptime(t, "%a %b %d %H:%M:%S %Y", &tm);
if (!e || *e != 0)
return -EINVAL;
--
2.41.0

View File

@ -0,0 +1,193 @@
From 763fe64a51caa25c51a9d68d8e3943b519edf5cb Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:11:15 -0500
Subject: [PATCH 23/34] shared: Conditionalise sgrp on ENABLE_GSHADOW
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/shared/user-record-nss.c | 25 ++++++++++++++++++++++++-
src/shared/user-record-nss.h | 6 +++++-
src/shared/userdb.c | 6 ++++++
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/src/shared/user-record-nss.c b/src/shared/user-record-nss.c
index ffb572146628..3e2f61473a6a 100644
--- a/src/shared/user-record-nss.c
+++ b/src/shared/user-record-nss.c
@@ -275,9 +275,12 @@ int nss_user_record_by_uid(
int nss_group_to_group_record(
const struct group *grp,
- const struct sgrp *sgrp,
+ void *_sgrp,
GroupRecord **ret) {
+#if ENABLE_GSHADOW
+ struct sgrp *sgrp = (struct sgrp *)_sgrp;
+#endif
_cleanup_(group_record_unrefp) GroupRecord *g = NULL;
int r;
@@ -286,8 +289,10 @@ int nss_group_to_group_record(
if (isempty(grp->gr_name))
return -EINVAL;
+#if ENABLE_GSHADOW
if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name))
return -EINVAL;
+#endif
g = group_record_new();
if (!g)
@@ -303,6 +308,7 @@ int nss_group_to_group_record(
g->gid = grp->gr_gid;
+#if ENABLE_GSHADOW
if (sgrp) {
if (looks_like_hashed_password(utf8_only(sgrp->sg_passwd))) {
g->hashed_password = strv_new(sgrp->sg_passwd);
@@ -318,6 +324,7 @@ int nss_group_to_group_record(
if (r < 0)
return r;
}
+#endif
r = json_build(&g->json, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)),
@@ -336,6 +343,7 @@ int nss_group_to_group_record(
return 0;
}
+#if ENABLE_GSHADOW
int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **ret_buffer) {
size_t buflen = 4096;
int r;
@@ -373,6 +381,7 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re
buf = mfree(buf);
}
}
+#endif
int nss_group_record_by_name(
const char *name,
@@ -382,7 +391,9 @@ int nss_group_record_by_name(
_cleanup_free_ char *sbuf = NULL;
_cleanup_free_ struct group *result = NULL;
bool incomplete = false;
+#if ENABLE_GSHADOW
struct sgrp sgrp, *sresult = NULL;
+#endif
int r;
assert(name);
@@ -391,6 +402,7 @@ int nss_group_record_by_name(
if (r < 0)
return r;
+#if ENABLE_GSHADOW
if (with_shadow) {
r = nss_sgrp_for_group(result, &sgrp, &sbuf);
if (r < 0) {
@@ -402,6 +414,10 @@ int nss_group_record_by_name(
incomplete = true;
r = nss_group_to_group_record(result, sresult, ret);
+#else
+ incomplete = true;
+ r = nss_group_to_group_record(result, NULL, ret);
+#endif
if (r < 0)
return r;
@@ -418,13 +434,16 @@ int nss_group_record_by_gid(
_cleanup_free_ char *sbuf = NULL;
_cleanup_free_ struct group *result = NULL;
bool incomplete = false;
+#if ENABLE_GSHADOW
struct sgrp sgrp, *sresult = NULL;
+#endif
int r;
r = getgrgid_malloc(gid, &result);
if (r < 0)
return r;
+#if ENABLE_GSHADOW
if (with_shadow) {
r = nss_sgrp_for_group(result, &sgrp, &sbuf);
if (r < 0) {
@@ -436,6 +455,10 @@ int nss_group_record_by_gid(
incomplete = true;
r = nss_group_to_group_record(result, sresult, ret);
+#else
+ incomplete = true;
+ r = nss_group_to_group_record(result, NULL, ret);
+#endif
if (r < 0)
return r;
diff --git a/src/shared/user-record-nss.h b/src/shared/user-record-nss.h
index 22ab04d6eec3..5677a119f6d0 100644
--- a/src/shared/user-record-nss.h
+++ b/src/shared/user-record-nss.h
@@ -2,7 +2,9 @@
#pragma once
#include <grp.h>
+#if ENABLE_GSHADOW
#include <gshadow.h>
+#endif
#include <pwd.h>
#include <shadow.h>
@@ -17,8 +19,10 @@ int nss_spwd_for_passwd(const struct passwd *pwd, struct spwd *ret_spwd, char **
int nss_user_record_by_name(const char *name, bool with_shadow, UserRecord **ret);
int nss_user_record_by_uid(uid_t uid, bool with_shadow, UserRecord **ret);
-int nss_group_to_group_record(const struct group *grp, const struct sgrp *sgrp, GroupRecord **ret);
+int nss_group_to_group_record(const struct group *grp, void *sgrp, GroupRecord **ret);
+#if ENABLE_GSHADOW
int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **ret_buffer);
+#endif
int nss_group_record_by_name(const char *name, bool with_shadow, GroupRecord **ret);
int nss_group_record_by_gid(gid_t gid, bool with_shadow, GroupRecord **ret);
diff --git a/src/shared/userdb.c b/src/shared/userdb.c
index 353388125f79..002f35c79fc4 100644
--- a/src/shared/userdb.c
+++ b/src/shared/userdb.c
@@ -1038,13 +1038,16 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) {
if (gr) {
_cleanup_free_ char *buffer = NULL;
bool incomplete = false;
+#if ENABLE_GSHADOW
struct sgrp sgrp;
+#endif
if (streq_ptr(gr->gr_name, "root"))
iterator->synthesize_root = false;
if (gr->gr_gid == GID_NOBODY)
iterator->synthesize_nobody = false;
+#if ENABLE_GSHADOW
if (!FLAGS_SET(iterator->flags, USERDB_SUPPRESS_SHADOW)) {
r = nss_sgrp_for_group(gr, &sgrp, &buffer);
if (r < 0) {
@@ -1057,6 +1060,9 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) {
}
r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret);
+#else
+ r = nss_group_to_group_record(gr, NULL, ret);
+#endif
if (r < 0)
return r;
--
2.41.0

View File

@ -0,0 +1,29 @@
From 698acf92b1ce0c182318c02a87b0f874e5e79b2f Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:12:10 -0500
Subject: [PATCH 24/34] basic: Use <sys/prctl.h> vs <linux/prctl.h>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/missing_prctl.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/missing_prctl.h b/src/basic/missing_prctl.h
index 2c9f9f6c50ff..ed065828d1ae 100644
--- a/src/basic/missing_prctl.h
+++ b/src/basic/missing_prctl.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
-#include <linux/prctl.h>
+#include <sys/prctl.h>
#include "macro.h"
--
2.41.0

View File

@ -0,0 +1,31 @@
From 0bd6d30dc195911d525877b42f4821355f2f25e4 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:12:46 -0500
Subject: [PATCH 25/34] man: Ensure notify example includes <string.h>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This ensures that memcpy and strerror are defined. This is especially
important as GCC 14 makes implicit function declarations an error.
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
man/notify-selfcontained-example.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/man/notify-selfcontained-example.c b/man/notify-selfcontained-example.c
index 6bbe4f2e3bad..3498d508430d 100644
--- a/man/notify-selfcontained-example.c
+++ b/man/notify-selfcontained-example.c
@@ -15,6 +15,7 @@
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <time.h>
--
2.41.0

View File

@ -0,0 +1,28 @@
From c4425b22e47569dd79b611b641de9e1b1a3630b8 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:14:44 -0500
Subject: [PATCH 26/34] basic: Add needed <signal.h> to pidref.h
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/pidref.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/basic/pidref.h b/src/basic/pidref.h
index 9920ebb9b3bc..2fdd4ff50f8f 100644
--- a/src/basic/pidref.h
+++ b/src/basic/pidref.h
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
+#include <signal.h>
#include "macro.h"
/* An embeddable structure carrying a reference to a process. Supposed to be used when tracking processes continuously. */
--
2.41.0

View File

@ -0,0 +1,28 @@
From a26ff0a3fb7f8dce6554d0a24cb69263c3551d47 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:15:39 -0500
Subject: [PATCH 27/34] Add <sys/file.h> include for LOCK_* definitions
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/lock-util.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/basic/lock-util.h b/src/basic/lock-util.h
index 8fb4757968c0..f925d971ebe8 100644
--- a/src/basic/lock-util.h
+++ b/src/basic/lock-util.h
@@ -2,6 +2,7 @@
#pragma once
#include <fcntl.h>
+#include <sys/file.h>
typedef struct LockFile {
int dir_fd;
--
2.41.0

View File

@ -0,0 +1,55 @@
From cbd2cc7bbdbdb336a5443ddbc3d805cd8e9e962c Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:16:18 -0500
Subject: [PATCH 28/34] basic: Handle NIS compat entries ourselves
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
This is needed on musl, which will otherwise mangle them.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/user-util.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/basic/user-util.c b/src/basic/user-util.c
index 42fbabec7892..c08669691800 100644
--- a/src/basic/user-util.c
+++ b/src/basic/user-util.c
@@ -930,6 +930,11 @@ int putpwent_sane(const struct passwd *pw, FILE *stream) {
assert(stream);
errno = 0;
+ if (IN_SET(pw->pw_name[0], '+', '-')) {
+ if (fprintf(stream, "%s:%s:::%s:%s:%s\n",
+ pw->pw_name, pw->pw_passwd, pw->pw_gecos, pw->pw_dir, pw->pw_shell) >= 0) return 0;
+ return errno_or_else(EIO);
+ }
if (putpwent(pw, stream) != 0)
return errno_or_else(EIO);
@@ -952,6 +957,19 @@ int putgrent_sane(const struct group *gr, FILE *stream) {
assert(stream);
errno = 0;
+ if (IN_SET(gr->gr_name[0], '+', '-')) {
+ int r = fprintf(stream, "%s:%s::",
+ gr->gr_name, gr->gr_passwd);
+ if (r < 0) return errno_or_else(EIO);
+ if (gr->gr_mem) {
+ for (size_t i = 0; gr->gr_mem[i] && r >= 0; i++) {
+ r = fprintf(stream, "%s%s", i?",":"", gr->gr_mem[i]);
+ }
+ if (r < 0) return errno_or_else(EIO);
+ }
+ if (fputc('\n', stream) >= 0) return 0;
+ return errno_or_else(EIO);
+ }
if (putgrent(gr, stream) != 0)
return errno_or_else(EIO);
--
2.41.0

View File

@ -0,0 +1,87 @@
From 8b6e1c92f19163707789698860070738c607c2e8 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:17:18 -0500
Subject: [PATCH 29/34] edit-util: Don't clobber reserved identifier stdin
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
It may be #define'd instead of a global variable, which breaks using it
as an identifier for ourselves.
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/shared/edit-util.c | 8 ++++----
src/shared/edit-util.h | 2 +-
src/systemctl/systemctl-edit.c | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/shared/edit-util.c b/src/shared/edit-util.c
index b0496032f7b8..412aeb219607 100644
--- a/src/shared/edit-util.c
+++ b/src/shared/edit-util.c
@@ -212,7 +212,7 @@ static int create_edit_temp_file(EditFile *e, const char *contents, size_t conte
if (fchmod(fileno(f), 0644) < 0)
return log_error_errno(errno, "Failed to change mode of temporary file '%s': %m", temp);
- if (e->context->stdin) {
+ if (e->context->_stdin) {
if (fwrite(contents, 1, contents_size, f) != contents_size)
return log_error_errno(SYNTHETIC_ERRNO(EIO),
"Failed to copy input to temporary file '%s'.", temp);
@@ -326,7 +326,7 @@ static int strip_edit_temp_file(EditFile *e) {
if (!tmp)
return log_oom();
- if (e->context->marker_start && !e->context->stdin) {
+ if (e->context->marker_start && !e->context->_stdin) {
/* Trim out the lines between the two markers */
char *contents_start, *contents_end;
@@ -374,7 +374,7 @@ int do_edit_files_and_install(EditFileContext *context) {
if (context->n_files == 0)
return log_debug_errno(SYNTHETIC_ERRNO(ENOENT), "Got no files to edit.");
- if (context->stdin) {
+ if (context->_stdin) {
r = read_full_stream(stdin, &data, &data_size);
if (r < 0)
return log_error_errno(r, "Failed to read stdin: %m");
@@ -386,7 +386,7 @@ int do_edit_files_and_install(EditFileContext *context) {
return r;
}
- if (!context->stdin) {
+ if (!context->_stdin) {
r = run_editor(context);
if (r < 0)
return r;
diff --git a/src/shared/edit-util.h b/src/shared/edit-util.h
index 9d9c890f2a97..70b9bff2dd98 100644
--- a/src/shared/edit-util.h
+++ b/src/shared/edit-util.h
@@ -15,7 +15,7 @@ typedef struct EditFileContext {
const char *marker_end;
bool remove_parent;
bool overwrite_with_origin; /* Always overwrite target with original file. */
- bool stdin; /* Read contents from stdin instead of launching an editor. */
+ bool _stdin; /* Read contents from stdin instead of launching an editor. */
} EditFileContext;
void edit_file_context_done(EditFileContext *context);
diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
index 15398f83646e..ae08d65b0f12 100644
--- a/src/systemctl/systemctl-edit.c
+++ b/src/systemctl/systemctl-edit.c
@@ -316,7 +316,7 @@ int verb_edit(int argc, char *argv[], void *userdata) {
.marker_end = DROPIN_MARKER_END,
.remove_parent = !arg_full,
.overwrite_with_origin = true,
- .stdin = arg_stdin,
+ ._stdin = arg_stdin,
};
_cleanup_strv_free_ char **names = NULL;
sd_bus *bus;
--
2.41.0

View File

@ -0,0 +1,29 @@
From 13911055682e55f22c0dbbdb0f381360e8c160e2 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:18:10 -0500
Subject: [PATCH 30/34] test: Define FTW_CONTINUE if not already defined
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/test/test-recurse-dir.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/test/test-recurse-dir.c b/src/test/test-recurse-dir.c
index 8684d064ec39..9697667f8dfc 100644
--- a/src/test/test-recurse-dir.c
+++ b/src/test/test-recurse-dir.c
@@ -1,6 +1,9 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <ftw.h>
+#ifndef FTW_CONTINUE
+#define FTW_CONTINUE 0
+#endif
#include "fd-util.h"
#include "log.h"
--
2.41.0

View File

@ -0,0 +1,33 @@
From 571037f7f86f2bd4a68a28aa19cb3aadaaacd75b Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:18:29 -0500
Subject: [PATCH 31/34] os-util: Handle negative time_t values properly
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
musl's time framework happily accepts dates before 1970, which can
result in negative time_t values being returned. These should still be
considered as invalid dates for OS support.
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/os-util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/os-util.c b/src/basic/os-util.c
index 79f641b36474..8da1c012a223 100644
--- a/src/basic/os-util.c
+++ b/src/basic/os-util.c
@@ -460,7 +460,7 @@ int os_release_support_ended(const char *support_end, bool quiet, usec_t *ret_eo
"Failed to parse SUPPORT_END= in os-release file, ignoring: %m");
time_t eol = timegm(&tm);
- if (eol == (time_t) -1)
+ if (eol <= (time_t) -1)
return log_full_errno(quiet ? LOG_DEBUG : LOG_WARNING, SYNTHETIC_ERRNO(EINVAL),
"Failed to convert SUPPORT_END= in os-release file, ignoring: %m");
--
2.41.0

View File

@ -0,0 +1,32 @@
From e6071a579fa7d28ace8c34ab90300b4f8be9bb47 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 03:19:34 -0500
Subject: [PATCH 32/34] test: Disable fileio test that fails on musl
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Needs further investigation.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/test/test-fileio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index 474eacaf0468..472d653532fb 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -432,7 +432,7 @@ TEST(write_string_stream) {
f = fdopen(fd, "r");
assert_se(f);
- assert_se(write_string_stream(f, "boohoo", 0) < 0);
+ //assert_se(write_string_stream(f, "boohoo", 0) < 0);
f = safe_fclose(f);
f = fopen(fn, "r+");
--
2.41.0

View File

@ -0,0 +1,33 @@
From c357ca7be7cd70c4b62c1889f7f110d50a85aa02 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 06:18:40 -0500
Subject: [PATCH 33/34] recurse-dir: Perform correct pointer math on de
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Without this, we are casting the pointer math itself to struct dirent*
which causes invalid calculations on systems with structs aligned to a
different width than uint8_t* (i.e. ppc64).
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/recurse-dir.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/basic/recurse-dir.c b/src/basic/recurse-dir.c
index 776733148b05..8c4b044ea0fb 100644
--- a/src/basic/recurse-dir.c
+++ b/src/basic/recurse-dir.c
@@ -56,7 +56,8 @@ int readdir_all(int dir_fd,
bs = MIN(MALLOC_SIZEOF_SAFE(de) - offsetof(DirectoryEntries, buffer), (size_t) SSIZE_MAX);
assert(bs > de->buffer_size);
- n = getdents64(dir_fd, (uint8_t*) de->buffer + de->buffer_size, bs - de->buffer_size);
+ uint8_t *ptr = (uint8_t*) de->buffer + de->buffer_size;
+ n = getdents64(dir_fd, (struct dirent *)ptr, bs - de->buffer_size);
if (n < 0)
return -errno;
if (n == 0)
--
2.41.0

View File

@ -0,0 +1,35 @@
From 5cfb7905b38ca0e537b93403a7ef577bc3b19a82 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sun, 18 Aug 2024 20:23:03 -0500
Subject: [PATCH 34/34] build-path: Disable for now
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Digging for RPATH is broken on musl, and causes segfaults all throughout
the systemd manager when running. This means we lose the ability to run
systemd applets from a build tree, but we can just iterate in our
virthosts until this can be fixed.
This cannot be upstreamed.
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
---
src/basic/build-path.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/build-path.c b/src/basic/build-path.c
index b5972658dfea..9c4c6233f76b 100644
--- a/src/basic/build-path.c
+++ b/src/basic/build-path.c
@@ -157,7 +157,7 @@ int get_build_exec_dir(char **ret) {
runpath_cached = get_runpath(&runpath);
/* We only care if the runpath starts with $ORIGIN/ */
- if (runpath_cached > 0 && !startswith(runpath, "$ORIGIN/"))
+ //if (runpath_cached > 0 && !startswith(runpath, "$ORIGIN/"))
runpath_cached = 0;
}
if (runpath_cached < 0)
--
2.41.0

View File

@ -0,0 +1,26 @@
https://github.com/systemd/systemd/commit/dde6f1d7456db7aa72d24b1d6956b419b6f9945c
From dde6f1d7456db7aa72d24b1d6956b419b6f9945c Mon Sep 17 00:00:00 2001
From: Sam James <sam@gentoo.org>
Date: Sat, 24 Aug 2024 13:09:47 +0100
Subject: [PATCH] meson: search for 'bpf-unknown-none' too
We currently search for 'bpf-gcc' and 'bpf-none-gcc'. Gentoo's
sys-devel/bpf-toolchain package uses 'bpf-unknown-none-gcc', as does Fedora's
cross-binutils. Search for this name too.
---
meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/meson.build b/meson.build
index 5e0b666c64b17..fbc2bbdf2f22f 100644
--- a/meson.build
+++ b/meson.build
@@ -1109,6 +1109,7 @@ else
elif bpf_compiler == 'gcc'
bpf_gcc = find_program('bpf-gcc',
'bpf-none-gcc',
+ 'bpf-unknown-none-gcc',
required : true,
version : '>= 13.1.0')
bpf_gcc_found = bpf_gcc.found()

View File

@ -0,0 +1,51 @@
From 2de502ccff1cc780d9d29c4ff7e6c1e0f2d7a082 Mon Sep 17 00:00:00 2001
From: Mike Gilbert <floppym@gentoo.org>
Date: Fri, 21 Aug 2020 13:16:17 -0400
Subject: [PATCH] journald: do not change the kernel audit setting by default
Bug: https://bugs.gentoo.org/736910
---
man/journald.conf.xml | 2 +-
src/journal/journald-server.c | 2 +-
src/journal/journald.conf | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/man/journald.conf.xml b/man/journald.conf.xml
index 50c33e4792..2e14674f42 100644
--- a/man/journald.conf.xml
+++ b/man/journald.conf.xml
@@ -427,7 +427,7 @@
kernel auditing on start-up. If disabled it will turn it off. If unset it will neither enable nor
disable it, leaving the previous state unchanged. This means if another tool turns on auditing even
if <command>systemd-journald</command> left it off, it will still collect the generated
- messages. Defaults to on.</para>
+ messages.</para>
<para>Note that this option does not control whether <command>systemd-journald</command> collects
generated audit records, it just controls whether it tells the kernel to generate them. If you need
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 022e12d83d..6b3d261af6 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -2367,7 +2367,7 @@ int server_init(Server *s, const char *namespace) {
.compress.threshold_bytes = UINT64_MAX,
.seal = true,
- .set_audit = true,
+ .set_audit = -1,
.watchdog_usec = USEC_INFINITY,
diff --git a/src/journal/journald.conf b/src/journal/journald.conf
index 5a60a9d39c..64156d5463 100644
--- a/src/journal/journald.conf
+++ b/src/journal/journald.conf
@@ -44,4 +44,4 @@
#MaxLevelWall=emerg
#LineMax=48K
#ReadKMsg=yes
-#Audit=yes
+#Audit=
--
2.39.1

View File

@ -0,0 +1,3 @@
# Based on legacy.conf from systemd
d /run/lock
L /var/lock - - - - ../run/lock

View File

@ -0,0 +1,31 @@
From c3f91c76af292e3bd2c6e2b12e37de88cf5d7c72 Mon Sep 17 00:00:00 2001
From: Mike Gilbert <floppym@gentoo.org>
Date: Thu, 18 Apr 2024 00:04:44 -0400
Subject: [PATCH] test-process-util: remove assert that fails under pid-sandbox
Upstream refuses to fix this.
Bug: https://bugs.gentoo.org/674458
Bug: https://github.com/systemd/systemd/issues/25015
---
src/test/test-process-util.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c
index c96bd4341b..9ff1bdc082 100644
--- a/src/test/test-process-util.c
+++ b/src/test/test-process-util.c
@@ -92,8 +92,8 @@ static void test_pid_get_comm_one(pid_t pid) {
assert_se(r >= 0 || r == -EACCES);
log_info("PID"PID_FMT" strlen(environ): %zi", pid, env ? (ssize_t)strlen(env) : (ssize_t)-errno);
- if (!detect_container())
- assert_se(get_ctty_devnr(pid, &h) == -ENXIO || pid != 1);
+
+
(void) getenv_for_pid(pid, "PATH", &i);
log_info("PID"PID_FMT" $PATH: '%s'", pid, strna(i));
--
2.44.0

View File

@ -0,0 +1,5 @@
account include system-auth
session required pam_loginuid.so
session include system-auth
session optional pam_systemd.so

View File

@ -0,0 +1,608 @@
# Copyright 2011-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..12} )
# Avoid QA warnings
TMPFILES_OPTIONAL=1
UDEV_OPTIONAL=1
QA_PKGCONFIG_VERSION=$(ver_cut 1)
if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://github.com/systemd/systemd.git"
inherit git-r3
else
MY_PV=${PV/_/-}
MY_P=${PN}-${MY_PV}
S=${WORKDIR}/${MY_P}
SRC_URI="https://github.com/systemd/${PN}/archive/refs/tags/v${MY_PV}.tar.gz -> ${MY_P}.tar.gz"
if [[ ${PV} != *rc* ]] ; then
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
fi
fi
inherit bash-completion-r1 linux-info meson-multilib optfeature pam python-single-r1
inherit secureboot systemd toolchain-funcs udev
DESCRIPTION="System and service manager for Linux"
HOMEPAGE="https://systemd.io/"
LICENSE="GPL-2 LGPL-2.1 MIT public-domain"
SLOT="0/2"
IUSE="
acl apparmor audit boot bpf cgroup-hybrid cryptsetup curl +dns-over-tls elfutils elibc_musl
fido2 +gcrypt gnutls homed http idn importd iptables +kernel-install +kmod
+lz4 lzma +openssl pam pcre pkcs11 policykit pwquality qrcode
+resolvconf +seccomp selinux split-usr +sysv-utils test tpm ukify vanilla xkb +zstd
"
REQUIRED_USE="
${PYTHON_REQUIRED_USE}
dns-over-tls? ( || ( gnutls openssl ) )
fido2? ( cryptsetup openssl )
homed? ( cryptsetup pam openssl )
importd? ( curl lzma || ( gcrypt openssl ) )
pwquality? ( homed )
boot? ( kernel-install )
ukify? ( boot )
"
RESTRICT="!test? ( test )"
MINKV="4.15"
COMMON_DEPEND="
>=sys-apps/util-linux-2.32:0=[${MULTILIB_USEDEP}]
sys-libs/libcap:0=[${MULTILIB_USEDEP}]
virtual/libcrypt:=[${MULTILIB_USEDEP}]
acl? ( sys-apps/acl:0= )
apparmor? ( >=sys-libs/libapparmor-2.13:0= )
audit? ( >=sys-process/audit-2:0= )
cryptsetup? ( >=sys-fs/cryptsetup-2.0.1:0= )
curl? ( >=net-misc/curl-7.32.0:0= )
elfutils? ( >=dev-libs/elfutils-0.158:0= )
fido2? ( dev-libs/libfido2:0= )
gcrypt? ( >=dev-libs/libgcrypt-1.4.5:0=[${MULTILIB_USEDEP}] )
gnutls? ( >=net-libs/gnutls-3.6.0:0= )
http? ( >=net-libs/libmicrohttpd-0.9.33:0=[epoll(+)] )
idn? ( net-dns/libidn2:= )
importd? (
app-arch/bzip2:0=
sys-libs/zlib:0=
)
kmod? ( >=sys-apps/kmod-15:0= )
lz4? ( >=app-arch/lz4-0_p131:0=[${MULTILIB_USEDEP}] )
lzma? ( >=app-arch/xz-utils-5.0.5-r1:0=[${MULTILIB_USEDEP}] )
iptables? ( net-firewall/iptables:0= )
openssl? ( >=dev-libs/openssl-1.1.0:0= )
pam? ( sys-libs/pam:=[${MULTILIB_USEDEP}] )
pkcs11? ( >=app-crypt/p11-kit-0.23.3:0= )
pcre? ( dev-libs/libpcre2 )
pwquality? ( >=dev-libs/libpwquality-1.4.1:0= )
qrcode? ( >=media-gfx/qrencode-3:0= )
seccomp? ( >=sys-libs/libseccomp-2.3.3:0= )
selinux? ( >=sys-libs/libselinux-2.1.9:0= )
tpm? ( app-crypt/tpm2-tss:0= )
xkb? ( >=x11-libs/libxkbcommon-0.4.1:0= )
zstd? ( >=app-arch/zstd-1.4.0:0=[${MULTILIB_USEDEP}] )
"
# Newer linux-headers needed by ia64, bug #480218
DEPEND="${COMMON_DEPEND}
>=sys-kernel/linux-headers-${MINKV}
"
PEFILE_DEPEND='dev-python/pefile[${PYTHON_USEDEP}]'
# baselayout-2.2 has /run
RDEPEND="${COMMON_DEPEND}
>=acct-group/adm-0-r1
>=acct-group/wheel-0-r1
>=acct-group/kmem-0-r1
>=acct-group/tty-0-r1
>=acct-group/utmp-0-r1
>=acct-group/audio-0-r1
>=acct-group/cdrom-0-r1
>=acct-group/dialout-0-r1
>=acct-group/disk-0-r1
>=acct-group/input-0-r1
>=acct-group/kvm-0-r1
>=acct-group/lp-0-r1
>=acct-group/render-0-r1
acct-group/sgx
>=acct-group/tape-0-r1
acct-group/users
>=acct-group/video-0-r1
>=acct-group/systemd-journal-0-r1
>=acct-user/root-0-r1
acct-user/nobody
>=acct-user/systemd-journal-remote-0-r1
>=acct-user/systemd-coredump-0-r1
>=acct-user/systemd-network-0-r1
acct-user/systemd-oom
>=acct-user/systemd-resolve-0-r1
>=acct-user/systemd-timesync-0-r1
>=sys-apps/baselayout-2.2
ukify? (
${PYTHON_DEPS}
$(python_gen_cond_dep "${PEFILE_DEPEND}")
)
selinux? (
sec-policy/selinux-base-policy[systemd]
sec-policy/selinux-ntp
)
sysv-utils? (
!sys-apps/openrc[sysv-utils(-)]
!sys-apps/openrc-navi[sysv-utils(-)]
!sys-apps/sysvinit
)
!sysv-utils? ( sys-apps/sysvinit )
resolvconf? ( !net-dns/openresolv )
!sys-apps/hwids[udev]
!sys-auth/nss-myhostname
!sys-fs/eudev
!sys-fs/udev
"
# sys-apps/dbus: the daemon only (+ build-time lib dep for tests)
PDEPEND=">=sys-apps/dbus-1.9.8[systemd]
>=sys-fs/udev-init-scripts-34
policykit? ( sys-auth/polkit )
!vanilla? ( sys-apps/gentoo-systemd-integration )"
BDEPEND="
app-arch/xz-utils:0
dev-util/gperf
>=dev-build/meson-0.46
>=sys-apps/coreutils-8.16
sys-devel/gettext
virtual/pkgconfig
bpf? (
dev-util/bpftool
sys-devel/bpf-toolchain
)
test? (
app-text/tree
dev-lang/perl
sys-apps/dbus
)
app-text/docbook-xml-dtd:4.2
app-text/docbook-xml-dtd:4.5
app-text/docbook-xsl-stylesheets
dev-libs/libxslt:0
${PYTHON_DEPS}
$(python_gen_cond_dep "
dev-python/jinja[\${PYTHON_USEDEP}]
dev-python/lxml[\${PYTHON_USEDEP}]
boot? (
>=dev-python/pyelftools-0.30[\${PYTHON_USEDEP}]
test? ( ${PEFILE_DEPEND} )
)
")
"
QA_FLAGS_IGNORED="usr/lib/systemd/boot/efi/.*"
QA_EXECSTACK="usr/lib/systemd/boot/efi/*"
check_cgroup_layout() {
# https://bugs.gentoo.org/935261
[[ ${MERGE_TYPE} != buildonly ]] || return
[[ -z ${ROOT} ]] || return
[[ -e /sys/fs/cgroup/unified ]] || return
grep -q 'SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1' /proc/cmdline && return
eerror "This system appears to be booted with the 'hybrid' cgroup layout."
eerror "This layout obsolete and is disabled in systemd."
if grep -qF 'systemd.unified_cgroup_hierarchy'; then
eerror "Remove the systemd.unified_cgroup_hierarchy option"
eerror "from the kernel command line and reboot."
die "hybrid cgroup layout detected"
fi
}
pkg_pretend() {
if use split-usr; then
eerror "Please complete the migration to merged-usr."
eerror "https://wiki.gentoo.org/wiki/Merge-usr"
die "systemd no longer supports split-usr"
fi
check_cgroup_layout
if use cgroup-hybrid; then
eerror "Disable the 'cgroup-hybrid' USE flag."
eerror "Rebuild any initramfs images after rebuilding systemd."
die "cgroup-hybrid is no longer supported"
fi
if [[ ${MERGE_TYPE} != buildonly ]]; then
local CONFIG_CHECK="~BLK_DEV_BSG ~CGROUPS
~CGROUP_BPF ~DEVTMPFS ~EPOLL ~FANOTIFY ~FHANDLE
~INOTIFY_USER ~IPV6 ~NET ~NET_NS ~PROC_FS ~SIGNALFD ~SYSFS
~TIMERFD ~TMPFS_XATTR ~UNIX ~USER_NS
~CRYPTO_HMAC ~CRYPTO_SHA256 ~CRYPTO_USER_API_HASH
~!GRKERNSEC_PROC ~!IDE ~!SYSFS_DEPRECATED
~!SYSFS_DEPRECATED_V2"
use acl && CONFIG_CHECK+=" ~TMPFS_POSIX_ACL"
use bpf && CONFIG_CHECK+=" ~BPF ~BPF_SYSCALL ~BPF_LSM ~DEBUG_INFO_BTF"
use seccomp && CONFIG_CHECK+=" ~SECCOMP ~SECCOMP_FILTER"
if kernel_is -ge 5 10 20; then
CONFIG_CHECK+=" ~KCMP"
else
CONFIG_CHECK+=" ~CHECKPOINT_RESTORE"
fi
if kernel_is -ge 4 18; then
CONFIG_CHECK+=" ~AUTOFS_FS"
else
CONFIG_CHECK+=" ~AUTOFS4_FS"
fi
if linux_config_exists; then
local uevent_helper_path=$(linux_chkconfig_string UEVENT_HELPER_PATH)
if [[ -n ${uevent_helper_path} ]] && [[ ${uevent_helper_path} != '""' ]]; then
ewarn "It's recommended to set an empty value to the following kernel config option:"
ewarn "CONFIG_UEVENT_HELPER_PATH=${uevent_helper_path}"
fi
if linux_chkconfig_present X86; then
CONFIG_CHECK+=" ~DMIID"
fi
fi
if kernel_is -lt ${MINKV//./ }; then
ewarn "Kernel version at least ${MINKV} required"
fi
check_extra_config
fi
}
pkg_setup() {
use boot && secureboot_pkg_setup
}
src_unpack() {
default
[[ ${PV} != 9999 ]] || git-r3_src_unpack
}
src_prepare() {
local PATCHES=(
"${FILESDIR}/systemd-test-process-util.patch"
"${FILESDIR}/256-bpf-gcc.patch"
)
if use elibc_musl; then
PATCHES+=(
"${FILESDIR}/0001-Revert-Drop-split-usr-and-unmerged-usr-support.patch"
"${FILESDIR}/0002-Use-XSI-strerror_r-instead-of-GNU-strerror_r.patch"
"${FILESDIR}/0003-fileio-Disable-use-of-disabling-write-buffer.patch"
"${FILESDIR}/0004-fs-util-Handle-musl-O_ACCMODE-containing-O_PATH.patch"
"${FILESDIR}/0006-test-PATH-sbin-so-fstab-generator-finds-fsck.patch"
"${FILESDIR}/0005-Use-libc-over-Linux-UAPI-headers-when-possible.patch"
"${FILESDIR}/0007-Handle-lack-of-printf.h.patch"
"${FILESDIR}/0010-basic-Support-musl-definition-of-rlim_t.patch"
"${FILESDIR}/0009-test-Change-expected-message-for-unhappy-sysusers.patch"
"${FILESDIR}/0008-test-Ensure-sysusers-test-11-passes-on-musl-libc.patch"
"${FILESDIR}/0011-Handle-musl-lack-of-GLOB_BRACE.patch"
"${FILESDIR}/0012-Handle-musl-s-longer-HOST_NAME_MAX-hardcode-64.patch"
"${FILESDIR}/0014-basic-Define-comparison_fn_t-in-sort-util.h.patch"
"${FILESDIR}/0013-basic-Handle-musl-lack-of-NI_IDN.patch"
"${FILESDIR}/0015-basic-Define-our-own-basename.patch"
"${FILESDIR}/0016-test-Handle-musl-s-interesting-locale-decisions.patch"
"${FILESDIR}/0017-Port-to-s6-utmps.patch"
"${FILESDIR}/0018-test-Add-definition-for-__cpu_set-type.patch"
"${FILESDIR}/0019-test-Don-t-assume-unknown-errors-have-their-codes.patch"
"${FILESDIR}/0020-test-time-util-Use-whole-fractions-no-4-digit-TZ.patch"
"${FILESDIR}/0021-Don-t-use-malloc_trim-or-malloc_info.patch"
"${FILESDIR}/0022-Port-to-musl-strptime.patch"
"${FILESDIR}/0024-basic-Use-sys-prctl.h-vs-linux-prctl.h.patch"
"${FILESDIR}/0023-shared-Conditionalise-sgrp-on-ENABLE_GSHADOW.patch"
"${FILESDIR}/0025-man-Ensure-notify-example-includes-string.h.patch"
"${FILESDIR}/0026-basic-Add-needed-signal.h-to-pidref.h.patch"
"${FILESDIR}/0027-Add-sys-file.h-include-for-LOCK_-definitions.patch"
"${FILESDIR}/0028-basic-Handle-NIS-compat-entries-ourselves.patch"
"${FILESDIR}/0030-test-Define-FTW_CONTINUE-if-not-already-defined.patch"
"${FILESDIR}/0029-edit-util-Don-t-clobber-reserved-identifier-stdin.patch"
"${FILESDIR}/0031-os-util-Handle-negative-time_t-values-properly.patch"
"${FILESDIR}/0032-test-Disable-fileio-test-that-fails-on-musl.patch"
"${FILESDIR}/0034-build-path-Disable-for-now.patch"
"${FILESDIR}/0033-recurse-dir-Perform-correct-pointer-math-on-de.patch"
)
fi
if ! use vanilla; then
PATCHES+=(
"${FILESDIR}/gentoo-journald-audit-r1.patch"
)
fi
default
}
src_configure() {
# Prevent conflicts with i686 cross toolchain, bug 559726
tc-export AR CC NM OBJCOPY RANLIB
python_setup
multilib-minimal_src_configure
}
multilib_src_configure() {
local myconf=(
--localstatedir="${EPREFIX}/var"
# default is developer, bug 918671
-Dmode=release
-Dsupport-url="https://gentoo.org/support/"
-Dpamlibdir="$(getpam_mod_dir)"
# avoid bash-completion dep
-Dbashcompletiondir="$(get_bashcompdir)"
-Dsplit-bin=false
# Disable compatibility with sysvinit
-Dsysvinit-path=
-Dsysvrcnd-path=
# no deps
-Dima=true
# Match /etc/shells, bug 919749
-Ddebug-shell="${EPREFIX}/bin/sh"
-Ddefault-user-shell="${EPREFIX}/bin/bash"
# Optional components/dependencies
$(meson_native_use_bool acl)
$(meson_native_use_bool apparmor)
$(meson_native_use_bool audit)
$(meson_native_use_bool boot bootloader)
$(meson_native_use_bool bpf bpf-framework)
-Dbpf-compiler=gcc
$(meson_native_use_bool cryptsetup libcryptsetup)
$(meson_native_use_bool curl libcurl)
$(meson_native_use_bool dns-over-tls dns-over-tls)
$(meson_native_use_bool elfutils)
$(meson_native_use_bool fido2 libfido2)
$(meson_use gcrypt)
$(meson_native_use_bool gnutls)
$(meson_native_use_bool homed)
$(meson_native_use_bool http microhttpd)
$(meson_native_use_bool idn)
$(meson_native_use_bool importd)
$(meson_native_use_bool importd bzip2)
$(meson_native_use_bool importd zlib)
$(meson_native_use_bool kernel-install)
$(meson_native_use_bool kmod)
$(meson_use lz4)
$(meson_use lzma xz)
$(meson_use test tests)
$(meson_use zstd)
$(meson_native_use_bool iptables libiptc)
$(meson_native_use_bool openssl)
$(meson_use pam)
$(meson_native_use_bool pkcs11 p11kit)
$(meson_native_use_bool pcre pcre2)
$(meson_native_use_bool policykit polkit)
$(meson_native_use_bool pwquality)
$(meson_native_use_bool qrcode qrencode)
$(meson_native_use_bool seccomp)
$(meson_native_use_bool selinux)
$(meson_native_use_bool tpm tpm2)
$(meson_native_use_bool test dbus)
$(meson_native_use_bool ukify)
$(meson_native_use_bool xkb xkbcommon)
-Dntp-servers="0.gentoo.pool.ntp.org 1.gentoo.pool.ntp.org 2.gentoo.pool.ntp.org 3.gentoo.pool.ntp.org"
# Breaks screen, tmux, etc.
-Ddefault-kill-user-processes=false
-Dcreate-log-dirs=false
# multilib options
$(meson_native_true backlight)
$(meson_native_true binfmt)
$(meson_native_true coredump)
$(meson_native_true environment-d)
$(meson_native_true firstboot)
$(meson_native_true hibernate)
$(meson_native_true hostnamed)
$(meson_native_true ldconfig)
$(meson_native_true localed)
$(meson_native_true man)
$(meson_native_true networkd)
$(meson_native_true quotacheck)
$(meson_native_true randomseed)
$(meson_native_true rfkill)
$(meson_native_true sysusers)
$(meson_native_true timedated)
$(meson_native_true timesyncd)
$(meson_native_true tmpfiles)
$(meson_native_true vconsole)
)
case $(tc-arch) in
amd64|arm|arm64|ppc|ppc64|s390|x86)
# src/vmspawn/vmspawn-util.h: QEMU_MACHINE_TYPE
myconf+=( $(meson_native_enabled vmspawn) ) ;;
*)
myconf+=( -Dvmspawn=disabled ) ;;
esac
meson_src_configure "${myconf[@]}"
}
multilib_src_test() {
(
unset DBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR
export COLUMNS=80
addpredict /dev
addpredict /proc
addpredict /run
addpredict /sys/fs/cgroup
meson_src_test --timeout-multiplier=10
) || die
}
multilib_src_install_all() {
# meson doesn't know about docdir
mv "${ED}"/usr/share/doc/{systemd,${PF}} || die
einstalldocs
dodoc "${FILESDIR}"/nsswitch.conf
insinto /usr/lib/tmpfiles.d
doins "${FILESDIR}"/legacy.conf
if ! use resolvconf; then
rm -f "${ED}"/usr/bin/resolvconf || die
fi
if ! use sysv-utils; then
rm "${ED}"/usr/bin/{halt,init,poweroff,reboot,shutdown} || die
rm "${ED}"/usr/share/man/man1/init.1 || die
rm "${ED}"/usr/share/man/man8/{halt,poweroff,reboot,shutdown}.8 || die
fi
# https://bugs.gentoo.org/761763
rm -r "${ED}"/usr/lib/sysusers.d || die
# Preserve empty dirs in /etc & /var, bug #437008
keepdir /etc/{binfmt.d,modules-load.d,tmpfiles.d}
keepdir /etc/kernel/install.d
keepdir /etc/systemd/{network,system,user}
keepdir /etc/udev/rules.d
keepdir /etc/udev/hwdb.d
keepdir /usr/lib/systemd/{system-sleep,system-shutdown}
keepdir /usr/lib/{binfmt.d,modules-load.d}
keepdir /usr/lib/systemd/user-generators
keepdir /var/lib/systemd
keepdir /var/log/journal
if use pam; then
newpamd "${FILESDIR}"/systemd-user.pam systemd-user
fi
if use kernel-install; then
# Dummy config, remove to make room for sys-kernel/installkernel
rm "${ED}/usr/lib/kernel/install.conf" || die
fi
use ukify && python_fix_shebang "${ED}"
use boot && secureboot_auto_sign
}
migrate_locale() {
local envd_locale_def="${EROOT}/etc/env.d/02locale"
local envd_locale=( "${EROOT}"/etc/env.d/??locale )
local locale_conf="${EROOT}/etc/locale.conf"
if [[ ! -L ${locale_conf} && ! -e ${locale_conf} ]]; then
# If locale.conf does not exist...
if [[ -e ${envd_locale} ]]; then
# ...either copy env.d/??locale if there's one
ebegin "Moving ${envd_locale} to ${locale_conf}"
mv "${envd_locale}" "${locale_conf}"
eend ${?} || FAIL=1
else
# ...or create a dummy default
ebegin "Creating ${locale_conf}"
cat > "${locale_conf}" <<-EOF
# This file has been created by the sys-apps/systemd ebuild.
# See locale.conf(5) and localectl(1).
# LANG=${LANG}
EOF
eend ${?} || FAIL=1
fi
fi
if [[ ! -L ${envd_locale} ]]; then
# now, if env.d/??locale is not a symlink (to locale.conf)...
if [[ -e ${envd_locale} ]]; then
# ...warn the user that he has duplicate locale settings
ewarn
ewarn "To ensure consistent behavior, you should replace ${envd_locale}"
ewarn "with a symlink to ${locale_conf}. Please migrate your settings"
ewarn "and create the symlink with the following command:"
ewarn "ln -s -n -f ../locale.conf ${envd_locale}"
ewarn
else
# ...or just create the symlink if there's nothing here
ebegin "Creating ${envd_locale_def} -> ../locale.conf symlink"
ln -n -s ../locale.conf "${envd_locale_def}"
eend ${?} || FAIL=1
fi
fi
}
pkg_preinst() {
if [[ -e ${EROOT}/etc/sysctl.conf ]]; then
# Symlink /etc/sysctl.conf for easy migration.
dosym ../../../etc/sysctl.conf /usr/lib/sysctl.d/99-sysctl.conf
fi
if ! use boot && has_version "sys-apps/systemd[gnuefi(-)]"; then
ewarn "The 'gnuefi' USE flag has been renamed to 'boot'."
ewarn "Make sure to enable the 'boot' USE flag if you use systemd-boot."
fi
}
pkg_postinst() {
systemd_update_catalog
# Keep this here in case the database format changes so it gets updated
# when required.
systemd-hwdb --root="${ROOT}" update
udev_reload || FAIL=1
# Bug 465468, make sure locales are respected, and ensure consistency
# between OpenRC & systemd
migrate_locale
if [[ -z ${REPLACING_VERSIONS} ]]; then
if type systemctl &>/dev/null; then
systemctl --root="${ROOT:-/}" enable getty@.service remote-fs.target || FAIL=1
fi
elog "To enable a useful set of services, run the following:"
elog " systemctl preset-all --preset-mode=enable-only"
fi
if [[ -L ${EROOT}/var/lib/systemd/timesync ]]; then
rm "${EROOT}/var/lib/systemd/timesync"
fi
if [[ -z ${ROOT} && -d /run/systemd/system ]]; then
ebegin "Reexecuting system manager (systemd)"
systemctl daemon-reexec
eend $? || FAIL=1
# https://lists.freedesktop.org/archives/systemd-devel/2024-June/050466.html
ebegin "Signaling user managers to reexec"
systemctl kill --kill-whom='main' --signal='SIGRTMIN+25' 'user@*.service'
eend $?
fi
if [[ ${FAIL} ]]; then
eerror "One of the postinst commands failed. Please check the postinst output"
eerror "for errors. You may need to clean up your system and/or try installing"
eerror "systemd again."
eerror
fi
if use boot; then
optfeature "installing kernels in systemd-boot's native layout and update loader entries" \
"sys-kernel/installkernel[systemd-boot]"
fi
if use ukify; then
optfeature "generating unified kernel image on each kernel installation" \
"sys-kernel/installkernel[ukify]"
fi
}
pkg_prerm() {
# If removing systemd completely, remove the catalog database.
if [[ ! ${REPLACED_BY_VERSION} ]]; then
rm -f -v "${EROOT}"/var/lib/systemd/catalog/database
fi
}