├── .gitignore ├── .readthedocs.yaml ├── COPYING ├── MANIFEST.in ├── Pipfile ├── Pipfile.lock ├── README.rst ├── TODO ├── contrib ├── build_scripts │ ├── arch │ │ └── PKGBUILD │ └── debian │ │ └── update_deb_changelog.fish └── shell_completions │ ├── bash │ └── fuddly │ ├── fish │ └── fuddly.fish │ └── zsh │ └── _fuddly ├── debian ├── changelog ├── compat ├── control ├── doc-base ├── docs ├── gbp.conf ├── install ├── manpages ├── rules └── source │ ├── copyright │ ├── format │ └── options ├── docs ├── .gitignore ├── Makefile ├── fuddly.1.scd ├── requirements.in ├── requirements.txt └── source │ ├── api.rst │ ├── api_index.rst │ ├── conf.py │ ├── data_analysis.rst │ ├── data_makers.rst │ ├── data_manip.rst │ ├── data_model.rst │ ├── evolutionary_fuzzing.rst │ ├── examples.rst │ ├── framework.rst │ ├── images │ ├── crossover_algo1.png │ ├── crossover_algo2.png │ ├── director_show.png │ ├── dm_constraints.odg │ ├── dm_constraints.png │ ├── dm_gen.odg │ ├── dm_gen.png │ ├── dm_mapping.odg │ ├── dm_mapping.png │ ├── dm_nodes.odg │ ├── dm_nodes.png │ ├── encoding.png │ ├── evolutionary_process.png │ ├── ex_show.png │ ├── ex_subst_show.png │ ├── plotty_example.png │ ├── sc_ex1_step1.png │ ├── sc_ex1_step2.png │ ├── sc_ex4.png │ ├── sc_ex4_cond_fuzz_tc1.png │ ├── sc_ex4_cond_fuzz_tc2.png │ ├── sc_ex4_data_fuzz_tc1.png │ ├── sc_ex4_data_fuzz_tc2.png │ ├── sc_ex4_stutter.png │ ├── target_enabled.png │ ├── testnode_show.png │ ├── zip_mod.odg │ ├── zip_mod.png │ └── zip_show.png │ ├── index.rst │ ├── knowledge.rst │ ├── overview.rst │ ├── packaging.rst │ ├── probes.rst │ ├── scenario.rst │ ├── targets.rst │ └── tutorial.rst ├── pyproject.toml ├── requirements.txt └── src └── fuddly ├── cli ├── __init__.py ├── __main__.py ├── argparse_wrapper.py ├── error.py ├── new.py ├── run.py ├── shell.py ├── show.py ├── templates │ ├── bare │ │ ├── README │ │ ├── __init__.py_ │ │ ├── monitoring.py_ │ │ ├── prj.py_ │ │ ├── samples │ │ │ └── README │ │ ├── scripts │ │ │ └── README │ │ └── targets.py_ │ ├── data_model │ │ ├── __init__.py_ │ │ ├── dm.py_ │ │ └── strategy.py_ │ └── module │ │ ├── README.md │ │ └── pyproject.toml ├── tool.py └── workspace.py ├── data_models ├── .gitignore ├── file_formats │ ├── __init__.py │ ├── jpg │ │ ├── __init__.py │ │ ├── dm.py │ │ ├── samples │ │ │ └── Lenna_test_image.jpg │ │ └── strategy.py │ ├── json │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py │ ├── pdf │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py │ ├── png │ │ ├── __init__.py │ │ ├── dm.py │ │ ├── samples │ │ │ └── Lenna_test_image.png │ │ └── strategy.py │ └── zip │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py ├── protocols │ ├── __init__.py │ ├── http │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py │ ├── pppoe │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py │ ├── sms │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py │ └── usb │ │ ├── __init__.py │ │ ├── dm.py │ │ └── strategy.py └── tutorial │ ├── __init__.py │ ├── myproto │ ├── __init__.py │ ├── dm.py │ └── strategy.py │ └── tuto │ ├── __init__.py │ ├── dm.py │ └── strategy.py ├── framework ├── __init__.py ├── basic_primitives.py ├── comm_backends.py ├── config.py ├── constraint_helpers.py ├── cosmetics.py ├── data.py ├── data_model.py ├── database.py ├── director_helpers.py ├── dmhelpers │ ├── __init__.py │ ├── generic.py │ ├── json.py │ └── xml.py ├── encoders.py ├── error_handling.py ├── evolutionary_helpers.py ├── fmk_db.sql ├── fuzzing_primitives.py ├── generic_data_makers.py ├── global_resources.py ├── knowledge │ ├── __init__.py │ ├── feedback_collector.py │ ├── feedback_handler.py │ └── information.py ├── logger.py ├── monitor.py ├── node.py ├── node_builder.py ├── plumbing.py ├── project.py ├── scenario.py ├── tactics_helpers.py ├── target_helpers.py └── value_types.py ├── info └── generic.py ├── libs ├── __init__.py ├── debug_facility.py ├── external_modules.py ├── fmk_services.py ├── importer.py └── utils.py ├── projects ├── .gitignore ├── generic │ └── standard.py ├── specific │ └── usb.py └── tuto │ ├── __init__.py │ ├── directors.py │ ├── monitoring.py │ ├── prj.py │ ├── scripts │ └── README │ └── targets.py ├── targets ├── debug.py ├── local.py ├── network.py ├── printer.py ├── sim.py └── ssh.py ├── test ├── __init__.py ├── __main__.py ├── integration │ ├── __init__.py │ └── test_integration.py └── unit │ ├── __init__.py │ ├── test_monitor.py │ ├── test_node.py │ ├── test_node_builder.py │ └── test_plotty.py └── tools ├── __init__.py ├── fmkdb.py └── plotty ├── Formula.py ├── PlottyDatabase.py ├── __init__.py ├── cli ├── __init__.py ├── arguments.py └── parse │ ├── __init__.py │ ├── formula.py │ └── range.py ├── globals.py ├── plot ├── APlottyGeometry.py ├── PlottyCurve.py ├── PlottyFigure.py ├── PlottyFigureArea.py ├── PlottyPoint.py ├── PlottyPointCloud.py └── __init__.py ├── plotty.py └── utils.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Autogenerated, do not track 2 | src/fuddly/framework/_version.py 3 | 4 | # Ignore these files 5 | __pycache__/ 6 | *~ 7 | 8 | .pybuild/ 9 | build/ 10 | src/fuddly.egg-info/ 11 | 12 | .gitignore 13 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Set the version of Python and other tools you might need 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3.12" 13 | 14 | # Build documentation in the docs/ directory with Sphinx 15 | sphinx: 16 | configuration: docs/source/conf.py 17 | 18 | # If using Sphinx, optionally build your docs in additional formats such as PDF 19 | formats: 20 | - pdf 21 | 22 | # Optionally declare the Python requirements required to build your docs 23 | python: 24 | install: 25 | - requirements: docs/requirements.txt 26 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | graft src/fuddly/imported_data/ 2 | graft src/fuddly/cli/templates/ 3 | include src/fuddly/framework/fmk_db.sql 4 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | crcmod = ">=1.7" 8 | rpyc = "<7.0.0,>=6.0.0" 9 | graphviz = "*" 10 | matplotlib = "*" 11 | paramiko = "<4.0.0,>=3.4.0" 12 | pyserial = "*" 13 | z3-solver = ">=4.8" 14 | pyxdg = "*" 15 | xtermcolor = "*" 16 | sphinx = "*" 17 | sphinxcontrib-napoleon = "*" 18 | sphinx-rtd-theme = "*" 19 | argcomplete = "*" 20 | pycups = "*" 21 | python-constraint2 = "*" 22 | fuddly = {file = ".", editable = true} 23 | 24 | [dev-packages] 25 | ddt = "*" 26 | mock = "*" 27 | 28 | [dev-extra] 29 | lz4 = "*" 30 | jsonschema = "*" 31 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | fuddly: a fuzzing and data manipulation framework 2 | ================================================= 3 | 4 | |docs| 5 | 6 | .. |docs| image:: https://readthedocs.org/projects/fuddly/badge/?version=develop 7 | :target: https://readthedocs.org/projects/fuddly/?badge=develop 8 | :alt: Documentation 9 | 10 | 11 | List of features 12 | ---------------- 13 | + Graph-based data model that enables: 14 | 15 | - to represent complex data formats and also to mix them 16 | - complex data manipulations 17 | - to dissect/absorb existing data 18 | - generation & mutation fuzzing strategy 19 | 20 | + Fuzzing automation framework: 21 | 22 | - target abstraction 23 | - monitoring means based on independant probes 24 | - replay & logging 25 | - data manipulation based on operators (objects that implement 26 | specific data transformation) 27 | - scenario infrastructure (for modeling protocol logic) 28 | - virtual directors 29 | 30 | + and so on... 31 | 32 | What's still missing 33 | -------------------- 34 | + Refer to TODO file 35 | 36 | About the Documentation 37 | ----------------------- 38 | + The documentation is available `here`_. 39 | + In order to generate the documentation from the source, follow these steps: 40 | 41 | #. go to the folder ``docs/`` 42 | #. execute ``make html`` to generate HTML documentation 43 | #. execute ``make latexpdf`` to generate PDF documentation 44 | #. generated documentation is located in ``docs/build/`` 45 | 46 | .. _here: http://fuddly.readthedocs.io 47 | 48 | Basic Installation Instructions 49 | ------------------------------- 50 | 51 | Installation with `pipenv`:: 52 | 53 | $ cd 54 | $ pipenv install # or pipenv sync (if you want to match exactly the environment 55 | # described in fuddly Pipfile.lock) 56 | $ pipenv shell 57 | 58 | Refer to the documentation for more information 59 | 60 | Launch fuddly shell 61 | ------------------- 62 | 63 | - If `fuddly` is installed either through pip/pipenv or a package from your distribution:: 64 | 65 | $ fuddly shell 66 | 67 | - If `fuddly` is not installed:: 68 | 69 | $ python -m fuddly.cli shell 70 | 71 | 72 | Launch fuddly Test Cases 73 | ------------------------ 74 | 75 | The package ``test`` include all unit & integration test cases 76 | of ``fuddly`` itself. From the ``src/`` directory, usage is as follows: 77 | 78 | - To launch all the tests, issue the command:: 79 | 80 | $ python -m fuddly.test -a 81 | 82 | - To launch all the tests but the longer ones, issue the command:: 83 | 84 | $ python -m fuddly.test 85 | 86 | - To avoid data model specific test cases use the option ``--ignore-dm-specifics`` 87 | 88 | - To launch a specific test category issue the following command:: 89 | 90 | $ python -m fuddly.test fuddly.test.... 91 | 92 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | [NEW FEATURES] 2 | 3 | - Add new IA infrastructure supporting the creation of data models (automatic discovery of data structure from raw data) 4 | - Enhance current post-analysis tooling and add new features supporting investigation (diagrams, statistics, research by pattern, etc.) 5 | - Add GDB/PIN/QEMU probes/managers 6 | - Add bpftrace monitoring subsystem (probes, ...) 7 | 8 | [ENHANCEMENT] 9 | 10 | - Complete Recursive Node implementation 11 | - Absorption implementation 12 | 13 | - Enhance ModelWalking exploration when the structure of a child node changed because of 14 | a change in an ancestor node value. 15 | 16 | Exploration by tWALK with @walk_within_recursive_node set to True make basically recursive nodes 17 | handled as non-terminal nodes. This solves the exploration problem when @consider_sibbling_change 18 | is also set to True. 19 | 20 | - Add full support of String(alphabet=...) in CSP Z3 21 | - Complete implementation of NonTermCusto.ResetClone 22 | - Add support for absorption of nodes whose existence has not been resolved yet. 23 | (Counter-part of the generation supported feature.) 24 | - Clean up test/test_integration.py 25 | -------------------------------------------------------------------------------- /contrib/build_scripts/arch/PKGBUILD: -------------------------------------------------------------------------------- 1 | # Maintainer: Nicolai Dagestad 2 | 3 | pkgname="fuddly-git" 4 | conflicts=("${pkgname/-git/}") 5 | provides=("${pkgname/-git/}") 6 | replaces=("python-$pkgname" "python-${pkgname/-git/}") 7 | pkgver=0.30.dev.r224.6af445f 8 | pkgrel=3 9 | epoch=1 10 | pkgdesc="Fuzzing and Data Manipulation Framework (for GNU/Linux)" 11 | arch=('any') 12 | url="https://github.com/k0retux/fuddly" 13 | license=('GPL-3.0-or-later') 14 | 15 | depends=( 16 | "python" 17 | "python-crcmod" 18 | "python-graphviz" 19 | "python-matplotlib" 20 | "python-paramiko" 21 | "python-pycups" 22 | "python-pyserial" 23 | "python-pyxdg" 24 | "python-rpyc" 25 | "python-z3-solver" 26 | 27 | # For tests 28 | "python-ddt" 29 | 30 | # Aur 31 | "python-constraint" 32 | "python-xtermcolor" 33 | ## For tests 34 | "python-mock" 35 | ) 36 | 37 | makedepends=( 38 | "git" 39 | "python-build" 40 | "python-installer" 41 | "python-setuptools" 42 | "python-setuptools-scm" 43 | "python-sphinx_rtd_theme" 44 | "scdoc" 45 | ) 46 | options=(!emptydirs) 47 | source=("$pkgname::git+$url#branch=develop") 48 | sha256sums=('SKIP') 49 | 50 | pkgver() { 51 | cd "${srcdir}/${pkgname}" || return 1 52 | printf "%s" "$(git describe --long --tags | sed 's/\([^-]*-\)g/r\1/;s/-/./g')" 53 | } 54 | 55 | build() { 56 | cd "${srcdir}/${pkgname}" || return 1 57 | python -m build --wheel --no-isolation 58 | cd docs || return 1 59 | scdoc < fuddly.1.scd | gzip > fuddly.1.gz 60 | make html 61 | } 62 | 63 | package() { 64 | cd "${srcdir}/${pkgname}" || return 1 65 | python -m installer --no-compile-bytecode --destdir="${pkgdir}" dist/*.whl 66 | install -Dm644 contrib/shell_completions/zsh/_fuddly -t "${pkgdir}/usr/share/zsh/site-functions/" 67 | install -Dm644 contrib/shell_completions/fish/fuddly.fish -t "${pkgdir}/usr/share/fish/vendor_completions.d/" 68 | install -Dm644 contrib/shell_completions/bash/fuddly -t "${pkgdir}/usr/share/bash-completion/completions/" 69 | install -Dm644 docs/fuddly.1.gz -t "${pkgdir}/usr/share/man/man1/" 70 | 71 | # Docs 72 | cd docs/build/html || return 1 73 | find . -type f | while read -r f;do 74 | install -Dm644 "${f}" "${pkgdir}/usr/share/doc/fuddly/${f}" 75 | done 76 | } 77 | -------------------------------------------------------------------------------- /contrib/build_scripts/debian/update_deb_changelog.fish: -------------------------------------------------------------------------------- 1 | #!/bin/fish 2 | pipenv install -e . # to trigger the generation of _version.py file 3 | gbp dch -S -N (fuddly -v) 4 | #gbp dch -R -N (fuddly -v) --distribution unstable --force-distribution 5 | -------------------------------------------------------------------------------- /contrib/shell_completions/bash/fuddly: -------------------------------------------------------------------------------- 1 | #compdef fuddly 2 | # Generated by `register-python-argcomplete -s bash fuddly` 3 | # Run something, muting output or redirecting it to the debug stream 4 | # depending on the value of _ARC_DEBUG. 5 | # If ARGCOMPLETE_USE_TEMPFILES is set, use tempfiles for IPC. 6 | __python_argcomplete_run() { 7 | if [[ -z "${ARGCOMPLETE_USE_TEMPFILES-}" ]]; then 8 | __python_argcomplete_run_inner "$@" 9 | return 10 | fi 11 | local tmpfile="$(mktemp)" 12 | _ARGCOMPLETE_STDOUT_FILENAME="$tmpfile" __python_argcomplete_run_inner "$@" 13 | local code=$? 14 | cat "$tmpfile" 15 | rm "$tmpfile" 16 | return $code 17 | } 18 | 19 | __python_argcomplete_run_inner() { 20 | if [[ -z "${_ARC_DEBUG-}" ]]; then 21 | "$@" 8>&1 9>&2 1>/dev/null 2>&1 &1 9>&2 1>&9 2>&1 /dev/null; then 51 | SUPPRESS_SPACE=1 52 | fi 53 | COMPREPLY=($(IFS="$IFS" \ 54 | COMP_LINE="$COMP_LINE" \ 55 | COMP_POINT="$COMP_POINT" \ 56 | COMP_TYPE="$COMP_TYPE" \ 57 | _ARGCOMPLETE_COMP_WORDBREAKS="$COMP_WORDBREAKS" \ 58 | _ARGCOMPLETE=1 \ 59 | _ARGCOMPLETE_SHELL="bash" \ 60 | _ARGCOMPLETE_SUPPRESS_SPACE=$SUPPRESS_SPACE \ 61 | __python_argcomplete_run ${script:-$1})) 62 | if [[ $? != 0 ]]; then 63 | unset COMPREPLY 64 | elif [[ $SUPPRESS_SPACE == 1 ]] && [[ "${COMPREPLY-}" =~ [=/:]$ ]]; then 65 | compopt -o nospace 66 | fi 67 | fi 68 | } 69 | if [[ -z "${ZSH_VERSION-}" ]]; then 70 | complete -o nospace -o default -o bashdefault -F _python_argcomplete fuddly 71 | else 72 | # When called by the Zsh completion system, this will end with 73 | # "loadautofunc" when initially autoloaded and "shfunc" later on, otherwise, 74 | # the script was "eval"-ed so use "compdef" to register it with the 75 | # completion system 76 | autoload is-at-least 77 | if [[ $zsh_eval_context == *func ]]; then 78 | _python_argcomplete "$@" 79 | else 80 | compdef _python_argcomplete fuddly 81 | fi 82 | fi 83 | -------------------------------------------------------------------------------- /contrib/shell_completions/fish/fuddly.fish: -------------------------------------------------------------------------------- 1 | # Generated by `register-python-argcomplete -s fish fuddly` 2 | 3 | function __fish_fuddly_complete 4 | set -x _ARGCOMPLETE 1 5 | set -x _ARGCOMPLETE_DFS \t 6 | set -x _ARGCOMPLETE_IFS \n 7 | set -x _ARGCOMPLETE_SUPPRESS_SPACE 1 8 | set -x _ARGCOMPLETE_SHELL fish 9 | set -x COMP_LINE (commandline -p) 10 | set -x COMP_POINT (string length (commandline -cp)) 11 | set -x COMP_TYPE 12 | if set -q _ARC_DEBUG 13 | fuddly 8>&1 9>&2 1>&9 2>&1 14 | else 15 | fuddly 8>&1 9>&2 1>/dev/null 2>&1 16 | end 17 | end 18 | complete --command fuddly -f -a '(__fish_fuddly_complete)' 19 | -------------------------------------------------------------------------------- /contrib/shell_completions/zsh/_fuddly: -------------------------------------------------------------------------------- 1 | #compdef fuddly 2 | # Generated by `register-python-argcomplete -s zsh fuddly` 3 | # Run something, muting output or redirecting it to the debug stream 4 | # depending on the value of _ARC_DEBUG. 5 | # If ARGCOMPLETE_USE_TEMPFILES is set, use tempfiles for IPC. 6 | __python_argcomplete_run() { 7 | if [[ -z "${ARGCOMPLETE_USE_TEMPFILES-}" ]]; then 8 | __python_argcomplete_run_inner "$@" 9 | return 10 | fi 11 | local tmpfile="$(mktemp)" 12 | _ARGCOMPLETE_STDOUT_FILENAME="$tmpfile" __python_argcomplete_run_inner "$@" 13 | local code=$? 14 | cat "$tmpfile" 15 | rm "$tmpfile" 16 | return $code 17 | } 18 | 19 | __python_argcomplete_run_inner() { 20 | if [[ -z "${_ARC_DEBUG-}" ]]; then 21 | "$@" 8>&1 9>&2 1>/dev/null 2>&1 &1 9>&2 1>&9 2>&1 /dev/null; then 51 | SUPPRESS_SPACE=1 52 | fi 53 | COMPREPLY=($(IFS="$IFS" \ 54 | COMP_LINE="$COMP_LINE" \ 55 | COMP_POINT="$COMP_POINT" \ 56 | COMP_TYPE="$COMP_TYPE" \ 57 | _ARGCOMPLETE_COMP_WORDBREAKS="$COMP_WORDBREAKS" \ 58 | _ARGCOMPLETE=1 \ 59 | _ARGCOMPLETE_SHELL="bash" \ 60 | _ARGCOMPLETE_SUPPRESS_SPACE=$SUPPRESS_SPACE \ 61 | __python_argcomplete_run ${script:-$1})) 62 | if [[ $? != 0 ]]; then 63 | unset COMPREPLY 64 | elif [[ $SUPPRESS_SPACE == 1 ]] && [[ "${COMPREPLY-}" =~ [=/:]$ ]]; then 65 | compopt -o nospace 66 | fi 67 | fi 68 | } 69 | if [[ -z "${ZSH_VERSION-}" ]]; then 70 | complete -o nospace -o default -o bashdefault -F _python_argcomplete fuddly 71 | else 72 | # When called by the Zsh completion system, this will end with 73 | # "loadautofunc" when initially autoloaded and "shfunc" later on, otherwise, 74 | # the script was "eval"-ed so use "compdef" to register it with the 75 | # completion system 76 | autoload is-at-least 77 | if [[ $zsh_eval_context == *func ]]; then 78 | _python_argcomplete "$@" 79 | else 80 | compdef _python_argcomplete fuddly 81 | fi 82 | fi 83 | -------------------------------------------------------------------------------- /debian/compat: -------------------------------------------------------------------------------- 1 | 10 2 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: fuddly 2 | Maintainer: Eric Lacombe 3 | Section: python 4 | Priority: optional 5 | Build-Depends: dh-python, sphinx-common, pybuild-plugin-pyproject, python3-sphinx-rtd-theme, python3-sphinx, python3-setuptools, python3, dpkg-dev, scdoc, debhelper (>= 9) 6 | Standards-Version: 4.5.1 7 | Homepage: https://github.com/k0retux/fuddly 8 | Rules-Requires-Root: no 9 | 10 | Package: fuddly 11 | Architecture: any 12 | Depends: ${misc:Depends}, ${python3:Depends}, python3, python3-xdg, python3-argcomplete, python3-crcmod, python3-graphviz, python3-matplotlib, python3-z3 (>=4.8) 13 | Recommends: python3-cups, python3-rpyc (<<7.0.0), python3-rpyc (>=6.0.0), python3-paramiko (<<4.0.0), python3-paramiko (>=3.4.0), python3-serial, python3-xtermcolor 14 | Description: fuddly is a fuzzing and data manipulation framework 15 | -------------------------------------------------------------------------------- /debian/doc-base: -------------------------------------------------------------------------------- 1 | Document: fuddly 2 | Title: fuddly documentation 3 | Author: Eric Lacombe 4 | Abstract: This document describes how to use fuddly as well as 5 | how to develop new projects, new data models and new targets 6 | Section: System/Security 7 | Format: HTML 8 | Index: /usr/share/doc/fuddly/html/index.html 9 | Files: /usr/share/doc/fuddly/html/*.html 10 | -------------------------------------------------------------------------------- /debian/docs: -------------------------------------------------------------------------------- 1 | README.rst 2 | TODO 3 | docs/build/html/ 4 | -------------------------------------------------------------------------------- /debian/gbp.conf: -------------------------------------------------------------------------------- 1 | # Configuration file for "gbp " 2 | 3 | [DEFAULT] 4 | # the default build command: 5 | #builder = debuild -i -I 6 | # the default clean command: 7 | #cleaner = debuild clean 8 | # the default branch for upstream sources: 9 | upstream-branch = develop 10 | # the default branch for the debian patch: 11 | debian-branch = develop 12 | # the default tag formats used: 13 | upstream-tag = %(version)s 14 | debian-tag = %(version)s 15 | #debian-tag-msg = %(pkg)s Debian release %(version)s 16 | # use pristine-tar: 17 | #pristine-tar = True 18 | # don't check if debian-branch == current branch: 19 | #ignore-branch = True 20 | # Use color when on a terminal, alternatives: on/true, off/false or auto 21 | #color = auto 22 | 23 | # Options only affecting gbp buildpackage 24 | [buildpackage] 25 | # Look for a tag matching the upstream version when creating a tarball 26 | #upstream-tree = tag 27 | # uncomment this to automatically GPG sign tags: 28 | #sign-tags = True 29 | # keyid to GPG sign tags with: 30 | #keyid = 0xdeadbeef 31 | # push to a remote repository after a successful tag: 32 | #posttag = git-push git.example.com 33 | # call lintian after a successful build: 34 | #postbuild = lintian $GBP_CHANGES_FILE 35 | # let package generate upstream changelog before build: 36 | #prebuild = GIT_DIR=$GBP_GIT_DIR debian/autogen.sh 37 | # use this for more svn-buildpackage like behaviour: 38 | #export-dir = ../build-area/ 39 | #tarball-dir = ../tarballs/ 40 | #ignore-new = True 41 | #export = HEAD 42 | # compress with xz 43 | #compression = xz 44 | # use best compression 45 | #compression-level = best 46 | # Don't send notifications, alternatives: on/true, off/false or auto 47 | #notify = off 48 | # Transparently handle submodules 49 | # submodules = True 50 | # Whether to use cowbuilder via git-pbuilder(1) 51 | #pbuilder = True 52 | # Which distribution to use with git-pbuilder 53 | #dist = testing 54 | # Options to pass to pbuilder when using git-pbuilder 55 | #git-pbuilder-options = '--hookdir /etc/pbuilder/hooks' 56 | 57 | # Options only affecting gbp import-orig 58 | [import-orig] 59 | # set a different upstream branch to import to: 60 | #upstream-branch = newupstream 61 | # set a different branch to merge to: 62 | #debian-branch = dfsgclean 63 | # don't merge to debian branch by default: 64 | #merge = False 65 | # import filter: 66 | #filter = .svn 67 | # filter out files from tarball passed to pristine tar: 68 | #filter-pristine-tar = True 69 | # run hook after the import: 70 | #postimport = git-dch -N%(version)s -S -a --debian-branch=$GBP_BRANCH 71 | # emulate old behaviour of calling dch: 72 | #postimport = dch -v%(version)s New Upstream Version 73 | # commit message: 74 | #import-msg = New upstream version %(version)s 75 | 76 | # Options only affecting gbp import-dsc 77 | [import-dsc] 78 | # set a different upstream branch: 79 | #upstream-branch = svn-upstream 80 | # import filter: 81 | #filter = [ 'CVS', '.cvsignore' ] 82 | #force committer to be the same as author 83 | #author-is-committer = True 84 | #same for the date 85 | #author-date-is-committer-date = True 86 | 87 | # Options only affecting gbp dch 88 | [dch] 89 | # options passed to git-log: 90 | #git-log = --no-merges 91 | # next snapshot number: 92 | #snapshot-number = snapshot + 1 93 | # include 7 digits of the commit id in the changelog entry: 94 | id-length = 7 95 | # don't include information from meta tags: 96 | #meta = False 97 | # what tags to look for to generate bug-closing changelog entries: 98 | #meta-closes = Closes|LP 99 | # what regex should be used to parse the bug number 100 | #meta-closes-bugnum = '(?:bug|issue)?\#?\s?\d+' 101 | # include the full commit message in the changelog: 102 | #full = True 103 | # ignore Signed-off-by: lines: 104 | #ignore-regex=(Signed-off|Acked)-by: 105 | # use author name and email from git-config: 106 | git-author = True 107 | # Customizatons can e.g. be used for line wrapping 108 | #customizations=/usr/share/doc/git-buildpackage/examples/wrap_cl.py 109 | # Options to pass to dch verbatim 110 | #dch-opt = ['--mainttrailer'] 111 | 112 | # Options only affecting gbp pq 113 | [pq] 114 | #patch-numbers = False 115 | # The format specifier for patch number prefixes 116 | #patch-num-format = '%04d-' 117 | # Whether to renumber patches when exporting patch queues 118 | #renumber = False 119 | # Whether to drop patch queue after export 120 | #drop = False 121 | 122 | # Options only affecting gbp clone 123 | [clone] 124 | #pristine-tar = True 125 | 126 | # Options only affecting gbp pull 127 | [pull] 128 | #pristine-tar = True 129 | 130 | # Options only affecting gbp create remote repo 131 | [create-remote-repo] 132 | # disable remote branch tracking 133 | #track = False 134 | 135 | # Sample config to create remote repositore using gbp create-remote-repo: 136 | [remote-config pkg-libvirt] 137 | # Location of the repository 138 | remote-url-pattern = ssh://git.debian.org/git/pkg-libvirt/%(pkg)s 139 | # Template dir to passed to git-init 140 | template-dir = /srv/alioth.debian.org/chroot/home/groups/pkg-libvirt/git-template 141 | -------------------------------------------------------------------------------- /debian/install: -------------------------------------------------------------------------------- 1 | contrib/shell_completions/zsh/_fuddly usr/share/zsh/site-functions/ 2 | contrib/shell_completions/fish/fuddly.fish usr/share/fish/completions/ 3 | contrib/shell_completions/bash/fuddly usr/share/bash-completion/completions/ 4 | -------------------------------------------------------------------------------- /debian/manpages: -------------------------------------------------------------------------------- 1 | docs/build/fuddly.1.gz 2 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export PYBUILD_NAME=fuddly 4 | export PYBUILD_SYSTEM=pyproject 5 | export PYBUILD_INSTALL_ARGS=--install-lib=/usr/lib/python3/dist-packages 6 | export DEB_BUILD_OPTIONS=nocheck 7 | # export PYTHONDONTWRITEBYTECODE=1 8 | export DH_VERBOSE=1 9 | 10 | %: 11 | dh $@ --with python3 --with sphinxdoc --buildsystem=pybuild 12 | 13 | override_dh_auto_build: 14 | cd docs; scdoc < fuddly.1.scd | gzip > build/fuddly.1.gz 15 | cd docs; make html 16 | dh_auto_build 17 | -------------------------------------------------------------------------------- /debian/source/copyright: -------------------------------------------------------------------------------- 1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: fuddly 3 | Source: https://github.com/k0retux/fuddly 4 | 5 | Files: * 6 | Copyright: 2014-2025 Eric Lacombe ] 71 | The "project" object should be followed by ":