Merge remote-tracking branch 'upstream/staging' into deps-reorg
This commit is contained in:
33
pkgs/tools/networking/assh/default.nix
Normal file
33
pkgs/tools/networking/assh/default.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{ stdenv, lib, buildGoPackage, fetchFromGitHub, openssh, makeWrapper }:
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "assh-${version}";
|
||||
version = "2.6.0";
|
||||
|
||||
goPackagePath = "github.com/moul/advanced-ssh-config";
|
||||
subPackages = [ "cmd/assh" ];
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
postInstall = stdenv.lib.optionalString (stdenv.isDarwin) ''
|
||||
install_name_tool -delete_rpath $out/lib $bin/bin/assh
|
||||
'' + ''
|
||||
wrapProgram "$bin/bin/assh" \
|
||||
--prefix PATH : ${openssh}/bin
|
||||
'';
|
||||
|
||||
src = fetchFromGitHub {
|
||||
repo = "advanced-ssh-config";
|
||||
owner = "moul";
|
||||
rev = "v${version}";
|
||||
sha256 = "1vv98dz5822k51xklnmky0lwfjw8nc6ryvn8lmv9n63ppwh9s2s6";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Advanced SSH config - Regex, aliases, gateways, includes and dynamic hosts";
|
||||
homepage = https://github.com/moul/advanced-ssh-config;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ zzamboni ];
|
||||
platforms = with platforms; linux ++ darwin;
|
||||
};
|
||||
}
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "axel-${version}";
|
||||
version = "2.13.1";
|
||||
version = "2.14.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://debian/pool/main/a/axel/axel_${version}.orig.tar.gz";
|
||||
sha256 = "15bi5wx6fyf9k0y03dy5mk2rv06mrfgiyrlh44add9n07wi574p1";
|
||||
sha256 = "0fayfpyc9cs6yp474400nyjbix6aywicz6pw17rzm4m7k06q5xmc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook ];
|
||||
|
||||
@@ -31,6 +31,6 @@ stdenv.mkDerivation {
|
||||
description = "Encrypted networking for regular people";
|
||||
license = licenses.gpl3;
|
||||
maintainers = with maintainers; [ ehmry ];
|
||||
platforms = platforms.unix;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
48
pkgs/tools/networking/djbdns/default.nix
Normal file
48
pkgs/tools/networking/djbdns/default.nix
Normal file
@@ -0,0 +1,48 @@
|
||||
{ stdenv, fetchurl, glibc } :
|
||||
|
||||
let
|
||||
version = "1.05";
|
||||
|
||||
manSrc = fetchurl {
|
||||
url = "http://smarden.org/pape/djb/manpages/djbdns-${version}-man-20031023.tar.gz";
|
||||
sha256 = "0sg51gjy6j1hnrra406q1qhf5kvk1m00y8qqhs6r0a699gqmh75s";
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "djbdns-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://cr.yp.to/djbdns/djbdns-${version}.tar.gz";
|
||||
sha256 = "0j3baf92vkczr5fxww7rp1b7gmczxmmgrqc8w2dy7kgk09m85k9w";
|
||||
};
|
||||
|
||||
patches = [ ./hier.patch ];
|
||||
|
||||
postPatch = ''
|
||||
echo gcc -O2 -include ${glibc.dev}/include/errno.h > conf-cc
|
||||
echo $out > conf-home
|
||||
sed -i "s|/etc/dnsroots.global|$out/etc/dnsroots.global|" dnscache-conf.c
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -pv $out/etc;
|
||||
make setup
|
||||
cd $out;
|
||||
tar xzvf ${manSrc};
|
||||
for n in 1 5 8; do
|
||||
mkdir -p man/man$n;
|
||||
mv -iv djbdns-man/*.$n man/man$n;
|
||||
done;
|
||||
rm -rv djbdns-man;
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A collection of Domain Name System tools";
|
||||
longDescription = "Includes software for all the fundamental DNS operations: DNS cache: finding addresses of Internet hosts; DNS server: publishing addresses of Internet hosts; and DNS client: talking to a DNS cache.";
|
||||
homepage = https://cr.yp.to/djbdns.html;
|
||||
license = licenses.publicDomain;
|
||||
maintainers = with maintainers; [ jerith666 ];
|
||||
};
|
||||
}
|
||||
15
pkgs/tools/networking/djbdns/hier.patch
Normal file
15
pkgs/tools/networking/djbdns/hier.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
--- a/hier.c 2016-04-19 21:22:21.992192405 -0400
|
||||
+++ b/hier.c 2016-04-19 21:22:33.160229778 -0400
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
void hier()
|
||||
{
|
||||
- c("/","etc","dnsroots.global",-1,-1,0644);
|
||||
+ c(auto_home,"etc","dnsroots.global",-1,-1,0644);
|
||||
|
||||
- h(auto_home,-1,-1,02755);
|
||||
- d(auto_home,"bin",-1,-1,02755);
|
||||
+ h(auto_home,-1,-1,0755);
|
||||
+ d(auto_home,"bin",-1,-1,0755);
|
||||
|
||||
c(auto_home,"bin","dnscache-conf",-1,-1,0755);
|
||||
@@ -1,12 +1,12 @@
|
||||
{ stdenv, fetchurl, makeWrapper, perl, ebtables, ipset, iptables }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "2.3.1";
|
||||
version = "2.4.1";
|
||||
name = "ferm-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://ferm.foo-projects.org/download/2.3/ferm-${version}.tar.gz";
|
||||
sha256 = "1scdnd2jk4787jyr6fxav2598g0x7hjic5b8bj77j8s0hki48m4a";
|
||||
url = "http://ferm.foo-projects.org/download/2.4/ferm-${version}.tar.xz";
|
||||
sha256 = "1fv8wk513yysp4q0i65rl2m0hg2lxwwgk9ppprsca1xcxrdpsvwa";
|
||||
};
|
||||
|
||||
buildInputs = [ perl ipset ebtables iptables makeWrapper ];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{ stdenv, fetchurl, gnutls, pkgconfig, readline, zlib, libidn2, gmp, libiconv, gettext }:
|
||||
{ stdenv, fetchurl, gnutls, pkgconfig, readline, zlib, libidn2, gmp, libiconv, libunistring, gettext }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "lftp-${version}";
|
||||
version = "4.8.0";
|
||||
version = "4.8.2";
|
||||
|
||||
src = fetchurl {
|
||||
urls = [
|
||||
@@ -10,12 +10,12 @@ stdenv.mkDerivation rec {
|
||||
"ftp://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/${name}.tar.bz2"
|
||||
"http://lftp.yar.ru/ftp/old/${name}.tar.bz2"
|
||||
];
|
||||
sha256 = "0z2432zxzg808swi72yak9kia976qrjj030grk0v4p54mcib3s34";
|
||||
sha256 = "0a4sp9khqgny1md0b2c9vvg4c7sz0g31w3sfdslxw7dsvijin3mn";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
|
||||
buildInputs = [ gnutls readline zlib libidn2 gmp libiconv ]
|
||||
buildInputs = [ gnutls readline zlib libidn2 gmp libiconv libunistring ]
|
||||
++ stdenv.lib.optional stdenv.isDarwin gettext;
|
||||
|
||||
hardeningDisable = stdenv.lib.optional stdenv.isDarwin "format";
|
||||
|
||||
@@ -1,26 +1,32 @@
|
||||
{ stdenv, fetchurl, intltool, pkgconfig, libglade, networkmanager, gnome3
|
||||
, libnotify, libsecret, polkit, isocodes, modemmanager, librsvg
|
||||
, mobile_broadband_provider_info, glib_networking, gsettings_desktop_schemas
|
||||
, makeWrapper, udev, libgudev, hicolor_icon_theme, jansson, wrapGAppsHook, webkitgtk }:
|
||||
, makeWrapper, udev, libgudev, hicolor_icon_theme, jansson, wrapGAppsHook, webkitgtk
|
||||
, withGnome ? false }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${major}.${minor}";
|
||||
pname = "network-manager-applet";
|
||||
major = "1.4";
|
||||
minor = "6";
|
||||
major = "1.8";
|
||||
minor = "2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${major}/${name}.tar.xz";
|
||||
sha256 = "0xpcdwqmnwiqqqsd5rx1gh5rvv5m2skj59bqxhccy1k2ikzgr9hh";
|
||||
sha256 = "09f9hjpn9nkhw57mk6pi7q1bq3lhf5hvmwas0fknscssak7yjmry";
|
||||
};
|
||||
|
||||
configureFlags = [ "--sysconfdir=/etc" ];
|
||||
configureFlags = [
|
||||
"--sysconfdir=/etc"
|
||||
"--without-selinux"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
buildInputs = [
|
||||
gnome3.gtk libglade networkmanager libnotify libsecret gsettings_desktop_schemas
|
||||
polkit isocodes makeWrapper udev libgudev gnome3.gconf gnome3.libgnome_keyring
|
||||
modemmanager jansson librsvg glib_networking gnome3.dconf webkitgtk
|
||||
];
|
||||
modemmanager jansson librsvg glib_networking gnome3.dconf
|
||||
] ++ stdenv.lib.optional withGnome webkitgtk;
|
||||
|
||||
nativeBuildInputs = [ intltool pkgconfig wrapGAppsHook ];
|
||||
|
||||
|
||||
@@ -3,19 +3,17 @@
|
||||
, libgcrypt, dnsmasq, bluez5, readline
|
||||
, gobjectIntrospection, modemmanager, openresolv, libndp, newt, libsoup
|
||||
, ethtool, iputils, gnused, coreutils, file, inetutils, kmod, jansson, libxslt
|
||||
, python3Packages, docbook_xsl, fetchpatch, openconnect }:
|
||||
, python3Packages, docbook_xsl, fetchpatch, openconnect, curl, autoreconfHook }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "network-manager-${version}";
|
||||
pname = "NetworkManager";
|
||||
major = "1.6";
|
||||
major = "1.8";
|
||||
version = "${major}.2";
|
||||
# FIXME: this problem is fixed upstream (commit 6a77258f4ec2), remove when upgrading ^^^
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${major}/${pname}-${version}.tar.xz";
|
||||
sha256 = "1y96k82rav8if334jl500zc024d210c4pgprh94yqyz3rmanyaxj";
|
||||
sha256 = "1x0vzxvrck0snga2n3pc7g74m20zz74cr4r8gfspl8sckv6yz9bi";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
@@ -46,13 +44,15 @@ stdenv.mkDerivation rec {
|
||||
--subst-var-by modprobeBinPath ${kmod}/bin/modprobe
|
||||
# to enable link-local connections
|
||||
configureFlags="$configureFlags --with-udev-dir=$out/lib/udev"
|
||||
|
||||
# Fixes: error: po/Makefile.in.in was not created by intltoolize.
|
||||
intltoolize --automake --copy --force
|
||||
'';
|
||||
|
||||
# Right now we hardcode quite a few paths at build time. Probably we should
|
||||
# patch networkmanager to allow passing these path in config file. This will
|
||||
# remove unneeded build-time dependencies.
|
||||
configureFlags = [
|
||||
"--with-distro=exherbo"
|
||||
"--with-dhclient=${dhcp}/bin/dhclient"
|
||||
"--with-dnsmasq=${dnsmasq}/bin/dnsmasq"
|
||||
# Upstream prefers dhclient, so don't add dhcpcd to the closure
|
||||
@@ -69,26 +69,21 @@ stdenv.mkDerivation rec {
|
||||
"--with-session-tracking=systemd"
|
||||
"--with-modem-manager-1"
|
||||
"--with-nmtui"
|
||||
"--with-libsoup=yes"
|
||||
"--disable-gtk-doc"
|
||||
];
|
||||
|
||||
patches = [
|
||||
./PppdPath.patch
|
||||
(fetchpatch {
|
||||
sha256 = "1n90j5rwg97xkrhlldyr92filc2dmycl9pr0svky9hlcn9csk2z6";
|
||||
name = "null-dereference.patch";
|
||||
url = "https://github.com/NetworkManager/NetworkManager/commit/4e8eddd100bbc8429806a70620c90b72cfd29cb1.patch";
|
||||
})
|
||||
./openconnect_helper_path.patch
|
||||
./modprobe.patch
|
||||
];
|
||||
|
||||
buildInputs = [ systemd libgudev libnl libuuid polkit ppp libndp
|
||||
buildInputs = [ systemd libgudev libnl libuuid polkit ppp libndp curl
|
||||
bluez5 dnsmasq gobjectIntrospection modemmanager readline newt libsoup jansson ];
|
||||
|
||||
propagatedBuildInputs = [ dbus_glib gnutls libgcrypt python3Packages.pygobject3 ];
|
||||
|
||||
nativeBuildInputs = [ intltool pkgconfig libxslt docbook_xsl ];
|
||||
nativeBuildInputs = [ autoreconfHook intltool pkgconfig libxslt docbook_xsl ];
|
||||
|
||||
preInstall = ''
|
||||
installFlagsArray=( "sysconfdir=$out/etc" "localstatedir=$out/var" "runstatedir=$out/var/run" )
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
|
||||
pname = "NetworkManager-openvpn";
|
||||
major = "1.2";
|
||||
version = "${major}.8";
|
||||
major = "1.8";
|
||||
version = "${major}.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${major}/${pname}-${version}.tar.xz";
|
||||
sha256 = "0m06sg2rnz764psvpsrx0pvll11nfn9hypgbp3s6vna8y83l02ry";
|
||||
sha256 = "1973n89g66a3jfx8r45a811fga4kadh6r1w35cb25cz1mlii2vhn";
|
||||
};
|
||||
|
||||
buildInputs = [ openvpn networkmanager libsecret ]
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
{ stdenv, fetchurl, pkgconfig, vpnc, openssl ? null, gnutls ? null, gmp, libxml2, stoken, zlib } :
|
||||
|
||||
let
|
||||
xor = a: b: (a || b) && (!(a && b));
|
||||
in
|
||||
|
||||
assert xor (openssl != null) (gnutls != null);
|
||||
assert (openssl != null) == (gnutls == null);
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "openconnect-7.08";
|
||||
@@ -16,6 +12,8 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "00wacb79l2c45f94gxs63b9z25wlciarasvjrb8jb8566wgyqi0w";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
preConfigure = ''
|
||||
export PKG_CONFIG=${pkgconfig}/bin/pkg-config
|
||||
export LIBXML2_CFLAGS="-I ${libxml2.dev}/include/libxml2"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{ stdenv, fetchFromGitHub, autoreconfHook, openssl, ppp }:
|
||||
{ stdenv, fetchFromGitHub, autoreconfHook, openssl, ppp, pkgconfig }:
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let repo = "openfortivpn";
|
||||
version = "1.2.0";
|
||||
version = "1.5.0";
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
name = "${repo}-${version}";
|
||||
@@ -12,10 +12,10 @@ in stdenv.mkDerivation {
|
||||
owner = "adrienverge";
|
||||
inherit repo;
|
||||
rev = "v${version}";
|
||||
sha256 = "1a1l9f6zivfyxg9g2x7kzkvcyh84s7l6v0kimihhrd19zl0m41jn";
|
||||
sha256 = "0fm0z73afghwmbshpsn5jfbyyfzz1v8s7scwycnvsk2cgv5f4r86";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook ];
|
||||
nativeBuildInputs = [ autoreconfHook pkgconfig ];
|
||||
buildInputs = [ openssl ppp ];
|
||||
|
||||
NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "libtorrent-${version}";
|
||||
version = "0.13.6";
|
||||
version = "20161212";
|
||||
|
||||
src = fetchFromGitHub rec {
|
||||
src = fetchFromGitHub {
|
||||
owner = "rakshasa";
|
||||
repo = "libtorrent";
|
||||
rev = "${version}";
|
||||
sha256 = "1rvrxgb131snv9r6ksgzmd74rd9z7q46bhky0zazz7dwqqywffcp";
|
||||
rev = "c167c5a9e0bcf0df23ae5efd91396aae0e37eb87";
|
||||
sha256 = "0y9759sxx5dyamyw8w58dsxq7bmnn57q7s2f4cw2zln2pp5gripw";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
|
||||
preConfigure = "./autogen.sh";
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = http://www.libtorrent.org/;
|
||||
homepage = "http://rtorrent.net/downloads/";
|
||||
description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code";
|
||||
|
||||
platforms = platforms.linux;
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "rtorrent-${version}";
|
||||
version = "0.9.6";
|
||||
version = "20161023";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rakshasa";
|
||||
repo = "rtorrent";
|
||||
rev = "${version}";
|
||||
sha256 = "0iyxmjr1984vs7hrnxkfwgrgckacqml0kv4bhj185w9bhjqvgfnf";
|
||||
rev = "226e670decf92e7adaa845a6982aca4f164ea740";
|
||||
sha256 = "0cxyakc09bn6wjfj42gh508hc62awx825skzacpizx2bqs6v7xvb";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
|
||||
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Quick, precise tests for entire TCP/UDP/IPv4/IPv6 network stacks";
|
||||
homepage = https://github.com/google/packetdrill;
|
||||
license = stdenv.lib.licenses.gpl2;
|
||||
platforms = stdenv.lib.platforms.unix;
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
maintainers = with stdenv.lib.maintainers; [ dmjio cleverca22 ];
|
||||
};
|
||||
}
|
||||
|
||||
27
pkgs/tools/networking/radsecproxy/default.nix
Normal file
27
pkgs/tools/networking/radsecproxy/default.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{ stdenv, fetchurl, openssl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "radsecproxy-${version}";
|
||||
version = "1.6.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://software.nordu.net/radsecproxy/radsecproxy-${version}.tar.xz";
|
||||
sha256 = "6f2c7030236c222782c9ac2c52778baa63540a1865b75a7a6d8c1280ce6ad816";
|
||||
};
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
|
||||
configureFlags = [
|
||||
"--with-ssl=${openssl.dev}"
|
||||
"--sysconfdir=/etc"
|
||||
"--localstatedir=/var"
|
||||
];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = https://software.nordu.net/radsecproxy/;
|
||||
description = "A generic RADIUS proxy that supports both UDP and TLS (RadSec) RADIUS transports.";
|
||||
license = licenses.bsd3;
|
||||
maintainers = with maintainers; [ sargon ];
|
||||
platforms = with platforms; linux;
|
||||
};
|
||||
}
|
||||
@@ -28,6 +28,6 @@ stdenv.mkDerivation rec {
|
||||
homepage = http://darkk.net.ru/redsocks/;
|
||||
license = stdenv.lib.licenses.asl20;
|
||||
maintainers = [ ];
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{stdenv, fetchurl, lzo, openssl, zlib}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "1.0.31";
|
||||
version = "1.0.32";
|
||||
name = "tinc-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.tinc-vpn.org/packages/tinc-${version}.tar.gz";
|
||||
sha256 = "d3cbc82e6e07975a2ccc0b369d07e30fc3324e71e240dca8781ce9a4f629519b";
|
||||
sha256 = "11smq1h6jyp6x2cwrv2zxck9phzdz3svi95pxnvvpd4dzzm4zcjd";
|
||||
};
|
||||
|
||||
buildInputs = [ lzo openssl zlib ];
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "unbound-${version}";
|
||||
version = "1.6.5";
|
||||
version = "1.6.6";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://unbound.net/downloads/${name}.tar.gz";
|
||||
sha256 = "0khhrj11yhh6a0h578w29yw2j7yzvaqkr4p44jzjapq1549am5z2";
|
||||
sha256 = "145kska9a63yf32y3jg91y5ikcmsb7qvbcm7a8k6fgh96gf18awp";
|
||||
};
|
||||
|
||||
outputs = [ "out" "lib" "man" ]; # "dev" would only split ~20 kB
|
||||
|
||||
Reference in New Issue
Block a user