I: pbuilder: network access will be disabled during build I: Current time: Sun Aug 1 10:03:46 -12 2021 I: pbuilder-time-stamp: 1627855426 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/bullseye-reproducible-base.tgz] I: copying local configuration 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-1.dsc] I: copying [./wapiti_3.0.4+dfsg.orig.tar.xz] I: copying [./wapiti_3.0.4+dfsg-1.debian.tar.xz] I: Extracting source gpgv: unknown type of key resource 'trustedkeys.kbx' gpgv: keyblock resource '/tmp/dpkg-verify-sig.CHmtOwKW/trustedkeys.kbx': General error gpgv: Signature made Tue Feb 23 23:58:04 2021 -12 gpgv: using RSA key 92978A6E195E4921825F7FF0F34F09744E9F5DD9 gpgv: Can't check signature: No public key dpkg-source: warning: failed to verify signature on ./wapiti_3.0.4+dfsg-1.dsc 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-1.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 I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/28923/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='armhf' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all,-fixfilepath parallel=3' DISTRIBUTION='' HOME='/root' HOST_ARCH='armhf' IFS=' ' INVOCATION_ID='64b0dec39f384499b0af508507d1b8d2' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='28923' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.r12U8EPEaR/pbuilderrc_6Pkk --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/bullseye-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.r12U8EPEaR/b1 --logfile b1/build.log wapiti_3.0.4+dfsg-1.dsc' SUDO_GID='114' SUDO_UID='108' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://10.0.0.15:8000/' I: uname -a Linux virt64a 5.10.0-8-arm64 #1 SMP Debian 5.10.46-3 (2021-07-28) aarch64 GNU/Linux I: ls -l /bin total 3580 -rwxr-xr-x 1 root root 816764 Jun 21 14:26 bash -rwxr-xr-x 3 root root 26052 Jul 20 2020 bunzip2 -rwxr-xr-x 3 root root 26052 Jul 20 2020 bzcat lrwxrwxrwx 1 root root 6 Jul 20 2020 bzcmp -> bzdiff -rwxr-xr-x 1 root root 2225 Jul 20 2020 bzdiff lrwxrwxrwx 1 root root 6 Jul 20 2020 bzegrep -> bzgrep -rwxr-xr-x 1 root root 4877 Sep 4 2019 bzexe lrwxrwxrwx 1 root root 6 Jul 20 2020 bzfgrep -> bzgrep -rwxr-xr-x 1 root root 3775 Jul 20 2020 bzgrep -rwxr-xr-x 3 root root 26052 Jul 20 2020 bzip2 -rwxr-xr-x 1 root root 9636 Jul 20 2020 bzip2recover lrwxrwxrwx 1 root root 6 Jul 20 2020 bzless -> bzmore -rwxr-xr-x 1 root root 1297 Jul 20 2020 bzmore -rwxr-xr-x 1 root root 26668 Sep 22 2020 cat -rwxr-xr-x 1 root root 43104 Sep 22 2020 chgrp -rwxr-xr-x 1 root root 38984 Sep 22 2020 chmod -rwxr-xr-x 1 root root 43112 Sep 22 2020 chown -rwxr-xr-x 1 root root 92616 Sep 22 2020 cp -rwxr-xr-x 1 root root 75524 Dec 10 2020 dash -rwxr-xr-x 1 root root 75880 Sep 22 2020 date -rwxr-xr-x 1 root root 55436 Sep 22 2020 dd -rwxr-xr-x 1 root root 59912 Sep 22 2020 df -rwxr-xr-x 1 root root 96764 Sep 22 2020 dir -rwxr-xr-x 1 root root 55012 Jul 28 07:09 dmesg lrwxrwxrwx 1 root root 8 Nov 6 2019 dnsdomainname -> hostname lrwxrwxrwx 1 root root 8 Nov 6 2019 domainname -> hostname -rwxr-xr-x 1 root root 22508 Sep 22 2020 echo -rwxr-xr-x 1 root root 28 Nov 9 2020 egrep -rwxr-xr-x 1 root root 22496 Sep 22 2020 false -rwxr-xr-x 1 root root 28 Nov 9 2020 fgrep -rwxr-xr-x 1 root root 47492 Jul 28 07:09 findmnt -rwsr-xr-x 1 root root 26076 Feb 26 04:12 fusermount -rwxr-xr-x 1 root root 124508 Nov 9 2020 grep -rwxr-xr-x 2 root root 2346 Mar 2 11:30 gunzip -rwxr-xr-x 1 root root 6376 Mar 2 11:30 gzexe -rwxr-xr-x 1 root root 64212 Mar 2 11:30 gzip -rwxr-xr-x 1 root root 13784 Nov 6 2019 hostname -rwxr-xr-x 1 root root 43180 Sep 22 2020 ln -rwxr-xr-x 1 root root 35068 Feb 7 2020 login -rwxr-xr-x 1 root root 96764 Sep 22 2020 ls -rwxr-xr-x 1 root root 99940 Jul 28 07:09 lsblk -rwxr-xr-x 1 root root 51408 Sep 22 2020 mkdir -rwxr-xr-x 1 root root 43184 Sep 22 2020 mknod -rwxr-xr-x 1 root root 30780 Sep 22 2020 mktemp -rwxr-xr-x 1 root root 34408 Jul 28 07:09 more -rwsr-xr-x 1 root root 34400 Jul 28 07:09 mount -rwxr-xr-x 1 root root 9824 Jul 28 07:09 mountpoint -rwxr-xr-x 1 root root 88524 Sep 22 2020 mv lrwxrwxrwx 1 root root 8 Nov 6 2019 nisdomainname -> hostname lrwxrwxrwx 1 root root 14 Apr 18 03:38 pidof -> /sbin/killall5 -rwxr-xr-x 1 root root 26652 Sep 22 2020 pwd lrwxrwxrwx 1 root root 4 Jun 21 14:26 rbash -> bash -rwxr-xr-x 1 root root 30740 Sep 22 2020 readlink -rwxr-xr-x 1 root root 43104 Sep 22 2020 rm -rwxr-xr-x 1 root root 30732 Sep 22 2020 rmdir -rwxr-xr-x 1 root root 14144 Sep 27 2020 run-parts -rwxr-xr-x 1 root root 76012 Dec 22 2018 sed lrwxrwxrwx 1 root root 4 Jul 31 21:26 sh -> dash -rwxr-xr-x 1 root root 22532 Sep 22 2020 sleep -rwxr-xr-x 1 root root 55360 Sep 22 2020 stty -rwsr-xr-x 1 root root 46704 Jul 28 07:09 su -rwxr-xr-x 1 root root 22532 Sep 22 2020 sync -rwxr-xr-x 1 root root 340872 Feb 16 21:55 tar -rwxr-xr-x 1 root root 9808 Sep 27 2020 tempfile -rwxr-xr-x 1 root root 67696 Sep 22 2020 touch -rwxr-xr-x 1 root root 22496 Sep 22 2020 true -rwxr-xr-x 1 root root 9636 Feb 26 04:12 ulockmgr_server -rwsr-xr-x 1 root root 22108 Jul 28 07:09 umount -rwxr-xr-x 1 root root 22520 Sep 22 2020 uname -rwxr-xr-x 2 root root 2346 Mar 2 11:30 uncompress -rwxr-xr-x 1 root root 96764 Sep 22 2020 vdir -rwxr-xr-x 1 root root 38512 Jul 28 07:09 wdctl lrwxrwxrwx 1 root root 8 Nov 6 2019 ypdomainname -> hostname -rwxr-xr-x 1 root root 1984 Mar 2 11:30 zcat -rwxr-xr-x 1 root root 1678 Mar 2 11:30 zcmp -rwxr-xr-x 1 root root 5880 Mar 2 11:30 zdiff -rwxr-xr-x 1 root root 29 Mar 2 11:30 zegrep -rwxr-xr-x 1 root root 29 Mar 2 11:30 zfgrep -rwxr-xr-x 1 root root 2081 Mar 2 11:30 zforce -rwxr-xr-x 1 root root 7585 Mar 2 11:30 zgrep -rwxr-xr-x 1 root root 2206 Mar 2 11:30 zless -rwxr-xr-x 1 root root 1842 Mar 2 11:30 zmore -rwxr-xr-x 1 root root 4553 Mar 2 11:30 znew I: user script /srv/workspace/pbuilder/28923/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: armhf 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 (= 12), 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 ... 19398 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 (= 12); 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} libicu67{a} libjargs-java{a} libjpeg62-turbo{a} libjs-jquery{a} liblcms2-2{a} libmagic-mgc{a} libmagic1{a} libmpdec3{a} libnspr4{a} libnss3{a} libpcsclite1{a} libpipeline1{a} libpng16-16{a} libpython3-stdlib{a} libpython3.9-minimal{a} libpython3.9-stdlib{a} libreadline8{a} libsigsegv2{a} libsub-override-perl{a} libtool{a} libuchardet0{a} libxml2{a} m4{a} man-db{a} media-types{a} openjdk-11-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-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-pyparsing{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-toml{a} python3-urllib3{a} python3-yaswfp{a} python3-zipp{a} python3.9{a} python3.9-minimal{a} readline-common{a} sensible-utils{a} ucf{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, 108 newly installed, 0 to remove and 0 not upgraded. Need to get 68.1 MB of archives. After unpacking 254 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian bullseye/main armhf bsdextrautils armhf 2.36.1-8 [138 kB] Get: 2 http://deb.debian.org/debian bullseye/main armhf libuchardet0 armhf 0.0.7-1 [65.0 kB] Get: 3 http://deb.debian.org/debian bullseye/main armhf groff-base armhf 1.22.4-6 [847 kB] Get: 4 http://deb.debian.org/debian bullseye/main armhf libpipeline1 armhf 1.5.3-1 [30.1 kB] Get: 5 http://deb.debian.org/debian bullseye/main armhf man-db armhf 2.9.4-2 [1319 kB] Get: 6 http://deb.debian.org/debian bullseye/main armhf libpython3.9-minimal armhf 3.9.2-1 [790 kB] Get: 7 http://deb.debian.org/debian bullseye/main armhf libexpat1 armhf 2.2.10-2 [76.3 kB] Get: 8 http://deb.debian.org/debian bullseye/main armhf python3.9-minimal armhf 3.9.2-1 [1630 kB] Get: 9 http://deb.debian.org/debian bullseye/main armhf python3-minimal armhf 3.9.2-3 [38.2 kB] Get: 10 http://deb.debian.org/debian bullseye/main armhf media-types all 4.0.0 [30.3 kB] Get: 11 http://deb.debian.org/debian bullseye/main armhf libmpdec3 armhf 2.5.1-1 [74.9 kB] Get: 12 http://deb.debian.org/debian bullseye/main armhf readline-common all 8.1-1 [73.7 kB] Get: 13 http://deb.debian.org/debian bullseye/main armhf libreadline8 armhf 8.1-1 [147 kB] Get: 14 http://deb.debian.org/debian bullseye/main armhf libpython3.9-stdlib armhf 3.9.2-1 [1608 kB] Get: 15 http://deb.debian.org/debian bullseye/main armhf python3.9 armhf 3.9.2-1 [466 kB] Get: 16 http://deb.debian.org/debian bullseye/main armhf libpython3-stdlib armhf 3.9.2-3 [21.4 kB] Get: 17 http://deb.debian.org/debian bullseye/main armhf python3 armhf 3.9.2-3 [37.9 kB] Get: 18 http://deb.debian.org/debian bullseye/main armhf sensible-utils all 0.0.14 [14.8 kB] Get: 19 http://deb.debian.org/debian bullseye/main armhf openssl armhf 1.1.1k-1 [826 kB] Get: 20 http://deb.debian.org/debian bullseye/main armhf ca-certificates all 20210119 [158 kB] Get: 21 http://deb.debian.org/debian bullseye/main armhf libmagic-mgc armhf 1:5.39-3 [273 kB] Get: 22 http://deb.debian.org/debian bullseye/main armhf libmagic1 armhf 1:5.39-3 [117 kB] Get: 23 http://deb.debian.org/debian bullseye/main armhf file armhf 1:5.39-3 [68.1 kB] Get: 24 http://deb.debian.org/debian bullseye/main armhf gettext-base armhf 0.21-4 [171 kB] Get: 25 http://deb.debian.org/debian bullseye/main armhf ucf all 3.0043 [74.0 kB] Get: 26 http://deb.debian.org/debian bullseye/main armhf libsigsegv2 armhf 2.13-1 [34.0 kB] Get: 27 http://deb.debian.org/debian bullseye/main armhf m4 armhf 1.4.18-5 [192 kB] Get: 28 http://deb.debian.org/debian bullseye/main armhf autoconf all 2.69-14 [313 kB] Get: 29 http://deb.debian.org/debian bullseye/main armhf autotools-dev all 20180224.1+nmu1 [77.1 kB] Get: 30 http://deb.debian.org/debian bullseye/main armhf automake all 1:1.16.3-2 [814 kB] Get: 31 http://deb.debian.org/debian bullseye/main armhf autopoint all 0.21-4 [510 kB] Get: 32 http://deb.debian.org/debian bullseye/main armhf java-common all 0.72 [14.5 kB] Get: 33 http://deb.debian.org/debian bullseye/main armhf libavahi-common-data armhf 0.8-5 [123 kB] Get: 34 http://deb.debian.org/debian bullseye/main armhf libavahi-common3 armhf 0.8-5 [55.1 kB] Get: 35 http://deb.debian.org/debian bullseye/main armhf libdbus-1-3 armhf 1.12.20-2 [196 kB] Get: 36 http://deb.debian.org/debian bullseye/main armhf libavahi-client3 armhf 0.8-5 [58.5 kB] Get: 37 http://deb.debian.org/debian bullseye/main armhf libcups2 armhf 2.3.3op2-3+deb11u1 [317 kB] Get: 38 http://deb.debian.org/debian bullseye/main armhf liblcms2-2 armhf 2.12~rc1-2 [123 kB] Get: 39 http://deb.debian.org/debian bullseye/main armhf libjpeg62-turbo armhf 1:2.0.6-4 [123 kB] Get: 40 http://deb.debian.org/debian bullseye/main armhf libbrotli1 armhf 1.0.9-2+b2 [262 kB] Get: 41 http://deb.debian.org/debian bullseye/main armhf libpng16-16 armhf 1.6.37-3 [277 kB] Get: 42 http://deb.debian.org/debian bullseye/main armhf libfreetype6 armhf 2.10.4+dfsg-1 [357 kB] Get: 43 http://deb.debian.org/debian bullseye/main armhf fonts-dejavu-core all 2.37-2 [1069 kB] Get: 44 http://deb.debian.org/debian bullseye/main armhf fontconfig-config all 2.13.1-4.2 [281 kB] Get: 45 http://deb.debian.org/debian bullseye/main armhf libfontconfig1 armhf 2.13.1-4.2 [329 kB] Get: 46 http://deb.debian.org/debian bullseye/main armhf libnspr4 armhf 2:4.29-1 [90.7 kB] Get: 47 http://deb.debian.org/debian bullseye/main armhf libnss3 armhf 2:3.61-1 [1114 kB] Get: 48 http://deb.debian.org/debian bullseye/main armhf libasound2-data all 1.2.4-1.1 [38.2 kB] Get: 49 http://deb.debian.org/debian bullseye/main armhf libasound2 armhf 1.2.4-1.1 [310 kB] Get: 50 http://deb.debian.org/debian bullseye/main armhf libglib2.0-0 armhf 2.66.8-1 [1206 kB] Get: 51 http://deb.debian.org/debian bullseye/main armhf libgraphite2-3 armhf 1.3.14-1 [70.5 kB] Get: 52 http://deb.debian.org/debian bullseye/main armhf libharfbuzz0b armhf 2.7.4-1 [1427 kB] Get: 53 http://deb.debian.org/debian bullseye/main armhf libpcsclite1 armhf 1.9.1-1 [57.2 kB] Get: 54 http://deb.debian.org/debian bullseye/main armhf openjdk-11-jre-headless armhf 11.0.11+9-1 [32.9 MB] Get: 55 http://deb.debian.org/debian bullseye/main armhf default-jre-headless armhf 2:1.11-72 [10.9 kB] Get: 56 http://deb.debian.org/debian bullseye/main armhf ca-certificates-java all 20190909 [15.7 kB] Get: 57 http://deb.debian.org/debian bullseye/main armhf libdebhelper-perl all 13.3.4 [189 kB] Get: 58 http://deb.debian.org/debian bullseye/main armhf libtool all 2.4.6-15 [513 kB] Get: 59 http://deb.debian.org/debian bullseye/main armhf dh-autoreconf all 20 [17.1 kB] Get: 60 http://deb.debian.org/debian bullseye/main armhf libarchive-zip-perl all 1.68-1 [104 kB] Get: 61 http://deb.debian.org/debian bullseye/main armhf libsub-override-perl all 0.09-2 [10.2 kB] Get: 62 http://deb.debian.org/debian bullseye/main armhf libfile-stripnondeterminism-perl all 1.12.0-1 [26.3 kB] Get: 63 http://deb.debian.org/debian bullseye/main armhf dh-strip-nondeterminism all 1.12.0-1 [15.4 kB] Get: 64 http://deb.debian.org/debian bullseye/main armhf libelf1 armhf 0.183-1 [161 kB] Get: 65 http://deb.debian.org/debian bullseye/main armhf dwz armhf 0.13+20210201-1 [179 kB] Get: 66 http://deb.debian.org/debian bullseye/main armhf libicu67 armhf 67.1-7 [8319 kB] Get: 67 http://deb.debian.org/debian bullseye/main armhf libxml2 armhf 2.9.10+dfsg-6.7 [602 kB] Get: 68 http://deb.debian.org/debian bullseye/main armhf gettext armhf 0.21-4 [1243 kB] Get: 69 http://deb.debian.org/debian bullseye/main armhf intltool-debian all 0.35.0+20060710.5 [26.8 kB] Get: 70 http://deb.debian.org/debian bullseye/main armhf po-debconf all 1.0.21+nmu1 [248 kB] Get: 71 http://deb.debian.org/debian bullseye/main armhf debhelper all 13.3.4 [1049 kB] Get: 72 http://deb.debian.org/debian bullseye/main armhf python3-lib2to3 all 3.9.2-1 [77.8 kB] Get: 73 http://deb.debian.org/debian bullseye/main armhf python3-distutils all 3.9.2-1 [143 kB] Get: 74 http://deb.debian.org/debian bullseye/main armhf dh-python all 4.20201102+nmu1 [99.4 kB] Get: 75 http://deb.debian.org/debian bullseye/main armhf unzip armhf 6.0-26 [157 kB] Get: 76 http://deb.debian.org/debian bullseye/main armhf java-wrappers all 0.3 [10.9 kB] Get: 77 http://deb.debian.org/debian bullseye/main armhf libjargs-java all 1.0.0-5 [14.9 kB] Get: 78 http://deb.debian.org/debian bullseye/main armhf libjs-jquery all 3.5.1+dfsg+~3.5.5-7 [315 kB] Get: 79 http://deb.debian.org/debian bullseye/main armhf publicsuffix all 20210108.1309-1 [121 kB] Get: 80 http://deb.debian.org/debian bullseye/main armhf python3-attr all 20.3.0-1 [52.9 kB] Get: 81 http://deb.debian.org/debian bullseye/main armhf python3-soupsieve all 2.2.1-1 [34.7 kB] Get: 82 http://deb.debian.org/debian bullseye/main armhf python3-bs4 all 4.9.3-1 [112 kB] Get: 83 http://deb.debian.org/debian bullseye/main armhf python3-certifi all 2020.6.20-1 [151 kB] Get: 84 http://deb.debian.org/debian bullseye/main armhf python3-pkg-resources all 52.0.0-4 [190 kB] Get: 85 http://deb.debian.org/debian bullseye/main armhf python3-chardet all 4.0.0-1 [99.0 kB] Get: 86 http://deb.debian.org/debian bullseye/main armhf python3-idna all 2.10-1 [37.4 kB] Get: 87 http://deb.debian.org/debian bullseye/main armhf python3-six all 1.16.0-1 [17.1 kB] Get: 88 http://deb.debian.org/debian bullseye/main armhf python3-more-itertools all 4.2.0-3 [42.7 kB] Get: 89 http://deb.debian.org/debian bullseye/main armhf python3-zipp all 1.0.0-3 [6060 B] Get: 90 http://deb.debian.org/debian bullseye/main armhf python3-importlib-metadata all 1.6.0-2 [10.3 kB] Get: 91 http://deb.debian.org/debian bullseye/main armhf python3-iniconfig all 1.1.1-1 [6308 B] Get: 92 http://deb.debian.org/debian bullseye/main armhf python3-markupsafe armhf 1.1.1-1+b3 [14.6 kB] Get: 93 http://deb.debian.org/debian bullseye/main armhf python3-mako all 1.1.3+ds1-2 [80.2 kB] Get: 94 http://deb.debian.org/debian bullseye/main armhf python3-pyparsing all 2.4.7-1 [109 kB] Get: 95 http://deb.debian.org/debian bullseye/main armhf python3-packaging all 20.9-2 [33.5 kB] Get: 96 http://deb.debian.org/debian bullseye/main armhf python3-pluggy all 0.13.0-6 [22.3 kB] Get: 97 http://deb.debian.org/debian bullseye/main armhf python3-py all 1.10.0-1 [94.2 kB] Get: 98 http://deb.debian.org/debian bullseye/main armhf python3-toml all 0.10.1-1 [15.9 kB] Get: 99 http://deb.debian.org/debian bullseye/main armhf python3-pytest all 6.0.2-2 [211 kB] Get: 100 http://deb.debian.org/debian bullseye/main armhf python3-setuptools all 52.0.0-4 [366 kB] Get: 101 http://deb.debian.org/debian bullseye/main armhf python3-pytest-runner all 2.11.1-1.2 [8528 B] Get: 102 http://deb.debian.org/debian bullseye/main armhf python3-urllib3 all 1.26.5-1~exp1 [114 kB] Get: 103 http://deb.debian.org/debian bullseye/main armhf python3-requests all 2.25.1+dfsg-2 [69.3 kB] Get: 104 http://deb.debian.org/debian bullseye/main armhf python3-responses all 0.12.1-1 [20.7 kB] Get: 105 http://deb.debian.org/debian bullseye/main armhf python3-socks all 1.7.1+dfsg-1 [23.3 kB] Get: 106 http://deb.debian.org/debian bullseye/main armhf python3-tld all 0.11.11-1 [19.3 kB] Get: 107 http://deb.debian.org/debian bullseye/main armhf python3-yaswfp all 0.9.3-1.1 [16.0 kB] Get: 108 http://deb.debian.org/debian bullseye/main armhf yui-compressor all 2.4.8-2.1 [602 kB] Fetched 68.1 MB in 10s (7036 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package bsdextrautils. (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 ... 19398 files and directories currently installed.) Preparing to unpack .../0-bsdextrautils_2.36.1-8_armhf.deb ... Unpacking bsdextrautils (2.36.1-8) ... Selecting previously unselected package libuchardet0:armhf. Preparing to unpack .../1-libuchardet0_0.0.7-1_armhf.deb ... Unpacking libuchardet0:armhf (0.0.7-1) ... Selecting previously unselected package groff-base. Preparing to unpack .../2-groff-base_1.22.4-6_armhf.deb ... Unpacking groff-base (1.22.4-6) ... Selecting previously unselected package libpipeline1:armhf. Preparing to unpack .../3-libpipeline1_1.5.3-1_armhf.deb ... Unpacking libpipeline1:armhf (1.5.3-1) ... Selecting previously unselected package man-db. Preparing to unpack .../4-man-db_2.9.4-2_armhf.deb ... Unpacking man-db (2.9.4-2) ... Selecting previously unselected package libpython3.9-minimal:armhf. Preparing to unpack .../5-libpython3.9-minimal_3.9.2-1_armhf.deb ... Unpacking libpython3.9-minimal:armhf (3.9.2-1) ... Selecting previously unselected package libexpat1:armhf. Preparing to unpack .../6-libexpat1_2.2.10-2_armhf.deb ... Unpacking libexpat1:armhf (2.2.10-2) ... Selecting previously unselected package python3.9-minimal. Preparing to unpack .../7-python3.9-minimal_3.9.2-1_armhf.deb ... Unpacking python3.9-minimal (3.9.2-1) ... Setting up libpython3.9-minimal:armhf (3.9.2-1) ... Setting up libexpat1:armhf (2.2.10-2) ... Setting up python3.9-minimal (3.9.2-1) ... 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 ... 20265 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.9.2-3_armhf.deb ... Unpacking python3-minimal (3.9.2-3) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_4.0.0_all.deb ... Unpacking media-types (4.0.0) ... Selecting previously unselected package libmpdec3:armhf. Preparing to unpack .../2-libmpdec3_2.5.1-1_armhf.deb ... Unpacking libmpdec3:armhf (2.5.1-1) ... Selecting previously unselected package readline-common. Preparing to unpack .../3-readline-common_8.1-1_all.deb ... Unpacking readline-common (8.1-1) ... Selecting previously unselected package libreadline8:armhf. Preparing to unpack .../4-libreadline8_8.1-1_armhf.deb ... Unpacking libreadline8:armhf (8.1-1) ... Selecting previously unselected package libpython3.9-stdlib:armhf. Preparing to unpack .../5-libpython3.9-stdlib_3.9.2-1_armhf.deb ... Unpacking libpython3.9-stdlib:armhf (3.9.2-1) ... Selecting previously unselected package python3.9. Preparing to unpack .../6-python3.9_3.9.2-1_armhf.deb ... Unpacking python3.9 (3.9.2-1) ... Selecting previously unselected package libpython3-stdlib:armhf. Preparing to unpack .../7-libpython3-stdlib_3.9.2-3_armhf.deb ... Unpacking libpython3-stdlib:armhf (3.9.2-3) ... Setting up python3-minimal (3.9.2-3) ... 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 ... 20686 files and directories currently installed.) Preparing to unpack .../00-python3_3.9.2-3_armhf.deb ... Unpacking python3 (3.9.2-3) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../01-sensible-utils_0.0.14_all.deb ... Unpacking sensible-utils (0.0.14) ... Selecting previously unselected package openssl. Preparing to unpack .../02-openssl_1.1.1k-1_armhf.deb ... Unpacking openssl (1.1.1k-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../03-ca-certificates_20210119_all.deb ... Unpacking ca-certificates (20210119) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../04-libmagic-mgc_1%3a5.39-3_armhf.deb ... Unpacking libmagic-mgc (1:5.39-3) ... Selecting previously unselected package libmagic1:armhf. Preparing to unpack .../05-libmagic1_1%3a5.39-3_armhf.deb ... Unpacking libmagic1:armhf (1:5.39-3) ... Selecting previously unselected package file. Preparing to unpack .../06-file_1%3a5.39-3_armhf.deb ... Unpacking file (1:5.39-3) ... Selecting previously unselected package gettext-base. Preparing to unpack .../07-gettext-base_0.21-4_armhf.deb ... Unpacking gettext-base (0.21-4) ... Selecting previously unselected package ucf. Preparing to unpack .../08-ucf_3.0043_all.deb ... Moving old data out of the way Unpacking ucf (3.0043) ... Selecting previously unselected package libsigsegv2:armhf. Preparing to unpack .../09-libsigsegv2_2.13-1_armhf.deb ... Unpacking libsigsegv2:armhf (2.13-1) ... Selecting previously unselected package m4. Preparing to unpack .../10-m4_1.4.18-5_armhf.deb ... Unpacking m4 (1.4.18-5) ... Selecting previously unselected package autoconf. Preparing to unpack .../11-autoconf_2.69-14_all.deb ... Unpacking autoconf (2.69-14) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../12-autotools-dev_20180224.1+nmu1_all.deb ... Unpacking autotools-dev (20180224.1+nmu1) ... Selecting previously unselected package automake. Preparing to unpack .../13-automake_1%3a1.16.3-2_all.deb ... Unpacking automake (1:1.16.3-2) ... Selecting previously unselected package autopoint. Preparing to unpack .../14-autopoint_0.21-4_all.deb ... Unpacking autopoint (0.21-4) ... Selecting previously unselected package java-common. Preparing to unpack .../15-java-common_0.72_all.deb ... Unpacking java-common (0.72) ... Selecting previously unselected package libavahi-common-data:armhf. Preparing to unpack .../16-libavahi-common-data_0.8-5_armhf.deb ... Unpacking libavahi-common-data:armhf (0.8-5) ... Selecting previously unselected package libavahi-common3:armhf. Preparing to unpack .../17-libavahi-common3_0.8-5_armhf.deb ... Unpacking libavahi-common3:armhf (0.8-5) ... Selecting previously unselected package libdbus-1-3:armhf. Preparing to unpack .../18-libdbus-1-3_1.12.20-2_armhf.deb ... Unpacking libdbus-1-3:armhf (1.12.20-2) ... Selecting previously unselected package libavahi-client3:armhf. Preparing to unpack .../19-libavahi-client3_0.8-5_armhf.deb ... Unpacking libavahi-client3:armhf (0.8-5) ... Selecting previously unselected package libcups2:armhf. Preparing to unpack .../20-libcups2_2.3.3op2-3+deb11u1_armhf.deb ... Unpacking libcups2:armhf (2.3.3op2-3+deb11u1) ... Selecting previously unselected package liblcms2-2:armhf. Preparing to unpack .../21-liblcms2-2_2.12~rc1-2_armhf.deb ... Unpacking liblcms2-2:armhf (2.12~rc1-2) ... Selecting previously unselected package libjpeg62-turbo:armhf. Preparing to unpack .../22-libjpeg62-turbo_1%3a2.0.6-4_armhf.deb ... Unpacking libjpeg62-turbo:armhf (1:2.0.6-4) ... Selecting previously unselected package libbrotli1:armhf. Preparing to unpack .../23-libbrotli1_1.0.9-2+b2_armhf.deb ... Unpacking libbrotli1:armhf (1.0.9-2+b2) ... Selecting previously unselected package libpng16-16:armhf. Preparing to unpack .../24-libpng16-16_1.6.37-3_armhf.deb ... Unpacking libpng16-16:armhf (1.6.37-3) ... Selecting previously unselected package libfreetype6:armhf. Preparing to unpack .../25-libfreetype6_2.10.4+dfsg-1_armhf.deb ... Unpacking libfreetype6:armhf (2.10.4+dfsg-1) ... Selecting previously unselected package fonts-dejavu-core. Preparing to unpack .../26-fonts-dejavu-core_2.37-2_all.deb ... Unpacking fonts-dejavu-core (2.37-2) ... Selecting previously unselected package fontconfig-config. Preparing to unpack .../27-fontconfig-config_2.13.1-4.2_all.deb ... Unpacking fontconfig-config (2.13.1-4.2) ... Selecting previously unselected package libfontconfig1:armhf. Preparing to unpack .../28-libfontconfig1_2.13.1-4.2_armhf.deb ... Unpacking libfontconfig1:armhf (2.13.1-4.2) ... Selecting previously unselected package libnspr4:armhf. Preparing to unpack .../29-libnspr4_2%3a4.29-1_armhf.deb ... Unpacking libnspr4:armhf (2:4.29-1) ... Selecting previously unselected package libnss3:armhf. Preparing to unpack .../30-libnss3_2%3a3.61-1_armhf.deb ... Unpacking libnss3:armhf (2:3.61-1) ... Selecting previously unselected package libasound2-data. Preparing to unpack .../31-libasound2-data_1.2.4-1.1_all.deb ... Unpacking libasound2-data (1.2.4-1.1) ... Selecting previously unselected package libasound2:armhf. Preparing to unpack .../32-libasound2_1.2.4-1.1_armhf.deb ... Unpacking libasound2:armhf (1.2.4-1.1) ... Selecting previously unselected package libglib2.0-0:armhf. Preparing to unpack .../33-libglib2.0-0_2.66.8-1_armhf.deb ... Unpacking libglib2.0-0:armhf (2.66.8-1) ... Selecting previously unselected package libgraphite2-3:armhf. Preparing to unpack .../34-libgraphite2-3_1.3.14-1_armhf.deb ... Unpacking libgraphite2-3:armhf (1.3.14-1) ... Selecting previously unselected package libharfbuzz0b:armhf. Preparing to unpack .../35-libharfbuzz0b_2.7.4-1_armhf.deb ... Unpacking libharfbuzz0b:armhf (2.7.4-1) ... Selecting previously unselected package libpcsclite1:armhf. Preparing to unpack .../36-libpcsclite1_1.9.1-1_armhf.deb ... Unpacking libpcsclite1:armhf (1.9.1-1) ... Selecting previously unselected package openjdk-11-jre-headless:armhf. Preparing to unpack .../37-openjdk-11-jre-headless_11.0.11+9-1_armhf.deb ... Unpacking openjdk-11-jre-headless:armhf (11.0.11+9-1) ... Selecting previously unselected package default-jre-headless. Preparing to unpack .../38-default-jre-headless_2%3a1.11-72_armhf.deb ... Unpacking default-jre-headless (2:1.11-72) ... Selecting previously unselected package ca-certificates-java. Preparing to unpack .../39-ca-certificates-java_20190909_all.deb ... Unpacking ca-certificates-java (20190909) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../40-libdebhelper-perl_13.3.4_all.deb ... Unpacking libdebhelper-perl (13.3.4) ... Selecting previously unselected package libtool. Preparing to unpack .../41-libtool_2.4.6-15_all.deb ... Unpacking libtool (2.4.6-15) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../42-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../43-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 .../44-libsub-override-perl_0.09-2_all.deb ... Unpacking libsub-override-perl (0.09-2) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../45-libfile-stripnondeterminism-perl_1.12.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.12.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../46-dh-strip-nondeterminism_1.12.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.12.0-1) ... Selecting previously unselected package libelf1:armhf. Preparing to unpack .../47-libelf1_0.183-1_armhf.deb ... Unpacking libelf1:armhf (0.183-1) ... Selecting previously unselected package dwz. Preparing to unpack .../48-dwz_0.13+20210201-1_armhf.deb ... Unpacking dwz (0.13+20210201-1) ... Selecting previously unselected package libicu67:armhf. Preparing to unpack .../49-libicu67_67.1-7_armhf.deb ... Unpacking libicu67:armhf (67.1-7) ... Selecting previously unselected package libxml2:armhf. Preparing to unpack .../50-libxml2_2.9.10+dfsg-6.7_armhf.deb ... Unpacking libxml2:armhf (2.9.10+dfsg-6.7) ... Selecting previously unselected package gettext. Preparing to unpack .../51-gettext_0.21-4_armhf.deb ... Unpacking gettext (0.21-4) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../52-intltool-debian_0.35.0+20060710.5_all.deb ... Unpacking intltool-debian (0.35.0+20060710.5) ... Selecting previously unselected package po-debconf. Preparing to unpack .../53-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../54-debhelper_13.3.4_all.deb ... Unpacking debhelper (13.3.4) ... Selecting previously unselected package python3-lib2to3. Preparing to unpack .../55-python3-lib2to3_3.9.2-1_all.deb ... Unpacking python3-lib2to3 (3.9.2-1) ... Selecting previously unselected package python3-distutils. Preparing to unpack .../56-python3-distutils_3.9.2-1_all.deb ... Unpacking python3-distutils (3.9.2-1) ... Selecting previously unselected package dh-python. Preparing to unpack .../57-dh-python_4.20201102+nmu1_all.deb ... Unpacking dh-python (4.20201102+nmu1) ... Selecting previously unselected package unzip. Preparing to unpack .../58-unzip_6.0-26_armhf.deb ... Unpacking unzip (6.0-26) ... Selecting previously unselected package java-wrappers. Preparing to unpack .../59-java-wrappers_0.3_all.deb ... Unpacking java-wrappers (0.3) ... Selecting previously unselected package libjargs-java. Preparing to unpack .../60-libjargs-java_1.0.0-5_all.deb ... Unpacking libjargs-java (1.0.0-5) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../61-libjs-jquery_3.5.1+dfsg+~3.5.5-7_all.deb ... Unpacking libjs-jquery (3.5.1+dfsg+~3.5.5-7) ... Selecting previously unselected package publicsuffix. Preparing to unpack .../62-publicsuffix_20210108.1309-1_all.deb ... Unpacking publicsuffix (20210108.1309-1) ... Selecting previously unselected package python3-attr. Preparing to unpack .../63-python3-attr_20.3.0-1_all.deb ... Unpacking python3-attr (20.3.0-1) ... Selecting previously unselected package python3-soupsieve. Preparing to unpack .../64-python3-soupsieve_2.2.1-1_all.deb ... Unpacking python3-soupsieve (2.2.1-1) ... Selecting previously unselected package python3-bs4. Preparing to unpack .../65-python3-bs4_4.9.3-1_all.deb ... Unpacking python3-bs4 (4.9.3-1) ... Selecting previously unselected package python3-certifi. Preparing to unpack .../66-python3-certifi_2020.6.20-1_all.deb ... Unpacking python3-certifi (2020.6.20-1) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../67-python3-pkg-resources_52.0.0-4_all.deb ... Unpacking python3-pkg-resources (52.0.0-4) ... Selecting previously unselected package python3-chardet. Preparing to unpack .../68-python3-chardet_4.0.0-1_all.deb ... Unpacking python3-chardet (4.0.0-1) ... Selecting previously unselected package python3-idna. Preparing to unpack .../69-python3-idna_2.10-1_all.deb ... Unpacking python3-idna (2.10-1) ... Selecting previously unselected package python3-six. Preparing to unpack .../70-python3-six_1.16.0-1_all.deb ... Unpacking python3-six (1.16.0-1) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../71-python3-more-itertools_4.2.0-3_all.deb ... Unpacking python3-more-itertools (4.2.0-3) ... Selecting previously unselected package python3-zipp. Preparing to unpack .../72-python3-zipp_1.0.0-3_all.deb ... Unpacking python3-zipp (1.0.0-3) ... Selecting previously unselected package python3-importlib-metadata. Preparing to unpack .../73-python3-importlib-metadata_1.6.0-2_all.deb ... Unpacking python3-importlib-metadata (1.6.0-2) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../74-python3-iniconfig_1.1.1-1_all.deb ... Unpacking python3-iniconfig (1.1.1-1) ... Selecting previously unselected package python3-markupsafe. Preparing to unpack .../75-python3-markupsafe_1.1.1-1+b3_armhf.deb ... Unpacking python3-markupsafe (1.1.1-1+b3) ... Selecting previously unselected package python3-mako. Preparing to unpack .../76-python3-mako_1.1.3+ds1-2_all.deb ... Unpacking python3-mako (1.1.3+ds1-2) ... Selecting previously unselected package python3-pyparsing. Preparing to unpack .../77-python3-pyparsing_2.4.7-1_all.deb ... Unpacking python3-pyparsing (2.4.7-1) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../78-python3-packaging_20.9-2_all.deb ... Unpacking python3-packaging (20.9-2) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../79-python3-pluggy_0.13.0-6_all.deb ... Unpacking python3-pluggy (0.13.0-6) ... Selecting previously unselected package python3-py. Preparing to unpack .../80-python3-py_1.10.0-1_all.deb ... Unpacking python3-py (1.10.0-1) ... Selecting previously unselected package python3-toml. Preparing to unpack .../81-python3-toml_0.10.1-1_all.deb ... Unpacking python3-toml (0.10.1-1) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../82-python3-pytest_6.0.2-2_all.deb ... Unpacking python3-pytest (6.0.2-2) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../83-python3-setuptools_52.0.0-4_all.deb ... Unpacking python3-setuptools (52.0.0-4) ... Selecting previously unselected package python3-pytest-runner. Preparing to unpack .../84-python3-pytest-runner_2.11.1-1.2_all.deb ... Unpacking python3-pytest-runner (2.11.1-1.2) ... Selecting previously unselected package python3-urllib3. Preparing to unpack .../85-python3-urllib3_1.26.5-1~exp1_all.deb ... Unpacking python3-urllib3 (1.26.5-1~exp1) ... Selecting previously unselected package python3-requests. Preparing to unpack .../86-python3-requests_2.25.1+dfsg-2_all.deb ... Unpacking python3-requests (2.25.1+dfsg-2) ... Selecting previously unselected package python3-responses. Preparing to unpack .../87-python3-responses_0.12.1-1_all.deb ... Unpacking python3-responses (0.12.1-1) ... Selecting previously unselected package python3-socks. Preparing to unpack .../88-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 .../89-python3-tld_0.11.11-1_all.deb ... Unpacking python3-tld (0.11.11-1) ... Selecting previously unselected package python3-yaswfp. Preparing to unpack .../90-python3-yaswfp_0.9.3-1.1_all.deb ... Unpacking python3-yaswfp (0.9.3-1.1) ... Selecting previously unselected package yui-compressor. Preparing to unpack .../91-yui-compressor_2.4.8-2.1_all.deb ... Unpacking yui-compressor (2.4.8-2.1) ... Setting up media-types (4.0.0) ... Setting up libpipeline1:armhf (1.5.3-1) ... Setting up libgraphite2-3:armhf (1.3.14-1) ... Setting up liblcms2-2:armhf (2.12~rc1-2) ... Setting up bsdextrautils (2.36.1-8) ... update-alternatives: using /usr/bin/write.ul to provide /usr/bin/write (write) in auto mode Setting up java-common (0.72) ... Setting up libicu67:armhf (67.1-7) ... Setting up libmagic-mgc (1:5.39-3) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libglib2.0-0:armhf (2.66.8-1) ... No schema files found: doing nothing. Setting up unzip (6.0-26) ... Setting up libdebhelper-perl (13.3.4) ... Setting up libbrotli1:armhf (1.0.9-2+b2) ... Setting up libmagic1:armhf (1:5.39-3) ... Setting up gettext-base (0.21-4) ... Setting up file (1:5.39-3) ... Setting up libasound2-data (1.2.4-1.1) ... Setting up autotools-dev (20180224.1+nmu1) ... Setting up libjpeg62-turbo:armhf (1:2.0.6-4) ... Setting up libnspr4:armhf (2:4.29-1) ... Setting up libavahi-common-data:armhf (0.8-5) ... Setting up libdbus-1-3:armhf (1.12.20-2) ... Setting up libsigsegv2:armhf (2.13-1) ... Setting up libpng16-16:armhf (1.6.37-3) ... Setting up autopoint (0.21-4) ... Setting up fonts-dejavu-core (2.37-2) ... Setting up libpcsclite1:armhf (1.9.1-1) ... Setting up sensible-utils (0.0.14) ... Setting up libuchardet0:armhf (0.0.7-1) ... Setting up libasound2:armhf (1.2.4-1.1) ... Setting up libjargs-java (1.0.0-5) ... Setting up libmpdec3:armhf (2.5.1-1) ... Setting up libsub-override-perl (0.09-2) ... Setting up libjs-jquery (3.5.1+dfsg+~3.5.5-7) ... Setting up openssl (1.1.1k-1) ... Setting up libelf1:armhf (0.183-1) ... Setting up readline-common (8.1-1) ... Setting up publicsuffix (20210108.1309-1) ... Setting up libxml2:armhf (2.9.10+dfsg-6.7) ... Setting up libfile-stripnondeterminism-perl (1.12.0-1) ... Setting up gettext (0.21-4) ... Setting up java-wrappers (0.3) ... Setting up libtool (2.4.6-15) ... Setting up libreadline8:armhf (8.1-1) ... Setting up libavahi-common3:armhf (0.8-5) ... Setting up m4 (1.4.18-5) ... Setting up libnss3:armhf (2:3.61-1) ... Setting up intltool-debian (0.35.0+20060710.5) ... Setting up ca-certificates (20210119) ... Updating certificates in /etc/ssl/certs... 129 added, 0 removed; done. Setting up libfreetype6:armhf (2.10.4+dfsg-1) ... Setting up ucf (3.0043) ... Setting up autoconf (2.69-14) ... Setting up dh-strip-nondeterminism (1.12.0-1) ... Setting up dwz (0.13+20210201-1) ... Setting up groff-base (1.22.4-6) ... Setting up libharfbuzz0b:armhf (2.7.4-1) ... Setting up libavahi-client3:armhf (0.8-5) ... Setting up libpython3.9-stdlib:armhf (3.9.2-1) ... Setting up libpython3-stdlib:armhf (3.9.2-3) ... Setting up automake (1:1.16.3-2) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode Setting up fontconfig-config (2.13.1-4.2) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up man-db (2.9.4-2) ... Not building database; man-db/auto-update is not 'true'. Setting up dh-autoreconf (20) ... Setting up libcups2:armhf (2.3.3op2-3+deb11u1) ... Setting up libfontconfig1:armhf (2.13.1-4.2) ... Setting up python3.9 (3.9.2-1) ... Setting up debhelper (13.3.4) ... Setting up python3 (3.9.2-3) ... Setting up python3-tld (0.11.11-1) ... Setting up python3-markupsafe (1.1.1-1+b3) ... Setting up python3-six (1.16.0-1) ... Setting up python3-pyparsing (2.4.7-1) ... Setting up python3-yaswfp (0.9.3-1.1) ... Setting up python3-certifi (2020.6.20-1) ... Setting up python3-idna (2.10-1) ... Setting up python3-toml (0.10.1-1) ... Setting up python3-urllib3 (1.26.5-1~exp1) ... Setting up python3-lib2to3 (3.9.2-1) ... Setting up python3-soupsieve (2.2.1-1) ... Setting up python3-mako (1.1.3+ds1-2) ... Setting up python3-pkg-resources (52.0.0-4) ... Setting up python3-distutils (3.9.2-1) ... Setting up dh-python (4.20201102+nmu1) ... Setting up python3-more-itertools (4.2.0-3) ... Setting up python3-iniconfig (1.1.1-1) ... Setting up python3-attr (20.3.0-1) ... Setting up python3-setuptools (52.0.0-4) ... Setting up python3-socks (1.7.1+dfsg-1) ... Setting up python3-py (1.10.0-1) ... Setting up python3-zipp (1.0.0-3) ... Setting up python3-bs4 (4.9.3-1) ... Setting up python3-packaging (20.9-2) ... Setting up python3-chardet (4.0.0-1) ... Setting up python3-requests (2.25.1+dfsg-2) ... Setting up python3-pytest-runner (2.11.1-1.2) ... Setting up python3-importlib-metadata (1.6.0-2) ... Setting up python3-responses (0.12.1-1) ... Setting up python3-pluggy (0.13.0-6) ... Setting up python3-pytest (6.0.2-2) ... Setting up default-jre-headless (2:1.11-72) ... Setting up openjdk-11-jre-headless:armhf (11.0.11+9-1) ... update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/java to provide /usr/bin/java (java) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/jjs to provide /usr/bin/jjs (jjs) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode Setting up yui-compressor (2.4.8-2.1) ... Setting up ca-certificates-java (20190909) ... head: cannot open '/etc/ssl/certs/java/cacerts' for reading: No such file or directory Adding debian:TrustCor_RootCert_CA-1.pem Adding debian:QuoVadis_Root_CA_3.pem Adding debian:Security_Communication_Root_CA.pem Adding debian:AffirmTrust_Premium.pem Adding debian:AffirmTrust_Networking.pem Adding debian:emSign_Root_CA_-_G1.pem Adding debian:USERTrust_RSA_Certification_Authority.pem Adding debian:QuoVadis_Root_CA_1_G3.pem Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem Adding debian:GTS_Root_R4.pem Adding debian:COMODO_Certification_Authority.pem Adding debian:Baltimore_CyberTrust_Root.pem Adding debian:Starfield_Class_2_CA.pem Adding debian:TeliaSonera_Root_CA_v1.pem Adding debian:SZAFIR_ROOT_CA2.pem Adding debian:Entrust_Root_Certification_Authority.pem Adding debian:GDCA_TrustAUTH_R5_ROOT.pem Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem Adding debian:certSIGN_ROOT_CA.pem Adding debian:E-Tugra_Certification_Authority.pem Adding debian:emSign_Root_CA_-_C1.pem Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem Adding debian:DST_Root_CA_X3.pem Adding debian:Global_Chambersign_Root_-_2008.pem Adding debian:emSign_ECC_Root_CA_-_G3.pem Adding debian:SwissSign_Gold_CA_-_G2.pem Adding debian:Amazon_Root_CA_3.pem Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem Adding debian:SwissSign_Silver_CA_-_G2.pem Adding debian:GlobalSign_Root_CA_-_R3.pem Adding debian:Certum_Trusted_Network_CA.pem Adding debian:ACCVRAIZ1.pem Adding debian:GlobalSign_Root_CA.pem Adding debian:e-Szigno_Root_CA_2017.pem Adding debian:TWCA_Root_Certification_Authority.pem Adding debian:Certigna_Root_CA.pem Adding debian:DigiCert_Assured_ID_Root_G3.pem Adding debian:COMODO_ECC_Certification_Authority.pem Adding debian:GTS_Root_R3.pem Adding debian:Entrust_Root_Certification_Authority_-_G4.pem Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem Adding debian:Staat_der_Nederlanden_EV_Root_CA.pem Adding debian:T-TeleSec_GlobalRoot_Class_2.pem Adding debian:NAVER_Global_Root_Certification_Authority.pem Adding debian:ePKI_Root_Certification_Authority.pem Adding debian:XRamp_Global_CA_Root.pem Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem Adding debian:Microsec_e-Szigno_Root_CA_2009.pem Adding debian:Cybertrust_Global_Root.pem Adding debian:SSL.com_Root_Certification_Authority_ECC.pem Adding debian:emSign_ECC_Root_CA_-_C3.pem Adding debian:SecureTrust_CA.pem Adding debian:TrustCor_RootCert_CA-2.pem Adding debian:AffirmTrust_Commercial.pem Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem Adding debian:EC-ACC.pem Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem Adding debian:QuoVadis_Root_CA_3_G3.pem Adding debian:IdenTrust_Commercial_Root_CA_1.pem Adding debian:VeriSign_Universal_Root_Certification_Authority.pem Adding debian:UCA_Global_G2_Root.pem Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem Adding debian:Buypass_Class_2_Root_CA.pem Adding debian:QuoVadis_Root_CA_2_G3.pem Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem Adding debian:DigiCert_Global_Root_G3.pem Adding debian:TrustCor_ECA-1.pem Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem Adding debian:GlobalSign_Root_CA_-_R2.pem Adding debian:Trustis_FPS_Root_CA.pem Adding debian:CA_Disig_Root_R2.pem Adding debian:Sonera_Class_2_Root_CA.pem Adding debian:DigiCert_Trusted_Root_G4.pem Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem Adding debian:Network_Solutions_Certificate_Authority.pem Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem Adding debian:AC_RAIZ_FNMT-RCM.pem Adding debian:QuoVadis_Root_CA.pem Adding debian:Izenpe.com.pem Adding debian:Buypass_Class_3_Root_CA.pem Adding debian:UCA_Extended_Validation_Root.pem Adding debian:certSIGN_Root_CA_G2.pem Adding debian:GTS_Root_R1.pem Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem Adding debian:Secure_Global_CA.pem Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem Adding debian:Atos_TrustedRoot_2011.pem Adding debian:Entrust_Root_Certification_Authority_-_G2.pem Adding debian:Actalis_Authentication_Root_CA.pem Adding debian:T-TeleSec_GlobalRoot_Class_3.pem Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem Adding debian:GeoTrust_Primary_Certification_Authority_-_G2.pem Adding debian:Amazon_Root_CA_4.pem Adding debian:ISRG_Root_X1.pem Adding debian:Certigna.pem Adding debian:Trustwave_Global_Certification_Authority.pem Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem Adding debian:Staat_der_Nederlanden_Root_CA_-_G3.pem Adding debian:GlobalSign_Root_CA_-_R6.pem Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem Adding debian:SSL.com_Root_Certification_Authority_RSA.pem Adding debian:Comodo_AAA_Services_root.pem Adding debian:Amazon_Root_CA_2.pem Adding debian:DigiCert_Global_Root_G2.pem Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem Adding debian:Go_Daddy_Class_2_CA.pem Adding debian:CFCA_EV_ROOT.pem Adding debian:COMODO_RSA_Certification_Authority.pem Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem Adding debian:Security_Communication_RootCA2.pem Adding debian:GTS_Root_R2.pem Adding debian:TWCA_Global_Root_CA.pem Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem Adding debian:Hongkong_Post_Root_CA_3.pem Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem Adding debian:DigiCert_Global_Root_CA.pem Adding debian:DigiCert_Assured_ID_Root_CA.pem Adding debian:DigiCert_Assured_ID_Root_G2.pem Adding debian:SecureSign_RootCA11.pem Adding debian:QuoVadis_Root_CA_2.pem Adding debian:Chambers_of_Commerce_Root_-_2008.pem Adding debian:Amazon_Root_CA_1.pem Adding debian:Certum_Trusted_Network_CA_2.pem Adding debian:AffirmTrust_Premium_ECC.pem Adding debian:USERTrust_ECC_Certification_Authority.pem Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem Adding debian:Hongkong_Post_Root_CA_1.pem done. Processing triggers for libc-bin (2.31-13) ... Processing triggers for ca-certificates (20210119) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. 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 I: Building the package I: Running cd /build/wapiti-3.0.4+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../wapiti_3.0.4+dfsg-1_source.changes dpkg-buildpackage: info: source package wapiti dpkg-buildpackage: info: source version 3.0.4+dfsg-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Gianfranco Costamagna dpkg-source --before-build . dpkg-buildpackage: info: host architecture armhf debian/rules clean dh clean --with python3 --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild I: pybuild base:232: python3.9 setup.py clean running clean removing '/build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build' (and everything under it) 'build/bdist.linux-armhf' does not exist -- can't clean it 'build/scripts-3.9' 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:232: python3.9 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:232: /usr/bin/python3 setup.py build running build running build_py creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore copying wapitiCore/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore copying wapitiCore/moon.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests copying tests/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/logger.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/language.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/vulnerability.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/swf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/sqlite_persister.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/web.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/xss_utils.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/csp_utils.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/page.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/crawler.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/lamejs.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/jsoncookie.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/fingerprint.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/http_only.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/blindsql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/backup.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/resource_consumption.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/secure_cookie.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/xxe.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/exec.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/csp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/internal_error.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/dangerous_resource.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/credentials.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/redirect.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/xss.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/htaccess.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/crlf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/file.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/http_headers.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/sql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/ssrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/csrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_csrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_redirect.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_buster.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_wapp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_permanentxss.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_methods.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_backup.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/attack.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_brute_login_form.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_exec.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_nikto.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_file.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_csp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_http_headers.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_sql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_cookieflags.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_xss.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_xxe.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_crlf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main copying wapitiCore/main/wapiti.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main copying wapitiCore/main/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main copying wapitiCore/main/getcookie.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/reportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/htmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/xmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/txtreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/jsonreportgenerator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer copying wapitiCore/wappalyzer/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer copying wapitiCore/wappalyzer/wappalyzer.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/pull_jsparser3.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/jsparser3.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_explorer.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_request.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_network_issues.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_scope.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_persister.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload copying tests/payload/test_payload_reader.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload copying tests/payload/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint copying tests/endpoint/test_endpoint.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint copying tests/endpoint/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli copying tests/cli/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli copying tests/cli/test_options.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_wapp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_crlf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_exec.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mutator.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_xss_advanced.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_file.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_nikto.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_backup.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_buster.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_methods.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_xss_basics.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_csrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_csp.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_sql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_xxe.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_redirect.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_html_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_json_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_html_formaction.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_html_forms.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_xss_utils.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_js_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/__init__.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_http_parser.py -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers 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' writing manifest file 'wapiti3.egg-info/SOURCES.txt' creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/backupPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/blindSQLPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/busterPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/execPayloads.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/fileHandlingPayloads.ini -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/incorrectMessage.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/passwords.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/successMessage.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/users.txt -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/xssPayloads.ini -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/xxePayloads.ini -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/de creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/de/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/en creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/en/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/es creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/es/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/fr creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/fr/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/ms creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/ms/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/pt creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/pt/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/zh creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/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.9/build/wapitiCore/data/language/zh/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/de.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/en.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/es.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/fr.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/ms.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/pt.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/template.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/zh.po -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template copying wapitiCore/report_template/logo_clear.png -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template copying wapitiCore/report_template/report.html -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template creating /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css copying wapitiCore/report_template/css/kube.min.css -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css copying wapitiCore/report_template/css/master.css -> /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css running build_scripts creating build creating build/scripts-3.9 copying and adjusting bin/wapiti -> build/scripts-3.9 copying and adjusting bin/wapiti-getcookie -> build/scripts-3.9 changing mode of build/scripts-3.9/wapiti from 644 to 755 changing mode of build/scripts-3.9/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:232: cd /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build; python3.9 -m pytest tests ============================= test session starts ============================== platform linux -- Python 3.9.2, pytest-6.0.2, py-1.10.0, pluggy-0.13.0 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/subprocess.py:951: 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.9/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 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): """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 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 = _posixsubprocess.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, gid, gids, uid, umask, preexec_fn) 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.9/subprocess.py:1823: 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.9/.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.9/.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.9/.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.9/.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.9/.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.9/.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.9/.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:169: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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(u"'%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(u"'%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:699: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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:394: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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:234: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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.9/http/client.py:1255: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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.9/http/client.py:1301: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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.9/http/client.py:1250: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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.9/http/client.py:1010: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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.9/http/client.py:950: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def connect(self): > conn = self._new_conn() /usr/lib/python3/dist-packages/urllib3/connection.py:200: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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:181: 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 as e: # this may raise a string formatting error. err = ("Invalid timeout {}. Pass a (connect, read) " "timeout tuple, or a single float to set " "both timeouts to the same value".format(timeout)) raise ValueError(err) 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:439: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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 if 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:755: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 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:574: 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:590: in post return self.request('POST', url, data=data, json=json, **kwargs) /usr/lib/python3/dist-packages/requests/sessions.py:542: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3/dist-packages/requests/sessions.py:655: 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 as e: # this may raise a string formatting error. err = ("Invalid timeout {}. Pass a (connect, read) " "timeout tuple, or a single float to set " "both timeouts to the same value".format(timeout)) raise ValueError(err) 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: low_conn.putrequest(request.method, url, skip_accept_encoding=True) 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 try: # For Python 2.7, use buffering of HTTP responses r = low_conn.getresponse(buffering=True) except TypeError: # For compatibility with Python 3.3+ r = low_conn.getresponse() resp = HTTPResponse.from_httplib( r, pool=conn, connection=low_conn, preload_content=False, decode_content=False ) except: # If we hit any problems here, clean up the connection. # Then, reraise so that we can handle the actual exception. low_conn.close() raise except (ProtocolError, socket.error) 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:510: 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:62 /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/language.py:62: DeprecationWarning: parameter codeset is deprecated lan = gettext.translation( -- Docs: https://docs.pytest.org/en/stable/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_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/attack/test_mod_xxe.py::test_direct_upload - FileNotFoundError: [... 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.90s ============= E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build; python3.9 -m pytest tests dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 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 -O--buildsystem=pybuild I: pybuild base:232: /usr/bin/python3 setup.py install --root /build/wapiti-3.0.4+dfsg/debian/wapiti running install 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' writing manifest file 'wapiti3.egg-info/SOURCES.txt' 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.9 creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/logger.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/language.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/logger.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/language.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/vulnerability.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/vulnerability.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/en creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/en/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/en/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/pt creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/zh creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/fr creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/ms creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/de creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/de/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/de/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/es creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/es/LC_MESSAGES copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/es/LC_MESSAGES creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/users.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/xxePayloads.ini -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/busterPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/xssPayloads.ini -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/successMessage.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/incorrectMessage.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/backupPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/fileHandlingPayloads.ini -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/passwords.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/execPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/blindSQLPayloads.txt -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/swf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/sqlite_persister.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/pull_jsparser3.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/jsparser3.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/__pycache__/jsparser3.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/web.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/xss_utils.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/csp_utils.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/page.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/crawler.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/lamejs.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsoncookie.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/swf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/web.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/jsoncookie.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/page.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/csp_utils.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/lamejs.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/crawler.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/sqlite_persister.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/xss_utils.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/fingerprint.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/http_only.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/blindsql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/backup.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/resource_consumption.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/secure_cookie.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/xxe.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/exec.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/csp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/internal_error.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/dangerous_resource.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/credentials.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/redirect.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/xss.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/htaccess.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/crlf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/file.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/http_headers.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/sql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/ssrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/csrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/csp.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/fingerprint.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/csrf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/sql.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/file.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/exec.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/http_only.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/ssrf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/crlf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/xss.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/secure_cookie.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/resource_consumption.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/http_headers.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/xxe.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/internal_error.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/blindsql.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/dangerous_resource.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/credentials.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/htaccess.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/backup.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/redirect.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/zh.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/en.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/template.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/pt.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/de.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/ms.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/es.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/fr.po -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_csrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_redirect.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_buster.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_wapp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_permanentxss.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_methods.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_backup.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/attack.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_brute_login_form.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_exec.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_nikto.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_file.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_csp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_http_headers.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_sql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_cookieflags.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_cookieflags.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_redirect.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_brute_login_form.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_permanentxss.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/attack.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_file.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_sql.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_shellshock.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_crlf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_htaccess.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_backup.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_wapp.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_methods.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_blindsql.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_exec.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_ssrf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_xss.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_csp.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_nikto.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_csrf.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_buster.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_http_headers.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_xxe.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_xss.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_xxe.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_crlf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/report.html -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template/css copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css/kube.min.css -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template/css copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css/master.css -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template/css copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/logo_clear.png -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/wapiti.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/__pycache__/wapiti.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/getcookie.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/reportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/htmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/xmlreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/txtreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/txtreportgenerator.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/jsonreportgenerator.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/xmlreportgenerator.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/reportgenerator.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/htmlreportgenerator.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/jsonreportgenerator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/wappalyzer.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/__pycache__/wappalyzer.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/moon.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/__pycache__/moon.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_explorer.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_request.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_network_issues.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_scope.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_persister.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_request.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_scope.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_persister.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_network_issues.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_explorer.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/test_payload_reader.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/__pycache__/test_payload_reader.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/test_endpoint.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/__pycache__/test_endpoint.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/test_options.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/__pycache__/test_options.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_wapp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_crlf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_exec.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mutator.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_xss_advanced.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_file.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_nikto.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_backup.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_buster.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_htaccess.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_methods.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_xss_basics.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_csrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_csp.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_sql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_shellshock.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_xxe.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_ssrf.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_blindsql.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_redirect.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_csp.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_exec.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_crlf.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_redirect.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_xss_advanced.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_backup.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_sql.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mutator.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_buster.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_shellshock.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_nikto.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_csrf.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_ssrf.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_xss_basics.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_file.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_htaccess.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_methods.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_blindsql.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_wapp.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_xxe.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_html_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_json_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_html_formaction.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_html_forms.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_xss_utils.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_js_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__init__.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_http_parser.py -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_html_forms.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_js_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_html_formaction.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_json_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_html_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_http_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_xss_utils.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ creating /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/__pycache__ copying /build/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/__pycache__ byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/logger.py to logger.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/language.py to language.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/vulnerability.py to vulnerability.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/swf.py to swf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/sqlite_persister.py to sqlite_persister.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/pull_jsparser3.py to pull_jsparser3.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/jsparser3.py to jsparser3.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/web.py to web.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/xss_utils.py to xss_utils.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/csp_utils.py to csp_utils.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/page.py to page.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/crawler.py to crawler.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/lamejs.py to lamejs.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsoncookie.py to jsoncookie.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/fingerprint.py to fingerprint.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/http_only.py to http_only.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/blindsql.py to blindsql.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/backup.py to backup.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/resource_consumption.py to resource_consumption.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/secure_cookie.py to secure_cookie.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/xxe.py to xxe.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/exec.py to exec.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/csp.py to csp.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/internal_error.py to internal_error.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/dangerous_resource.py to dangerous_resource.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/credentials.py to credentials.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/redirect.py to redirect.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/xss.py to xss.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/htaccess.py to htaccess.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/crlf.py to crlf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/file.py to file.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/http_headers.py to http_headers.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/sql.py to sql.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/ssrf.py to ssrf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/csrf.py to csrf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_csrf.py to mod_csrf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_redirect.py to mod_redirect.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_buster.py to mod_buster.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_wapp.py to mod_wapp.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_permanentxss.py to mod_permanentxss.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_methods.py to mod_methods.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_backup.py to mod_backup.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_blindsql.py to mod_blindsql.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/attack.py to attack.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_brute_login_form.py to mod_brute_login_form.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_exec.py to mod_exec.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_htaccess.py to mod_htaccess.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_nikto.py to mod_nikto.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_ssrf.py to mod_ssrf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_file.py to mod_file.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_csp.py to mod_csp.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_http_headers.py to mod_http_headers.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_sql.py to mod_sql.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_cookieflags.py to mod_cookieflags.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_shellshock.py to mod_shellshock.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_xss.py to mod_xss.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_xxe.py to mod_xxe.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_crlf.py to mod_crlf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/wapiti.py to wapiti.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/getcookie.py to getcookie.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/reportgenerator.py to reportgenerator.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/htmlreportgenerator.py to htmlreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/xmlreportgenerator.py to xmlreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/txtreportgenerator.py to txtreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/jsonreportgenerator.py to jsonreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/wappalyzer.py to wappalyzer.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/moon.py to moon.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_explorer.py to test_explorer.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_request.py to test_request.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_network_issues.py to test_network_issues.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_scope.py to test_scope.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_persister.py to test_persister.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/test_payload_reader.py to test_payload_reader.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/test_endpoint.py to test_endpoint.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/test_options.py to test_options.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_wapp.py to test_mod_wapp.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_crlf.py to test_mod_crlf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_exec.py to test_mod_exec.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mutator.py to test_mutator.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_xss_advanced.py to test_mod_xss_advanced.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_file.py to test_mod_file.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_nikto.py to test_mod_nikto.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_backup.py to test_mod_backup.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_buster.py to test_mod_buster.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_htaccess.py to test_mod_htaccess.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_methods.py to test_mod_methods.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_xss_basics.py to test_mod_xss_basics.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_csrf.py to test_mod_csrf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_csp.py to test_mod_csp.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_sql.py to test_mod_sql.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_shellshock.py to test_mod_shellshock.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_xxe.py to test_mod_xxe.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_ssrf.py to test_mod_ssrf.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_blindsql.py to test_mod_blindsql.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_redirect.py to test_mod_redirect.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_html_parser.py to test_html_parser.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_json_parser.py to test_json_parser.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_html_formaction.py to test_html_formaction.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_html_forms.py to test_html_forms.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_xss_utils.py to test_xss_utils.cpython-39.pyc /usr/lib/python3.9/dist-packages/tests/parsers/test_xss_utils.py:620: SyntaxWarning: "is" with a literal. Did you mean "=="? /usr/lib/python3.9/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.9/dist-packages/tests/parsers/test_js_parser.py to test_js_parser.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_http_parser.py to test_http_parser.cpython-39.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.9/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.9/wapiti-getcookie -> /build/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin copying build/scripts-3.9/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_installinit -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/en/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/zh/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/ms/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/es/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-1_all.deb'. dpkg-genbuildinfo --build=binary dpkg-genchanges --build=binary >../wapiti_3.0.4+dfsg-1_armhf.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: including full source code in upload I: copying local configuration 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/28923 and its subdirectories I: Current time: Sun Aug 1 10:05:45 -12 2021 I: pbuilder-time-stamp: 1627855545