I: pbuilder: network access will be disabled during build I: Current time: Tue May 2 09:14:43 +14 2023 I: pbuilder-time-stamp: 1682968483 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/bookworm-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [wapiti_3.0.4+dfsg-2.dsc] I: copying [./wapiti_3.0.4+dfsg.orig.tar.xz] I: copying [./wapiti_3.0.4+dfsg-2.debian.tar.xz] I: Extracting source gpgv: Signature made Sat Mar 4 04:43:13 2023 +14 gpgv: using RSA key 3B21B8E68AE5C16F87F5322D5792783B206FEE30 gpgv: Can't check signature: No public key dpkg-source: warning: cannot verify inline signature for ./wapiti_3.0.4+dfsg-2.dsc: no acceptable signature found dpkg-source: info: extracting wapiti in wapiti-3.0.4+dfsg dpkg-source: info: unpacking wapiti_3.0.4+dfsg.orig.tar.xz dpkg-source: info: unpacking wapiti_3.0.4+dfsg-2.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying disable-nikto-download.patch dpkg-source: info: applying allow-local-nikto-db.patch dpkg-source: info: applying install-only-pertinent-docs.patch dpkg-source: info: applying remove-jquery.patch dpkg-source: info: applying fix-typos.patch dpkg-source: info: applying remove-js-mentions.patch dpkg-source: info: applying ignore-js-dir-in-html-report-generation.patch dpkg-source: info: applying Remove-codeset-parameter-codeset-of-getext.translation.patch I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/D01_modify_environment starting debug: Running on ionos1-amd64. I: Changing host+domainname to test build reproducibility I: Adding a custom variable just for the fun of it... I: Changing /bin/sh to bash '/bin/sh' -> '/bin/bash' lrwxrwxrwx 1 root root 9 May 2 09:15 /bin/sh -> /bin/bash I: Setting pbuilder2's login shell to /bin/bash I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/D01_modify_environment finished I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/D02_print_environment starting I: set BASH=/bin/sh BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=([0]="12" [1]="0") BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") BASH_VERSINFO=([0]="5" [1]="2" [2]="15" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='5.2.15(1)-release' BUILDDIR=/build BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' BUILDUSERNAME=pbuilder2 BUILD_ARCH=amd64 DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=15' DIRSTACK=() DISTRIBUTION=bookworm EUID=0 FUNCNAME=([0]="Echo" [1]="main") GROUPS=() HOME=/root HOSTNAME=i-capture-the-hostname HOSTTYPE=x86_64 HOST_ARCH=amd64 IFS=' ' INVOCATION_ID=34b57574615b4895bf92040fab834f02 LANG=C LANGUAGE=et_EE:et LC_ALL=C MACHTYPE=x86_64-pc-linux-gnu MAIL=/var/mail/root OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path PBCURRENTCOMMANDLINEOPERATION=build PBUILDER_OPERATION=build PBUILDER_PKGDATADIR=/usr/share/pbuilder PBUILDER_PKGLIBDIR=/usr/lib/pbuilder PBUILDER_SYSCONFDIR=/etc PIPESTATUS=([0]="0") POSIXLY_CORRECT=y PPID=2917927 PS4='+ ' PWD=/ SHELL=/bin/bash SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix SHLVL=3 SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.CE3FVn1V/pbuilderrc_dvcy --distribution bookworm --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/bookworm-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.CE3FVn1V/b2 --logfile b2/build.log --extrapackages usrmerge wapiti_3.0.4+dfsg-2.dsc' SUDO_GID=110 SUDO_UID=105 SUDO_USER=jenkins TERM=unknown TZ=/usr/share/zoneinfo/Etc/GMT-14 UID=0 USER=root _='I: set' http_proxy=http://78.137.99.97:3128 I: uname -a Linux i-capture-the-hostname 5.10.0-22-amd64 #1 SMP Debian 5.10.178-3 (2023-04-22) x86_64 GNU/Linux I: ls -l /bin total 5632 -rwxr-xr-x 1 root root 1265648 Apr 24 11:23 bash -rwxr-xr-x 3 root root 39224 Sep 19 2022 bunzip2 -rwxr-xr-x 3 root root 39224 Sep 19 2022 bzcat lrwxrwxrwx 1 root root 6 Sep 19 2022 bzcmp -> bzdiff -rwxr-xr-x 1 root root 2225 Sep 19 2022 bzdiff lrwxrwxrwx 1 root root 6 Sep 19 2022 bzegrep -> bzgrep -rwxr-xr-x 1 root root 4893 Nov 28 2021 bzexe lrwxrwxrwx 1 root root 6 Sep 19 2022 bzfgrep -> bzgrep -rwxr-xr-x 1 root root 3775 Sep 19 2022 bzgrep -rwxr-xr-x 3 root root 39224 Sep 19 2022 bzip2 -rwxr-xr-x 1 root root 14568 Sep 19 2022 bzip2recover lrwxrwxrwx 1 root root 6 Sep 19 2022 bzless -> bzmore -rwxr-xr-x 1 root root 1297 Sep 19 2022 bzmore -rwxr-xr-x 1 root root 44016 Sep 21 2022 cat -rwxr-xr-x 1 root root 68656 Sep 21 2022 chgrp -rwxr-xr-x 1 root root 64496 Sep 21 2022 chmod -rwxr-xr-x 1 root root 72752 Sep 21 2022 chown -rwxr-xr-x 1 root root 151152 Sep 21 2022 cp -rwxr-xr-x 1 root root 125640 Jan 6 03:20 dash -rwxr-xr-x 1 root root 121904 Sep 21 2022 date -rwxr-xr-x 1 root root 89240 Sep 21 2022 dd -rwxr-xr-x 1 root root 102200 Sep 21 2022 df -rwxr-xr-x 1 root root 151344 Sep 21 2022 dir -rwxr-xr-x 1 root root 88656 Mar 24 00:02 dmesg lrwxrwxrwx 1 root root 8 Dec 20 03:33 dnsdomainname -> hostname lrwxrwxrwx 1 root root 8 Dec 20 03:33 domainname -> hostname -rwxr-xr-x 1 root root 43856 Sep 21 2022 echo -rwxr-xr-x 1 root root 41 Jan 25 04:43 egrep -rwxr-xr-x 1 root root 35664 Sep 21 2022 false -rwxr-xr-x 1 root root 41 Jan 25 04:43 fgrep -rwxr-xr-x 1 root root 85600 Mar 24 00:02 findmnt -rwsr-xr-x 1 root root 35128 Mar 23 22:35 fusermount -rwxr-xr-x 1 root root 203152 Jan 25 04:43 grep -rwxr-xr-x 2 root root 2346 Apr 10 2022 gunzip -rwxr-xr-x 1 root root 6447 Apr 10 2022 gzexe -rwxr-xr-x 1 root root 98136 Apr 10 2022 gzip -rwxr-xr-x 1 root root 22680 Dec 20 03:33 hostname -rwxr-xr-x 1 root root 72824 Sep 21 2022 ln -rwxr-xr-x 1 root root 53024 Mar 24 02:40 login -rwxr-xr-x 1 root root 151344 Sep 21 2022 ls -rwxr-xr-x 1 root root 207168 Mar 24 00:02 lsblk -rwxr-xr-x 1 root root 97552 Sep 21 2022 mkdir -rwxr-xr-x 1 root root 72912 Sep 21 2022 mknod -rwxr-xr-x 1 root root 43952 Sep 21 2022 mktemp -rwxr-xr-x 1 root root 59712 Mar 24 00:02 more -rwsr-xr-x 1 root root 59704 Mar 24 00:02 mount -rwxr-xr-x 1 root root 18744 Mar 24 00:02 mountpoint -rwxr-xr-x 1 root root 142968 Sep 21 2022 mv lrwxrwxrwx 1 root root 8 Dec 20 03:33 nisdomainname -> hostname lrwxrwxrwx 1 root root 14 Apr 3 20:25 pidof -> /sbin/killall5 -rwxr-xr-x 1 root root 43952 Sep 21 2022 pwd lrwxrwxrwx 1 root root 4 Apr 24 11:23 rbash -> bash -rwxr-xr-x 1 root root 52112 Sep 21 2022 readlink -rwxr-xr-x 1 root root 72752 Sep 21 2022 rm -rwxr-xr-x 1 root root 56240 Sep 21 2022 rmdir -rwxr-xr-x 1 root root 27560 Nov 3 06:31 run-parts -rwxr-xr-x 1 root root 126424 Jan 6 09:55 sed lrwxrwxrwx 1 root root 9 May 2 09:15 sh -> /bin/bash -rwxr-xr-x 1 root root 43888 Sep 21 2022 sleep -rwxr-xr-x 1 root root 85008 Sep 21 2022 stty -rwsr-xr-x 1 root root 72000 Mar 24 00:02 su -rwxr-xr-x 1 root root 39824 Sep 21 2022 sync -rwxr-xr-x 1 root root 531984 Apr 7 04:25 tar -rwxr-xr-x 1 root root 14520 Nov 3 06:31 tempfile -rwxr-xr-x 1 root root 109616 Sep 21 2022 touch -rwxr-xr-x 1 root root 35664 Sep 21 2022 true -rwxr-xr-x 1 root root 14568 Mar 23 22:35 ulockmgr_server -rwsr-xr-x 1 root root 35128 Mar 24 00:02 umount -rwxr-xr-x 1 root root 43888 Sep 21 2022 uname -rwxr-xr-x 2 root root 2346 Apr 10 2022 uncompress -rwxr-xr-x 1 root root 151344 Sep 21 2022 vdir -rwxr-xr-x 1 root root 72024 Mar 24 00:02 wdctl lrwxrwxrwx 1 root root 8 Dec 20 03:33 ypdomainname -> hostname -rwxr-xr-x 1 root root 1984 Apr 10 2022 zcat -rwxr-xr-x 1 root root 1678 Apr 10 2022 zcmp -rwxr-xr-x 1 root root 6460 Apr 10 2022 zdiff -rwxr-xr-x 1 root root 29 Apr 10 2022 zegrep -rwxr-xr-x 1 root root 29 Apr 10 2022 zfgrep -rwxr-xr-x 1 root root 2081 Apr 10 2022 zforce -rwxr-xr-x 1 root root 8103 Apr 10 2022 zgrep -rwxr-xr-x 1 root root 2206 Apr 10 2022 zless -rwxr-xr-x 1 root root 1842 Apr 10 2022 zmore -rwxr-xr-x 1 root root 4577 Apr 10 2022 znew I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: amd64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), dh-python, gettext, libjs-jquery, python3, python3-bs4, python3-importlib-metadata, python3-markupsafe, python3-mako, python3-six, python3-socks, python3-pytest-runner, python3-pytest, python3-responses, python3-setuptools, python3-tld, python3-yaswfp, yui-compressor dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19596 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on dh-python; however: Package dh-python is not installed. pbuilder-satisfydepends-dummy depends on gettext; however: Package gettext is not installed. pbuilder-satisfydepends-dummy depends on libjs-jquery; however: Package libjs-jquery is not installed. pbuilder-satisfydepends-dummy depends on python3; however: Package python3 is not installed. pbuilder-satisfydepends-dummy depends on python3-bs4; however: Package python3-bs4 is not installed. pbuilder-satisfydepends-dummy depends on python3-importlib-metadata; however: Package python3-importlib-metadata is not installed. pbuilder-satisfydepends-dummy depends on python3-markupsafe; however: Package python3-markupsafe is not installed. pbuilder-satisfydepends-dummy depends on python3-mako; however: Package python3-mako is not installed. pbuilder-satisfydepends-dummy depends on python3-six; however: Package python3-six is not installed. pbuilder-satisfydepends-dummy depends on python3-socks; however: Package python3-socks is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-runner; however: Package python3-pytest-runner is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest is not installed. pbuilder-satisfydepends-dummy depends on python3-responses; however: Package python3-responses is not installed. pbuilder-satisfydepends-dummy depends on python3-setuptools; however: Package python3-setuptools is not installed. pbuilder-satisfydepends-dummy depends on python3-tld; however: Package python3-tld is not installed. pbuilder-satisfydepends-dummy depends on python3-yaswfp; however: Package python3-yaswfp is not installed. pbuilder-satisfydepends-dummy depends on yui-compressor; however: Package yui-compressor is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} ca-certificates-java{a} debhelper{a} default-jre-headless{a} dh-autoreconf{a} dh-python{a} dh-strip-nondeterminism{a} dwz{a} file{a} fontconfig-config{a} fonts-dejavu-core{a} gettext{a} gettext-base{a} groff-base{a} intltool-debian{a} java-common{a} java-wrappers{a} libarchive-zip-perl{a} libasound2{a} libasound2-data{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libbrotli1{a} libcups2{a} libdbus-1-3{a} libdebhelper-perl{a} libelf1{a} libexpat1{a} libfile-stripnondeterminism-perl{a} libfontconfig1{a} libfreetype6{a} libglib2.0-0{a} libgraphite2-3{a} libharfbuzz0b{a} libicu72{a} libjargs-java{a} libjpeg62-turbo{a} libjs-jquery{a} liblcms2-2{a} libmagic-mgc{a} libmagic1{a} libnspr4{a} libnss3{a} libpcsclite1{a} libpipeline1{a} libpng16-16{a} libpython3-stdlib{a} libpython3.11-minimal{a} libpython3.11-stdlib{a} libreadline8{a} libsub-override-perl{a} libtool{a} libuchardet0{a} libxml2{a} m4{a} man-db{a} media-types{a} openjdk-17-jre-headless{a} openssl{a} po-debconf{a} publicsuffix{a} python3{a} python3-attr{a} python3-bs4{a} python3-certifi{a} python3-chardet{a} python3-charset-normalizer{a} python3-distutils{a} python3-idna{a} python3-importlib-metadata{a} python3-iniconfig{a} python3-lib2to3{a} python3-mako{a} python3-markupsafe{a} python3-minimal{a} python3-more-itertools{a} python3-packaging{a} python3-pkg-resources{a} python3-pluggy{a} python3-py{a} python3-pytest{a} python3-pytest-runner{a} python3-requests{a} python3-responses{a} python3-setuptools{a} python3-six{a} python3-socks{a} python3-soupsieve{a} python3-tld{a} python3-urllib3{a} python3-yaswfp{a} python3-zipp{a} python3.11{a} python3.11-minimal{a} readline-common{a} sensible-utils{a} unzip{a} yui-compressor{a} The following packages are RECOMMENDED but will NOT be installed: alsa-topology-conf alsa-ucm-conf curl dbus javascript-common libarchive-cpio-perl libglib2.0-data libltdl-dev libmail-sendmail-perl lynx python3-lxml python3-pygments shared-mime-info wget xdg-user-dirs 0 packages upgraded, 104 newly installed, 0 to remove and 0 not upgraded. Need to get 82.4 MB of archives. After unpacking 326 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian bookworm/main amd64 libpython3.11-minimal amd64 3.11.2-6 [813 kB] Get: 2 http://deb.debian.org/debian bookworm/main amd64 libexpat1 amd64 2.5.0-1 [99.3 kB] Get: 3 http://deb.debian.org/debian bookworm/main amd64 python3.11-minimal amd64 3.11.2-6 [2064 kB] Get: 4 http://deb.debian.org/debian bookworm/main amd64 python3-minimal amd64 3.11.2-1+b1 [26.3 kB] Get: 5 http://deb.debian.org/debian bookworm/main amd64 media-types all 10.0.0 [26.1 kB] Get: 6 http://deb.debian.org/debian bookworm/main amd64 readline-common all 8.2-1.3 [69.0 kB] Get: 7 http://deb.debian.org/debian bookworm/main amd64 libreadline8 amd64 8.2-1.3 [166 kB] Get: 8 http://deb.debian.org/debian bookworm/main amd64 libpython3.11-stdlib amd64 3.11.2-6 [1796 kB] Get: 9 http://deb.debian.org/debian bookworm/main amd64 python3.11 amd64 3.11.2-6 [572 kB] Get: 10 http://deb.debian.org/debian bookworm/main amd64 libpython3-stdlib amd64 3.11.2-1+b1 [9312 B] Get: 11 http://deb.debian.org/debian bookworm/main amd64 python3 amd64 3.11.2-1+b1 [26.3 kB] Get: 12 http://deb.debian.org/debian bookworm/main amd64 sensible-utils all 0.0.17+nmu1 [19.0 kB] Get: 13 http://deb.debian.org/debian bookworm/main amd64 openssl amd64 3.0.8-1 [1407 kB] Get: 14 http://deb.debian.org/debian bookworm/main amd64 ca-certificates all 20230311 [153 kB] Get: 15 http://deb.debian.org/debian bookworm/main amd64 libmagic-mgc amd64 1:5.44-3 [305 kB] Get: 16 http://deb.debian.org/debian bookworm/main amd64 libmagic1 amd64 1:5.44-3 [104 kB] Get: 17 http://deb.debian.org/debian bookworm/main amd64 file amd64 1:5.44-3 [42.5 kB] Get: 18 http://deb.debian.org/debian bookworm/main amd64 gettext-base amd64 0.21-12 [160 kB] Get: 19 http://deb.debian.org/debian bookworm/main amd64 libuchardet0 amd64 0.0.7-1 [67.8 kB] Get: 20 http://deb.debian.org/debian bookworm/main amd64 groff-base amd64 1.22.4-10 [916 kB] Get: 21 http://deb.debian.org/debian bookworm/main amd64 bsdextrautils amd64 2.38.1-5+b1 [86.6 kB] Get: 22 http://deb.debian.org/debian bookworm/main amd64 libpipeline1 amd64 1.5.7-1 [38.5 kB] Get: 23 http://deb.debian.org/debian bookworm/main amd64 man-db amd64 2.11.2-2 [1386 kB] Get: 24 http://deb.debian.org/debian bookworm/main amd64 m4 amd64 1.4.19-3 [287 kB] Get: 25 http://deb.debian.org/debian bookworm/main amd64 autoconf all 2.71-3 [332 kB] Get: 26 http://deb.debian.org/debian bookworm/main amd64 autotools-dev all 20220109.1 [51.6 kB] Get: 27 http://deb.debian.org/debian bookworm/main amd64 automake all 1:1.16.5-1.3 [823 kB] Get: 28 http://deb.debian.org/debian bookworm/main amd64 autopoint all 0.21-12 [495 kB] Get: 29 http://deb.debian.org/debian bookworm/main amd64 java-common all 0.74 [6388 B] Get: 30 http://deb.debian.org/debian bookworm/main amd64 libavahi-common-data amd64 0.8-10 [107 kB] Get: 31 http://deb.debian.org/debian bookworm/main amd64 libavahi-common3 amd64 0.8-10 [41.6 kB] Get: 32 http://deb.debian.org/debian bookworm/main amd64 libdbus-1-3 amd64 1.14.6-1 [200 kB] Get: 33 http://deb.debian.org/debian bookworm/main amd64 libavahi-client3 amd64 0.8-10 [45.5 kB] Get: 34 http://deb.debian.org/debian bookworm/main amd64 libcups2 amd64 2.4.2-3 [244 kB] Get: 35 http://deb.debian.org/debian bookworm/main amd64 liblcms2-2 amd64 2.14-2 [154 kB] Get: 36 http://deb.debian.org/debian bookworm/main amd64 libjpeg62-turbo amd64 1:2.1.5-2 [166 kB] Get: 37 http://deb.debian.org/debian bookworm/main amd64 libbrotli1 amd64 1.0.9-2+b6 [275 kB] Get: 38 http://deb.debian.org/debian bookworm/main amd64 libpng16-16 amd64 1.6.39-2 [276 kB] Get: 39 http://deb.debian.org/debian bookworm/main amd64 libfreetype6 amd64 2.12.1+dfsg-4 [399 kB] Get: 40 http://deb.debian.org/debian bookworm/main amd64 fonts-dejavu-core all 2.37-6 [1068 kB] Get: 41 http://deb.debian.org/debian bookworm/main amd64 fontconfig-config amd64 2.14.1-4 [315 kB] Get: 42 http://deb.debian.org/debian bookworm/main amd64 libfontconfig1 amd64 2.14.1-4 [386 kB] Get: 43 http://deb.debian.org/debian bookworm/main amd64 libnspr4 amd64 2:4.35-1 [113 kB] Get: 44 http://deb.debian.org/debian bookworm/main amd64 libnss3 amd64 2:3.87.1-1 [1331 kB] Get: 45 http://deb.debian.org/debian bookworm/main amd64 libasound2-data all 1.2.8-1 [20.5 kB] Get: 46 http://deb.debian.org/debian bookworm/main amd64 libasound2 amd64 1.2.8-1+b1 [362 kB] Get: 47 http://deb.debian.org/debian bookworm/main amd64 libglib2.0-0 amd64 2.74.6-2 [1398 kB] Get: 48 http://deb.debian.org/debian bookworm/main amd64 libgraphite2-3 amd64 1.3.14-1 [81.2 kB] Get: 49 http://deb.debian.org/debian bookworm/main amd64 libharfbuzz0b amd64 6.0.0+dfsg-3 [1945 kB] Get: 50 http://deb.debian.org/debian bookworm/main amd64 libpcsclite1 amd64 1.9.9-2 [49.7 kB] Get: 51 http://deb.debian.org/debian bookworm/main amd64 openjdk-17-jre-headless amd64 17.0.6+10-1 [43.6 MB] Get: 52 http://deb.debian.org/debian bookworm/main amd64 default-jre-headless amd64 2:1.17-74 [2936 B] Get: 53 http://deb.debian.org/debian bookworm/main amd64 ca-certificates-java all 20230103 [11.4 kB] Get: 54 http://deb.debian.org/debian bookworm/main amd64 libdebhelper-perl all 13.11.4 [81.2 kB] Get: 55 http://deb.debian.org/debian bookworm/main amd64 libtool all 2.4.7-5 [517 kB] Get: 56 http://deb.debian.org/debian bookworm/main amd64 dh-autoreconf all 20 [17.1 kB] Get: 57 http://deb.debian.org/debian bookworm/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 58 http://deb.debian.org/debian bookworm/main amd64 libsub-override-perl all 0.09-4 [9304 B] Get: 59 http://deb.debian.org/debian bookworm/main amd64 libfile-stripnondeterminism-perl all 1.13.1-1 [19.4 kB] Get: 60 http://deb.debian.org/debian bookworm/main amd64 dh-strip-nondeterminism all 1.13.1-1 [8620 B] Get: 61 http://deb.debian.org/debian bookworm/main amd64 libelf1 amd64 0.188-2.1 [174 kB] Get: 62 http://deb.debian.org/debian bookworm/main amd64 dwz amd64 0.15-1 [109 kB] Get: 63 http://deb.debian.org/debian bookworm/main amd64 libicu72 amd64 72.1-3 [9376 kB] Get: 64 http://deb.debian.org/debian bookworm/main amd64 libxml2 amd64 2.9.14+dfsg-1.2 [687 kB] Get: 65 http://deb.debian.org/debian bookworm/main amd64 gettext amd64 0.21-12 [1300 kB] Get: 66 http://deb.debian.org/debian bookworm/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 67 http://deb.debian.org/debian bookworm/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 68 http://deb.debian.org/debian bookworm/main amd64 debhelper all 13.11.4 [942 kB] Get: 69 http://deb.debian.org/debian bookworm/main amd64 python3-lib2to3 all 3.11.2-2 [76.2 kB] Get: 70 http://deb.debian.org/debian bookworm/main amd64 python3-distutils all 3.11.2-2 [131 kB] Get: 71 http://deb.debian.org/debian bookworm/main amd64 dh-python all 5.20230130 [104 kB] Get: 72 http://deb.debian.org/debian bookworm/main amd64 unzip amd64 6.0-28 [166 kB] Get: 73 http://deb.debian.org/debian bookworm/main amd64 java-wrappers all 0.4 [8916 B] Get: 74 http://deb.debian.org/debian bookworm/main amd64 libjargs-java all 1.0.0-5 [14.9 kB] Get: 75 http://deb.debian.org/debian bookworm/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [326 kB] Get: 76 http://deb.debian.org/debian bookworm/main amd64 publicsuffix all 20230209.2326-1 [126 kB] Get: 77 http://deb.debian.org/debian bookworm/main amd64 python3-attr all 22.2.0-1 [65.4 kB] Get: 78 http://deb.debian.org/debian bookworm/main amd64 python3-soupsieve all 2.3.2-1 [38.8 kB] Get: 79 http://deb.debian.org/debian bookworm/main amd64 python3-bs4 all 4.11.2-2 [121 kB] Get: 80 http://deb.debian.org/debian bookworm/main amd64 python3-certifi all 2022.9.24-1 [153 kB] Get: 81 http://deb.debian.org/debian bookworm/main amd64 python3-pkg-resources all 66.1.1-1 [296 kB] Get: 82 http://deb.debian.org/debian bookworm/main amd64 python3-chardet all 5.1.0+dfsg-2 [110 kB] Get: 83 http://deb.debian.org/debian bookworm/main amd64 python3-charset-normalizer all 3.0.1-2 [49.3 kB] Get: 84 http://deb.debian.org/debian bookworm/main amd64 python3-idna all 3.3-1 [39.4 kB] Get: 85 http://deb.debian.org/debian bookworm/main amd64 python3-more-itertools all 8.10.0-2 [53.0 kB] Get: 86 http://deb.debian.org/debian bookworm/main amd64 python3-zipp all 1.0.0-6 [6696 B] Get: 87 http://deb.debian.org/debian bookworm/main amd64 python3-importlib-metadata all 4.12.0-1 [24.9 kB] Get: 88 http://deb.debian.org/debian bookworm/main amd64 python3-iniconfig all 1.1.1-2 [6396 B] Get: 89 http://deb.debian.org/debian bookworm/main amd64 python3-markupsafe amd64 2.1.2-1+b1 [13.2 kB] Get: 90 http://deb.debian.org/debian bookworm/main amd64 python3-mako all 1.2.4+ds-1 [81.9 kB] Get: 91 http://deb.debian.org/debian bookworm/main amd64 python3-packaging all 23.0-1 [32.5 kB] Get: 92 http://deb.debian.org/debian bookworm/main amd64 python3-pluggy all 1.0.0+repack-1 [19.7 kB] Get: 93 http://deb.debian.org/debian bookworm/main amd64 python3-py all 1.11.0-1 [89.2 kB] Get: 94 http://deb.debian.org/debian bookworm/main amd64 python3-pytest all 7.2.1-2 [236 kB] Get: 95 http://deb.debian.org/debian bookworm/main amd64 python3-setuptools all 66.1.1-1 [521 kB] Get: 96 http://deb.debian.org/debian bookworm/main amd64 python3-pytest-runner all 2.11.1-4 [8432 B] Get: 97 http://deb.debian.org/debian bookworm/main amd64 python3-six all 1.16.0-4 [17.5 kB] Get: 98 http://deb.debian.org/debian bookworm/main amd64 python3-urllib3 all 1.26.12-1 [117 kB] Get: 99 http://deb.debian.org/debian bookworm/main amd64 python3-requests all 2.28.1+dfsg-1 [67.9 kB] Get: 100 http://deb.debian.org/debian bookworm/main amd64 python3-responses all 0.18.0-1 [41.5 kB] Get: 101 http://deb.debian.org/debian bookworm/main amd64 python3-socks all 1.7.1+dfsg-1 [23.3 kB] Get: 102 http://deb.debian.org/debian bookworm/main amd64 python3-tld all 0.11.11-4 [19.5 kB] Get: 103 http://deb.debian.org/debian bookworm/main amd64 python3-yaswfp all 0.9.3-2 [16.0 kB] Get: 104 http://deb.debian.org/debian bookworm/main amd64 yui-compressor all 2.4.8-3 [604 kB] Fetched 82.4 MB in 1s (60.0 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19596 files and directories currently installed.) Preparing to unpack .../libpython3.11-minimal_3.11.2-6_amd64.deb ... Unpacking libpython3.11-minimal:amd64 (3.11.2-6) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../libexpat1_2.5.0-1_amd64.deb ... Unpacking libexpat1:amd64 (2.5.0-1) ... Selecting previously unselected package python3.11-minimal. Preparing to unpack .../python3.11-minimal_3.11.2-6_amd64.deb ... Unpacking python3.11-minimal (3.11.2-6) ... Setting up libpython3.11-minimal:amd64 (3.11.2-6) ... Setting up libexpat1:amd64 (2.5.0-1) ... Setting up python3.11-minimal (3.11.2-6) ... Selecting previously unselected package python3-minimal. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19912 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.11.2-1+b1_amd64.deb ... Unpacking python3-minimal (3.11.2-1+b1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_10.0.0_all.deb ... Unpacking media-types (10.0.0) ... Selecting previously unselected package readline-common. Preparing to unpack .../2-readline-common_8.2-1.3_all.deb ... Unpacking readline-common (8.2-1.3) ... Selecting previously unselected package libreadline8:amd64. Preparing to unpack .../3-libreadline8_8.2-1.3_amd64.deb ... Unpacking libreadline8:amd64 (8.2-1.3) ... Selecting previously unselected package libpython3.11-stdlib:amd64. Preparing to unpack .../4-libpython3.11-stdlib_3.11.2-6_amd64.deb ... Unpacking libpython3.11-stdlib:amd64 (3.11.2-6) ... Selecting previously unselected package python3.11. Preparing to unpack .../5-python3.11_3.11.2-6_amd64.deb ... Unpacking python3.11 (3.11.2-6) ... Selecting previously unselected package libpython3-stdlib:amd64. Preparing to unpack .../6-libpython3-stdlib_3.11.2-1+b1_amd64.deb ... Unpacking libpython3-stdlib:amd64 (3.11.2-1+b1) ... Setting up python3-minimal (3.11.2-1+b1) ... Selecting previously unselected package python3. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 20346 files and directories currently installed.) Preparing to unpack .../00-python3_3.11.2-1+b1_amd64.deb ... Unpacking python3 (3.11.2-1+b1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../01-sensible-utils_0.0.17+nmu1_all.deb ... Unpacking sensible-utils (0.0.17+nmu1) ... Selecting previously unselected package openssl. Preparing to unpack .../02-openssl_3.0.8-1_amd64.deb ... Unpacking openssl (3.0.8-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../03-ca-certificates_20230311_all.deb ... Unpacking ca-certificates (20230311) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../04-libmagic-mgc_1%3a5.44-3_amd64.deb ... Unpacking libmagic-mgc (1:5.44-3) ... Selecting previously unselected package libmagic1:amd64. Preparing to unpack .../05-libmagic1_1%3a5.44-3_amd64.deb ... Unpacking libmagic1:amd64 (1:5.44-3) ... Selecting previously unselected package file. Preparing to unpack .../06-file_1%3a5.44-3_amd64.deb ... Unpacking file (1:5.44-3) ... Selecting previously unselected package gettext-base. Preparing to unpack .../07-gettext-base_0.21-12_amd64.deb ... Unpacking gettext-base (0.21-12) ... Selecting previously unselected package libuchardet0:amd64. Preparing to unpack .../08-libuchardet0_0.0.7-1_amd64.deb ... Unpacking libuchardet0:amd64 (0.0.7-1) ... Selecting previously unselected package groff-base. Preparing to unpack .../09-groff-base_1.22.4-10_amd64.deb ... Unpacking groff-base (1.22.4-10) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../10-bsdextrautils_2.38.1-5+b1_amd64.deb ... Unpacking bsdextrautils (2.38.1-5+b1) ... Selecting previously unselected package libpipeline1:amd64. Preparing to unpack .../11-libpipeline1_1.5.7-1_amd64.deb ... Unpacking libpipeline1:amd64 (1.5.7-1) ... Selecting previously unselected package man-db. Preparing to unpack .../12-man-db_2.11.2-2_amd64.deb ... Unpacking man-db (2.11.2-2) ... Selecting previously unselected package m4. Preparing to unpack .../13-m4_1.4.19-3_amd64.deb ... Unpacking m4 (1.4.19-3) ... Selecting previously unselected package autoconf. Preparing to unpack .../14-autoconf_2.71-3_all.deb ... Unpacking autoconf (2.71-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../15-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../16-automake_1%3a1.16.5-1.3_all.deb ... Unpacking automake (1:1.16.5-1.3) ... Selecting previously unselected package autopoint. Preparing to unpack .../17-autopoint_0.21-12_all.deb ... Unpacking autopoint (0.21-12) ... Selecting previously unselected package java-common. Preparing to unpack .../18-java-common_0.74_all.deb ... Unpacking java-common (0.74) ... Selecting previously unselected package libavahi-common-data:amd64. Preparing to unpack .../19-libavahi-common-data_0.8-10_amd64.deb ... Unpacking libavahi-common-data:amd64 (0.8-10) ... Selecting previously unselected package libavahi-common3:amd64. Preparing to unpack .../20-libavahi-common3_0.8-10_amd64.deb ... Unpacking libavahi-common3:amd64 (0.8-10) ... Selecting previously unselected package libdbus-1-3:amd64. Preparing to unpack .../21-libdbus-1-3_1.14.6-1_amd64.deb ... Unpacking libdbus-1-3:amd64 (1.14.6-1) ... Selecting previously unselected package libavahi-client3:amd64. Preparing to unpack .../22-libavahi-client3_0.8-10_amd64.deb ... Unpacking libavahi-client3:amd64 (0.8-10) ... Selecting previously unselected package libcups2:amd64. Preparing to unpack .../23-libcups2_2.4.2-3_amd64.deb ... Unpacking libcups2:amd64 (2.4.2-3) ... Selecting previously unselected package liblcms2-2:amd64. Preparing to unpack .../24-liblcms2-2_2.14-2_amd64.deb ... Unpacking liblcms2-2:amd64 (2.14-2) ... Selecting previously unselected package libjpeg62-turbo:amd64. Preparing to unpack .../25-libjpeg62-turbo_1%3a2.1.5-2_amd64.deb ... Unpacking libjpeg62-turbo:amd64 (1:2.1.5-2) ... Selecting previously unselected package libbrotli1:amd64. Preparing to unpack .../26-libbrotli1_1.0.9-2+b6_amd64.deb ... Unpacking libbrotli1:amd64 (1.0.9-2+b6) ... Selecting previously unselected package libpng16-16:amd64. Preparing to unpack .../27-libpng16-16_1.6.39-2_amd64.deb ... Unpacking libpng16-16:amd64 (1.6.39-2) ... Selecting previously unselected package libfreetype6:amd64. Preparing to unpack .../28-libfreetype6_2.12.1+dfsg-4_amd64.deb ... Unpacking libfreetype6:amd64 (2.12.1+dfsg-4) ... Selecting previously unselected package fonts-dejavu-core. Preparing to unpack .../29-fonts-dejavu-core_2.37-6_all.deb ... Unpacking fonts-dejavu-core (2.37-6) ... Selecting previously unselected package fontconfig-config. Preparing to unpack .../30-fontconfig-config_2.14.1-4_amd64.deb ... Unpacking fontconfig-config (2.14.1-4) ... Selecting previously unselected package libfontconfig1:amd64. Preparing to unpack .../31-libfontconfig1_2.14.1-4_amd64.deb ... Unpacking libfontconfig1:amd64 (2.14.1-4) ... Selecting previously unselected package libnspr4:amd64. Preparing to unpack .../32-libnspr4_2%3a4.35-1_amd64.deb ... Unpacking libnspr4:amd64 (2:4.35-1) ... Selecting previously unselected package libnss3:amd64. Preparing to unpack .../33-libnss3_2%3a3.87.1-1_amd64.deb ... Unpacking libnss3:amd64 (2:3.87.1-1) ... Selecting previously unselected package libasound2-data. Preparing to unpack .../34-libasound2-data_1.2.8-1_all.deb ... Unpacking libasound2-data (1.2.8-1) ... Selecting previously unselected package libasound2:amd64. Preparing to unpack .../35-libasound2_1.2.8-1+b1_amd64.deb ... Unpacking libasound2:amd64 (1.2.8-1+b1) ... Selecting previously unselected package libglib2.0-0:amd64. Preparing to unpack .../36-libglib2.0-0_2.74.6-2_amd64.deb ... Unpacking libglib2.0-0:amd64 (2.74.6-2) ... Selecting previously unselected package libgraphite2-3:amd64. Preparing to unpack .../37-libgraphite2-3_1.3.14-1_amd64.deb ... Unpacking libgraphite2-3:amd64 (1.3.14-1) ... Selecting previously unselected package libharfbuzz0b:amd64. Preparing to unpack .../38-libharfbuzz0b_6.0.0+dfsg-3_amd64.deb ... Unpacking libharfbuzz0b:amd64 (6.0.0+dfsg-3) ... Selecting previously unselected package libpcsclite1:amd64. Preparing to unpack .../39-libpcsclite1_1.9.9-2_amd64.deb ... Unpacking libpcsclite1:amd64 (1.9.9-2) ... Selecting previously unselected package openjdk-17-jre-headless:amd64. Preparing to unpack .../40-openjdk-17-jre-headless_17.0.6+10-1_amd64.deb ... Unpacking openjdk-17-jre-headless:amd64 (17.0.6+10-1) ... Selecting previously unselected package default-jre-headless. Preparing to unpack .../41-default-jre-headless_2%3a1.17-74_amd64.deb ... Unpacking default-jre-headless (2:1.17-74) ... Selecting previously unselected package ca-certificates-java. Preparing to unpack .../42-ca-certificates-java_20230103_all.deb ... Unpacking ca-certificates-java (20230103) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../43-libdebhelper-perl_13.11.4_all.deb ... Unpacking libdebhelper-perl (13.11.4) ... Selecting previously unselected package libtool. Preparing to unpack .../44-libtool_2.4.7-5_all.deb ... Unpacking libtool (2.4.7-5) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../45-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../46-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libsub-override-perl. Preparing to unpack .../47-libsub-override-perl_0.09-4_all.deb ... Unpacking libsub-override-perl (0.09-4) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../48-libfile-stripnondeterminism-perl_1.13.1-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.13.1-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../49-dh-strip-nondeterminism_1.13.1-1_all.deb ... Unpacking dh-strip-nondeterminism (1.13.1-1) ... Selecting previously unselected package libelf1:amd64. Preparing to unpack .../50-libelf1_0.188-2.1_amd64.deb ... Unpacking libelf1:amd64 (0.188-2.1) ... Selecting previously unselected package dwz. Preparing to unpack .../51-dwz_0.15-1_amd64.deb ... Unpacking dwz (0.15-1) ... Selecting previously unselected package libicu72:amd64. Preparing to unpack .../52-libicu72_72.1-3_amd64.deb ... Unpacking libicu72:amd64 (72.1-3) ... Selecting previously unselected package libxml2:amd64. Preparing to unpack .../53-libxml2_2.9.14+dfsg-1.2_amd64.deb ... Unpacking libxml2:amd64 (2.9.14+dfsg-1.2) ... Selecting previously unselected package gettext. Preparing to unpack .../54-gettext_0.21-12_amd64.deb ... Unpacking gettext (0.21-12) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../55-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../56-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../57-debhelper_13.11.4_all.deb ... Unpacking debhelper (13.11.4) ... Selecting previously unselected package python3-lib2to3. Preparing to unpack .../58-python3-lib2to3_3.11.2-2_all.deb ... Unpacking python3-lib2to3 (3.11.2-2) ... Selecting previously unselected package python3-distutils. Preparing to unpack .../59-python3-distutils_3.11.2-2_all.deb ... Unpacking python3-distutils (3.11.2-2) ... Selecting previously unselected package dh-python. Preparing to unpack .../60-dh-python_5.20230130_all.deb ... Unpacking dh-python (5.20230130) ... Selecting previously unselected package unzip. Preparing to unpack .../61-unzip_6.0-28_amd64.deb ... Unpacking unzip (6.0-28) ... Selecting previously unselected package java-wrappers. Preparing to unpack .../62-java-wrappers_0.4_all.deb ... Unpacking java-wrappers (0.4) ... Selecting previously unselected package libjargs-java. Preparing to unpack .../63-libjargs-java_1.0.0-5_all.deb ... Unpacking libjargs-java (1.0.0-5) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../64-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... Selecting previously unselected package publicsuffix. Preparing to unpack .../65-publicsuffix_20230209.2326-1_all.deb ... Unpacking publicsuffix (20230209.2326-1) ... Selecting previously unselected package python3-attr. Preparing to unpack .../66-python3-attr_22.2.0-1_all.deb ... Unpacking python3-attr (22.2.0-1) ... Selecting previously unselected package python3-soupsieve. Preparing to unpack .../67-python3-soupsieve_2.3.2-1_all.deb ... Unpacking python3-soupsieve (2.3.2-1) ... Selecting previously unselected package python3-bs4. Preparing to unpack .../68-python3-bs4_4.11.2-2_all.deb ... Unpacking python3-bs4 (4.11.2-2) ... Selecting previously unselected package python3-certifi. Preparing to unpack .../69-python3-certifi_2022.9.24-1_all.deb ... Unpacking python3-certifi (2022.9.24-1) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../70-python3-pkg-resources_66.1.1-1_all.deb ... Unpacking python3-pkg-resources (66.1.1-1) ... Selecting previously unselected package python3-chardet. Preparing to unpack .../71-python3-chardet_5.1.0+dfsg-2_all.deb ... Unpacking python3-chardet (5.1.0+dfsg-2) ... Selecting previously unselected package python3-charset-normalizer. Preparing to unpack .../72-python3-charset-normalizer_3.0.1-2_all.deb ... Unpacking python3-charset-normalizer (3.0.1-2) ... Selecting previously unselected package python3-idna. Preparing to unpack .../73-python3-idna_3.3-1_all.deb ... Unpacking python3-idna (3.3-1) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../74-python3-more-itertools_8.10.0-2_all.deb ... Unpacking python3-more-itertools (8.10.0-2) ... Selecting previously unselected package python3-zipp. Preparing to unpack .../75-python3-zipp_1.0.0-6_all.deb ... Unpacking python3-zipp (1.0.0-6) ... Selecting previously unselected package python3-importlib-metadata. Preparing to unpack .../76-python3-importlib-metadata_4.12.0-1_all.deb ... Unpacking python3-importlib-metadata (4.12.0-1) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../77-python3-iniconfig_1.1.1-2_all.deb ... Unpacking python3-iniconfig (1.1.1-2) ... Selecting previously unselected package python3-markupsafe. Preparing to unpack .../78-python3-markupsafe_2.1.2-1+b1_amd64.deb ... Unpacking python3-markupsafe (2.1.2-1+b1) ... Selecting previously unselected package python3-mako. Preparing to unpack .../79-python3-mako_1.2.4+ds-1_all.deb ... Unpacking python3-mako (1.2.4+ds-1) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../80-python3-packaging_23.0-1_all.deb ... Unpacking python3-packaging (23.0-1) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../81-python3-pluggy_1.0.0+repack-1_all.deb ... Unpacking python3-pluggy (1.0.0+repack-1) ... Selecting previously unselected package python3-py. Preparing to unpack .../82-python3-py_1.11.0-1_all.deb ... Unpacking python3-py (1.11.0-1) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../83-python3-pytest_7.2.1-2_all.deb ... Unpacking python3-pytest (7.2.1-2) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../84-python3-setuptools_66.1.1-1_all.deb ... Unpacking python3-setuptools (66.1.1-1) ... Selecting previously unselected package python3-pytest-runner. Preparing to unpack .../85-python3-pytest-runner_2.11.1-4_all.deb ... Unpacking python3-pytest-runner (2.11.1-4) ... Selecting previously unselected package python3-six. Preparing to unpack .../86-python3-six_1.16.0-4_all.deb ... Unpacking python3-six (1.16.0-4) ... Selecting previously unselected package python3-urllib3. Preparing to unpack .../87-python3-urllib3_1.26.12-1_all.deb ... Unpacking python3-urllib3 (1.26.12-1) ... Selecting previously unselected package python3-requests. Preparing to unpack .../88-python3-requests_2.28.1+dfsg-1_all.deb ... Unpacking python3-requests (2.28.1+dfsg-1) ... Selecting previously unselected package python3-responses. Preparing to unpack .../89-python3-responses_0.18.0-1_all.deb ... Unpacking python3-responses (0.18.0-1) ... Selecting previously unselected package python3-socks. Preparing to unpack .../90-python3-socks_1.7.1+dfsg-1_all.deb ... Unpacking python3-socks (1.7.1+dfsg-1) ... Selecting previously unselected package python3-tld. Preparing to unpack .../91-python3-tld_0.11.11-4_all.deb ... Unpacking python3-tld (0.11.11-4) ... Selecting previously unselected package python3-yaswfp. Preparing to unpack .../92-python3-yaswfp_0.9.3-2_all.deb ... Unpacking python3-yaswfp (0.9.3-2) ... Selecting previously unselected package yui-compressor. Preparing to unpack .../93-yui-compressor_2.4.8-3_all.deb ... Unpacking yui-compressor (2.4.8-3) ... Setting up media-types (10.0.0) ... Setting up libpipeline1:amd64 (1.5.7-1) ... Setting up libgraphite2-3:amd64 (1.3.14-1) ... Setting up liblcms2-2:amd64 (2.14-2) ... Setting up libicu72:amd64 (72.1-3) ... Setting up bsdextrautils (2.38.1-5+b1) ... Setting up java-common (0.74) ... Setting up libmagic-mgc (1:5.44-3) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libglib2.0-0:amd64 (2.74.6-2) ... No schema files found: doing nothing. Setting up unzip (6.0-28) ... Setting up libdebhelper-perl (13.11.4) ... Setting up libbrotli1:amd64 (1.0.9-2+b6) ... Setting up libmagic1:amd64 (1:5.44-3) ... Setting up gettext-base (0.21-12) ... Setting up m4 (1.4.19-3) ... Setting up file (1:5.44-3) ... Setting up libasound2-data (1.2.8-1) ... Setting up autotools-dev (20220109.1) ... Setting up libjpeg62-turbo:amd64 (1:2.1.5-2) ... Setting up libnspr4:amd64 (2:4.35-1) ... Setting up libavahi-common-data:amd64 (0.8-10) ... Setting up libdbus-1-3:amd64 (1.14.6-1) ... Setting up libpng16-16:amd64 (1.6.39-2) ... Setting up autopoint (0.21-12) ... Setting up fonts-dejavu-core (2.37-6) ... Setting up libpcsclite1:amd64 (1.9.9-2) ... Setting up autoconf (2.71-3) ... Setting up sensible-utils (0.0.17+nmu1) ... Setting up libuchardet0:amd64 (0.0.7-1) ... Setting up libasound2:amd64 (1.2.8-1+b1) ... Setting up libjargs-java (1.0.0-5) ... Setting up libsub-override-perl (0.09-4) ... Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... Setting up openssl (3.0.8-1) ... Setting up libelf1:amd64 (0.188-2.1) ... Setting up readline-common (8.2-1.3) ... Setting up publicsuffix (20230209.2326-1) ... Setting up libxml2:amd64 (2.9.14+dfsg-1.2) ... Setting up automake (1:1.16.5-1.3) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.13.1-1) ... Setting up gettext (0.21-12) ... Setting up java-wrappers (0.4) ... Setting up libtool (2.4.7-5) ... Setting up fontconfig-config (2.14.1-4) ... Setting up libreadline8:amd64 (8.2-1.3) ... Setting up libavahi-common3:amd64 (0.8-10) ... Setting up libnss3:amd64 (2:3.87.1-1) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up ca-certificates (20230311) ... Updating certificates in /etc/ssl/certs... 140 added, 0 removed; done. Setting up libfreetype6:amd64 (2.12.1+dfsg-4) ... Setting up dh-strip-nondeterminism (1.13.1-1) ... Setting up dwz (0.15-1) ... Setting up groff-base (1.22.4-10) ... Setting up libharfbuzz0b:amd64 (6.0.0+dfsg-3) ... Setting up libfontconfig1:amd64 (2.14.1-4) ... Setting up libavahi-client3:amd64 (0.8-10) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libpython3.11-stdlib:amd64 (3.11.2-6) ... Setting up man-db (2.11.2-2) ... Not building database; man-db/auto-update is not 'true'. Setting up libcups2:amd64 (2.4.2-3) ... Setting up libpython3-stdlib:amd64 (3.11.2-1+b1) ... Setting up python3.11 (3.11.2-6) ... Setting up debhelper (13.11.4) ... Setting up python3 (3.11.2-1+b1) ... Setting up python3-tld (0.11.11-4) ... Setting up python3-markupsafe (2.1.2-1+b1) ... Setting up python3-six (1.16.0-4) ... Setting up python3-packaging (23.0-1) ... Setting up python3-yaswfp (0.9.3-2) ... Setting up python3-certifi (2022.9.24-1) ... Setting up python3-idna (3.3-1) ... Setting up python3-urllib3 (1.26.12-1) ... Setting up python3-pluggy (1.0.0+repack-1) ... Setting up python3-lib2to3 (3.11.2-2) ... Setting up python3-soupsieve (2.3.2-1) ... Setting up python3-pkg-resources (66.1.1-1) ... Setting up python3-distutils (3.11.2-2) ... Setting up dh-python (5.20230130) ... Setting up python3-more-itertools (8.10.0-2) ... Setting up python3-iniconfig (1.1.1-2) ... Setting up python3-attr (22.2.0-1) ... Setting up python3-setuptools (66.1.1-1) ... Setting up python3-socks (1.7.1+dfsg-1) ... Setting up python3-py (1.11.0-1) ... Setting up python3-charset-normalizer (3.0.1-2) ... Setting up python3-pytest (7.2.1-2) ... Setting up python3-zipp (1.0.0-6) ... Setting up python3-bs4 (4.11.2-2) ... Setting up python3-chardet (5.1.0+dfsg-2) ... Setting up python3-requests (2.28.1+dfsg-1) ... Setting up python3-pytest-runner (2.11.1-4) ... Setting up python3-mako (1.2.4+ds-1) ... Setting up python3-importlib-metadata (4.12.0-1) ... Setting up python3-responses (0.18.0-1) ... Setting up ca-certificates-java (20230103) ... Adding debian:ACCVRAIZ1.pem Adding debian:AC_RAIZ_FNMT-RCM.pem Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem Adding debian:ANF_Secure_Server_Root_CA.pem Adding debian:Actalis_Authentication_Root_CA.pem Adding debian:AffirmTrust_Commercial.pem Adding debian:AffirmTrust_Networking.pem Adding debian:AffirmTrust_Premium.pem Adding debian:AffirmTrust_Premium_ECC.pem Adding debian:Amazon_Root_CA_1.pem Adding debian:Amazon_Root_CA_2.pem Adding debian:Amazon_Root_CA_3.pem Adding debian:Amazon_Root_CA_4.pem Adding debian:Atos_TrustedRoot_2011.pem Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068_2.pem Adding debian:Baltimore_CyberTrust_Root.pem Adding debian:Buypass_Class_2_Root_CA.pem Adding debian:Buypass_Class_3_Root_CA.pem Adding debian:CA_Disig_Root_R2.pem Adding debian:CFCA_EV_ROOT.pem Adding debian:COMODO_Certification_Authority.pem Adding debian:COMODO_ECC_Certification_Authority.pem Adding debian:COMODO_RSA_Certification_Authority.pem Adding debian:Certainly_Root_E1.pem Adding debian:Certainly_Root_R1.pem Adding debian:Certigna.pem Adding debian:Certigna_Root_CA.pem Adding debian:Certum_EC-384_CA.pem Adding debian:Certum_Trusted_Network_CA.pem Adding debian:Certum_Trusted_Network_CA_2.pem Adding debian:Certum_Trusted_Root_CA.pem Adding debian:Comodo_AAA_Services_root.pem Adding debian:D-TRUST_BR_Root_CA_1_2020.pem Adding debian:D-TRUST_EV_Root_CA_1_2020.pem Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem Adding debian:DigiCert_Assured_ID_Root_CA.pem Adding debian:DigiCert_Assured_ID_Root_G2.pem Adding debian:DigiCert_Assured_ID_Root_G3.pem Adding debian:DigiCert_Global_Root_CA.pem Adding debian:DigiCert_Global_Root_G2.pem Adding debian:DigiCert_Global_Root_G3.pem Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem Adding debian:DigiCert_Trusted_Root_G4.pem Adding debian:E-Tugra_Certification_Authority.pem Adding debian:E-Tugra_Global_Root_CA_ECC_v3.pem Adding debian:E-Tugra_Global_Root_CA_RSA_v3.pem Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem Adding debian:Entrust_Root_Certification_Authority.pem Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem Adding debian:Entrust_Root_Certification_Authority_-_G2.pem Adding debian:Entrust_Root_Certification_Authority_-_G4.pem Adding debian:GDCA_TrustAUTH_R5_ROOT.pem Adding debian:GLOBALTRUST_2020.pem Adding debian:GTS_Root_R1.pem Adding debian:GTS_Root_R2.pem Adding debian:GTS_Root_R3.pem Adding debian:GTS_Root_R4.pem Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem Adding debian:GlobalSign_Root_CA.pem Adding debian:GlobalSign_Root_CA_-_R3.pem Adding debian:GlobalSign_Root_CA_-_R6.pem Adding debian:GlobalSign_Root_E46.pem Adding debian:GlobalSign_Root_R46.pem Adding debian:Go_Daddy_Class_2_CA.pem Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem Adding debian:HiPKI_Root_CA_-_G1.pem Adding debian:Hongkong_Post_Root_CA_1.pem Adding debian:Hongkong_Post_Root_CA_3.pem Adding debian:ISRG_Root_X1.pem Adding debian:ISRG_Root_X2.pem Adding debian:IdenTrust_Commercial_Root_CA_1.pem Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem Adding debian:Izenpe.com.pem Adding debian:Microsec_e-Szigno_Root_CA_2009.pem Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem Adding debian:NAVER_Global_Root_Certification_Authority.pem Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem Adding debian:QuoVadis_Root_CA_1_G3.pem Adding debian:QuoVadis_Root_CA_2.pem Adding debian:QuoVadis_Root_CA_2_G3.pem Adding debian:QuoVadis_Root_CA_3.pem Adding debian:QuoVadis_Root_CA_3_G3.pem Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem Adding debian:SSL.com_Root_Certification_Authority_ECC.pem Adding debian:SSL.com_Root_Certification_Authority_RSA.pem Adding debian:SZAFIR_ROOT_CA2.pem Adding debian:SecureSign_RootCA11.pem Adding debian:SecureTrust_CA.pem Adding debian:Secure_Global_CA.pem Adding debian:Security_Communication_ECC_RootCA1.pem Adding debian:Security_Communication_RootCA2.pem Adding debian:Security_Communication_RootCA3.pem Adding debian:Security_Communication_Root_CA.pem Adding debian:Starfield_Class_2_CA.pem Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem Adding debian:SwissSign_Gold_CA_-_G2.pem Adding debian:SwissSign_Silver_CA_-_G2.pem Adding debian:T-TeleSec_GlobalRoot_Class_2.pem Adding debian:T-TeleSec_GlobalRoot_Class_3.pem Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem Adding debian:TWCA_Global_Root_CA.pem Adding debian:TWCA_Root_Certification_Authority.pem Adding debian:TeliaSonera_Root_CA_v1.pem Adding debian:Telia_Root_CA_v2.pem Adding debian:TrustCor_ECA-1.pem Adding debian:TrustCor_RootCert_CA-1.pem Adding debian:TrustCor_RootCert_CA-2.pem Adding debian:Trustwave_Global_Certification_Authority.pem Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem Adding debian:TunTrust_Root_CA.pem Adding debian:UCA_Extended_Validation_Root.pem Adding debian:UCA_Global_G2_Root.pem Adding debian:USERTrust_ECC_Certification_Authority.pem Adding debian:USERTrust_RSA_Certification_Authority.pem Adding debian:XRamp_Global_CA_Root.pem Adding debian:certSIGN_ROOT_CA.pem Adding debian:certSIGN_Root_CA_G2.pem Adding debian:e-Szigno_Root_CA_2017.pem Adding debian:ePKI_Root_Certification_Authority.pem Adding debian:emSign_ECC_Root_CA_-_C3.pem Adding debian:emSign_ECC_Root_CA_-_G3.pem Adding debian:emSign_Root_CA_-_C1.pem Adding debian:emSign_Root_CA_-_G1.pem Adding debian:vTrus_ECC_Root_CA.pem Adding debian:vTrus_Root_CA.pem done. Setting up default-jre-headless (2:1.17-74) ... Setting up openjdk-17-jre-headless:amd64 (17.0.6+10-1) ... update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode Setting up yui-compressor (2.4.8-3) ... Processing triggers for libc-bin (2.36-9) ... Processing triggers for ca-certificates (20230311) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Processing triggers for ca-certificates-java (20230103) ... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps Reading package lists... Building dependency tree... Reading state information... usrmerge is already the newest version (35). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/A99_set_merged_usr starting Re-configuring usrmerge... removed '/etc/unsupported-skip-usrmerge-conversion' The system has been successfully converted. I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/A99_set_merged_usr finished hostname: Name or service not known I: Running cd /build/wapiti-3.0.4+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../wapiti_3.0.4+dfsg-2_source.changes dpkg-buildpackage: info: source package wapiti dpkg-buildpackage: info: source version 3.0.4+dfsg-2 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Sophie Brun dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean --with python3 --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild I: pybuild base:240: python3.11 setup.py clean running clean removing '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build' (and everything under it) 'build/bdist.linux-x86_64' does not exist -- can't clean it 'build/scripts-3.11' does not exist -- can't clean it dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary dh binary --with python3 --buildsystem=pybuild dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild I: pybuild base:240: python3.11 setup.py config running config debian/rules override_dh_auto_build make[1]: Entering directory '/build/wapiti-3.0.4+dfsg' # rebuild the *.mo rm -f wapitiCore/config/language/*/LC_MESSAGES/wapiti.mo cd wapitiCore/language_sources; \ for f in *.po; do \ lang=$(echo $f | cut -d '.' -f1); \ if [ $lang != sav_en ]; then \ msgfmt $f -o "../data/language/$lang/LC_MESSAGES/wapiti.mo"; \ fi; \ done dh_auto_build I: pybuild base:240: /usr/bin/python3 setup.py build running build running build_py creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore copying wapitiCore/moon.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore copying wapitiCore/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests copying tests/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer copying wapitiCore/wappalyzer/wappalyzer.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer copying wapitiCore/wappalyzer/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report copying wapitiCore/report/htmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report copying wapitiCore/report/xmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report copying wapitiCore/report/txtreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report copying wapitiCore/report/reportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report copying wapitiCore/report/jsonreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report copying wapitiCore/report/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/xss_utils.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/web.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/swf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/sqlite_persister.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/page.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/lamejs.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/jsoncookie.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/csp_utils.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/crawler.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net copying wapitiCore/net/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main copying wapitiCore/main/wapiti.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main copying wapitiCore/main/getcookie.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main copying wapitiCore/main/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language copying wapitiCore/language/language.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language copying wapitiCore/language/vulnerability.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language copying wapitiCore/language/logger.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language copying wapitiCore/language/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/xxe.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/xss.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/ssrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/sql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/secure_cookie.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/resource_consumption.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/redirect.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/internal_error.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/http_only.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/http_headers.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/htaccess.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/fingerprint.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/file.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/exec.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/dangerous_resource.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/csrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/csp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/crlf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/credentials.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/blindsql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/backup.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions copying wapitiCore/definitions/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_nikto.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_xxe.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_xss.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_wapp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_sql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_redirect.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_permanentxss.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_methods.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_http_headers.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_file.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_exec.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_csrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_csp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_crlf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_cookieflags.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_buster.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_brute_login_form.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/mod_backup.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/attack.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack copying wapitiCore/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/pull_jsparser3.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/jsparser3.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web copying tests/web/test_scope.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web copying tests/web/test_request.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web copying tests/web/test_persister.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web copying tests/web/test_network_issues.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web copying tests/web/test_explorer.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web copying tests/web/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload copying tests/payload/test_payload_reader.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload copying tests/payload/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_xss_utils.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_json_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_js_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_http_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_html_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_html_forms.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/test_html_formaction.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers copying tests/parsers/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint copying tests/endpoint/test_endpoint.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint copying tests/endpoint/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli copying tests/cli/test_options.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli copying tests/cli/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mutator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_xxe.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_xss_basics.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_xss_advanced.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_wapp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_sql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_redirect.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_nikto.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_methods.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_file.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_exec.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_csrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_csp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_crlf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_buster.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/test_mod_backup.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack copying tests/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack running egg_info writing wapiti3.egg-info/PKG-INFO writing dependency_links to wapiti3.egg-info/dependency_links.txt writing entry points to wapiti3.egg-info/entry_points.txt writing requirements to wapiti3.egg-info/requires.txt writing top-level names to wapiti3.egg-info/top_level.txt reading manifest file 'wapiti3.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no previously-included files found matching 'wapitiCore/language_sources/*.sh' warning: no previously-included files found matching 'wapitiCore/language_sources/file_list.txt' adding license file 'LICENSE' writing manifest file 'wapiti3.egg-info/SOURCES.txt' /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.attacks' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.attacks' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.attacks' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.attacks' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.de.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.de.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.de.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.de.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.en.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.en.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.en.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.en.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.es.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.es.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.es.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.es.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.fr.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.fr.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.fr.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.fr.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.ms.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.ms.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.ms.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.ms.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.pt.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.pt.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.pt.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.pt.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.zh.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.zh.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.zh.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.zh.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.language_sources' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.language_sources' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.language_sources' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.language_sources' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.report_template' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.report_template' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.report_template' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.report_template' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.report_template.css' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.report_template.css' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.report_template.css' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.report_template.css' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/backupPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/blindSQLPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/busterPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/execPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/fileHandlingPayloads.ini -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/incorrectMessage.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/passwords.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/successMessage.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/users.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/xssPayloads.ini -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/xxePayloads.ini -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/de creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/de/LC_MESSAGES copying wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/de/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/en creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/en/LC_MESSAGES copying wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/en/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/es creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/es/LC_MESSAGES copying wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/es/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/fr creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/fr/LC_MESSAGES copying wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/fr/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/ms creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/ms/LC_MESSAGES copying wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/ms/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/pt creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/pt/LC_MESSAGES copying wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/pt/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/zh creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/zh/LC_MESSAGES copying wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/zh/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/de.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/en.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/es.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/fr.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/ms.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/pt.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/template.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources copying wapitiCore/language_sources/zh.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template copying wapitiCore/report_template/logo_clear.png -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template copying wapitiCore/report_template/report.html -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/css copying wapitiCore/report_template/css/kube.min.css -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/css copying wapitiCore/report_template/css/master.css -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/css running build_scripts creating build creating build/scripts-3.11 copying and adjusting bin/wapiti -> build/scripts-3.11 copying and adjusting bin/wapiti-getcookie -> build/scripts-3.11 changing mode of build/scripts-3.11/wapiti from 644 to 755 changing mode of build/scripts-3.11/wapiti-getcookie from 644 to 755 make[1]: Leaving directory '/build/wapiti-3.0.4+dfsg' debian/rules override_dh_auto_test make[1]: Entering directory '/build/wapiti-3.0.4+dfsg' dh_auto_test || true I: pybuild base:240: cd /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build; python3.11 -m pytest tests ============================= test session starts ============================== platform linux -- Python 3.11.2, pytest-7.2.1, pluggy-1.0.0+repack rootdir: /build/wapiti-3.0.4+dfsg collected 118 items tests/attack/test_mod_backup.py . [ 0%] tests/attack/test_mod_blindsql.py EEEE [ 4%] tests/attack/test_mod_buster.py . [ 5%] tests/attack/test_mod_crlf.py . [ 5%] tests/attack/test_mod_csp.py ... [ 8%] tests/attack/test_mod_csrf.py E [ 9%] tests/attack/test_mod_exec.py EEE [ 11%] tests/attack/test_mod_file.py EEEEEE [ 16%] tests/attack/test_mod_htaccess.py . [ 17%] tests/attack/test_mod_methods.py . [ 18%] tests/attack/test_mod_nikto.py F [ 19%] tests/attack/test_mod_redirect.py EE [ 21%] tests/attack/test_mod_shellshock.py . [ 22%] tests/attack/test_mod_sql.py ... [ 24%] tests/attack/test_mod_ssrf.py . [ 25%] tests/attack/test_mod_wapp.py .FFFFFFF [ 32%] tests/attack/test_mod_xss_advanced.py EEEEEEEEEEEEEEEEEE [ 47%] tests/attack/test_mod_xss_basics.py . [ 48%] tests/attack/test_mod_xxe.py EEEEEEE [ 54%] tests/attack/test_mutator.py .. [ 55%] tests/cli/test_options.py . [ 56%] tests/endpoint/test_endpoint.py EEE [ 59%] tests/parsers/test_html_formaction.py F [ 60%] tests/parsers/test_html_forms.py F. [ 61%] tests/parsers/test_html_parser.py FFFFFFFFF [ 69%] tests/parsers/test_http_parser.py . [ 70%] tests/parsers/test_js_parser.py F.. [ 72%] tests/parsers/test_json_parser.py . [ 73%] tests/parsers/test_xss_utils.py .................. [ 88%] tests/payload/test_payload_reader.py . [ 89%] tests/web/test_explorer.py EE [ 91%] tests/web/test_network_issues.py EE [ 93%] tests/web/test_persister.py ..F. [ 96%] tests/web/test_request.py F. [ 98%] tests/web/test_scope.py .. [100%] ==================================== ERRORS ==================================== __________________ ERROR at setup of test_blindsql_detection ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ________________ ERROR at setup of test_blindsql_false_positive ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _____________ ERROR at setup of test_false_positive_request_count ______________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________ ERROR at setup of test_true_positive_request_count ______________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________________ ERROR at setup of test_csrf_cases _______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/csrf/") > proc = Popen(["php", "-S", "127.0.0.1:65086", "-a", "-t", test_directory]) tests/attack/test_mod_csrf.py:43: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65086', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/csrf/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________________ ERROR at setup of test_whole_stuff ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65083", "-a", "-t", test_directory]) tests/attack/test_mod_exec.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65083', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________________ ERROR at setup of test_detection _______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65083", "-a", "-t", test_directory]) tests/attack/test_mod_exec.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65083', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ____________________ ERROR at setup of test_blind_detection ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65083", "-a", "-t", test_directory]) tests/attack/test_mod_exec.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65083', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_inclusion_detection __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ________________ ERROR at setup of test_warning_false_positive _________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________________ ERROR at setup of test_no_crash ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________ ERROR at setup of test_prefix_and_suffix_detection ______________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________ ERROR at setup of test_warning_false_postitives ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_warning_postitives ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_redirect_detection ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/attack/test_mod_redirect.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________________ ERROR at setup of test_whole_stuff ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/attack/test_mod_redirect.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _________________ ERROR at setup of test_title_false_positive __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ____________________ ERROR at setup of test_title_positive _____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _________________ ERROR at setup of test_script_filter_bypass __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ___________________ ERROR at setup of test_attr_quote_escape ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________ ERROR at setup of test_attr_double_quote_escape ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________________ ERROR at setup of test_attr_escape ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ____________________ ERROR at setup of test_tag_name_escape ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ________________ ERROR at setup of test_partial_tag_name_escape ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _________________ ERROR at setup of test_xss_inside_tag_input __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_xss_inside_tag_link __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ________________ ERROR at setup of test_xss_uppercase_no_script ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ___________________ ERROR at setup of test_frame_src_escape ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_frame_src_no_escape __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_bad_separator_used ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ___________________ ERROR at setup of test_escape_with_style ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_rare_tag_and_event ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_xss_with_strong_csp __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ___________________ ERROR at setup of test_xss_with_weak_csp ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ______________________ ERROR at setup of test_direct_body ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _____________________ ERROR at setup of test_direct_param ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_direct_query_string __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _____________________ ERROR at setup of test_direct_upload _____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ___________________ ERROR at setup of test_out_of_band_body ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ___________________ ERROR at setup of test_out_of_band_param ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________ ERROR at setup of test_out_of_band_query_string ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _________________________ ERROR at setup of test_ssrf __________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) endpoint_directory = os.path.join(base_dir, "..", "endpoint") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", endpoint_directory]) tests/endpoint/test_endpoint.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../endpoint'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ________________________ ERROR at setup of test_xxe_dtd ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) endpoint_directory = os.path.join(base_dir, "..", "endpoint") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", endpoint_directory]) tests/endpoint/test_endpoint.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../endpoint'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________________ ERROR at setup of test_xxe_store _______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) endpoint_directory = os.path.join(base_dir, "..", "endpoint") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", endpoint_directory]) tests/endpoint/test_endpoint.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../endpoint'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError _______________________ ERROR at setup of test_qs_limit ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/explorer/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_explorer.py:17: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/explorer/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError __________________ ERROR at setup of test_explorer_filtering ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/explorer/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_explorer.py:17: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/explorer/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ____________________ ERROR at setup of test_chunked_timeout ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_network_issues.py:18: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError ________________________ ERROR at setup of test_timeout ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_network_issues.py:18: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/subprocess.py:1024: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False, process_group = -1 def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session, process_group): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and process_group == -1 and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, process_group, gid, gids, uid, umask, preexec_fn, _USE_VFORK) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.11/subprocess.py:1901: FileNotFoundError =================================== FAILURES =================================== _______________________________ test_whole_stuff _______________________________ @responses.activate def test_whole_stuff(): # Test attacking all kind of parameter without crashing responses.add_passthru("https://raw.githubusercontent.com/wapiti-scanner/nikto/master/program/databases/db_tests") responses.add( responses.GET, url="http://perdu.com/cgi-bin/a1disp3.cgi?../../../../../../../../../../etc/passwd", body="root:0:0:", ) responses.add( responses.GET, url=re.compile(r"http://perdu.com/*"), body="Not found", status=404 ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 request.status = 200 request.set_headers({"content-type": "text/html"}) persister.requests.append(request) crawler = Crawler("http://perdu.com/", timeout=1) options = {"timeout": 10, "level": 2} logger = Mock() module = mod_nikto(crawler, persister, logger, options) module.verbose = 2 module.do_get = True for __ in module.attack(): pass > assert len(persister.vulnerabilities) == 1 E assert 0 == 1 E + where 0 = len([]) E + where [] = .vulnerabilities tests/attack/test_mod_nikto.py:79: AssertionError ______________________________ test_url_detection ______________________________ @responses.activate def test_url_detection(): # Test if application is detected using its url regex responses.add( responses.GET, url="http://perdu.com/owa/auth/logon.aspx", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
" ) persister = FakePersister() request = Request("http://perdu.com/owa/auth/logon.aspx") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:99: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/owa/auth/logon.aspx (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. _____________________________ test_html_detection ______________________________ @responses.activate def test_html_detection(): # Test if application is detected using its html regex responses.add( responses.GET, url="http://perdu.com/", body="FishEye 2.8.4 \

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\ " ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:131: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_script_detection _____________________________ @responses.activate def test_script_detection(): # Test if application is detected using its script regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ \ " ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:164: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_cookies_detection ____________________________ @responses.activate def test_cookies_detection(): # Test if application is detected using its cookies regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ ", headers={"Set-Cookie": "ci_csrf_token=4.1"} ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:197: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_headers_detection ____________________________ @responses.activate def test_headers_detection(): # Test if application is detected using its headers regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ ", headers={"Server": "Cherokee/1.3.4"} ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:230: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. _____________________________ test_meta_detection ______________________________ @responses.activate def test_meta_detection(): # Test if application is detected using its meta regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ? \ \

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ " ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:264: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_implies_detection ____________________________ @responses.activate def test_implies_detection(): # Test for implied applications responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ ", headers={"X-Generator": "Backdrop CMS 4.5"} ) persister = FakePersister() request = Request("http://perdu.com") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:297: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com (0) [Errno 2] No such file or directory: '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. _______________________________ test_formactions _______________________________ @responses.activate def test_formactions(): > with open("tests/data/formactions.html") as form_action: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/formactions.html' tests/parsers/test_html_formaction.py:9: FileNotFoundError __________________________________ test_forms __________________________________ @responses.activate def test_forms(): > with open("tests/data/forms.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/forms.html' tests/parsers/test_html_forms.py:9: FileNotFoundError ______________________________ test_absolute_root ______________________________ @responses.activate def test_absolute_root(): > with open("tests/data/absolute_root_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/absolute_root_links.html' tests/parsers/test_html_parser.py:9: FileNotFoundError ______________________________ test_relative_root ______________________________ @responses.activate def test_relative_root(): > with open("tests/data/relative_root_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/relative_root_links.html' tests/parsers/test_html_parser.py:25: FileNotFoundError _____________________________ test_relative_links ______________________________ @responses.activate def test_relative_links(): > with open("tests/data/relative_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/relative_links.html' tests/parsers/test_html_parser.py:42: FileNotFoundError _______________________________ test_other_links _______________________________ @responses.activate def test_other_links(): > with open("tests/data/other_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/other_links.html' tests/parsers/test_html_parser.py:72: FileNotFoundError _______________________________ test_extra_links _______________________________ @responses.activate def test_extra_links(): > with open("tests/data/extra_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/extra_links.html' tests/parsers/test_html_parser.py:106: FileNotFoundError __________________________________ test_meta ___________________________________ @responses.activate def test_meta(): > with open("tests/data/meta.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/meta.html' tests/parsers/test_html_parser.py:144: FileNotFoundError ___________________________ test_base_relative_links ___________________________ @responses.activate def test_base_relative_links(): > with open("tests/data/base_relative_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/base_relative_links.html' tests/parsers/test_html_parser.py:166: FileNotFoundError ____________________________ test_base_extra_links _____________________________ @responses.activate def test_base_extra_links(): > with open("tests/data/base_extra_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/base_extra_links.html' tests/parsers/test_html_parser.py:200: FileNotFoundError ____________________________ test_base_other_links _____________________________ @responses.activate def test_base_other_links(): > with open("tests/data/base_other_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/base_other_links.html' tests/parsers/test_html_parser.py:237: FileNotFoundError ________________________________ test_js_parser ________________________________ @responses.activate def test_js_parser(): > with open("tests/data/js_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/js_links.html' tests/parsers/test_js_parser.py:10: FileNotFoundError _____________________________ test_persister_forms _____________________________ @responses.activate def test_persister_forms(): > with open("tests/data/forms.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/forms.html' tests/web/test_persister.py:139: FileNotFoundError _____________________________ test_request_object ______________________________ self = def _new_conn(self): """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ extra_kw = {} if self.source_address: extra_kw["source_address"] = self.source_address if self.socket_options: extra_kw["socket_options"] = self.socket_options try: > conn = connection.create_connection( (self._dns_host, self.port), self.timeout, **extra_kw ) /usr/lib/python3/dist-packages/urllib3/connection.py:174: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('127.0.0.1', 9), timeout = 10.0, source_address = None socket_options = None def create_connection( address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None, socket_options=None, ): """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: return six.raise_from( LocationParseError("'%s', label empty or too long" % host), None ) for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) sock.connect(sa) return sock except socket.error as e: err = e if sock is not None: sock.close() sock = None if err is not None: > raise err /usr/lib/python3/dist-packages/urllib3/util/connection.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('127.0.0.1', 9), timeout = 10.0, source_address = None socket_options = None def create_connection( address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None, socket_options=None, ): """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: return six.raise_from( LocationParseError("'%s', label empty or too long" % host), None ) for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3/dist-packages/urllib3/util/connection.py:86: ConnectionRefusedError During handling of the above exception, another exception occurred: self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=10.0, read=10.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme='http', auth=None, host='httpbin.org', port=None, path='/post', query='a=b', fragment=None) destination_scheme = 'http', conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method provided by :class:`.RequestMethods`, such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``response_kw.get('preload_content', True)``. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = response_kw.get("preload_content", True) # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = six.ensure_str(_encode_target(url)) else: url = six.ensure_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() headers.update(self.proxy_headers) # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3/dist-packages/urllib3/connectionpool.py:704: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = conn = method = 'POST', url = 'http://httpbin.org/post?a=b' timeout = Timeout(connect=10.0, read=10.0, total=None), chunked = False httplib_request_kw = {'body': '{"z": 1, "a": 2}', 'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/4...', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'}} timeout_obj = Timeout(connect=10.0, read=10.0, total=None) def _make_request( self, conn, method, url, timeout=_Default, chunked=False, **httplib_request_kw ): """ Perform a request on a given urllib connection object taken from our pool. :param conn: a connection from one of our connection pools :param timeout: Socket timeout in seconds for the request. This can be a float or integer, which will set the same timeout value for the socket connect and the socket read, or an instance of :class:`urllib3.util.Timeout`, which gives you more fine-grained control over your timeouts. """ self.num_requests += 1 timeout_obj = self._get_timeout(timeout) timeout_obj.start_connect() conn.timeout = timeout_obj.connect_timeout # Trigger any extra validation we need to do. try: self._validate_conn(conn) except (SocketTimeout, BaseSSLError) as e: # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) raise # conn.request() calls http.client.*.request, not the method in # urllib3.request. It also calls makefile (recv) on the socket. try: if chunked: conn.request_chunked(method, url, **httplib_request_kw) else: > conn.request(method, url, **httplib_request_kw) /usr/lib/python3/dist-packages/urllib3/connectionpool.py:399: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} def request(self, method, url, body=None, headers=None): if headers is None: headers = {} else: # Avoid modifying the headers passed into .request() headers = headers.copy() if "user-agent" not in (six.ensure_str(k.lower()) for k in headers): headers["User-Agent"] = _get_default_user_agent() > super(HTTPConnection, self).request(method, url, body=body, headers=headers) /usr/lib/python3/dist-packages/urllib3/connection.py:239: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} def request(self, method, url, body=None, headers={}, *, encode_chunked=False): """Send a complete request to the server.""" > self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.11/http/client.py:1282: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = b'{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} encode_chunked = False def _send_request(self, method, url, body, headers, encode_chunked): # Honor explicitly requested Host: and Accept-Encoding: headers. header_names = frozenset(k.lower() for k in headers) skips = {} if 'host' in header_names: skips['skip_host'] = 1 if 'accept-encoding' in header_names: skips['skip_accept_encoding'] = 1 self.putrequest(method, url, **skips) # chunked encoding will happen if HTTP/1.1 is used and either # the caller passes encode_chunked=True or the following # conditions hold: # 1. content-length has not been explicitly set # 2. the body is a file or iterable, but not a str or bytes-like # 3. Transfer-Encoding has NOT been explicitly set by the caller if 'content-length' not in header_names: # only chunk body if not explicitly set for backwards # compatibility, assuming the client code is already handling the # chunking if 'transfer-encoding' not in header_names: # if content-length cannot be automatically determined, fall # back to chunked encoding encode_chunked = False content_length = self._get_content_length(body, method) if content_length is None: if body is not None: if self.debuglevel > 0: print('Unable to determine size of %r' % body) encode_chunked = True self.putheader('Transfer-Encoding', 'chunked') else: self.putheader('Content-Length', str(content_length)) else: encode_chunked = False for hdr, value in headers.items(): self.putheader(hdr, value) if isinstance(body, str): # RFC 2616 Section 3.7.1 says that text default has a # default charset of iso-8859-1. body = _encode(body, 'body') > self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.11/http/client.py:1328: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = message_body = b'{"z": 1, "a": 2}' def endheaders(self, message_body=None, *, encode_chunked=False): """Indicate that the last header line has been sent to the server. This method sends the request to the server. The optional message_body argument can be used to pass a message body associated with the request. """ if self.__state == _CS_REQ_STARTED: self.__state = _CS_REQ_SENT else: raise CannotSendHeader() > self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.11/http/client.py:1277: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = message_body = b'{"z": 1, "a": 2}', encode_chunked = False def _send_output(self, message_body=None, encode_chunked=False): """Send the currently buffered request and clear the buffer. Appends an extra \\r\\n to the buffer. A message_body may be specified, to be appended to the request. """ self._buffer.extend((b"", b"")) msg = b"\r\n".join(self._buffer) del self._buffer[:] > self.send(msg) /usr/lib/python3.11/http/client.py:1037: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = data = b'POST http://httpbin.org/post?a=b HTTP/1.1\r\nHost: httpbin.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:45.0) ....8\r\nConnection: keep-alive\r\nAccept-Language: en-US\r\nContent-Type: application/json\r\nContent-Length: 16\r\n\r\n' def send(self, data): """Send `data' to the server. ``data`` can be a string object, a bytes object, an array object, a file-like object that supports a .read() method, or an iterable object. """ if self.sock is None: if self.auto_open: > self.connect() /usr/lib/python3.11/http/client.py:975: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def connect(self): > conn = self._new_conn() /usr/lib/python3/dist-packages/urllib3/connection.py:205: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self): """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ extra_kw = {} if self.source_address: extra_kw["source_address"] = self.source_address if self.socket_options: extra_kw["socket_options"] = self.socket_options try: conn = connection.create_connection( (self._dns_host, self.port), self.timeout, **extra_kw ) except SocketTimeout: raise ConnectTimeoutError( self, "Connection to %s timed out. (connect timeout=%s)" % (self.host, self.timeout), ) except SocketError as e: > raise NewConnectionError( self, "Failed to establish a new connection: %s" % e ) E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3/dist-packages/urllib3/connection.py:186: NewConnectionError During handling of the above exception, another exception occurred: self = request = , stream = False timeout = Timeout(connect=10.0, read=10.0, total=None), verify = False cert = None proxies = OrderedDict([('no', 'localhost'), ('https', 'https://127.0.0.1:9/'), ('http', 'http://127.0.0.1:9/')]) def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection(request.url, proxies) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: if not chunked: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, ) /usr/lib/python3/dist-packages/requests/adapters.py:489: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=10.0, read=10.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme='http', auth=None, host='httpbin.org', port=None, path='/post', query='a=b', fragment=None) destination_scheme = 'http', conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method provided by :class:`.RequestMethods`, such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``response_kw.get('preload_content', True)``. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = response_kw.get("preload_content", True) # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = six.ensure_str(_encode_target(url)) else: url = six.ensure_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() headers.update(self.proxy_headers) # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Pass method to Response for length checking response_kw["request_method"] = method # Import httplib's response into our own wrapper object response = self.ResponseCls.from_httplib( httplib_response, pool=self, connection=response_conn, retries=retries, **response_kw ) # Everything went great! clean_exit = True except EmptyPoolError: # Didn't get a connection from the pool, no need to clean up clean_exit = True release_this_conn = False raise except ( TimeoutError, HTTPException, SocketError, ProtocolError, BaseSSLError, SSLError, CertificateError, ) as e: # Discard the connection for these exceptions. It will be # replaced during the next _get_conn() call. clean_exit = False def _is_ssl_error_message_from_http_proxy(ssl_error): # We're trying to detect the message 'WRONG_VERSION_NUMBER' but # SSLErrors are kinda all over the place when it comes to the message, # so we try to cover our bases here! message = " ".join(re.split("[^a-z]", str(ssl_error).lower())) return ( "wrong version number" in message or "unknown protocol" in message ) # Try to detect a common user error with proxies which is to # set an HTTP proxy to be HTTPS when it should be 'http://' # (ie {'http': 'http://proxy', 'https': 'https://proxy'}) # Instead we add a nice error message and point to a URL. if ( isinstance(e, BaseSSLError) and self.proxy and _is_ssl_error_message_from_http_proxy(e) and conn.proxy and conn.proxy.scheme == "https" ): e = ProxyError( "Your proxy appears to only use HTTP and not HTTPS, " "try changing your proxy URL to be HTTP. See: " "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" "#https-proxy-error-http-proxy", SSLError(e), ) elif isinstance(e, (BaseSSLError, CertificateError)): e = SSLError(e) elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy: e = ProxyError("Cannot connect to proxy.", e) elif isinstance(e, (SocketError, HTTPException)): e = ProtocolError("Connection aborted.", e) > retries = retries.increment( method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2] ) /usr/lib/python3/dist-packages/urllib3/connectionpool.py:788: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'POST', url = 'http://httpbin.org/post?a=b', response = None error = ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) _pool = _stacktrace = def increment( self, method=None, url=None, response=None, error=None, _pool=None, _stacktrace=None, ): """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.HTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise six.reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise six.reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or not self._is_method_retryable(method): raise six.reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" redirect_location = response.get_redirect_location() status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): > raise MaxRetryError(_pool, url, error or ResponseError(cause)) E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=9): Max retries exceeded with url: http://httpbin.org/post?a=b (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))) /usr/lib/python3/dist-packages/urllib3/util/retry.py:592: MaxRetryError During handling of the above exception, another exception occurred: def test_request_object(): res1 = Request( "http://httpbin.org/post?var1=a&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res2 = Request( "http://httpbin.org/post?var1=a&var2=z", post_params=[['post1', 'c'], ['post2', 'd']] ) res3 = Request( "http://httpbin.org/post?var1=a&var2=b", post_params=[['post1', 'c'], ['post2', 'z']] ) res4 = Request( "http://httpbin.org/post?var1=a&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res5 = Request( "http://httpbin.org/post?var1=z&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res6 = Request( "http://httpbin.org/post?var3=z&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res7 = Request( "http://httpbin.org/post?var1=z&var2=b&var4=e", post_params=[['post1', 'c'], ['post2', 'd']] ) res8 = Request( "http://httpbin.org/post?var2=d&var1=z", post_params=[['post1', 'c'], ['post2', 'd']] ) res10 = Request( "http://httpbin.org/post?qs0", post_params=[['post1', 'c'], ['post2', 'd']] ) res11 = Request( "http://httpbin.org/post?qs1", post_params=[['post1', 'c'], ['post2', 'd']] ) res12 = Request( "http://httpbin.org/post?qs1", post_params=[['post1', 'c'], ['post2', 'd']], file_params=[['file1', ['fname1', 'content']], ['file2', ['fname2', 'content']]] ) res13 = Request("https://www.youtube.com/user/OneMinuteSilenceBand/videos") res14 = Request("https://www.youtube.com/user/OneMinuteSilenceBand/") res15 = Request("https://duckduckgo.com/") res16 = Request("https://duckduckgo.com/", post_params=[['q', 'Kung Fury']]) res17 = Request("http://example.com:8080/dir/?x=3") res18 = Request( "http://httpbin.org/get?a=1", get_params=[['get1', 'c'], ['get2', 'd']] ) assert res1 < res2 assert res2 > res3 assert res1 < res3 assert res1 == res4 assert hash(res1) == hash(res4) res4.link_depth = 5 assert hash(res1) == hash(res4) assert res1 != res2 assert res2 >= res1 assert res1 <= res3 assert res13.file_name == "videos" assert res10.path == "http://httpbin.org/post" assert res10.file_name == "post" # This one is important as it could break attacks on query string assert res10.url == "http://httpbin.org/post?qs0" assert res13.parent_dir == res14.url assert res15.is_root assert res15.parent_dir == res15.url assert res13.dir_name == res14.url assert res14.dir_name == res14.url assert res15.dir_name == res15.url assert res15 != res16 query_list = [res15] assert res16 not in query_list assert res17.dir_name == "http://example.com:8080/dir/" assert res18.url == "http://httpbin.org/get?get1=c&get2=d" assert res17.hostname == "example.com:8080" assert res1.encoded_get_keys == res8.encoded_get_keys assert res17.encoded_get_keys == "x" assert res16.encoded_get_keys == "" assert len(res12) == 5 assert res12.encoded_get_keys == "qs1" assert res5.hash_params == res8.hash_params assert res7.hash_params != res8.hash_params print("Tests were successful, now launching representations") print("=== Basic representation follows ===") print(res1) print("=== cURL representation follows ===") print(res1.curl_repr) print("=== HTTP representation follows ===") print(res1.http_repr()) print("=== POST parameters as an array ===") print(res1.post_params) print("=== POST keys encoded as string ===") print(res1.encoded_post_keys) print("=== Upload HTTP representation ===") print(res12.http_repr()) print("=== Upload basic representation ===") print(res12) print("=== Upload cURL representation ===") print(res12.curl_repr) print("=== HTTP GET keys as a tuple ===") print(res1.get_keys) print("=== HTTP POST keys as a tuple ===") print(res1.post_keys) print("=== HTTP files keys as a tuple ===") print(res12.file_keys) print('') json_req = Request( "http://httpbin.org/post?a=b", post_params=json.dumps({"z": 1, "a": 2}), enctype="application/json" ) crawler = Crawler("http://httpbin.org/") > page = crawler.send(json_req) tests/web/test_request.py:144: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wapitiCore/net/crawler.py:490: in send page = self.post(resource, headers=headers, follow_redirects=follow_redirects) wapitiCore/net/crawler.py:123: in inner_wrapper raise exception wapitiCore/net/crawler.py:117: in inner_wrapper value = function(*args, **kwargs) wapitiCore/net/crawler.py:443: in post raise exception wapitiCore/net/crawler.py:427: in post response = self._session.post( /usr/lib/python3/dist-packages/requests/sessions.py:635: in post return self.request("POST", url, data=data, json=json, **kwargs) /usr/lib/python3/dist-packages/requests/sessions.py:587: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3/dist-packages/requests/sessions.py:701: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=10.0, read=10.0, total=None), verify = False cert = None proxies = OrderedDict([('no', 'localhost'), ('https', 'https://127.0.0.1:9/'), ('http', 'http://127.0.0.1:9/')]) def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection(request.url, proxies) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: if not chunked: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, ) # Send the request. else: if hasattr(conn, "proxy_pool"): conn = conn.proxy_pool low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT) try: skip_host = "Host" in request.headers low_conn.putrequest( request.method, url, skip_accept_encoding=True, skip_host=skip_host, ) for header, value in request.headers.items(): low_conn.putheader(header, value) low_conn.endheaders() for i in request.body: low_conn.send(hex(len(i))[2:].encode("utf-8")) low_conn.send(b"\r\n") low_conn.send(i) low_conn.send(b"\r\n") low_conn.send(b"0\r\n\r\n") # Receive the response from the server r = low_conn.getresponse() resp = HTTPResponse.from_httplib( r, pool=conn, connection=low_conn, preload_content=False, decode_content=False, ) except Exception: # If we hit any problems here, clean up the connection. # Then, raise so that we can handle the actual exception. low_conn.close() raise except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): > raise ProxyError(e, request=request) E requests.exceptions.ProxyError: HTTPConnectionPool(host='127.0.0.1', port=9): Max retries exceeded with url: http://httpbin.org/post?a=b (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))) /usr/lib/python3/dist-packages/requests/adapters.py:559: ProxyError ----------------------------- Captured stdout call ----------------------------- Tests were successful, now launching representations === Basic representation follows === POST http://httpbin.org/post?var1=a&var2=b (0) data: post1=c&post2=d === cURL representation follows === curl "http://httpbin.org/post?var1=a&var2=b" -d "post1=c&post2=d" === HTTP representation follows === POST /post?var1=a&var2=b HTTP/1.1 Host: httpbin.org Content-Type: application/x-www-form-urlencoded post1=c&post2=d === POST parameters as an array === [['post1', 'c'], ['post2', 'd']] === POST keys encoded as string === post1&post2 === Upload HTTP representation === POST /post?qs1 HTTP/1.1 Host: httpbin.org Content-Type: multipart/form-data; boundary=------------------------boundarystring ------------------------boundarystring Content-Disposition: form-data; name="post1" c ------------------------boundarystring Content-Disposition: form-data; name="post2" d ------------------------boundarystring Content-Disposition: form-data; name="file1"; filename="fname1" content ------------------------boundarystring Content-Disposition: form-data; name="file2"; filename="fname2" content ------------------------boundarystring-- === Upload basic representation === POST http://httpbin.org/post?qs1 (0) data: post1=c&post2=d files: file1=fname1&file2=fname2 === Upload cURL representation === curl "http://httpbin.org/post?qs1" -F "post1=c" -F "post2=d" -F "file1=@your_local_file;filename=fname1" -F "file2=@your_local_file;filename=fname2" === HTTP GET keys as a tuple === ('var1', 'var2') === HTTP POST keys as a tuple === ('post1', 'post2') === HTTP files keys as a tuple === ('file1', 'file2') =============================== warnings summary =============================== wapitiCore/language/language.py:40 /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/language.py:40: DeprecationWarning: Use setlocale(), getencoding() and getlocale() instead def_locale = locale.getdefaultlocale() # for example ('fr_FR', 'cp1252') -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/attack/test_mod_nikto.py::test_whole_stuff - assert 0 == 1 FAILED tests/attack/test_mod_wapp.py::test_url_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_html_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_script_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_cookies_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_headers_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_meta_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_implies_detection - assert [] FAILED tests/parsers/test_html_formaction.py::test_formactions - FileNotFound... FAILED tests/parsers/test_html_forms.py::test_forms - FileNotFoundError: [Err... FAILED tests/parsers/test_html_parser.py::test_absolute_root - FileNotFoundEr... FAILED tests/parsers/test_html_parser.py::test_relative_root - FileNotFoundEr... FAILED tests/parsers/test_html_parser.py::test_relative_links - FileNotFoundE... FAILED tests/parsers/test_html_parser.py::test_other_links - FileNotFoundErro... FAILED tests/parsers/test_html_parser.py::test_extra_links - FileNotFoundErro... FAILED tests/parsers/test_html_parser.py::test_meta - FileNotFoundError: [Err... FAILED tests/parsers/test_html_parser.py::test_base_relative_links - FileNotF... FAILED tests/parsers/test_html_parser.py::test_base_extra_links - FileNotFoun... FAILED tests/parsers/test_html_parser.py::test_base_other_links - FileNotFoun... FAILED tests/parsers/test_js_parser.py::test_js_parser - FileNotFoundError: [... FAILED tests/web/test_persister.py::test_persister_forms - FileNotFoundError:... FAILED tests/web/test_request.py::test_request_object - requests.exceptions.P... ERROR tests/attack/test_mod_blindsql.py::test_blindsql_detection - FileNotFou... ERROR tests/attack/test_mod_blindsql.py::test_blindsql_false_positive - FileN... ERROR tests/attack/test_mod_blindsql.py::test_false_positive_request_count - ... ERROR tests/attack/test_mod_blindsql.py::test_true_positive_request_count - F... ERROR tests/attack/test_mod_csrf.py::test_csrf_cases - FileNotFoundError: [Er... ERROR tests/attack/test_mod_exec.py::test_whole_stuff - FileNotFoundError: [E... ERROR tests/attack/test_mod_exec.py::test_detection - FileNotFoundError: [Err... ERROR tests/attack/test_mod_exec.py::test_blind_detection - FileNotFoundError... ERROR tests/attack/test_mod_file.py::test_inclusion_detection - FileNotFoundE... ERROR tests/attack/test_mod_file.py::test_warning_false_positive - FileNotFou... ERROR tests/attack/test_mod_file.py::test_no_crash - FileNotFoundError: [Errn... ERROR tests/attack/test_mod_file.py::test_prefix_and_suffix_detection - FileN... ERROR tests/attack/test_mod_file.py::test_warning_false_postitives - FileNotF... ERROR tests/attack/test_mod_file.py::test_warning_postitives - FileNotFoundEr... ERROR tests/attack/test_mod_redirect.py::test_redirect_detection - FileNotFou... ERROR tests/attack/test_mod_redirect.py::test_whole_stuff - FileNotFoundError... ERROR tests/attack/test_mod_xss_advanced.py::test_title_false_positive - File... ERROR tests/attack/test_mod_xss_advanced.py::test_title_positive - FileNotFou... ERROR tests/attack/test_mod_xss_advanced.py::test_script_filter_bypass - File... ERROR tests/attack/test_mod_xss_advanced.py::test_attr_quote_escape - FileNot... ERROR tests/attack/test_mod_xss_advanced.py::test_attr_double_quote_escape - ... ERROR tests/attack/test_mod_xss_advanced.py::test_attr_escape - FileNotFoundE... ERROR tests/attack/test_mod_xss_advanced.py::test_tag_name_escape - FileNotFo... ERROR tests/attack/test_mod_xss_advanced.py::test_partial_tag_name_escape - F... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_inside_tag_input - File... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_inside_tag_link - FileN... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_uppercase_no_script - F... ERROR tests/attack/test_mod_xss_advanced.py::test_frame_src_escape - FileNotF... ERROR tests/attack/test_mod_xss_advanced.py::test_frame_src_no_escape - FileN... ERROR tests/attack/test_mod_xss_advanced.py::test_bad_separator_used - FileNo... ERROR tests/attack/test_mod_xss_advanced.py::test_escape_with_style - FileNot... ERROR tests/attack/test_mod_xss_advanced.py::test_rare_tag_and_event - FileNo... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_with_strong_csp - FileN... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_with_weak_csp - FileNot... ERROR tests/attack/test_mod_xxe.py::test_direct_body - FileNotFoundError: [Er... ERROR tests/attack/test_mod_xxe.py::test_direct_param - FileNotFoundError: [E... ERROR tests/attack/test_mod_xxe.py::test_direct_query_string - FileNotFoundEr... ERROR tests/attack/test_mod_xxe.py::test_direct_upload - FileNotFoundError: [... ERROR tests/attack/test_mod_xxe.py::test_out_of_band_body - FileNotFoundError... ERROR tests/attack/test_mod_xxe.py::test_out_of_band_param - FileNotFoundErro... ERROR tests/attack/test_mod_xxe.py::test_out_of_band_query_string - FileNotFo... ERROR tests/endpoint/test_endpoint.py::test_ssrf - FileNotFoundError: [Errno ... ERROR tests/endpoint/test_endpoint.py::test_xxe_dtd - FileNotFoundError: [Err... ERROR tests/endpoint/test_endpoint.py::test_xxe_store - FileNotFoundError: [E... ERROR tests/web/test_explorer.py::test_qs_limit - FileNotFoundError: [Errno 2... ERROR tests/web/test_explorer.py::test_explorer_filtering - FileNotFoundError... ERROR tests/web/test_network_issues.py::test_chunked_timeout - FileNotFoundEr... ERROR tests/web/test_network_issues.py::test_timeout - FileNotFoundError: [Er... ============= 22 failed, 48 passed, 1 warning, 48 errors in 15.77s ============= E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build; python3.11 -m pytest tests dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13 make[1]: Leaving directory '/build/wapiti-3.0.4+dfsg' create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=pybuild dh_prep -O--buildsystem=pybuild dh_auto_install --destdir=debian/wapiti/ -O--buildsystem=pybuild I: pybuild base:240: /usr/bin/python3 setup.py install --root /build/wapiti-3.0.4+dfsg/debian/wapiti running install /usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( running build running build_py running egg_info writing wapiti3.egg-info/PKG-INFO writing dependency_links to wapiti3.egg-info/dependency_links.txt writing entry points to wapiti3.egg-info/entry_points.txt writing requirements to wapiti3.egg-info/requires.txt writing top-level names to wapiti3.egg-info/top_level.txt reading manifest file 'wapiti3.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no previously-included files found matching 'wapitiCore/language_sources/*.sh' warning: no previously-included files found matching 'wapitiCore/language_sources/file_list.txt' adding license file 'LICENSE' writing manifest file 'wapiti3.egg-info/SOURCES.txt' /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.attacks' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.attacks' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.attacks' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.attacks' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.de.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.de.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.de.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.de.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.en.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.en.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.en.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.en.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.es.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.es.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.es.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.es.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.fr.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.fr.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.fr.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.fr.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.ms.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.ms.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.ms.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.ms.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.pt.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.pt.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.pt.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.pt.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.data.language.zh.LC_MESSAGES' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.data.language.zh.LC_MESSAGES' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.data.language.zh.LC_MESSAGES' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.data.language.zh.LC_MESSAGES' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.language_sources' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.language_sources' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.language_sources' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.language_sources' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.report_template' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.report_template' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.report_template' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.report_template' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) /usr/lib/python3/dist-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing 'wapitiCore.report_template.css' as data is deprecated, please list it in `packages`. !! ############################ # Package would be ignored # ############################ Python recognizes 'wapitiCore.report_template.css' as an importable package, but it is not listed in the `packages` configuration of setuptools. 'wapitiCore.report_template.css' has been automatically added to the distribution only because it may contain data files, but this behavior is likely to change in future versions of setuptools (and therefore is considered deprecated). Please make sure that 'wapitiCore.report_template.css' is included as a package by using the `packages` configuration field or the proper discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" and "data files" on setuptools documentation page. !! check.warn(importable) running build_scripts running install_lib creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11 creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mutator.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_xxe.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_xss_basics.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_xss_advanced.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_wapp.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_ssrf.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_sql.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_shellshock.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_redirect.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_nikto.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_methods.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_htaccess.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_file.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_exec.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_csrf.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_csp.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_crlf.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_buster.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_blindsql.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/test_mod_backup.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_backup.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_buster.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_crlf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_csp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_csrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_exec.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_file.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_methods.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_nikto.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_redirect.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_sql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_wapp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_xss_advanced.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_xss_basics.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mod_xxe.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/attack/test_mutator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli/__pycache__/test_options.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/cli/test_options.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint/__pycache__/test_endpoint.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/endpoint/test_endpoint.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_xss_utils.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_json_parser.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_js_parser.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_http_parser.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_html_parser.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_html_forms.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/test_html_formaction.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_html_formaction.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_html_forms.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_html_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_http_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_js_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_json_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/parsers/test_xss_utils.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload/__pycache__/test_payload_reader.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/payload/test_payload_reader.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__pycache__/test_scope.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__pycache__/test_request.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__pycache__/test_persister.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__pycache__/test_network_issues.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__pycache__/test_explorer.cpython-311-pytest-7.2.1.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/test_explorer.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/test_network_issues.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/test_persister.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/test_request.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/web/test_scope.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/tests/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/__pycache__/moon.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report_template creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report_template/css copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/css/master.css -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report_template/css copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/css/kube.min.css -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report_template/css copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/report.html -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report_template copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report_template/logo_clear.png -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report_template creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/zh.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/template.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/pt.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/ms.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/fr.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/es.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/en.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language_sources/de.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language_sources creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/zh creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/pt creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/ms creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/fr creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/es creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/es/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/es/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/en creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/en/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/en/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/de creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/de/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/language/de/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/xxePayloads.ini -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/xssPayloads.ini -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/users.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/successMessage.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/passwords.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/incorrectMessage.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/fileHandlingPayloads.ini -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/execPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/busterPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/blindSQLPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/data/attacks/backupPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/data/attacks creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_permanentxss.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_brute_login_form.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_cookieflags.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_http_headers.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_csp.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_xxe.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_xss.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_wapp.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_ssrf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_sql.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_shellshock.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_redirect.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_nikto.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_methods.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_htaccess.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_file.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_exec.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_csrf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_crlf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_buster.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_blindsql.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/attack.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/mod_backup.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/attack.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_backup.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_brute_login_form.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_buster.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_cookieflags.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_crlf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_csp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_csrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_exec.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_file.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_http_headers.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_methods.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_permanentxss.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_redirect.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_sql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_wapp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_xss.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_xxe.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/attack/mod_nikto.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/xxe.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/xss.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/ssrf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/sql.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/secure_cookie.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/resource_consumption.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/redirect.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/internal_error.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/http_only.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/http_headers.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/htaccess.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/fingerprint.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/file.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/exec.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/dangerous_resource.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/csrf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/csp.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/crlf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/credentials.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/blindsql.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/backup.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/backup.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/blindsql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/credentials.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/crlf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/csp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/csrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/dangerous_resource.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/exec.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/file.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/fingerprint.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/htaccess.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/http_headers.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/http_only.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/internal_error.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/redirect.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/resource_consumption.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/secure_cookie.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/sql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/ssrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/xss.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/definitions/xxe.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/__pycache__/logger.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/__pycache__/vulnerability.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/__pycache__/language.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/logger.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/vulnerability.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/language/language.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main/__pycache__/wapiti.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main/getcookie.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/main/wapiti.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/sqlite_persister.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/jsoncookie.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/xss_utils.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/csp_utils.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/page.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/lamejs.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/swf.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/crawler.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/web.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser/__pycache__/jsparser3.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser/jsparser3.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsparser/pull_jsparser3.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/crawler.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/csp_utils.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/jsoncookie.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/lamejs.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/page.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/sqlite_persister.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/swf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/web.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/net/xss_utils.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__pycache__/xmlreportgenerator.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__pycache__/txtreportgenerator.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__pycache__/jsonreportgenerator.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__pycache__/htmlreportgenerator.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__pycache__/reportgenerator.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/jsonreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/reportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/txtreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/xmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/report/htmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer/__pycache__/wappalyzer.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer/__pycache__/__init__.cpython-311.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/wappalyzer/wappalyzer.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.11/build/wapitiCore/moon.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_backup.py to test_mod_backup.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_blindsql.py to test_mod_blindsql.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_buster.py to test_mod_buster.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_crlf.py to test_mod_crlf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_csp.py to test_mod_csp.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_csrf.py to test_mod_csrf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_exec.py to test_mod_exec.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_file.py to test_mod_file.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_htaccess.py to test_mod_htaccess.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_methods.py to test_mod_methods.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_nikto.py to test_mod_nikto.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_redirect.py to test_mod_redirect.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_shellshock.py to test_mod_shellshock.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_sql.py to test_mod_sql.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_ssrf.py to test_mod_ssrf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_wapp.py to test_mod_wapp.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_xss_advanced.py to test_mod_xss_advanced.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_xss_basics.py to test_mod_xss_basics.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mod_xxe.py to test_mod_xxe.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/attack/test_mutator.py to test_mutator.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/cli/test_options.py to test_options.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/endpoint/test_endpoint.py to test_endpoint.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_html_formaction.py to test_html_formaction.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_html_forms.py to test_html_forms.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_html_parser.py to test_html_parser.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_http_parser.py to test_http_parser.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_js_parser.py to test_js_parser.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_json_parser.py to test_json_parser.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/parsers/test_xss_utils.py to test_xss_utils.cpython-311.pyc /usr/lib/python3.11/dist-packages/tests/parsers/test_xss_utils.py:620: SyntaxWarning: "is" with a literal. Did you mean "=="? /usr/lib/python3.11/dist-packages/tests/parsers/test_xss_utils.py:626: SyntaxWarning: "is" with a literal. Did you mean "=="? byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/payload/test_payload_reader.py to test_payload_reader.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/test_explorer.py to test_explorer.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/test_network_issues.py to test_network_issues.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/test_persister.py to test_persister.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/test_request.py to test_request.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/web/test_scope.py to test_scope.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/tests/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/attack.py to attack.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_backup.py to mod_backup.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_blindsql.py to mod_blindsql.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_brute_login_form.py to mod_brute_login_form.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_buster.py to mod_buster.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_cookieflags.py to mod_cookieflags.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_crlf.py to mod_crlf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_csp.py to mod_csp.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_csrf.py to mod_csrf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_exec.py to mod_exec.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_file.py to mod_file.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_htaccess.py to mod_htaccess.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_http_headers.py to mod_http_headers.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_methods.py to mod_methods.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_permanentxss.py to mod_permanentxss.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_redirect.py to mod_redirect.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_shellshock.py to mod_shellshock.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_sql.py to mod_sql.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_ssrf.py to mod_ssrf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_wapp.py to mod_wapp.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_xss.py to mod_xss.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_xxe.py to mod_xxe.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/attack/mod_nikto.py to mod_nikto.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/backup.py to backup.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/blindsql.py to blindsql.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/credentials.py to credentials.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/crlf.py to crlf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/csp.py to csp.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/csrf.py to csrf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/dangerous_resource.py to dangerous_resource.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/exec.py to exec.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/file.py to file.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/fingerprint.py to fingerprint.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/htaccess.py to htaccess.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/http_headers.py to http_headers.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/http_only.py to http_only.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/internal_error.py to internal_error.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/redirect.py to redirect.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/resource_consumption.py to resource_consumption.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/secure_cookie.py to secure_cookie.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/sql.py to sql.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/ssrf.py to ssrf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/xss.py to xss.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/definitions/xxe.py to xxe.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/logger.py to logger.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/vulnerability.py to vulnerability.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/language/language.py to language.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main/getcookie.py to getcookie.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/main/wapiti.py to wapiti.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser/jsparser3.py to jsparser3.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsparser/pull_jsparser3.py to pull_jsparser3.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/crawler.py to crawler.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/csp_utils.py to csp_utils.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/jsoncookie.py to jsoncookie.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/lamejs.py to lamejs.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/page.py to page.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/sqlite_persister.py to sqlite_persister.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/swf.py to swf.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/web.py to web.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/net/xss_utils.py to xss_utils.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/jsonreportgenerator.py to jsonreportgenerator.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/reportgenerator.py to reportgenerator.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/txtreportgenerator.py to txtreportgenerator.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/xmlreportgenerator.py to xmlreportgenerator.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/report/htmlreportgenerator.py to htmlreportgenerator.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/wappalyzer/wappalyzer.py to wappalyzer.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/__init__.py to __init__.cpython-311.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapitiCore/moon.py to moon.cpython-311.pyc running install_data creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/AUTHORS -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/example.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti.1.html -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti.ronn -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti-getcookie.1.html -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti-getcookie.ronn -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying README.md -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying VERSION -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man/man1 copying doc/wapiti.1 -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man/man1 copying doc/wapiti-getcookie.1 -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man/man1 running install_egg_info Copying wapiti3.egg-info to /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.11/dist-packages/wapiti3-3.0.4.egg-info Skipping SOURCES.txt running install_scripts creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin copying build/scripts-3.11/wapiti-getcookie -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin copying build/scripts-3.11/wapiti -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin changing mode of /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin/wapiti-getcookie to 755 changing mode of /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin/wapiti to 755 Installing wapiti script to /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin Installing wapiti-getcookie script to /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin debian/rules override_dh_install make[1]: Entering directory '/build/wapiti-3.0.4+dfsg' dh_install find /build/wapiti-3.0.4+dfsg/debian/wapiti -type d -empty -delete find /build/wapiti-3.0.4+dfsg/debian/wapiti -type f -name "*.js" -exec chmod -x {} \; make[1]: Leaving directory '/build/wapiti-3.0.4+dfsg' dh_installdocs -O--buildsystem=pybuild debian/rules override_dh_installchangelogs make[1]: Entering directory '/build/wapiti-3.0.4+dfsg' dh_installchangelogs doc/ChangeLog_Wapiti make[1]: Leaving directory '/build/wapiti-3.0.4+dfsg' dh_installman -O--buildsystem=pybuild dh_python3 -O--buildsystem=pybuild dh_installsystemduser -O--buildsystem=pybuild dh_lintian -O--buildsystem=pybuild dh_perl -O--buildsystem=pybuild dh_link -O--buildsystem=pybuild dh_strip_nondeterminism -O--buildsystem=pybuild Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo dh_compress -O--buildsystem=pybuild dh_fixperms -O--buildsystem=pybuild dh_missing -O--buildsystem=pybuild dh_installdeb -O--buildsystem=pybuild dh_gencontrol -O--buildsystem=pybuild dh_md5sums -O--buildsystem=pybuild dh_builddeb -O--buildsystem=pybuild dpkg-deb: building package 'wapiti' in '../wapiti_3.0.4+dfsg-2_all.deb'. dpkg-genbuildinfo --build=binary -O../wapiti_3.0.4+dfsg-2_amd64.buildinfo dpkg-genchanges --build=binary -O../wapiti_3.0.4+dfsg-2_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/B01_cleanup starting I: user script /srv/workspace/pbuilder/2917927/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/2917927 and its subdirectories I: Current time: Tue May 2 09:16:31 +14 2023 I: pbuilder-time-stamp: 1682968591