Merge master into staging-next
This commit is contained in:
commit
f066736235
31 changed files with 844 additions and 101 deletions
|
@ -8531,6 +8531,12 @@
|
|||
githubId = 638763;
|
||||
name = "Stuart Moss";
|
||||
};
|
||||
stunkymonkey = {
|
||||
email = "account@buehler.rocks";
|
||||
github = "Stunkymonkey";
|
||||
githubId = 1315818;
|
||||
name = "Felix Bühler";
|
||||
};
|
||||
suhr = {
|
||||
email = "suhr@i2pmail.org";
|
||||
github = "suhr";
|
||||
|
|
|
@ -115,9 +115,9 @@ in {
|
|||
user = "grocy";
|
||||
group = "nginx";
|
||||
|
||||
# PHP 7.3 is the only version which is supported/tested by upstream:
|
||||
# https://github.com/grocy/grocy/blob/v2.6.0/README.md#how-to-install
|
||||
phpPackage = pkgs.php73;
|
||||
# PHP 7.4 is the only version which is supported/tested by upstream:
|
||||
# https://github.com/grocy/grocy/blob/v3.0.0/README.md#how-to-install
|
||||
phpPackage = pkgs.php74;
|
||||
|
||||
inherit (cfg.phpfpm) settings;
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ in rec {
|
|||
(onFullSupported "nixos.tests.printing")
|
||||
(onFullSupported "nixos.tests.proxy")
|
||||
(onFullSupported "nixos.tests.sddm.default")
|
||||
(onFullSupported "nixos.tests.shadow")
|
||||
(onFullSupported "nixos.tests.simple")
|
||||
(onFullSupported "nixos.tests.switchTest")
|
||||
(onFullSupported "nixos.tests.udisks2")
|
||||
|
|
|
@ -324,6 +324,7 @@ in
|
|||
redis = handleTest ./redis.nix {};
|
||||
redmine = handleTest ./redmine.nix {};
|
||||
restic = handleTest ./restic.nix {};
|
||||
ripgrep = handleTest ./ripgrep.nix {};
|
||||
robustirc-bridge = handleTest ./robustirc-bridge.nix {};
|
||||
roundcube = handleTest ./roundcube.nix {};
|
||||
rspamd = handleTest ./rspamd.nix {};
|
||||
|
@ -339,6 +340,7 @@ in
|
|||
scala = handleTest ./scala.nix {};
|
||||
sddm = handleTest ./sddm.nix {};
|
||||
service-runner = handleTest ./service-runner.nix {};
|
||||
shadow = handleTest ./shadow.nix {};
|
||||
shadowsocks = handleTest ./shadowsocks {};
|
||||
shattered-pixel-dungeon = handleTest ./shattered-pixel-dungeon.nix {};
|
||||
shiori = handleTest ./shiori.nix {};
|
||||
|
|
13
nixos/tests/ripgrep.nix
Normal file
13
nixos/tests/ripgrep.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "ripgrep";
|
||||
meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ nequissimus ]; };
|
||||
|
||||
nodes.ripgrep = { pkgs, ... }: { environment.systemPackages = [ pkgs.ripgrep ]; };
|
||||
|
||||
testScript = ''
|
||||
ripgrep.succeed('echo "abc\nbcd\ncde" > /tmp/foo')
|
||||
assert "bcd" in ripgrep.succeed("rg -N 'bcd' /tmp/foo")
|
||||
assert "bcd\ncde" in ripgrep.succeed("rg -N 'cd' /tmp/foo")
|
||||
assert "ripgrep ${pkgs.ripgrep.version}" in ripgrep.succeed("rg --version | head -1")
|
||||
'';
|
||||
})
|
98
nixos/tests/shadow.nix
Normal file
98
nixos/tests/shadow.nix
Normal file
|
@ -0,0 +1,98 @@
|
|||
let
|
||||
password1 = "foobar";
|
||||
password2 = "helloworld";
|
||||
password3 = "bazqux";
|
||||
in import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "shadow";
|
||||
meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ nequissimus ]; };
|
||||
|
||||
nodes.shadow = { pkgs, ... }: {
|
||||
environment.systemPackages = [ pkgs.shadow ];
|
||||
|
||||
users = {
|
||||
mutableUsers = true;
|
||||
users.emma = {
|
||||
password = password1;
|
||||
shell = pkgs.bash;
|
||||
};
|
||||
users.layla = {
|
||||
password = password2;
|
||||
shell = pkgs.shadow;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
shadow.wait_for_unit("multi-user.target")
|
||||
shadow.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
|
||||
|
||||
with subtest("Normal login"):
|
||||
shadow.send_key("alt-f2")
|
||||
shadow.wait_until_succeeds(f"[ $(fgconsole) = 2 ]")
|
||||
shadow.wait_for_unit(f"getty@tty2.service")
|
||||
shadow.wait_until_succeeds(f"pgrep -f 'agetty.*tty2'")
|
||||
shadow.wait_until_tty_matches(2, "login: ")
|
||||
shadow.send_chars("emma\n")
|
||||
shadow.wait_until_tty_matches(2, "login: emma")
|
||||
shadow.wait_until_succeeds("pgrep login")
|
||||
shadow.send_chars("${password1}\n")
|
||||
shadow.send_chars("whoami > /tmp/1\n")
|
||||
shadow.wait_for_file("/tmp/1")
|
||||
assert "emma" in shadow.succeed("cat /tmp/1")
|
||||
|
||||
with subtest("Change password"):
|
||||
shadow.send_key("alt-f3")
|
||||
shadow.wait_until_succeeds(f"[ $(fgconsole) = 3 ]")
|
||||
shadow.wait_for_unit(f"getty@tty3.service")
|
||||
shadow.wait_until_succeeds(f"pgrep -f 'agetty.*tty3'")
|
||||
shadow.wait_until_tty_matches(3, "login: ")
|
||||
shadow.send_chars("emma\n")
|
||||
shadow.wait_until_tty_matches(3, "login: emma")
|
||||
shadow.wait_until_succeeds("pgrep login")
|
||||
shadow.send_chars("${password1}\n")
|
||||
shadow.send_chars("passwd\n")
|
||||
shadow.sleep(2)
|
||||
shadow.send_chars("${password1}\n")
|
||||
shadow.sleep(2)
|
||||
shadow.send_chars("${password3}\n")
|
||||
shadow.sleep(2)
|
||||
shadow.send_chars("${password3}\n")
|
||||
shadow.sleep(2)
|
||||
shadow.send_key("alt-f4")
|
||||
shadow.wait_until_succeeds(f"[ $(fgconsole) = 4 ]")
|
||||
shadow.wait_for_unit(f"getty@tty4.service")
|
||||
shadow.wait_until_succeeds(f"pgrep -f 'agetty.*tty4'")
|
||||
shadow.wait_until_tty_matches(4, "login: ")
|
||||
shadow.send_chars("emma\n")
|
||||
shadow.wait_until_tty_matches(4, "login: emma")
|
||||
shadow.wait_until_succeeds("pgrep login")
|
||||
shadow.send_chars("${password1}\n")
|
||||
shadow.wait_until_tty_matches(4, "Login incorrect")
|
||||
shadow.wait_until_tty_matches(4, "login:")
|
||||
shadow.send_chars("emma\n")
|
||||
shadow.wait_until_tty_matches(4, "login: emma")
|
||||
shadow.wait_until_succeeds("pgrep login")
|
||||
shadow.send_chars("${password3}\n")
|
||||
shadow.send_chars("whoami > /tmp/2\n")
|
||||
shadow.wait_for_file("/tmp/2")
|
||||
assert "emma" in shadow.succeed("cat /tmp/2")
|
||||
|
||||
with subtest("Groups"):
|
||||
assert "foobar" not in shadow.succeed("groups emma")
|
||||
shadow.succeed("groupadd foobar")
|
||||
shadow.succeed("usermod -a -G foobar emma")
|
||||
assert "foobar" in shadow.succeed("groups emma")
|
||||
|
||||
with subtest("nologin shell"):
|
||||
shadow.send_key("alt-f5")
|
||||
shadow.wait_until_succeeds(f"[ $(fgconsole) = 5 ]")
|
||||
shadow.wait_for_unit(f"getty@tty5.service")
|
||||
shadow.wait_until_succeeds(f"pgrep -f 'agetty.*tty5'")
|
||||
shadow.wait_until_tty_matches(5, "login: ")
|
||||
shadow.send_chars("layla\n")
|
||||
shadow.wait_until_tty_matches(5, "login: layla")
|
||||
shadow.wait_until_succeeds("pgrep login")
|
||||
shadow.send_chars("${password2}\n")
|
||||
shadow.wait_until_tty_matches(5, "login:")
|
||||
'';
|
||||
})
|
41
pkgs/applications/misc/mediaelch/default.nix
Normal file
41
pkgs/applications/misc/mediaelch/default.nix
Normal file
|
@ -0,0 +1,41 @@
|
|||
{ stdenv
|
||||
, mkDerivation
|
||||
, fetchFromGitHub
|
||||
, qmake
|
||||
, curl
|
||||
, ffmpeg
|
||||
, libmediainfo
|
||||
, libzen
|
||||
, qtbase
|
||||
, qtdeclarative
|
||||
, qtmultimedia
|
||||
}:
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "mediaelch";
|
||||
version = "2.8.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Komet";
|
||||
repo = "MediaElch";
|
||||
rev = "v${version}";
|
||||
sha256 = "0y26vfgrdym461lzmm5x3z5ai9ky09vlk3cy4sq6hwlj7mzcz0k7";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake ];
|
||||
|
||||
buildInputs = [ curl libmediainfo libzen ffmpeg qtbase qtdeclarative qtmultimedia ];
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace MediaElch.pro --replace "/usr" "$out"
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = "https://mediaelch.de/mediaelch/";
|
||||
description = "Media Manager for Kodi";
|
||||
license = licenses.lgpl3Only;
|
||||
maintainers = with maintainers; [ stunkymonkey ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
|
@ -22,12 +22,12 @@ let
|
|||
|
||||
in mkDerivation rec {
|
||||
pname = "telegram-desktop";
|
||||
version = "2.4.7";
|
||||
version = "2.5.1";
|
||||
|
||||
# Telegram-Desktop with submodules
|
||||
src = fetchurl {
|
||||
url = "https://github.com/telegramdesktop/tdesktop/releases/download/v${version}/tdesktop-${version}-full.tar.gz";
|
||||
sha256 = "1j2v29952l0am357pqvvgzm2zghmwhlr833kgp85hssxpr9xy4vv";
|
||||
sha256 = "1qpap599h2c4hlmr00k82r6138ym4zqrbfpvm97gm97adn3mxk7i";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -80,9 +80,6 @@ in mkDerivation rec {
|
|||
# TODO: Package mapbox-variant
|
||||
|
||||
postFixup = ''
|
||||
# Nuke refs to `tg_owt` which is introduced by `__FILE__` in headers.
|
||||
remove-references-to -t ${tg_owt} $out/bin/telegram-desktop
|
||||
|
||||
# This is necessary to run Telegram in a pure environment.
|
||||
# We also use gappsWrapperArgs from wrapGAppsHook.
|
||||
wrapProgram $out/bin/telegram-desktop \
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{ lib, stdenv, fetchFromGitHub, cmake, ninja, yasm
|
||||
, pkg-config, libjpeg, openssl, libopus, ffmpeg, alsaLib, libpulseaudio
|
||||
{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, ninja, yasm
|
||||
, libjpeg, openssl, libopus, ffmpeg, alsaLib, libpulseaudio, protobuf
|
||||
}:
|
||||
|
||||
let
|
||||
rev = "e8fcae73947445db3d418fb7c20b964b59e14706";
|
||||
sha256 = "0s2dd41r71aixhvympiqfks1liv7x78y60n0i87vmyxyfx449b5h";
|
||||
rev = "6eaebec41b34a0a0d98f02892d0cfe6bbcbc0a39";
|
||||
sha256 = "0dbc36j09jmxvznal55hi3qrfyvj4y0ila6347nav9skcmk8fm64";
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
pname = "tg_owt";
|
||||
|
@ -14,11 +14,16 @@ in stdenv.mkDerivation {
|
|||
owner = "desktop-app";
|
||||
repo = "tg_owt";
|
||||
inherit rev sha256;
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
nativeBuildInputs = [ pkg-config cmake ninja yasm ];
|
||||
|
||||
buildInputs = [ libjpeg openssl libopus ffmpeg alsaLib libpulseaudio ];
|
||||
buildInputs = [
|
||||
libjpeg openssl libopus ffmpeg alsaLib libpulseaudio protobuf
|
||||
];
|
||||
|
||||
meta.license = lib.licenses.bsd3;
|
||||
}
|
||||
|
|
|
@ -9,16 +9,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "delta";
|
||||
version = "0.4.4";
|
||||
version = "0.4.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dandavison";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1ng22g9h1l1v2yav8zh6w4nn6ifv8sfz8566m8155d0cza2iimw6";
|
||||
sha256 = "0rh902h76pn7ja5zizlfklmwcyyki4b0v4irw1j40cjjnah75ljp";
|
||||
};
|
||||
|
||||
cargoSha256 = "0b3qv1ksk8fmpawih2qrz29wlpj1gvq9hw4yqm7hdk6awl5h8lvv";
|
||||
cargoSha256 = "1rniihx1rb18n2bp4b2yhn4ayih5cbcyqmiv6jckas7jwrgk6wra";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "JPype1";
|
||||
version = "1.1.2";
|
||||
version = "1.2.0";
|
||||
disabled = isPy27;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "c6e36de9f7ef826ff27f6d5260acc710ebc585a534c12cbac905db088ab1d992";
|
||||
sha256 = "62ca03e7f7963ba4ac1065ee48ff661f752b3db3c23549ed8933ab40196a3157";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = lib.optionals (pythonOlder "3.8") [
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "azure-mgmt-synapse";
|
||||
version = "0.5.0";
|
||||
version = "0.6.0";
|
||||
disabled = pythonOlder "3";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "4eb76230c38525b71eb1addefebd265bc3d9b68ba7ff60ce5356d39f68ed2837";
|
||||
sha256 = "f81cb52b220774aab93ffcf25bdc17e03fd84b6916836640789f86fbf636b984";
|
||||
extension = "zip";
|
||||
};
|
||||
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "boto3";
|
||||
version = "1.16.41"; # N.B: if you change this, change botocore too
|
||||
version = "1.16.42"; # N.B: if you change this, change botocore too
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-DYTobuAuMshtMONd6WgDA6SAhz3S6Z3NyDSGuS3/sDw=";
|
||||
sha256 = "sha256-ko5z9R9xRpobDOrR+7N/MERX7FRACDPALAwyjmRYH+o=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ botocore jmespath s3transfer ] ++ lib.optionals (!isPy3k) [ futures ];
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "botocore";
|
||||
version = "1.19.41"; # N.B: if you change this, change boto3 and awscli to a matching version
|
||||
version = "1.19.42"; # N.B: if you change this, change boto3 and awscli to a matching version
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-VKillJeoO6LYn7lPht0HtiLXtfHW6ZJSIuu8ResNY6w=";
|
||||
sha256 = "sha256-8LBx/Qj01y17osVH2lKavr4FJwXBWVvm0SohUadaYCk=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{ lib, fetchPypi, buildPythonPackage, docutils, six, sphinx, isPy3k, isPy27 }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
version = "4.24.1";
|
||||
version = "4.25.1";
|
||||
pname = "breathe";
|
||||
disabled = isPy27;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "d8e47ba4b975f3228a13daf481762f784f87d1e6e87a01619360d59e558d2fc0";
|
||||
sha256 = "bf81658ed31f8f586247d203923479fcde6c3797d376c804bdafa7e56ffd43b5";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ docutils six sphinx ];
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "bumps";
|
||||
version = "0.7.18";
|
||||
version = "0.8.0";
|
||||
|
||||
propagatedBuildInputs = [six];
|
||||
|
||||
|
@ -12,7 +12,7 @@ buildPythonPackage rec {
|
|||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "3217d4fd3ec767448d742f3b6ff527cc3817f2421b9a9a8456e1d8ee4a9b1087";
|
||||
sha256 = "9f92c05effd8175763799d19ca55592e89b053318f611148a6725159aea41d67";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "clickhouse-driver";
|
||||
version = "0.1.5";
|
||||
version = "0.2.0";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "1827cm5z2zd6mxn9alq54bbzw6vhz4a30a54vacqn7nz691qs1gd";
|
||||
sha256 = "62d37f93872d5a13eb6b0d52bab2b593ed0e14cf9200949aa2d02f9801064c0f";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-storages";
|
||||
version = "1.10.1";
|
||||
version = "1.11";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "652275ab7844538c462b62810276c0244866f345878256a9e0e86f5b1283ae18";
|
||||
sha256 = "7af56611c62a1c174aab4e862efb7fdd98296dccf76f42135f5b6851fc313c97";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ django ];
|
||||
|
|
|
@ -3,17 +3,17 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "leiningen";
|
||||
version = "2.9.1";
|
||||
version = "2.9.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://raw.github.com/technomancy/leiningen/${version}/bin/lein-pkg";
|
||||
sha256 = "1h0gpzpr7xk6hvmrrq41bcp2k9aai348baf8ad9bxvci01n4zb12";
|
||||
sha256 = "12kv3286a2vkm3qpm2msiks87mkspxddgl7bwiacdias9dfda09n";
|
||||
};
|
||||
|
||||
jarsrc = fetchurl {
|
||||
# NOTE: This is actually a .jar, Github has issues
|
||||
url = "https://github.com/technomancy/leiningen/releases/download/${version}/${pname}-${version}-standalone.zip";
|
||||
sha256 = "1y2mva5s2w2szzn1b9rhz0dvkffls4ravii677ybcf2w9wd86z7a";
|
||||
sha256 = "1shyvg1471sc3bv4h3ax51626xw8a8w05f43bny6gmp8pyc0qjfz";
|
||||
};
|
||||
|
||||
JARNAME = "${pname}-${version}-standalone.jar";
|
||||
|
@ -48,5 +48,6 @@ stdenv.mkDerivation rec {
|
|||
description = "Project automation for Clojure";
|
||||
license = stdenv.lib.licenses.epl10;
|
||||
platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
|
||||
maintainers = with stdenv.lib.maintainers; [ thiagokokada ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,6 +8,6 @@ let
|
|||
in
|
||||
buildNodejs {
|
||||
inherit enableNpm;
|
||||
version = "15.4.0";
|
||||
sha256 = "0kp0hckhjkmaqyvjpcj17rj6fw9fg3c95j78r2nr10bc65anjwms";
|
||||
version = "15.5.0";
|
||||
sha256 = "1wzcypb1kawc6m5q36cd31qjg7ljby8py9qg555m4bqm5gpvvfjg";
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ stdenv, fetchpatch, fetchFromGitHub, autoreconfHook, libxslt, libxml2
|
||||
, docbook_xml_dtd_45, docbook_xsl, itstool, flex, bison
|
||||
{ stdenv, nixosTests, fetchpatch, fetchFromGitHub, autoreconfHook, libxslt
|
||||
, libxml2 , docbook_xml_dtd_45, docbook_xsl, itstool, flex, bison
|
||||
, pam ? null, glibcCross ? null
|
||||
}:
|
||||
|
||||
|
@ -86,5 +86,6 @@ stdenv.mkDerivation rec {
|
|||
|
||||
passthru = {
|
||||
shellPath = "/bin/nologin";
|
||||
tests = { inherit (nixosTests) shadow; };
|
||||
};
|
||||
}
|
||||
|
|
|
@ -10,11 +10,11 @@ assert enablePython -> python3 != null;
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bind";
|
||||
version = "9.16.8";
|
||||
version = "9.16.10";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://downloads.isc.org/isc/bind9/${version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "0ccdbqmpvnxlbrxjsx2w8ir4xh961svzcw7n87n8dglj6rb9r6wy";
|
||||
sha256 = "sha256-vEf8AZxiBeamv7g5xUShRyMh3wU3upBbhGpMv/4zYrM=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "lib" "dev" "man" "dnsutils" "host" ];
|
||||
|
@ -22,11 +22,6 @@ stdenv.mkDerivation rec {
|
|||
patches = [
|
||||
./dont-keep-configure-flags.patch
|
||||
./remove-mkdir-var.patch
|
||||
# Fix cross-compilation (will be included in next release after 9.16.8)
|
||||
(fetchpatch {
|
||||
url = "https://gitlab.isc.org/isc-projects/bind9/-/commit/35ca6df07277adff4df7472a0b01ea5438cdf1ff.patch";
|
||||
sha256 = "1sj0hcd0wgkam7hrbp2vw2yymmni4azr9ixd9shz1l6ja90bdj9h";
|
||||
})
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ perl pkg-config ];
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
From 931958d8f11cb55f2e88a178a3b828f3c537eba8 Mon Sep 17 00:00:00 2001
|
||||
From 7ed6c641cc501246931721700b73f40dce7e8f4b Mon Sep 17 00:00:00 2001
|
||||
From: Maximilian Bosch <maximilian@mbosch.me>
|
||||
Date: Fri, 6 Mar 2020 23:43:58 +0100
|
||||
Date: Tue, 22 Dec 2020 15:38:56 +0100
|
||||
Subject: [PATCH 1/2] Define configs with env vars
|
||||
|
||||
---
|
||||
app.php | 4 ++--
|
||||
services/DatabaseService.php | 2 +-
|
||||
services/FilesService.php | 2 +-
|
||||
services/StockService.php | 2 +-
|
||||
4 files changed, 5 insertions(+), 5 deletions(-)
|
||||
services/StockService.php | 3 +--
|
||||
4 files changed, 5 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/app.php b/app.php
|
||||
index af65ad1..4963c28 100644
|
||||
index 8176ebe..04432ba 100644
|
||||
--- a/app.php
|
||||
+++ b/app.php
|
||||
@@ -25,7 +25,7 @@ else
|
||||
@@ -10,7 +10,7 @@ use Slim\Factory\AppFactory;
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
// Load config files
|
||||
|
@ -23,33 +23,32 @@ index af65ad1..4963c28 100644
|
|||
require_once __DIR__ . '/config-dist.php'; // For not in own config defined values we use the default ones
|
||||
|
||||
// Definitions for dev/demo/prerelease mode
|
||||
@@ -50,7 +50,7 @@ $app = AppFactory::create();
|
||||
@@ -37,7 +37,7 @@ $app = AppFactory::create();
|
||||
|
||||
$container = $app->getContainer();
|
||||
$container->set('view', function(Container $container)
|
||||
{
|
||||
$container->set('view', function (Container $container) {
|
||||
- return new Slim\Views\Blade(__DIR__ . '/views', GROCY_DATAPATH . '/viewcache');
|
||||
+ return new \Slim\Views\Blade(__DIR__ . '/views', getenv('GROCY_CACHE_DIR'));
|
||||
+ return new Slim\Views\Blade(__DIR__ . '/views', getenv('GROCY_CACHE_DIR'));
|
||||
});
|
||||
$container->set('LoginControllerInstance', function(Container $container)
|
||||
{
|
||||
$container->set('UrlManager', function (Container $container) {
|
||||
return new UrlManager(GROCY_BASE_URL);
|
||||
diff --git a/services/DatabaseService.php b/services/DatabaseService.php
|
||||
index 23fc7b9..daa1993 100644
|
||||
index d1080b0..8bc4ee1 100644
|
||||
--- a/services/DatabaseService.php
|
||||
+++ b/services/DatabaseService.php
|
||||
@@ -25,7 +25,7 @@ class DatabaseService
|
||||
return GROCY_DATAPATH . '/grocy_' . GROCY_CULTURE . '.db';
|
||||
@@ -105,6 +105,6 @@ class DatabaseService
|
||||
return GROCY_DATAPATH . '/grocy_' . $dbSuffix . '.db';
|
||||
}
|
||||
|
||||
- return GROCY_DATAPATH . '/grocy.db';
|
||||
+ return getenv('GROCY_DB_FILE');
|
||||
}
|
||||
|
||||
private static $DbConnectionRaw = null;
|
||||
}
|
||||
diff --git a/services/FilesService.php b/services/FilesService.php
|
||||
index cecdae3..357298d 100644
|
||||
index 8c1483e..8f74b4b 100644
|
||||
--- a/services/FilesService.php
|
||||
+++ b/services/FilesService.php
|
||||
@@ -12,7 +12,7 @@ class FilesService extends BaseService
|
||||
@@ -70,7 +70,7 @@ class FilesService extends BaseService
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
|
@ -59,18 +58,19 @@ index cecdae3..357298d 100644
|
|||
if (!file_exists($this->StoragePath))
|
||||
{
|
||||
diff --git a/services/StockService.php b/services/StockService.php
|
||||
index bfde3fc..53b2245 100644
|
||||
index 4741b4b..6d4e748 100644
|
||||
--- a/services/StockService.php
|
||||
+++ b/services/StockService.php
|
||||
@@ -934,7 +934,7 @@ class StockService extends BaseService
|
||||
@@ -1374,8 +1374,7 @@ class StockService extends BaseService
|
||||
throw new \Exception('No barcode lookup plugin defined');
|
||||
}
|
||||
|
||||
- $path = GROCY_DATAPATH . "/plugins/$pluginName.php";
|
||||
+ $path = getenv('GROCY_PLUGIN_DIR');
|
||||
-
|
||||
+ $path = getenv('GROCY_PLUGIN_DIR') . "/$pluginName.php";
|
||||
if (file_exists($path))
|
||||
{
|
||||
require_once $path;
|
||||
--
|
||||
2.25.0
|
||||
2.29.2
|
||||
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
From 1556489f0b475ae56e5ed3afba19cc2abb696a76 Mon Sep 17 00:00:00 2001
|
||||
From: Maximilian Bosch <maximilian@mbosch.me>
|
||||
Date: Thu, 16 Apr 2020 19:37:32 +0200
|
||||
Subject: [PATCH 2/2] Remove check for config-file as it's stored in /etc/grocy
|
||||
|
||||
---
|
||||
helpers/PrerequisiteChecker.php | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/helpers/PrerequisiteChecker.php b/helpers/PrerequisiteChecker.php
|
||||
index d4bf74c6..ca7686c9 100644
|
||||
--- a/helpers/PrerequisiteChecker.php
|
||||
+++ b/helpers/PrerequisiteChecker.php
|
||||
@@ -8,7 +8,6 @@ class PrerequisiteChecker
|
||||
From c46323dfc4a3d5bf17f7508f5b5f223858a598c3 Mon Sep 17 00:00:00 2001
|
||||
From: Maximilian Bosch <maximilian@mbosch.me>
|
||||
Date: Tue, 22 Dec 2020 15:39:15 +0100
|
||||
Subject: [PATCH 2/2] Remove check for config-file as it's stored in /etc/grocy
|
||||
|
||||
---
|
||||
helpers/PrerequisiteChecker.php | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/helpers/PrerequisiteChecker.php b/helpers/PrerequisiteChecker.php
|
||||
index cbe0a3a..a484db2 100644
|
||||
--- a/helpers/PrerequisiteChecker.php
|
||||
+++ b/helpers/PrerequisiteChecker.php
|
||||
@@ -11,7 +11,6 @@ class PrerequisiteChecker
|
||||
{
|
||||
public function checkRequirements()
|
||||
{
|
||||
- self::checkForConfigFile();
|
||||
self::checkForConfigDistFile();
|
||||
self::checkForComposer();
|
||||
self::checkForYarn();
|
||||
--
|
||||
2.25.0
|
||||
|
||||
public function checkRequirements()
|
||||
{
|
||||
- self::checkForConfigFile();
|
||||
self::checkForConfigDistFile();
|
||||
self::checkForComposer();
|
||||
self::checkForPhpExtensions();
|
||||
--
|
||||
2.29.2
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "grocy";
|
||||
version = "2.7.1";
|
||||
version = "3.0.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/grocy/grocy/releases/download/v${version}/grocy_${version}.zip";
|
||||
sha256 = "0ab1yxj499vadakq2c1lils3ir6fm02wrdgrirrlar4s4z6c4p7r";
|
||||
sha256 = "sha256-O7DksfA95IHvLJyRrWG8iECcUUDsOtytd78koNZdQzE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
@ -14,6 +14,8 @@ stdenv.mkDerivation rec {
|
|||
unzip ${src} -d .
|
||||
'';
|
||||
|
||||
# NOTE: if patches are created from a git checkout, those should be modified
|
||||
# with `unixdos` to make sure those apply here.
|
||||
patches = [
|
||||
./0001-Define-configs-with-env-vars.patch
|
||||
./0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch
|
||||
|
|
|
@ -0,0 +1,569 @@
|
|||
From 55a5b9c8254126d0acef8702526c92a31200a07c Mon Sep 17 00:00:00 2001
|
||||
From: Matthew DeVore <matvore@google.com>
|
||||
Date: Tue, 4 Aug 2020 17:49:42 -0700
|
||||
Subject: [PATCH] lib/util: Standardize use of st_[acm]time ns
|
||||
|
||||
Commit 810397f89a10, and possibly others, broke the build for macOS and
|
||||
other environments which don't have st_[acm]tim fields on 'struct stat'.
|
||||
|
||||
Multiple places in the codebase used the config.h values to determine
|
||||
how to access the nanosecond or microsecond values of the stat
|
||||
timestamps, so rather than add more, centralize them all into
|
||||
lib/util/time.c.
|
||||
|
||||
Also allow pvfs_fileinfo.c to read nanosecond-granularity timestamps on
|
||||
platforms where it didn't before, since its #if branches were not
|
||||
complete.
|
||||
|
||||
Signed-off-by: Matthew DeVore <matvore@google.com>
|
||||
Reviewed-by: Jeremy Allison <jra@samba.org>
|
||||
Reviewed-by: Volker Lendecke <vl@samba.org>
|
||||
|
||||
Autobuild-User(master): Volker Lendecke <vl@samba.org>
|
||||
Autobuild-Date(master): Sat Aug 15 08:51:09 UTC 2020 on sn-devel-184
|
||||
---
|
||||
lib/replace/wscript | 2 -
|
||||
lib/util/time.c | 230 ++++++++++++++++++++
|
||||
lib/util/time.h | 18 ++
|
||||
source3/lib/system.c | 121 +---------
|
||||
source3/libsmb/libsmb_stat.c | 24 +-
|
||||
source4/ntvfs/posix/pvfs_fileinfo.c | 11 +-
|
||||
source4/torture/libsmbclient/libsmbclient.c | 7 +-
|
||||
7 files changed, 277 insertions(+), 136 deletions(-)
|
||||
|
||||
diff --git a/lib/replace/wscript b/lib/replace/wscript
|
||||
index 64f305d6df0..85bc11d2f01 100644
|
||||
--- a/lib/replace/wscript
|
||||
+++ b/lib/replace/wscript
|
||||
@@ -746,8 +746,6 @@ def configure(conf):
|
||||
|
||||
conf.CHECK_CODE('mkdir("foo",0777)', define='HAVE_MKDIR_MODE', headers='sys/stat.h')
|
||||
|
||||
- conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_mtim.tv_nsec', define='HAVE_STAT_TV_NSEC',
|
||||
- headers='sys/stat.h')
|
||||
# we need the st_rdev test under two names
|
||||
conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_rdev',
|
||||
define='HAVE_STRUCT_STAT_ST_RDEV',
|
||||
diff --git a/lib/util/time.c b/lib/util/time.c
|
||||
index 0fac5e2e397..b5c1d700b23 100644
|
||||
--- a/lib/util/time.c
|
||||
+++ b/lib/util/time.c
|
||||
@@ -26,6 +26,10 @@
|
||||
#include "byteorder.h"
|
||||
#include "time_basic.h"
|
||||
#include "lib/util/time.h" /* Avoid /usr/include/time.h */
|
||||
+#include <sys/stat.h>
|
||||
+#ifndef NO_CONFIG_H
|
||||
+#include "config.h"
|
||||
+#endif
|
||||
|
||||
/**
|
||||
* @file
|
||||
@@ -1232,3 +1236,229 @@ struct timespec time_t_to_full_timespec(time_t t)
|
||||
}
|
||||
return (struct timespec){.tv_sec = t};
|
||||
}
|
||||
+
|
||||
+#if !defined(HAVE_STAT_HIRES_TIMESTAMPS)
|
||||
+
|
||||
+/* Old system - no ns timestamp. */
|
||||
+time_t get_atimensec(const struct stat *st)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+time_t get_mtimensec(const struct stat *st)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+time_t get_ctimensec(const struct stat *st)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* Set does nothing with no ns timestamp. */
|
||||
+void set_atimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+void set_mtimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+void set_ctimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+#elif HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
|
||||
+
|
||||
+time_t get_atimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_atimespec.tv_nsec;
|
||||
+}
|
||||
+
|
||||
+time_t get_mtimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_mtimespec.tv_nsec;
|
||||
+}
|
||||
+
|
||||
+time_t get_ctimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_ctimespec.tv_nsec;
|
||||
+}
|
||||
+
|
||||
+void set_atimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_atimespec.tv_nsec = ns;
|
||||
+}
|
||||
+
|
||||
+void set_mtimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_mtimespec.tv_nsec = ns;
|
||||
+}
|
||||
+
|
||||
+void set_ctimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_ctimespec.tv_nsec = ns;
|
||||
+}
|
||||
+
|
||||
+#elif HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
|
||||
+
|
||||
+time_t get_atimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_atim.tv_nsec;
|
||||
+}
|
||||
+
|
||||
+time_t get_mtimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_mtim.tv_nsec;
|
||||
+}
|
||||
+
|
||||
+time_t get_ctimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_ctim.tv_nsec;
|
||||
+}
|
||||
+
|
||||
+void set_atimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_atim.tv_nsec = ns;
|
||||
+}
|
||||
+
|
||||
+void set_mtimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_mtim.tv_nsec = ns;
|
||||
+}
|
||||
+void set_ctimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_ctim.tv_nsec = ns;
|
||||
+}
|
||||
+
|
||||
+#elif HAVE_STRUCT_STAT_ST_MTIMENSEC
|
||||
+
|
||||
+time_t get_atimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_atimensec;
|
||||
+}
|
||||
+
|
||||
+time_t get_mtimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_mtimensec;
|
||||
+}
|
||||
+
|
||||
+time_t get_ctimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_ctimensec;
|
||||
+}
|
||||
+
|
||||
+void set_atimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_atimensec = ns;
|
||||
+}
|
||||
+
|
||||
+void set_mtimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_mtimensec = ns;
|
||||
+}
|
||||
+
|
||||
+void set_ctimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_ctimensec = ns;
|
||||
+}
|
||||
+
|
||||
+#elif HAVE_STRUCT_STAT_ST_MTIME_N
|
||||
+
|
||||
+time_t get_atimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_atime_n;
|
||||
+}
|
||||
+
|
||||
+time_t get_mtimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_mtime_n;
|
||||
+}
|
||||
+
|
||||
+time_t get_ctimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_ctime_n;
|
||||
+}
|
||||
+
|
||||
+void set_atimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_atime_n = ns;
|
||||
+}
|
||||
+
|
||||
+void set_mtimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_mtime_n = ns;
|
||||
+}
|
||||
+
|
||||
+void set_ctimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_ctime_n = ns;
|
||||
+}
|
||||
+
|
||||
+#elif HAVE_STRUCT_STAT_ST_UMTIME
|
||||
+
|
||||
+/* Only usec timestamps available. Convert to/from nsec. */
|
||||
+
|
||||
+time_t get_atimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_uatime * 1000;
|
||||
+}
|
||||
+
|
||||
+time_t get_mtimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_umtime * 1000;
|
||||
+}
|
||||
+
|
||||
+time_t get_ctimensec(const struct stat *st)
|
||||
+{
|
||||
+ return st->st_uctime * 1000;
|
||||
+}
|
||||
+
|
||||
+void set_atimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_uatime = ns / 1000;
|
||||
+}
|
||||
+
|
||||
+void set_mtimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_umtime = ns / 1000;
|
||||
+}
|
||||
+
|
||||
+void set_ctimensec(struct stat *st, time_t ns)
|
||||
+{
|
||||
+ st->st_uctime = ns / 1000;
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+#error CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT
|
||||
+#endif
|
||||
+
|
||||
+struct timespec get_atimespec(const struct stat *pst)
|
||||
+{
|
||||
+ struct timespec ret;
|
||||
+
|
||||
+ ret.tv_sec = pst->st_atime;
|
||||
+ ret.tv_nsec = get_atimensec(pst);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+struct timespec get_mtimespec(const struct stat *pst)
|
||||
+{
|
||||
+ struct timespec ret;
|
||||
+
|
||||
+ ret.tv_sec = pst->st_mtime;
|
||||
+ ret.tv_nsec = get_mtimensec(pst);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+struct timespec get_ctimespec(const struct stat *pst)
|
||||
+{
|
||||
+ struct timespec ret;
|
||||
+
|
||||
+ ret.tv_sec = pst->st_mtime;
|
||||
+ ret.tv_nsec = get_ctimensec(pst);
|
||||
+ return ret;
|
||||
+}
|
||||
diff --git a/lib/util/time.h b/lib/util/time.h
|
||||
index 4a90b40d5ce..04945b5f25f 100644
|
||||
--- a/lib/util/time.h
|
||||
+++ b/lib/util/time.h
|
||||
@@ -375,4 +375,22 @@ time_t full_timespec_to_time_t(const struct timespec *ts);
|
||||
time_t nt_time_to_full_time_t(NTTIME nt);
|
||||
struct timespec time_t_to_full_timespec(time_t t);
|
||||
|
||||
+/*
|
||||
+ * Functions to get and set the number of nanoseconds for times in a stat field.
|
||||
+ * If the stat has timestamp granularity less than nanosecond, then the set_*
|
||||
+ * operations will be lossy.
|
||||
+ */
|
||||
+struct stat;
|
||||
+time_t get_atimensec(const struct stat *);
|
||||
+time_t get_mtimensec(const struct stat *);
|
||||
+time_t get_ctimensec(const struct stat *);
|
||||
+void set_atimensec(struct stat *, time_t);
|
||||
+void set_mtimensec(struct stat *, time_t);
|
||||
+void set_ctimensec(struct stat *, time_t);
|
||||
+
|
||||
+/* These are convenience wrappers for the above getters. */
|
||||
+struct timespec get_atimespec(const struct stat *);
|
||||
+struct timespec get_mtimespec(const struct stat *);
|
||||
+struct timespec get_ctimespec(const struct stat *);
|
||||
+
|
||||
#endif /* _SAMBA_TIME_H_ */
|
||||
diff --git a/source3/lib/system.c b/source3/lib/system.c
|
||||
index f1265e0c43f..7c8cd19d11f 100644
|
||||
--- a/source3/lib/system.c
|
||||
+++ b/source3/lib/system.c
|
||||
@@ -25,7 +25,8 @@
|
||||
#include "system/capability.h"
|
||||
#include "system/passwd.h"
|
||||
#include "system/filesys.h"
|
||||
-#include "../lib/util/setid.h"
|
||||
+#include "lib/util/setid.h"
|
||||
+#include "lib/util/time.h"
|
||||
|
||||
#ifdef HAVE_SYS_SYSCTL_H
|
||||
#include <sys/sysctl.h>
|
||||
@@ -122,124 +123,6 @@ int sys_fcntl_int(int fd, int cmd, int arg)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-/****************************************************************************
|
||||
- Get/Set all the possible time fields from a stat struct as a timespec.
|
||||
-****************************************************************************/
|
||||
-
|
||||
-static struct timespec get_atimespec(const struct stat *pst)
|
||||
-{
|
||||
-#if !defined(HAVE_STAT_HIRES_TIMESTAMPS)
|
||||
- struct timespec ret;
|
||||
-
|
||||
- /* Old system - no ns timestamp. */
|
||||
- ret.tv_sec = pst->st_atime;
|
||||
- ret.tv_nsec = 0;
|
||||
- return ret;
|
||||
-#else
|
||||
-#if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_atim.tv_sec;
|
||||
- ret.tv_nsec = pst->st_atim.tv_nsec;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_atime;
|
||||
- ret.tv_nsec = pst->st_atimensec;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIME_N)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_atime;
|
||||
- ret.tv_nsec = pst->st_atime_n;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_UMTIME)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_atime;
|
||||
- ret.tv_nsec = pst->st_uatime * 1000;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC)
|
||||
- return pst->st_atimespec;
|
||||
-#else
|
||||
-#error CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT
|
||||
-#endif
|
||||
-#endif
|
||||
-}
|
||||
-
|
||||
-static struct timespec get_mtimespec(const struct stat *pst)
|
||||
-{
|
||||
-#if !defined(HAVE_STAT_HIRES_TIMESTAMPS)
|
||||
- struct timespec ret;
|
||||
-
|
||||
- /* Old system - no ns timestamp. */
|
||||
- ret.tv_sec = pst->st_mtime;
|
||||
- ret.tv_nsec = 0;
|
||||
- return ret;
|
||||
-#else
|
||||
-#if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_mtim.tv_sec;
|
||||
- ret.tv_nsec = pst->st_mtim.tv_nsec;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_mtime;
|
||||
- ret.tv_nsec = pst->st_mtimensec;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIME_N)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_mtime;
|
||||
- ret.tv_nsec = pst->st_mtime_n;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_UMTIME)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_mtime;
|
||||
- ret.tv_nsec = pst->st_umtime * 1000;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC)
|
||||
- return pst->st_mtimespec;
|
||||
-#else
|
||||
-#error CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT
|
||||
-#endif
|
||||
-#endif
|
||||
-}
|
||||
-
|
||||
-static struct timespec get_ctimespec(const struct stat *pst)
|
||||
-{
|
||||
-#if !defined(HAVE_STAT_HIRES_TIMESTAMPS)
|
||||
- struct timespec ret;
|
||||
-
|
||||
- /* Old system - no ns timestamp. */
|
||||
- ret.tv_sec = pst->st_ctime;
|
||||
- ret.tv_nsec = 0;
|
||||
- return ret;
|
||||
-#else
|
||||
-#if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_ctim.tv_sec;
|
||||
- ret.tv_nsec = pst->st_ctim.tv_nsec;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_ctime;
|
||||
- ret.tv_nsec = pst->st_ctimensec;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIME_N)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_ctime;
|
||||
- ret.tv_nsec = pst->st_ctime_n;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_UMTIME)
|
||||
- struct timespec ret;
|
||||
- ret.tv_sec = pst->st_ctime;
|
||||
- ret.tv_nsec = pst->st_uctime * 1000;
|
||||
- return ret;
|
||||
-#elif defined(HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC)
|
||||
- return pst->st_ctimespec;
|
||||
-#else
|
||||
-#error CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT
|
||||
-#endif
|
||||
-#endif
|
||||
-}
|
||||
-
|
||||
/****************************************************************************
|
||||
Return the best approximation to a 'create time' under UNIX from a stat
|
||||
structure.
|
||||
diff --git a/source3/libsmb/libsmb_stat.c b/source3/libsmb/libsmb_stat.c
|
||||
index 790934bd565..b01aeb51ac1 100644
|
||||
--- a/source3/libsmb/libsmb_stat.c
|
||||
+++ b/source3/libsmb/libsmb_stat.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "libsmbclient.h"
|
||||
#include "libsmb_internal.h"
|
||||
#include "../libcli/smb/smbXcli_base.h"
|
||||
+#include "lib/util/time.h"
|
||||
|
||||
/*
|
||||
* Generate an inode number from file name for those things that need it
|
||||
@@ -102,18 +103,29 @@ void setup_stat(struct stat *st,
|
||||
}
|
||||
|
||||
st->st_dev = dev;
|
||||
- st->st_atim = access_time_ts;
|
||||
- st->st_ctim = change_time_ts;
|
||||
- st->st_mtim = write_time_ts;
|
||||
+
|
||||
+ st->st_atime = access_time_ts.tv_sec;
|
||||
+ set_atimensec(st, access_time_ts.tv_nsec);
|
||||
+
|
||||
+ st->st_ctime = change_time_ts.tv_sec;
|
||||
+ set_ctimensec(st, change_time_ts.tv_nsec);
|
||||
+
|
||||
+ st->st_mtime = write_time_ts.tv_sec;
|
||||
+ set_mtimensec(st, write_time_ts.tv_nsec);
|
||||
}
|
||||
|
||||
void setup_stat_from_stat_ex(const struct stat_ex *stex,
|
||||
const char *fname,
|
||||
struct stat *st)
|
||||
{
|
||||
- st->st_atim = stex->st_ex_atime;
|
||||
- st->st_ctim = stex->st_ex_ctime;
|
||||
- st->st_mtim = stex->st_ex_mtime;
|
||||
+ st->st_atime = stex->st_ex_atime.tv_sec;
|
||||
+ set_atimensec(st, stex->st_ex_atime.tv_nsec);
|
||||
+
|
||||
+ st->st_ctime = stex->st_ex_ctime.tv_sec;
|
||||
+ set_ctimensec(st, stex->st_ex_ctime.tv_nsec);
|
||||
+
|
||||
+ st->st_mtime = stex->st_ex_mtime.tv_sec;
|
||||
+ set_mtimensec(st, stex->st_ex_mtime.tv_nsec);
|
||||
|
||||
st->st_mode = stex->st_ex_mode;
|
||||
st->st_size = stex->st_ex_size;
|
||||
diff --git a/source4/ntvfs/posix/pvfs_fileinfo.c b/source4/ntvfs/posix/pvfs_fileinfo.c
|
||||
index d2e2aeea265..977ea4fa3d5 100644
|
||||
--- a/source4/ntvfs/posix/pvfs_fileinfo.c
|
||||
+++ b/source4/ntvfs/posix/pvfs_fileinfo.c
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include "includes.h"
|
||||
#include "vfs_posix.h"
|
||||
+#include "lib/util/time.h"
|
||||
|
||||
/****************************************************************************
|
||||
Change a unix mode to a dos mode.
|
||||
@@ -72,12 +73,10 @@ NTSTATUS pvfs_fill_dos_info(struct pvfs_state *pvfs, struct pvfs_filename *name,
|
||||
unix_to_nt_time(&name->dos.access_time, name->st.st_atime);
|
||||
unix_to_nt_time(&name->dos.write_time, name->st.st_mtime);
|
||||
unix_to_nt_time(&name->dos.change_time, name->st.st_ctime);
|
||||
-#ifdef HAVE_STAT_TV_NSEC
|
||||
- name->dos.create_time += name->st.st_ctim.tv_nsec / 100;
|
||||
- name->dos.access_time += name->st.st_atim.tv_nsec / 100;
|
||||
- name->dos.write_time += name->st.st_mtim.tv_nsec / 100;
|
||||
- name->dos.change_time += name->st.st_ctim.tv_nsec / 100;
|
||||
-#endif
|
||||
+ name->dos.create_time += get_ctimensec(&name->st) / 100;
|
||||
+ name->dos.access_time += get_atimensec(&name->st) / 100;
|
||||
+ name->dos.write_time += get_mtimensec(&name->st) / 100;
|
||||
+ name->dos.change_time += get_ctimensec(&name->st) / 100;
|
||||
name->dos.attrib = dos_mode_from_stat(pvfs, &name->st);
|
||||
name->dos.alloc_size = pvfs_round_alloc_size(pvfs, name->st.st_size);
|
||||
name->dos.nlink = name->st.st_nlink;
|
||||
diff --git a/source4/torture/libsmbclient/libsmbclient.c b/source4/torture/libsmbclient/libsmbclient.c
|
||||
index 3f3992593f9..4fbd759487b 100644
|
||||
--- a/source4/torture/libsmbclient/libsmbclient.c
|
||||
+++ b/source4/torture/libsmbclient/libsmbclient.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "lib/param/loadparm.h"
|
||||
#include "lib/param/param_global.h"
|
||||
#include "dynconfig.h"
|
||||
+#include "lib/util/time.h"
|
||||
|
||||
/* test string to compare with when debug_callback is called */
|
||||
#define TEST_STRING "smbc_setLogCallback test"
|
||||
@@ -1231,8 +1232,8 @@ static bool torture_libsmbclient_utimes(struct torture_context *tctx)
|
||||
ret = smbc_fstat(fhandle, &st);
|
||||
torture_assert_int_not_equal(tctx, ret, -1, "smbc_fstat failed");
|
||||
|
||||
- tbuf[0] = convert_timespec_to_timeval(st.st_atim);
|
||||
- tbuf[1] = convert_timespec_to_timeval(st.st_mtim);
|
||||
+ tbuf[0] = convert_timespec_to_timeval(get_atimespec(&st));
|
||||
+ tbuf[1] = convert_timespec_to_timeval(get_mtimespec(&st));
|
||||
|
||||
tbuf[1] = timeval_add(&tbuf[1], 0, 100000); /* 100 msec */
|
||||
|
||||
@@ -1244,7 +1245,7 @@ static bool torture_libsmbclient_utimes(struct torture_context *tctx)
|
||||
|
||||
torture_assert_int_equal(
|
||||
tctx,
|
||||
- st.st_mtim.tv_nsec / 1000,
|
||||
+ get_mtimensec(&st) / 1000,
|
||||
tbuf[1].tv_usec,
|
||||
"smbc_utimes did not update msec");
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
, docbook_xml_dtd_45
|
||||
, readline
|
||||
, popt
|
||||
, dbus
|
||||
, libbsd
|
||||
, libarchive
|
||||
, zlib
|
||||
|
@ -43,11 +44,11 @@ with stdenv.lib;
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "samba";
|
||||
version = "4.12.6";
|
||||
version = "4.13.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://samba/pub/samba/stable/${pname}-${version}.tar.gz";
|
||||
sha256 = "1v3cmw40csmi3jd8mhlx4bm7bk4m0426zkyin7kq11skwnsrna02";
|
||||
sha256 = "0hb5fli4kgwg376c289mcmdqszd51vs8pzzrw7j6yr9k7za8a1f1";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" "man" ];
|
||||
|
@ -57,6 +58,8 @@ stdenv.mkDerivation rec {
|
|||
./patch-source3__libads__kerberos_keytab.c.patch
|
||||
./4.x-no-persistent-install-dynconfig.patch
|
||||
./4.x-fix-makeflags-parsing.patch
|
||||
# Backport, should be removed for version 4.14
|
||||
./0001-lib-util-Standardize-use-of-st_-acm-time-ns.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -79,6 +82,7 @@ stdenv.mkDerivation rec {
|
|||
python
|
||||
readline
|
||||
popt
|
||||
dbus
|
||||
jansson
|
||||
libbsd
|
||||
libarchive
|
||||
|
@ -154,6 +158,7 @@ stdenv.mkDerivation rec {
|
|||
description = "The standard Windows interoperability suite of programs for Linux and Unix";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.unix;
|
||||
broken = stdenv.isDarwin;
|
||||
maintainers = with maintainers; [ aneeshusa ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -28,11 +28,11 @@ let
|
|||
|
||||
in with py.pkgs; buildPythonApplication rec {
|
||||
pname = "awscli";
|
||||
version = "1.18.201"; # N.B: if you change this, change botocore to a matching version too
|
||||
version = "1.18.202"; # N.B: if you change this, change botocore to a matching version too
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-w3kZgB8rIEFlJ7cikU0ISTAl/3c8MzKQL2B2Rrr1B8c=";
|
||||
sha256 = "sha256-nlgqIzFELlg8Ck3HCXBx/LDzlM9p2CGKOgA2vS+r2y0=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -20,8 +20,10 @@ stdenv.mkDerivation rec {
|
|||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm755 z.lua $out/bin/z
|
||||
wrapProgram $out/bin/z --set LUA_CPATH "${lua52Packages.luafilesystem}/lib/lua/5.2/lfs.so" --set _ZL_USE_LFS 1;
|
||||
install -Dm755 z.lua $out/bin/z.lua
|
||||
wrapProgram $out/bin/z.lua --set LUA_CPATH "${lua52Packages.luafilesystem}/lib/lua/5.2/lfs.so" --set _ZL_USE_LFS 1;
|
||||
# Create symlink for backwards compatibility. See: https://github.com/NixOS/nixpkgs/pull/96081
|
||||
ln -s $out/bin/z.lua $out/bin/z
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ stdenv
|
||||
, nixosTests
|
||||
, fetchFromGitHub
|
||||
, rustPlatform
|
||||
, asciidoctor
|
||||
|
@ -34,6 +35,8 @@ rustPlatform.buildRustPackage rec {
|
|||
installShellCompletion --zsh complete/_rg
|
||||
'';
|
||||
|
||||
passthru.tests = { inherit (nixosTests) ripgrep; };
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A utility that combines the usability of The Silver Searcher with the raw speed of grep";
|
||||
homepage = "https://github.com/BurntSushi/ripgrep";
|
||||
|
|
|
@ -5140,7 +5140,7 @@ in
|
|||
|
||||
ksmoothdock = libsForQt514.callPackage ../applications/misc/ksmoothdock { };
|
||||
|
||||
kstars = libsForQt514.callPackage ../applications/science/astronomy/kstars { };
|
||||
kstars = libsForQt5.callPackage ../applications/science/astronomy/kstars { };
|
||||
|
||||
kytea = callPackage ../tools/text/kytea { };
|
||||
|
||||
|
@ -22675,6 +22675,8 @@ in
|
|||
|
||||
mda_lv2 = callPackage ../applications/audio/mda-lv2 { };
|
||||
|
||||
mediaelch = libsForQt5.callPackage ../applications/misc/mediaelch { };
|
||||
|
||||
mediainfo = callPackage ../applications/misc/mediainfo { };
|
||||
|
||||
mediainfo-gui = callPackage ../applications/misc/mediainfo-gui { };
|
||||
|
|
Loading…
Reference in a new issue