Full Code of dkopecek/usbguard for AI

main 90f0b502538e cached
468 files
6.8 MB
1.8M tokens
830 symbols
1 requests
Download .txt
Showing preview only (7,455K chars total). Download the full file or copy to clipboard to get everything.
Repository: dkopecek/usbguard
Branch: main
Commit: 90f0b502538e
Files: 468
Total size: 6.8 MB

Directory structure:
gitextract__08spewc/

├── .gitattributes
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       ├── build.yml
│       ├── docker.yml
│       └── polkit.yml
├── .gitignore
├── .gitmodules
├── .lgtm.yml
├── CHANGELOG.md
├── LICENSE
├── Makefile.am
├── README.adoc
├── RELEASE_PROCESS.md
├── VERSION
├── abi-ref/
│   └── libusbguard.so.abi
├── autogen.sh
├── configure.ac
├── doc/
│   └── man/
│       ├── .gitignore
│       ├── example-allow-device.adoc
│       ├── example-initial-policy.adoc
│       ├── footer.adoc
│       ├── usbguard-daemon.8.adoc
│       ├── usbguard-daemon.conf.5.adoc
│       ├── usbguard-dbus.8.adoc
│       ├── usbguard-ldap.conf.5.adoc
│       ├── usbguard-rules.conf.5.adoc
│       └── usbguard.1.adoc
├── libusbguard.pc.in
├── m4/
│   ├── ax_check_compile_flag.m4
│   ├── ax_pthread.m4
│   └── libgcrypt.m4
├── scripts/
│   ├── astyle.sh
│   ├── bash_completion/
│   │   └── usbguard
│   ├── copr-build-srpm.sh
│   ├── docker/
│   │   ├── build_on_alpine_linux_3_21.Dockerfile
│   │   ├── build_on_centos_8_2.Dockerfile
│   │   ├── build_on_debian_buster_with_gcc_9_2.Dockerfile
│   │   ├── build_on_ubuntu_22_04.Dockerfile
│   │   └── build_on_ubuntu_25_04.Dockerfile
│   ├── ldap/
│   │   ├── ldap.sh
│   │   ├── schema2ldif.pl
│   │   ├── setup.ldif
│   │   ├── usbguard-policy.ldif
│   │   ├── usbguard.ldif
│   │   └── usbguard.schema
│   ├── modeline.vim
│   ├── reformat-sources.sh
│   ├── rule-generator.sh
│   ├── usb-descriptor-collect.sh
│   └── usbguard-zsh-completion
├── src/
│   ├── .gitignore
│   ├── CLI/
│   │   ├── IPCSignalWatcher.cpp
│   │   ├── IPCSignalWatcher.hpp
│   │   ├── PolicyGenerator.cpp
│   │   ├── PolicyGenerator.hpp
│   │   ├── usbguard-add-user.cpp
│   │   ├── usbguard-add-user.hpp
│   │   ├── usbguard-allow-device.cpp
│   │   ├── usbguard-allow-device.hpp
│   │   ├── usbguard-append-rule.cpp
│   │   ├── usbguard-append-rule.hpp
│   │   ├── usbguard-apply-device-policy.cpp
│   │   ├── usbguard-apply-device-policy.hpp
│   │   ├── usbguard-block-device.cpp
│   │   ├── usbguard-block-device.hpp
│   │   ├── usbguard-generate-policy.cpp
│   │   ├── usbguard-generate-policy.hpp
│   │   ├── usbguard-get-parameter.cpp
│   │   ├── usbguard-get-parameter.hpp
│   │   ├── usbguard-list-devices.cpp
│   │   ├── usbguard-list-devices.hpp
│   │   ├── usbguard-list-rules.cpp
│   │   ├── usbguard-list-rules.hpp
│   │   ├── usbguard-print-version.cpp
│   │   ├── usbguard-print-version.hpp
│   │   ├── usbguard-read-descriptor.cpp
│   │   ├── usbguard-read-descriptor.hpp
│   │   ├── usbguard-reject-device.cpp
│   │   ├── usbguard-reject-device.hpp
│   │   ├── usbguard-remove-rule.cpp
│   │   ├── usbguard-remove-rule.hpp
│   │   ├── usbguard-remove-user.cpp
│   │   ├── usbguard-remove-user.hpp
│   │   ├── usbguard-rule-parser.cpp
│   │   ├── usbguard-set-parameter.cpp
│   │   ├── usbguard-set-parameter.hpp
│   │   ├── usbguard-watch.cpp
│   │   ├── usbguard-watch.hpp
│   │   ├── usbguard.cpp
│   │   └── usbguard.hpp
│   ├── Common/
│   │   ├── ByteOrder.hpp
│   │   ├── FDInputStream.hpp
│   │   ├── LDAPUtil.cpp
│   │   ├── LDAPUtil.hpp
│   │   ├── Thread.hpp
│   │   ├── Utility.cpp
│   │   └── Utility.hpp
│   ├── DBus/
│   │   ├── .gitignore
│   │   ├── DBusBridge.cpp
│   │   ├── DBusBridge.hpp
│   │   ├── DBusInterface.xml
│   │   ├── README.adoc
│   │   ├── gdbus-server.cpp
│   │   ├── generate-documentation.sh
│   │   ├── org.usbguard1.conf
│   │   ├── org.usbguard1.policy
│   │   ├── org.usbguard1.service.in
│   │   └── usbguard-dbus.service.in
│   ├── Daemon/
│   │   ├── Daemon.cpp
│   │   ├── Daemon.hpp
│   │   ├── FileAuditBackend.cpp
│   │   ├── FileAuditBackend.hpp
│   │   ├── FileRuleSet.cpp
│   │   ├── FileRuleSet.hpp
│   │   ├── LDAPHandler.cpp
│   │   ├── LDAPHandler.hpp
│   │   ├── LDAPRuleSet.cpp
│   │   ├── LDAPRuleSet.hpp
│   │   ├── LinuxAuditBackend.cpp
│   │   ├── LinuxAuditBackend.hpp
│   │   ├── NSHandler.cpp
│   │   ├── NSHandler.hpp
│   │   ├── RuleSetFactory.cpp
│   │   ├── RuleSetFactory.hpp
│   │   ├── Seccomp.c
│   │   ├── Seccomp.h
│   │   └── main.cpp
│   ├── Library/
│   │   ├── AllowedMatchesCondition.cpp
│   │   ├── AllowedMatchesCondition.hpp
│   │   ├── Base64.cpp
│   │   ├── Base64.hpp
│   │   ├── ConfigFilePrivate.cpp
│   │   ├── ConfigFilePrivate.hpp
│   │   ├── DeviceBase.cpp
│   │   ├── DeviceBase.hpp
│   │   ├── DeviceManagerBase.cpp
│   │   ├── DeviceManagerBase.hpp
│   │   ├── DeviceManagerPrivate.cpp
│   │   ├── DeviceManagerPrivate.hpp
│   │   ├── DevicePrivate.cpp
│   │   ├── DevicePrivate.hpp
│   │   ├── FixedStateCondition.cpp
│   │   ├── FixedStateCondition.hpp
│   │   ├── Hash.cpp
│   │   ├── Hash.hpp
│   │   ├── IPC/
│   │   │   ├── .gitignore
│   │   │   ├── Devices.proto
│   │   │   ├── Exception.proto
│   │   │   ├── Message.proto
│   │   │   ├── Parameter.proto
│   │   │   ├── Policy.proto
│   │   │   └── Rule.proto
│   │   ├── IPCClientPrivate.cpp
│   │   ├── IPCClientPrivate.hpp
│   │   ├── IPCPrivate.cpp
│   │   ├── IPCPrivate.hpp
│   │   ├── IPCServerPrivate.cpp
│   │   ├── IPCServerPrivate.hpp
│   │   ├── Init.cpp
│   │   ├── KeyValueParserPrivate.cpp
│   │   ├── KeyValueParserPrivate.hpp
│   │   ├── LocaltimeCondition.cpp
│   │   ├── LocaltimeCondition.hpp
│   │   ├── RandomStateCondition.cpp
│   │   ├── RandomStateCondition.hpp
│   │   ├── RuleAppliedCondition.cpp
│   │   ├── RuleAppliedCondition.hpp
│   │   ├── RuleEvaluatedCondition.cpp
│   │   ├── RuleEvaluatedCondition.hpp
│   │   ├── RuleParser/
│   │   │   ├── Actions.hpp
│   │   │   └── Grammar.hpp
│   │   ├── RulePrivate.cpp
│   │   ├── RulePrivate.hpp
│   │   ├── SysFSDevice.cpp
│   │   ├── SysFSDevice.hpp
│   │   ├── UEvent.cpp
│   │   ├── UEvent.hpp
│   │   ├── UEventDeviceManager.cpp
│   │   ├── UEventDeviceManager.hpp
│   │   ├── UEventParser.cpp
│   │   ├── UEventParser.hpp
│   │   ├── UMockdevDeviceDefinition.cpp
│   │   ├── UMockdevDeviceDefinition.hpp
│   │   ├── UMockdevDeviceManager.cpp
│   │   ├── UMockdevDeviceManager.hpp
│   │   ├── Utility.cpp
│   │   ├── Utility.hpp
│   │   └── public/
│   │       └── usbguard/
│   │           ├── Audit.cpp
│   │           ├── Audit.hpp
│   │           ├── ConfigFile.cpp
│   │           ├── ConfigFile.hpp
│   │           ├── Device.cpp
│   │           ├── Device.hpp
│   │           ├── DeviceManager.cpp
│   │           ├── DeviceManager.hpp
│   │           ├── DeviceManagerHooks.cpp
│   │           ├── DeviceManagerHooks.hpp
│   │           ├── Exception.hpp
│   │           ├── IPCClient.cpp
│   │           ├── IPCClient.hpp
│   │           ├── IPCServer.cpp
│   │           ├── IPCServer.hpp
│   │           ├── Interface.hpp
│   │           ├── KeyValueParser.cpp
│   │           ├── KeyValueParser.hpp
│   │           ├── Logger.cpp
│   │           ├── Logger.hpp
│   │           ├── MemoryRuleSet.cpp
│   │           ├── MemoryRuleSet.hpp
│   │           ├── Policy.cpp
│   │           ├── Policy.hpp
│   │           ├── Predicates.hpp
│   │           ├── Rule.cpp
│   │           ├── Rule.hpp
│   │           ├── RuleCondition.cpp
│   │           ├── RuleCondition.hpp
│   │           ├── RuleParser.cpp
│   │           ├── RuleParser.hpp
│   │           ├── RuleSet.cpp
│   │           ├── RuleSet.hpp
│   │           ├── Typedefs.cpp
│   │           ├── Typedefs.hpp
│   │           ├── USB.cpp
│   │           ├── USB.hpp
│   │           ├── USBGuard.cpp
│   │           └── USBGuard.hpp
│   ├── Tests/
│   │   ├── .gitignore
│   │   ├── Fuzzers/
│   │   │   ├── Makefile.am
│   │   │   ├── fuzzer-rules.cpp
│   │   │   ├── fuzzer-uevent.cpp
│   │   │   └── fuzzer-usb-descriptor.cpp
│   │   ├── LDAP/
│   │   │   ├── Sanity/
│   │   │   │   └── ldap-nsswitch.sh
│   │   │   ├── UseCase/
│   │   │   │   ├── ldap-test-1.sh
│   │   │   │   ├── ldap-test-2.sh
│   │   │   │   ├── ldap-test-3.sh
│   │   │   │   ├── ldap-test-4.sh
│   │   │   │   └── ldap-test-5.sh
│   │   │   ├── ansible/
│   │   │   │   ├── hosts
│   │   │   │   ├── playbook.yml
│   │   │   │   └── roles/
│   │   │   │       └── bennojoy.openldap_server/
│   │   │   │           ├── README.md
│   │   │   │           ├── defaults/
│   │   │   │           │   └── main.yml
│   │   │   │           ├── files/
│   │   │   │           │   ├── ldap
│   │   │   │           │   ├── slapd
│   │   │   │           │   └── slapd_fedora
│   │   │   │           ├── handlers/
│   │   │   │           │   └── main.yml
│   │   │   │           ├── meta/
│   │   │   │           │   └── main.yml
│   │   │   │           ├── tasks/
│   │   │   │           │   ├── configure_ldap.yml
│   │   │   │           │   ├── install_ldap.yml
│   │   │   │           │   └── main.yml
│   │   │   │           ├── templates/
│   │   │   │           │   ├── domain.ldif
│   │   │   │           │   ├── ldap.conf.j2
│   │   │   │           │   ├── slapd.conf.j2
│   │   │   │           │   ├── slapd.conf_ubuntu.j2
│   │   │   │           │   ├── slapd.fedora.ldif.j2
│   │   │   │           │   └── slapd.ubuntu.ldif.j2
│   │   │   │           └── vars/
│   │   │   │               ├── Debian.yml
│   │   │   │               ├── RedHat.yml
│   │   │   │               └── main.yml
│   │   │   ├── ldap.sh
│   │   │   ├── nsswitch.sh
│   │   │   ├── setup.ldif
│   │   │   ├── usbguard-policy.ldif
│   │   │   ├── usbguard.ldif
│   │   │   └── usbguard.schema
│   │   ├── Makefile.am
│   │   ├── Regression/
│   │   │   ├── github-PR209-config-parser.cpp
│   │   │   ├── test_Rule_ghi113.cpp
│   │   │   ├── test_Rule_ghi247.cpp
│   │   │   └── test_Rule_ghi37.cpp
│   │   ├── Rules/
│   │   │   ├── test-rules.bad
│   │   │   ├── test-rules.file
│   │   │   ├── test-rules.good
│   │   │   └── test-rules.sh
│   │   ├── Source/
│   │   │   ├── CheckScripts/
│   │   │   │   ├── code-style.sh
│   │   │   │   ├── copyright.sh
│   │   │   │   ├── private-with-build-config.sh
│   │   │   │   ├── public-without-build-config.sh
│   │   │   │   ├── spell-check.rws
│   │   │   │   ├── spell-check.sh
│   │   │   │   └── vim-modeline.sh
│   │   │   └── check-driver.sh
│   │   ├── USB/
│   │   │   ├── data/
│   │   │   │   └── 0001.out
│   │   │   └── test-descriptor-parser.sh
│   │   ├── Unit/
│   │   │   ├── test_Base64.cpp
│   │   │   ├── test_IPCServer_AccessControl.cpp
│   │   │   ├── test_Rule.cpp
│   │   │   ├── test_RuleAttribute_id.cpp
│   │   │   ├── test_RuleParser.cpp
│   │   │   ├── test_UEvent.cpp
│   │   │   ├── test_UEventParser.cpp
│   │   │   ├── test_UMockdevDeviceDefinition.cpp
│   │   │   ├── test_UMockdevDeviceDefinition.data.hpp
│   │   │   └── test_Utility.cpp
│   │   ├── UseCase/
│   │   │   ├── 000_executable.sh
│   │   │   ├── 001_cli_policy.sh
│   │   │   ├── 002_cli_devices.sh
│   │   │   ├── 003_cli_devices_umockdev.sh
│   │   │   ├── 004_daemonize.sh
│   │   │   ├── 005_cli_devices_advanced.sh
│   │   │   └── devices.umockdev
│   │   ├── bash-testlib.sh
│   │   ├── custom.supp
│   │   └── main.cpp
│   ├── ThirdParty/
│   │   └── xsl-stylesheets/
│   │       ├── VERSION.xsl
│   │       ├── common/
│   │       │   ├── af.xml
│   │       │   ├── am.xml
│   │       │   ├── ar.xml
│   │       │   ├── as.xml
│   │       │   ├── ast.xml
│   │       │   ├── autoidx-kimber.xsl
│   │       │   ├── autoidx-kosek.xsl
│   │       │   ├── az.xml
│   │       │   ├── bg.xml
│   │       │   ├── bn.xml
│   │       │   ├── bn_in.xml
│   │       │   ├── bs.xml
│   │       │   ├── ca.xml
│   │       │   ├── charmap.xml
│   │       │   ├── charmap.xsl
│   │       │   ├── common.xml
│   │       │   ├── common.xsl
│   │       │   ├── cs.xml
│   │       │   ├── cy.xml
│   │       │   ├── da.xml
│   │       │   ├── de.xml
│   │       │   ├── el.xml
│   │       │   ├── en.xml
│   │       │   ├── entities.ent
│   │       │   ├── eo.xml
│   │       │   ├── es.xml
│   │       │   ├── et.xml
│   │       │   ├── eu.xml
│   │       │   ├── fa.xml
│   │       │   ├── fi.xml
│   │       │   ├── fr.xml
│   │       │   ├── ga.xml
│   │       │   ├── gentext.xsl
│   │       │   ├── gl.xml
│   │       │   ├── gu.xml
│   │       │   ├── he.xml
│   │       │   ├── hi.xml
│   │       │   ├── hr.xml
│   │       │   ├── hu.xml
│   │       │   ├── id.xml
│   │       │   ├── insertfile.xsl
│   │       │   ├── is.xml
│   │       │   ├── it.xml
│   │       │   ├── ja.xml
│   │       │   ├── ka.xml
│   │       │   ├── kn.xml
│   │       │   ├── ko.xml
│   │       │   ├── ky.xml
│   │       │   ├── l10n.dtd
│   │       │   ├── l10n.xml
│   │       │   ├── l10n.xsl
│   │       │   ├── la.xml
│   │       │   ├── labels.xsl
│   │       │   ├── lt.xml
│   │       │   ├── lv.xml
│   │       │   ├── ml.xml
│   │       │   ├── mn.xml
│   │       │   ├── mr.xml
│   │       │   ├── nb.xml
│   │       │   ├── nds.xml
│   │       │   ├── nl.xml
│   │       │   ├── nn.xml
│   │       │   ├── olink.xsl
│   │       │   ├── or.xml
│   │       │   ├── pa.xml
│   │       │   ├── pi.xml
│   │       │   ├── pi.xsl
│   │       │   ├── pl.xml
│   │       │   ├── pt.xml
│   │       │   ├── pt_br.xml
│   │       │   ├── refentry.xml
│   │       │   ├── refentry.xsl
│   │       │   ├── ro.xml
│   │       │   ├── ru.xml
│   │       │   ├── sk.xml
│   │       │   ├── sl.xml
│   │       │   ├── sq.xml
│   │       │   ├── sr.xml
│   │       │   ├── sr_Latn.xml
│   │       │   ├── stripns.xsl
│   │       │   ├── subtitles.xsl
│   │       │   ├── sv.xml
│   │       │   ├── ta.xml
│   │       │   ├── table.xsl
│   │       │   ├── targetdatabase.dtd
│   │       │   ├── targets.xsl
│   │       │   ├── te.xml
│   │       │   ├── th.xml
│   │       │   ├── titles.xsl
│   │       │   ├── tl.xml
│   │       │   ├── tr.xml
│   │       │   ├── uk.xml
│   │       │   ├── utility.xml
│   │       │   ├── utility.xsl
│   │       │   ├── vi.xml
│   │       │   ├── xh.xml
│   │       │   ├── zh.xml
│   │       │   ├── zh_cn.xml
│   │       │   └── zh_tw.xml
│   │       ├── lib/
│   │       │   ├── dumpfragment.xsl
│   │       │   └── lib.xsl
│   │       └── xhtml-1_1/
│   │           ├── admon.xsl
│   │           ├── annotations.xsl
│   │           ├── autoidx-kimber.xsl
│   │           ├── autoidx-kosek.xsl
│   │           ├── autoidx-ng.xsl
│   │           ├── autoidx.xsl
│   │           ├── autotoc.xsl
│   │           ├── biblio-iso690.xsl
│   │           ├── biblio.xsl
│   │           ├── block.xsl
│   │           ├── callout.xsl
│   │           ├── changebars.xsl
│   │           ├── chunk-changebars.xsl
│   │           ├── chunk-code.xsl
│   │           ├── chunk-common.xsl
│   │           ├── chunk.xsl
│   │           ├── chunker.xsl
│   │           ├── chunkfast.xsl
│   │           ├── chunktoc.xsl
│   │           ├── component.xsl
│   │           ├── division.xsl
│   │           ├── docbook.xsl
│   │           ├── ebnf.xsl
│   │           ├── footnote.xsl
│   │           ├── formal.xsl
│   │           ├── glossary.xsl
│   │           ├── graphics.xsl
│   │           ├── highlight.xsl
│   │           ├── html-rtf.xsl
│   │           ├── html.xsl
│   │           ├── htmltbl.xsl
│   │           ├── index.xsl
│   │           ├── info.xsl
│   │           ├── inline.xsl
│   │           ├── keywords.xsl
│   │           ├── lists.xsl
│   │           ├── maketoc.xsl
│   │           ├── manifest.xsl
│   │           ├── math.xsl
│   │           ├── oldchunker.xsl
│   │           ├── onechunk.xsl
│   │           ├── param.xsl
│   │           ├── pi.xsl
│   │           ├── profile-chunk-code.xsl
│   │           ├── profile-chunk.xsl
│   │           ├── profile-docbook.xsl
│   │           ├── profile-onechunk.xsl
│   │           ├── qandaset.xsl
│   │           ├── refentry.xsl
│   │           ├── sections.xsl
│   │           ├── synop.xsl
│   │           ├── table.xsl
│   │           ├── task.xsl
│   │           ├── titlepage.templates.xsl
│   │           ├── titlepage.xsl
│   │           ├── toc.xsl
│   │           ├── verbatim.xsl
│   │           └── xref.xsl
│   ├── astylerc
│   └── test_filesystem.cpp
├── usbguard-daemon.conf.in
├── usbguard-tmpfiles.conf
└── usbguard.service.in

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
src/ThirdParty/* linguist-vendored


================================================
FILE: .github/dependabot.yml
================================================
##
## Copyright (c) 2023 Sebastian Pipping <sebastian@pipping.org>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.

version: 2
updates:

  - package-ecosystem: "github-actions"
    commit-message:
      include: "scope"
      prefix: "Actions"
    directory: "/"
    labels:
      - "enhancement"
    schedule:
      interval: "weekly"


================================================
FILE: .github/workflows/build.yml
================================================
name: C/C++ CI

on:
  push:
  pull_request:
  schedule:
    - cron: '0 4 * * 5'  # Every Friday at 4am

# Drop permissions to minimum for security
permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libgcrypt-dev"
        }
        - {
            name: "Ubuntu_CLANG",
            os: ubuntu-22.04,
            cc: "clang",
            cxx: "clang++",
            crypto: "libgcrypt-dev",
            configure_args: "--enable-asan"
        }
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libgcrypt-dev",
            configure_args: "--without-ldap"
        }
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libgcrypt-dev",
            configure_args: "--enable-debug-build"
        }
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libgcrypt-dev",
            configure_args: "--enable-asan"
        }
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libgcrypt-dev",
            configure_args: "--with-crypto-library=gcrypt"
        }
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libsodium-dev",
            configure_args: "--with-crypto-library=sodium"
        }
        - {
            name: "Ubuntu_GCC",
            os: ubuntu-22.04,
            cc: "gcc",
            cxx: "g++",
            crypto: "libssl-dev",
            configure_args: "--with-crypto-library=openssl"
        }




    steps:
    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2

    - name: installing dependencies
      run: |
        sudo apt-get -qq update
        sudo apt-get install -y ansible
        sudo apt-get install -y libudev-dev libsodium-dev libqb-dev libcap-ng-dev libseccomp-dev
        sudo apt-get install -y libglib2.0-dev libdbus-glib-1-dev libxml2-utils libpolkit-gobject-1-dev xsltproc
        sudo apt-get install -y lcov
        sudo apt-get install -y aspell aspell-en
        sudo apt-get install -y libprotobuf-dev protobuf-compiler
        sudo apt-get install -y libldap-dev
        sudo apt-get install -y valgrind
        sudo apt-get install -y asciidoc docbook-xml docbook-xsl
        sudo apt-get install -y umockdev libumockdev-dev
        sudo gem install coveralls-lcov
        sudo apt-get install -y ${{ matrix.config.cc }}
        sudo apt-get install -y ${{ matrix.config.cxx }} || true
        sudo apt-get install -y ${{ matrix.config.crypto }}
        sudo apt-get install -y astyle

    - name: setup environment
      run: |
        cd src/Tests/LDAP/ansible
        ansible-playbook -i ./hosts -u root --connection=local playbook.yml

    - name: build
      run: |
        ./autogen.sh
        mkdir build && cd build
        ${{ matrix.config.cc }} --version
        ${{ matrix.config.cxx }} --version
        CC=${{ matrix.config.cc }} CXX=${{ matrix.config.cxx }} ../configure --enable-werror --disable-silent-rules --with-bundled-catch --with-bundled-pegtl --with-ldap --enable-full-test-suite ${{ matrix.config.configure_args }}
        make "-j$(nproc)"

    - name: install (off-system, for coverage)
      run: |-
        set -x -o pipefail
        make -C build DESTDIR="${PWD}"/ROOT install
        find ROOT/ -not -type d | sort | xargs ls -l
        rm -Rf find ROOT/  # to not interfere with check-driver.sh

    - name: check
      run: sudo make -C build check -j1 || { find -name test-suite.log -print -exec cat {} \; ; false ; }

    - name: distcheck
      run: sudo make -C build distcheck -j1 || { find -name test-suite.log -print -exec cat {} \; ; false ; }


================================================
FILE: .github/workflows/docker.yml
================================================
##
## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.

name: Build on non-Ubuntu Linux using Docker

on:
  push:
  pull_request:
  schedule:
    - cron: '0 4 * * 5'  # Every Friday at 4am

# Drop permissions to minimum for security
permissions:
  contents: read

jobs:
  build_docker:
    strategy:
      fail-fast: false
      matrix:
        linux_distro:
        - Alpine Linux 3.21  # with musl
        - CentOS 8.2         # with GCC 8.5.0
        # - Debian Buster with GCC 9.2  # stock buster has GCC 8.3 - temporarily disabled
        - Ubuntu 22.04       # because super popular
        - Ubuntu 25.04       # because GCC 15+

    name: Build on ${{ matrix.linux_distro }} using Docker
    runs-on: ubuntu-22.04

    steps:
    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2

    - name: Build on ${{ matrix.linux_distro }} using Docker
      run:  |
        set -x

        # Create tarballs used by Dockerfile
        git submodule update --init
        git archive -o usbguard.tar HEAD
        ( cd src/ThirdParty/PEGTL/ && git archive -o ../../../pegtl.tar HEAD )
        ( cd src/ThirdParty/Catch/ && git archive -o ../../../catch.tar HEAD )

        # Build using Docker
        linux_distro="$(tr '[:upper:]' '[:lower:]' <<<"${{ matrix.linux_distro }}" | sed 's,[ .],_,g')"
        docker build -f scripts/docker/build_on_"${linux_distro}".Dockerfile .


================================================
FILE: .github/workflows/polkit.yml
================================================
##
## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.

name: Check for Polkit policy parse errors

on:
  push:
  pull_request:
  schedule:
    - cron: '0 4 * * 5'  # Every Friday at 4am

# Drop permissions to minimum for security
permissions:
  contents: read

jobs:
  polkit_policies:

    name: Check for Polkit policy parse errors
    runs-on: ubuntu-22.04

    steps:
    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2

    - name: Install runtime dependencies
      run:  |
        set -x
        sudo apt-get update
        sudo apt-get install --no-install-recommends --yes -V expat

    - name: Check for Polkit policy parse errors
      run:  |
        # This will work around pkaction exiting with unjustified(?)
        # code 1 on Ubuntu 20.04
        check_polkit_action() { pkaction -v -a "$1" | tee /dev/stderr | fgrep -q 'implicit any' ; }

        set -x
        actions=(
            org.usbguard.Devices1.listDevices
            org.usbguard.Devices1.applyDevicePolicy
            org.usbguard.Policy1.appendRule
            org.usbguard.Policy1.listRules
            org.usbguard.Policy1.removeRule
            org.usbguard1.getParameter
            org.usbguard1.setParameter
        )

        # Self-test: Assert that prior to installation, our Polkit "actions"
        # are unknown to PolKit.
        ! check_polkit_action "${actions[0]}"

        # Install the policy so that polkin can find it
        xmlwf      src/DBus/org.usbguard1.policy
        sudo cp -v src/DBus/org.usbguard1.policy /usr/share/polkit-1/actions/

        # Assert that after installation, all of our Polkit "actions" are known.
        # This detects parse error regressions.
        for action in "${actions[@]}"; do
            check_polkit_action "${action}"
        done


================================================
FILE: .gitignore
================================================
/libusbguard.pc
/usbguard
/usbguard-daemon
/usbguard-daemon.conf
/usbguard-dbus
/usbguard-rule-parser
Makefile
Makefile.in
.deps
.libs
libtool
configure
config/
config.log
config.status
build/
.dirstamp
.ycm_extra_conf.py
stamp-h1
test-driver
*~
*.sw[po]
*.l[oa]
*.o
aclocal.m4
autom4te.cache/
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
src/build-config.h.in.in


================================================
FILE: .gitmodules
================================================
[submodule "src/ThirdParty/Catch"]
	path = src/ThirdParty/Catch
	url = https://github.com/philsquared/Catch
[submodule "src/ThirdParty/PEGTL"]
	path = src/ThirdParty/PEGTL
	url = https://github.com/ColinH/PEGTL


================================================
FILE: .lgtm.yml
================================================
# lgtm.yml configuration file for C/C++ analysis
# of USBGuard on lgtm.com:
# https://lgtm.com/projects/g/USBGuard/usbguard

extraction:
  cpp:
    prepare:
      # Most Debian/Ubuntu package dependencies
      # are automatically detected, but this one
      # is not. The team at lgtm.com are looking
      # into it.
      packages:
        - libdbus-glib-1-dev

    after_prepare:
      - ./autogen.sh

    configure:
      command: |-
        ${CC:-cc} --version
        ${CXX:-c++} --version
        ./configure --with-bundled-pegtl || { cat config.log ; false ; }


================================================
FILE: CHANGELOG.md
================================================
# Change Log

## 1.1.4 - 2025-07-15

### Fixed

- Add tmpfiles.d file for /var/log/usbguard
- Ignore errors from rmdir during uninstallation
- Fix regression when specifying IPC privileges using UID
- Fix support for loongarch
- Adapt for protobuf 3.0 API changes
- Add support for Catch2 v3
- new configure option --enable/disable-catch
- add FDStreamBuf destructor to stop fd leak

## 1.1.3 - 2024-06-06

### Fixed
- Addressed several cases where either RuleFile or RuleFolder was not set.
- Resolved a race condition during fork where the parent process did not wait until everything was initialized in the child process.
- Included missing documentation in the tarball.
- Fixed compatibility issues with GCC 13+.

### Added
- Implemented detection of integer overflow for device IDs to ensure that each device can be uniquely identified by a single ID.
- Enhanced the service file to disable the Linux kernel's Out-Of-Memory (OOM) killing of processes for this unit.
- D-bus: check if the client requested interactive authentication, as some clients do not prompt for passwords.
- Made minor adjustments to the documentation.
- RuleFolder is enabled by default. At startup, the path to folder must exist and be accessible by the daemon.

## 1.1.2 - 2022-09-02

### Fixed
- Polkit: Always allow getParameter/listDevices/listRules in active sessions
- D-Bus: Send reply on auth failure
- Polkit: Unreference PolkitAuthorizationResult and PolkitAuthority structs if needed

## 1.1.1 - 2022-03-15

### Fixed
- Restore support for access control filenames without a group

## 1.1.0 - 2022-02-24

### Added
- Started building with C++17
- Tree-like list-devices output
- Added CAP_AUDIT_WRITE capability to service file
- Added support for lower OpenSSL versions prior to 1.1.0
- Added a new signal: DevicePolicyApplied

### Fixed/Changed
- Moved PIDFile from /var/run to /run
- Fixed linker isssues with disable-static
- Enhanced bash-completion script
- Make username/group checking consistent with useradd manual page definition 
  (with addition of capital letters)
- Fixed multiple IPC related bugs
- Fixed race condition when accessing port/connect_type for USB devices
- Using bundled catch v2.13.8 
- Using bundled PEGTL v3.2.5
- Fixed usbguard-rule-parser file opening
- Fix unauthorized access via D-Bus [CVE-2019-25058]


## 1.0.0 - 2021-01-13

### Added
- Added openssl support
- Starting with libtool versioning
- Added interface for IPC permission query
- Introduced partial rule concept fo CLI
- Added WithConnectType for ldap rule

### Fixed/Changed
- Daemon does not apply the policy when
  "change" action event appears anymore
- IPCClientPrivate@disconnect is thread safe
- Enforced loading of files from .d/ directory
  in alphabetical order
- Improved CLI behaviour to be consistent
- Clarified rule's label documentation


## 0.7.8 - 2020-05-20

### Fixed
- Fixed segfaults with rules.d feature


## 0.7.7 - 2020-05-19

### Added
- Added readwritepath to service file
- Added match-all keyword to rules language
- Added rules.d feature
 - daemon can load multiple rule files from rules.d/
- Included with-connect-type in dbus signal

### Fixed/Changed
- Fixed sigwaitinfo handling
- Fixed possible data corruption on stack with appendRule via dbus
- Fixed ENOBUFS errno handling on netlink socket
 - daemon can survive and wait until socket is readable again

### Removed
- Dropped unused PIDFile from service file
- Dropped deprecated dbus-glib dependency


## 0.7.6 - 2019-11-08

### Added
- Added missing options in manpage usbguard-daemon(8)
- Extended the functionality of allow/block/reject commands
 - the command can handle rule as a param and not only its ID
 - e.g. in case of allow, command will allow each device that matches provided rule
- Added debug info for malformed descriptors

### Fixed/Changed
- Changed default backend to uevent
- Fixed handling of add uevents during scanning
 - now we are sure that the enumeration is completed before processing any uevent
 - we are trying to avoid a race where the kernel is still enumerating the devices
 - and send the uevent while the parent is being authorised
- Silenced 'bind' and 'unbind' uevents


## 0.7.5 - 2019-07-02

### Added
- Added daemon configuration option HidePII
- Added check to avoid conflict between ASAN and TSAN
- Added daemon configuration option for authorized_default
- Added devpath option to generate-policy
- Added # line comments to the rule grammar
- Added ImplicitPolicyTarget to get/set parameter methods
- Added option to filter rules by label when listing
- Added the label attribute to rule
- Added PropertyParameterChanged signal
- Added support for portX/connect_type attribute
- Added temporary option to append-rule
- Added versioning to DBus service
- Added optional LDAP support

### Fixed/Changed
- Fixed invalid return value in Rule::Attribute::setSolveEqualsOrdered
- Fixed KeyValueParser to validate keys only when known names are set
- Fixed uninitialized variables found by coverity
- Fixes and cleanups based on LGTM.com report
- Hardened systemd service
- Rename ListRules parameter 'query' to 'label'
- Skip empty lines in usbguard-rule-parser

### Removed
- The proof-of-concept Qt applet was removed. It is going to be maintained in a simplified form as a separate project.


## 0.7.4 - 2018-07-12

### Fixed/Changed

- Fixed conditional manual page generation & installation
- Replaced Boost library based ext/stdio_filebuf.h implementation
  with a custom FDStreamBuf implementation


## 0.7.3 - 2018-07-11

### Changed

- usbguard-daemon will now exit with an error if it fails to open
  a logging file or audit event file.
- Updated PEGTL submodule and dropped support for older PEGTL API
- Modified the present device enumeration algorithm to be more
  reliable. Enumeration timeouts won't cause usbguard-daemon process
  to exit anymore.
- Manual pages are now generated using asciidoc (a2x) instead of
  asciidoctor.
- Generation and installation of manual pages is now optional.
- Fixed several bugs D-Bus interface XML specification

### Added

- umockdev based device manager capable of simulating devices based
  on umockdev-record files.
- Boost libraries can be used as ext/stdio_filebuf.h header file source.

### Removed

- Removed DummyDevices.tar.xz tarball that was supposed to be used for
  testing.

## 0.7.2 - 2018-01-22

### Fixed/Changed

- Fixed memory leaks in usbguard::Hash class.
- Fixed file descriptor leaks in usbguard::SysFSDevice class.
- Skip audit backend logging when no backend was set.

### Added

- Added zsh completion & other scripts to the distribution tarball.

## 0.7.1 - 2017-11-30

### Added
- CLI: usbguard watch command now includes an -e <path> option to run an executable
  for every received event. Event data are passed to the executable via environment
  variables.
- usbguard-daemon: added "-K" option which can disable logging to console.
- Added zsh autocompletion support.
- usbguard-daemon: added "-f" option which enabled double-fork daemonization procedure.
- Added AuditBackend usbguard-daemon configuration option for selecting audit log backend.
- Linux Audit support via new LinuxAudit backend.
- Added missing RuleCondition.hpp header file to the public API headers.
- Code Style specification via AStyle configuration file.

### Removed
- Removed Utility.hpp header file from public API headers
- Reduced usage of raw C pointers throughout the code

### Changed
- Qt Applet: disabled session management
- usbguard-daemon console logging output is enabled by default now. Previously,
  the -k option had to be passed to enable the output.
- Replaced --enable-maintainer-mode configure option with --enable-full-test-suite
  option. When the new option is not used during the configure phase, only a basic
  set of test is run during the make check phase.
- usbguard-daemon now opens configuration in read-only mode
- Fixed UEventDeviceManager to work with Linux Kernel >= 4.13
- Refactored audit logging to support different audit log backends
- Reformatted source code to conform to the code style.
- Made the configuration parser strict. Unknown directives and wrong syntax will
  cause an error.
- Reformatted documentation from markdown to asciidoc format.

## 0.7.0 - 2017-04-12
### Added
- Added InsertedDevicePolicy configuration option to control the policy
  method for inserted devices.
- Added RestoreControllerDeviceState configuration option.
- Added DeviceManagerBackend configuration option. This option can be used
  to select from several device manager backend implementations.
- Implemented an uevent based device manager backend.
- Added setParameter, getParameter IPC (incl. D-Bus) methods.
- Added set-parameter, get-parameter CLI subcommands.
- Qt Applet: Added Spanish (es_AR) translation.
- Create empty rules.conf file at install time (make install).
- Support for numeric UID/GID values in IPCAllowedUsers and IPCAllowedGroups
  settings.
- If bash completion support is detected at configure time, install the bash
  completion script during make install.
- Added new configuration setting: IPCAccessControlFiles.
- IPC access is now configurable down to a section and privilege
  level per user and/or group.
- Added add-user, remove-user usbuard CLI subcommands for creating, removing
  IPC access control files.
- Added AuditFilePath configuration option for setting the location of the
  USBGuard audit events log file path. If set, the usbguard-daemon will log
  policy and device related actions and whether they succeeded or not.

### Removed
- Removed UDev based device manager backend and UDev related dependencies.
- Removed UDev development files/API dependency

### Changed
- Reset Linux root hub bcdDevice value before updating device hash. This is
  a backwards incompatible change because it changes how the device hash is
  computed for Linux root hub devices.
- Refactored low-level USB device handling into SysFSDevice class which
  represents a device in the /sys filesystem (sysfs).
- Removed usage of `readdir_r` because it's obsolete. Replaced with readdir
  with the assumption that its usage is thread-safe if the directory handle
  passed to it is not shared between threads.
- Extended test suite with use case tests.
- Install the usbguard-daemon configuration and policy file with strict file
  permissions to prevent policy leaks.
- Fixed several memory leaks.
- Don't pre-resolve user and group names in IPCAllowedUsers and IPCAllowedGroups
  settings. Instead, resolve the name during the IPC authentication phase.
- Changed default values of PresentDevicePolicy (to apply-policy) and
  IPCAllowedGroups (removed wheel group entry) settings in the shipped
  usbguard-daemon.conf configuration file.

## 0.6.2 - 2016-09-18
### Changed
- Wait for disconnect in IPCClient dtor if needed
- Qt Applet: Fixed loading of decision method and default decision settings

## 0.6.1 - 2016-09-16
### Changed
- Refactored logging subsystem
- Fixed handling of IPC disconnect in the IPCClient class
- Qt Applet: Fixed handling of main window minimization and maximization
- Fixed building on architectures that don't provide required atomic operations.
  The libatomic emulation library will be used in such cases.
- Fixed several typos in the documentation

### Added
- Implemented a simple internal logger
- Access to the logger via public API
- Improved logging coverage. Logging output can be enabled either via
  CLI options or by setting the `USBGUARD_DEBUG` environment variable to 1.
- Qt Applet: UI translation support.
- Qt Applet: Czech (cs_CZ) translation

### Removed
- Removed spdlog dependency

## 0.6.0 - 2016-09-04
### Changed
- Fixed the daemon to use the match target when matching device rules.
  This fixes matching devices against the rules in the policy.
- Switched to protobuf based IPC
- Simplified the IPC and D-Bus interfaces
- Refactored custom exceptions

### Added
- Added DevicePresenceChanged signal for notifying about device
  insertions, updates and removals
- Added DevicePolicyChanged signal for notifying about device
  policy changes.
- Added ExceptionMessage signal for sending asynchronous exceptions
  to the IPC/D-Bus clients.
- Extended the usbguard CLI watch subcommand with the ability to
  wait for the IPC connection to become available. See the new `-w`
  and `-o` options for details.

### Removed
- Removed nlohmann/json submodule
- Removed allowDevice, blockDevice and rejectDevice methods from
  the IPC and D-Bus interface.
- Removed DeviceAllowed, DeviceBlocked and DeviceRejected signals
  from the IPC and D-Bus interface (replaced by single signal)
- Removed DeviceInserted, DevicePresent and DeviceRemoved signals
  from the IPC and D-Bus interface (replaced by single signal)

## 0.5.14 - 2016-08-18
### Changed
- Fixed unknown descriptor type handling

## 0.5.13 - 2016-08-16
### Changed
- refactored USB parser to support multiple handlers per USB descriptor type
- Qt Applet: device list should be always expanded

### Added
- added support for an audio device related endpoint descriptor

## 0.5.12 - 2016-08-14
### Changed
- Fixed a bug in matching USB interface types with wildcards
- usbguard-daemon will now abort at startup if the rule file contains
  syntax error instead of continuing with an empty rule set

## 0.5.11 - 2016-08-13
### Added
- Maintainer script for spellchecking source archive files
- Rule::Attribute class for representing the rule attributes
- USBDeviceID class for representing the USB device ID
- configure script option to control the bundling of PEGTL source files
- id attribute to the rule language for specifying the USB device ID
- Added a parent device ID field (and methods) to the Device class which
  tracks the ID of the parent device
- Implemented "parent-hash" attribute for associating a device with its
  parent device.
- The QtSvg module/library is now needed to compile the Qt applet
- Qt Applet: Device Dialog settings work now
- Qt Applet: The settings state is now remembered (via Qt's QSettings class)
- Qt Applet: Implemented serial number masking
- Qt Applet: Initial implementation of DeviceDialog window position randomization
- Qt Applet: IPC exceptions are shown in the message log
- Qt Applet: added an initial implementation of the device list with the ability
             to change authorization target for each device
- Qt Applet: show a grey version of the USBGuard icon in IPC disconnected state
- usbguard-daemon.conf: added DeviceRulesWithPort setting (set to false by default)
- Added support for selecting crypto backend library at compile time using the
  --with-crypto-library configure script switch

### Changed
- **IMPORTANT**: The device hash value computation was changed to include the
  USB descriptor data. Additionally, the algorithm was changed to SHA-256 and
  the hash value representation to base64. These changes are backwards incompatible
  and existing policies that use the hash attribute need to be updated.
- Reimplemented the rule parser using PEGTL
- Changed public API of the Rule and Device classes because of the new
  Rule::Attribute class rule attribute representation
- Extended the public IPCClient::IPCDisconnected method to include exception
  related information
- All rule attributes now support both the single and multivalued form
- A rule attribute can now be specified only once
- The default usbguard-daemon.conf and usbguard.service files now respect
  the paths set by the configure script
- New Qt applet icons with
- Fixed Qt applet so that it doesn't show an empty window when starting
- Qt Applet: Reject button is hidden by default.
- Updated usbguard-daemon manual page
- Permanent device specific rules managed by allowDevice, blockDevice and
  rejectDevice actions are now handled properly. Existing device rules are
  updated instead of just appending new rules to the policy.
- usbguard-daemon.conf: changed the default configuration value of
  PresentControllerPolicy to keep
- Changed the device hashing algorithm to SHA-256
- Switched hash value representation from hex to base64

### Removed
- Removed Quex related files
- The "from Rule" Device class constructor was removed because it's use case
  is unclear and it wasn't used anywhere

## 0.5.10 - 2016-07-08
### Changed
- Changed versioning scheme to include a release number. Releases will be
  rolled out more often during a milestone (x.y -- currently 0.5) development.
- Enhancements of the usbguard command-line interface.
- Manual pages are now generated from their source (markdown) during the build
  process.
- A default usbguard-daemon configuration file is now installed.

### Added
- Merged usbguard-applet-qt (sub)project into usbguard.
- Added a D-Bus bridge component which exposes a D-Bus interface to usbguard.

### Fixed
- Fixed USB descriptor data parsing. Previously, many real-world cases of
  descriptors weren't parsed correctly because of a naive implementation of the
  parser.
- Fixed systemd integration.
- Fixed issues: #84, #83, #80, #79, #78, #77, #76, #75, #74, #73, #72, #71,
  #70, #69, #68, #56, #54, #53, #51, #50, #44.

## 0.4 - 2016-02-07
### Changed
- The daemon is now capable of dropping process capabilities and uses a seccomp
  based syscall allowlist. Options to enable these features were added to the
  usbguard-daemon command.
- Devices connected at the start of the daemon are now recognized and the
  DevicePresent signal is sent for each of them.
- The library API was extended with the Device and DeviceManager classes.
- Implemented the usbguard CLI, see usbguard(1) for available commands.
- Initial authorization policies can be now easily generated using the usbguard
  generate-policy command.
- Extended the rule language with rule conditions. See usbguard-rules.conf(5)
  for details.
- Moved logging code into the shared library. You can use static methods of the
  Logger class to configure logging behaviour.
- Removed the bundled libsodium and libqb libraries.

### Added
- New configuration options for setting the implicit policy target and how to
  handle the present devices are now available.

### Fixed
- String values read from the device are now properly escaped and length limits
  on these values are enforced.
- Fixed several bugs.
- Resolved issues: #46, #45, #41, #40, #37, #32, #31, #28, #25, #24, #21, #16,
  #13, #9, #4

### Removed
- The device hashing procedure was altered and generates different hash values.
  If you are using the hash attribute in your rules, you'll have to update the
  values.
- The bundled libsodium and libqb were removed. You'll have to compile and
  install them separately if your distribution doesn't provide them as
  packages.

## 0.3p3 - 2015-04-14
### Changed
- use AC_CHECK_HEADER instead of a pkg-config based check for json and spdlog
- make check target available

## 0.3p2 - 2015-04-02
### Changed
- SHM permissions are set to uid of the client process and gid of the daemon
  with rw-rw---- mode (0660).
- added --with-bundled-json and --with-bundled-spdlog configure options to
  enable/disable the usage of the bundled libraries

## 0.3p1 - 2015-04-10
### Removed
- removed bundled cppformat copylib

## 0.3 - 2015-04-09
### Changed
- Implemented a DAC based IPC access control

## Added
- Ship man pages for usbguard-daemon, usbguard-daemon.conf and
  usbguard-rules.conf
- Ship the LICENSE file

### Fixed
- Fixed appending of permanent rules
- Fixed distribution RPM spec file. Thanks to Petr Lautrbach and Ralf
  Corsepius for review.
- Resolved issues: #18 #19 #13

## 0.2 - 2015-04-03
### Changed
- Reworked device hashing.
- Rule language changes
  - set operators
  - renamed "port" to "via-port"
  - added "with-interface" matching attribute
  - removed the "class" attribute
- The IPCClient, ConfigFile, Rule and RuleSet classes are now shipped in a
  shared library.
- Created abstract interface for OS specific USB device handling.
- Changed default daemon config path to /etc/usbguard/usbguard-daemon.conf.
- Implemented basic USB descriptor structure parsing and improved
  interface type handling
- The IPC API was changed:
  - added new signal, DevicePresent, which signals that a device was
    already present at the start of the IPC session
  - the DeviceInserted and DevicePresent signals pass interface types that
    the device supports
  - the explicit string arguments of the signals are now passed as a map

### Added
- Support for modifying permanent rules over the IPC interface.

### Fixed
- Resolved issues: #1 #2 #5 #6 #10 #11


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.


================================================
FILE: Makefile.am
================================================
##
## Copyright (C) 2016 Red Hat, Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.
##
## Authors: Daniel Kopecek <dkopecek@redhat.com>
##          Jiri Vymazal   <jvymazal@redhat.com>
##          Attila Lakatos <alakatos@redhat.com>
##
SUBDIRS=src/Tests/

ACLOCAL_AMFLAGS= -I m4
EXTRA_DIST =\
	LICENSE \
	usbguard-daemon.conf.in \
	usbguard.service.in \
	VERSION \
	CHANGELOG.md \
	src/astylerc \
	src/test_filesystem.cpp \
	scripts/usbguard-zsh-completion \
	scripts/modeline.vim \
	scripts/astyle.sh \
	scripts/reformat-sources.sh \
	scripts/usb-descriptor-collect.sh

BUILT_SOURCES=\
	src/build-config.h

$(top_builddir)/src/build-config.h: $(top_builddir)/src/build-config.h.in
	$(SED) \
	  -e "s|[$$]{localstatedir}|${localstatedir}|g" \
	  -e "s|[$$]{exec_prefix}|${prefix}|g" \
	  -e "s|[$$]{datarootdir}|${datarootdir}|g" \
	  -e "s|[$$]{datadir}|${pkgdatadir}|g" \
	  -e "s|[$$]{sysconfdir}|${sysconfdir}|g" \
	  -e "s|[$$]{prefix}|${prefix}|g" \
	  -e "s|[$$]{PACKAGE_TARNAME}|${PACKAGE_TARNAME}|g" \
	  $^ > $@ || rm -f $@

DISTCLEANFILES=\
	$(BUILT_SOURCES)

AM_DISTCHECK_CONFIGURE_FLAGS=\
	--enable-full-test-suite \
	--with-bundled-catch \
	--with-bundled-pegtl

CLEANFILES=

man_ADOC_FILES=\
	doc/man/usbguard.1.adoc \
	doc/man/usbguard-dbus.8.adoc \
	doc/man/usbguard-daemon.8.adoc \
	doc/man/usbguard-daemon.conf.5.adoc \
	doc/man/usbguard-ldap.conf.5.adoc \
	doc/man/usbguard-rules.conf.5.adoc

man_ROFF_FILES=\
	$(man_ADOC_FILES:.adoc=.roff)

EXTRA_DIST+=\
	$(man_ADOC_FILES) \
	doc/man/example-allow-device.adoc \
	doc/man/example-initial-policy.adoc \
	doc/man/footer.adoc

CLEANFILES+=\
	$(man_ROFF_FILES) \
	$(man_ROFF_FILES:.roff=)

if DOCS_ENABLED
BUILT_SOURCES+=\
	$(man_ROFF_FILES)

$(top_builddir)/%.roff: %.adoc
	$(MKDIR_P) $$(dirname $@)
	$(A2X) -v -f manpage $^ -D $(top_builddir)/$$(dirname $@)
	$(INSTALL) -m 644 $(top_builddir)/$(@:.roff=) $(top_builddir)/$@
endif

install-data-hook: install-daemon-conf install-systemd-service install-data-dbus install-tmpfiles
uninstall-hook: uninstall-daemon-conf uninstall-systemd-service uninstall-data-dbus uninstall-tmpfiles

CLEANFILES+=\
	$(top_builddir)/usbguard-daemon.conf

usbguard-daemon.conf: $(top_builddir)/usbguard-daemon.conf.in
	$(SED) \
	  -e "s|%sysconfdir%|${sysconfdir}|g" \
	  -e "s|%localstatedir%|${localstatedir}|g" \
	  $^ > $@ || rm -f $@

usbguard_confdir= $(sysconfdir)/usbguard

distuninstallcheck_listfiles= find . -type f ! -name rules.conf -print

EXTRA_DIST+=usbguard-tmpfiles.conf

install-tmpfiles:
	mkdir -p ${DESTDIR}$(prefix)/lib/tmpfiles.d/
	$(INSTALL_DATA) -m 640 ${srcdir}/usbguard-tmpfiles.conf ${DESTDIR}$(prefix)/lib/tmpfiles.d/usbguard.conf

uninstall-tmpfiles:
	rm ${DESTDIR}$(prefix)/lib/tmpfiles.d/usbguard.conf

install-daemon-conf: $(top_builddir)/usbguard-daemon.conf
	$(MKDIR_P) $(DESTDIR)/$(usbguard_confdir)
	$(MKDIR_P) $(DESTDIR)/$(usbguard_confdir)/IPCAccessControl.d
	$(MKDIR_P) $(DESTDIR)/${localstatedir}/log/usbguard
	chmod 0700 $(DESTDIR)/${localstatedir}/log/usbguard
	$(INSTALL) -m 600 $(top_builddir)/usbguard-daemon.conf \
	  $(DESTDIR)/$(usbguard_confdir)/usbguard-daemon.conf
	if ! test -f "$(DESTDIR)/$(usbguard_confdir)/rules.conf"; then \
	  touch $(DESTDIR)/$(usbguard_confdir)/rules.conf && \
	  chmod 600 $(DESTDIR)/$(usbguard_confdir)/rules.conf; \
	fi

uninstall-daemon-conf:
	rm -f $(DESTDIR)/$(usbguard_confdir)/usbguard-daemon.conf

if SYSTEMD_SUPPORT_ENABLED
CLEANFILES+=\
	$(top_builddir)/usbguard.service

usbguard.service: $(top_srcdir)/usbguard.service.in
	$(SED) \
	  -e "s|%sbindir%|${sbindir}|" \
	  -e "s|%sysconfdir%|${sysconfdir}|" \
	  -e "s|%localstatedir%|${localstatedir}|" \
	   $^ > $@ || rm -f $@

install-systemd-service: $(top_builddir)/usbguard.service
	$(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR)
	$(INSTALL) -m 644 $(top_builddir)/usbguard.service \
	 $(DESTDIR)$(SYSTEMD_UNIT_DIR)/usbguard.service

uninstall-systemd-service:
	rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/usbguard.service
else
install-systemd-service:
uninstall-systemd-service:
endif

if DOCS_ENABLED
man8_MANS=\
	$(top_builddir)/doc/man/usbguard-daemon.8

man5_MANS=\
	$(top_builddir)/doc/man/usbguard-daemon.conf.5 \
	$(top_builddir)/doc/man/usbguard-rules.conf.5

man1_MANS=\
	$(top_builddir)/doc/man/usbguard.1
else
man8_MANS=
man5_MANS=
man1_MANS=
endif

AM_CPPFLAGS=\
	-I$(top_srcdir)/src \
	-I$(top_srcdir)/src/Library/public

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libusbguard.pc

lib_LTLIBRARIES=\
	libusbguard.la

libusbguard_la_CPPFLAGS=\
	-fPIC \
	-I$(top_srcdir)/src \
	-I$(top_srcdir)/src/Library \
	-I$(top_srcdir)/src/Library/public \
	-I$(top_builddir)/src/Library/IPC \
	${BOOST_CPPFLAGS} \
	${PTHREAD_CPPFLAGS} \
	@qb_CFLAGS@ \
	@protobuf_CFLAGS@ \
	@crypto_CFLAGS@ \
	@pegtl_CFLAGS@ \
	@umockdev_CFLAGS@

libusbguard_la_LDFLAGS=\
	-no-undefined \
	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
	${BOOST_LDFLAGS}

libusbguard_la_LIBADD=\
	@qb_LIBS@ \
	@protobuf_LIBS@ \
	@crypto_LIBS@ \
	@pegtl_LIBS@ \
	@atomic_LIBS@ \
	@umockdev_LIBS@ \
	${BOOST_IOSTREAMS_LIB} \
	${PTHREAD_CFLAGS} \
	${PTHREAD_LIBS}

EXTRA_DIST+=\
	src/Library/IPC/Devices.proto \
	src/Library/IPC/Exception.proto \
	src/Library/IPC/Message.proto \
	src/Library/IPC/Policy.proto \
	src/Library/IPC/Rule.proto \
	src/Library/IPC/Parameter.proto

nodist_libusbguard_la_SOURCES=\
	src/Library/IPC/Message.pb.cc \
	src/Library/IPC/Message.pb.h \
	src/Library/IPC/Rule.pb.cc \
	src/Library/IPC/Rule.pb.h \
	src/Library/IPC/Devices.pb.cc \
	src/Library/IPC/Devices.pb.h \
	src/Library/IPC/Exception.pb.cc \
	src/Library/IPC/Exception.pb.h \
	src/Library/IPC/Policy.pb.cc \
	src/Library/IPC/Policy.pb.h \
	src/Library/IPC/Parameter.pb.cc \
	src/Library/IPC/Parameter.pb.h

BUILT_SOURCES+=\
	$(nodist_libusbguard_la_SOURCES)

CLEANFILES+=\
	$(nodist_libusbguard_la_SOURCES)

libusbguard_la_SOURCES=\
	src/Common/ByteOrder.hpp \
	src/Common/FDInputStream.hpp \
	src/Common/Thread.hpp \
	src/Common/Utility.cpp \
	src/Common/Utility.hpp \
	src/Common/LDAPUtil.cpp \
	src/Common/LDAPUtil.hpp \
	src/Library/AllowedMatchesCondition.cpp \
	src/Library/AllowedMatchesCondition.hpp \
	src/Library/Base64.cpp \
	src/Library/Base64.hpp \
	src/Library/ConfigFilePrivate.cpp \
	src/Library/ConfigFilePrivate.hpp \
	src/Library/DeviceBase.cpp \
	src/Library/DeviceBase.hpp \
	src/Library/DeviceManagerBase.cpp \
	src/Library/DeviceManagerBase.hpp \
	src/Library/DeviceManagerPrivate.cpp \
	src/Library/DeviceManagerPrivate.hpp \
	src/Library/DevicePrivate.cpp \
	src/Library/DevicePrivate.hpp \
	src/Library/FixedStateCondition.cpp \
	src/Library/FixedStateCondition.hpp \
	src/Library/Hash.cpp \
	src/Library/Hash.hpp \
	src/Library/IPCClientPrivate.cpp \
	src/Library/IPCClientPrivate.hpp \
	src/Library/IPCPrivate.cpp \
	src/Library/IPCPrivate.hpp \
	src/Library/IPCServerPrivate.cpp \
	src/Library/IPCServerPrivate.hpp \
	src/Library/Init.cpp \
	src/Library/KeyValueParserPrivate.cpp \
	src/Library/KeyValueParserPrivate.hpp \
	src/Library/LocaltimeCondition.cpp \
	src/Library/LocaltimeCondition.hpp \
	src/Library/RandomStateCondition.cpp \
	src/Library/RandomStateCondition.hpp \
	src/Library/RuleAppliedCondition.cpp \
	src/Library/RuleAppliedCondition.hpp \
	src/Library/RuleEvaluatedCondition.cpp \
	src/Library/RuleEvaluatedCondition.hpp \
	src/Library/RuleParser/Actions.hpp \
	src/Library/RuleParser/Grammar.hpp \
	src/Library/RulePrivate.cpp \
	src/Library/RulePrivate.hpp \
	src/Library/SysFSDevice.cpp \
	src/Library/SysFSDevice.hpp \
	src/Library/UEvent.cpp \
	src/Library/UEvent.hpp \
	src/Library/UEventDeviceManager.cpp \
	src/Library/UEventDeviceManager.hpp \
	src/Library/UEventParser.cpp \
	src/Library/UEventParser.hpp \
	src/Library/UMockdevDeviceManager.cpp \
	src/Library/UMockdevDeviceManager.hpp \
	src/Library/UMockdevDeviceDefinition.cpp \
	src/Library/UMockdevDeviceDefinition.hpp \
	src/Library/Utility.cpp \
	src/Library/Utility.hpp \
	src/Library/public/usbguard/Audit.cpp \
	src/Library/public/usbguard/ConfigFile.cpp \
	src/Library/public/usbguard/Device.cpp \
	src/Library/public/usbguard/DeviceManager.cpp \
	src/Library/public/usbguard/DeviceManagerHooks.cpp \
	src/Library/public/usbguard/IPCClient.cpp \
	src/Library/public/usbguard/IPCServer.cpp \
	src/Library/public/usbguard/KeyValueParser.cpp \
	src/Library/public/usbguard/Logger.cpp \
	src/Library/public/usbguard/MemoryRuleSet.cpp \
	src/Library/public/usbguard/Policy.cpp \
	src/Library/public/usbguard/Rule.cpp \
	src/Library/public/usbguard/RuleCondition.cpp \
	src/Library/public/usbguard/RuleParser.cpp \
	src/Library/public/usbguard/RuleParser.hpp \
	src/Library/public/usbguard/RuleSet.cpp \
	src/Library/public/usbguard/Typedefs.cpp \
	src/Library/public/usbguard/USB.cpp \
	src/Library/public/usbguard/USBGuard.cpp

pkginclude_HEADERS=\
	src/Library/public/usbguard/Audit.hpp \
	src/Library/public/usbguard/ConfigFile.hpp \
	src/Library/public/usbguard/Device.hpp \
	src/Library/public/usbguard/DeviceManager.hpp \
	src/Library/public/usbguard/DeviceManagerHooks.hpp \
	src/Library/public/usbguard/Exception.hpp \
	src/Library/public/usbguard/IPCClient.hpp \
	src/Library/public/usbguard/IPCServer.hpp \
	src/Library/public/usbguard/Interface.hpp \
	src/Library/public/usbguard/KeyValueParser.hpp \
	src/Library/public/usbguard/Logger.hpp \
	src/Library/public/usbguard/MemoryRuleSet.hpp \
	src/Library/public/usbguard/Policy.hpp \
	src/Library/public/usbguard/Predicates.hpp \
	src/Library/public/usbguard/Rule.hpp \
	src/Library/public/usbguard/RuleCondition.hpp \
	src/Library/public/usbguard/RuleSet.hpp \
	src/Library/public/usbguard/Typedefs.hpp \
	src/Library/public/usbguard/USB.hpp \
	src/Library/public/usbguard/USBGuard.hpp

# Workaround for generated protobuf code mishaps
#```
# error: no previous declaration for 'void usbguard::IPC::protobuf_Message_2eproto::AddDescriptorImpl()' [-Werror=missing-declarations]
#  void AddDescriptorImpl() {
#       ^~~~~~~~~~~~~~~~~
#```
%.pb.lo : CXXFLAGS += -Wno-missing-declarations

%.pb.cc %.pb.h: %.proto
	$(MKDIR_P) $(top_builddir)/src/Library/IPC
	@PROTOC@ --cpp_out=$(top_builddir)/src/Library/IPC --proto_path=$(top_srcdir)/src/Library/IPC "$<"
	sed -i -e '1i#ifndef __clang_analyzer__' -e '$$a#endif' "$@"

sbin_PROGRAMS=\
	usbguard-daemon

usbguard_daemon_SOURCES=\
	src/Daemon/Daemon.cpp \
	src/Daemon/Daemon.hpp \
	src/Daemon/main.cpp \
	src/Daemon/FileRuleSet.cpp \
	src/Daemon/FileRuleSet.hpp \
	src/Daemon/LDAPHandler.cpp \
	src/Daemon/LDAPHandler.hpp \
	src/Daemon/LDAPRuleSet.cpp \
	src/Daemon/LDAPRuleSet.hpp \
	src/Daemon/NSHandler.cpp \
	src/Daemon/NSHandler.hpp \
	src/Daemon/RuleSetFactory.cpp \
	src/Daemon/RuleSetFactory.hpp \
	src/Daemon/Seccomp.c \
	src/Daemon/Seccomp.h \
	src/Common/Utility.hpp \
	src/Common/Utility.cpp \
	src/Daemon/FileAuditBackend.hpp \
	src/Daemon/FileAuditBackend.cpp \
	src/Daemon/LinuxAuditBackend.hpp \
	src/Daemon/LinuxAuditBackend.cpp

usbguard_daemon_CXXFLAGS=\
	$(PTHREAD_CFLAGS)

usbguard_daemon_CPPFLAGS=\
	-fPIE \
	$(AM_CPPFLAGS) \
	@ldap_CFLAGS@ \
	@seccomp_CFLAGS@ \
	@libcapng_CFLAGS@ \
	@audit_CFLAGS@

usbguard_daemon_LDADD=\
	$(top_builddir)/libusbguard.la \
	@ldap_LIBS@ \
	@seccomp_LIBS@ \
	@libcapng_LIBS@ \
	@audit_LIBS@ \
	$(PTHREAD_LIBS)

EXTRA_DIST +=\
	README.adoc \
	src/ThirdParty/Catch \
	src/ThirdParty/PEGTL

bin_PROGRAMS=\
	usbguard \
	usbguard-rule-parser

usbguard_SOURCES=\
	src/CLI/usbguard.cpp \
	src/CLI/usbguard.hpp \
	src/CLI/usbguard-list-devices.hpp \
	src/CLI/usbguard-list-devices.cpp \
	src/CLI/usbguard-allow-device.hpp \
	src/CLI/usbguard-allow-device.cpp \
	src/CLI/usbguard-block-device.hpp \
	src/CLI/usbguard-block-device.cpp \
	src/CLI/usbguard-reject-device.hpp \
	src/CLI/usbguard-reject-device.cpp \
	src/CLI/usbguard-apply-device-policy.hpp \
	src/CLI/usbguard-apply-device-policy.cpp \
	src/CLI/usbguard-list-rules.hpp \
	src/CLI/usbguard-list-rules.cpp \
	src/CLI/usbguard-append-rule.hpp \
	src/CLI/usbguard-append-rule.cpp \
	src/CLI/usbguard-remove-rule.hpp \
	src/CLI/usbguard-remove-rule.cpp \
	src/CLI/usbguard-generate-policy.cpp \
	src/CLI/usbguard-generate-policy.hpp \
	src/CLI/usbguard-watch.hpp \
	src/CLI/usbguard-watch.cpp \
	src/CLI/IPCSignalWatcher.hpp \
	src/CLI/IPCSignalWatcher.cpp \
	src/CLI/PolicyGenerator.hpp \
	src/CLI/PolicyGenerator.cpp \
	src/CLI/usbguard-read-descriptor.hpp \
	src/CLI/usbguard-read-descriptor.cpp \
	src/CLI/usbguard-set-parameter.hpp \
	src/CLI/usbguard-set-parameter.cpp \
	src/CLI/usbguard-get-parameter.hpp \
	src/CLI/usbguard-get-parameter.cpp \
	src/CLI/usbguard-add-user.cpp \
	src/CLI/usbguard-add-user.hpp \
	src/CLI/usbguard-remove-user.cpp \
	src/CLI/usbguard-remove-user.hpp \
	src/CLI/usbguard-print-version.cpp \
	src/CLI/usbguard-print-version.hpp

usbguard_CXXFLAGS=\
	$(PTHREAD_CFLAGS)

usbguard_CPPFLAGS=\
	-fPIE \
	$(AM_CPPFLAGS) \
	-I$(top_srcdir)/src/CLI

usbguard_LDADD=\
	$(top_builddir)/libusbguard.la \
	${PTHREAD_LIBS}

if ENABLE_BASH_COMPLETION
bashcompletiondir = $(BASH_COMPLETION_DIR)
dist_bashcompletion_DATA = $(top_srcdir)/scripts/bash_completion/usbguard
endif

usbguard_rule_parser_SOURCES=\
	src/CLI/usbguard-rule-parser.cpp

usbguard_rule_parser_CPPFLAGS=\
	-fPIE \
	$(AM_CPPFLAGS) \
	-I$(top_srcdir)/src/CLI

usbguard_rule_parser_LDADD=\
	$(top_builddir)/libusbguard.la

#
# DBus Bridge
#
if DBUS_ENABLED
sbin_PROGRAMS+= usbguard-dbus

if DOCS_ENABLED
man8_MANS+=\
	$(top_builddir)/doc/man/usbguard-dbus.8
endif

BUILT_SOURCES+=\
	src/DBus/DBusInterface.xml.cstr \
	src/DBus/org.usbguard1.service \
	src/DBus/usbguard-dbus.service

EXTRA_DIST+=\
	src/DBus/org.usbguard1.conf \
	src/DBus/org.usbguard1.service.in \
	src/DBus/usbguard-dbus.service.in \
	src/DBus/org.usbguard1.policy \
	src/DBus/DBusInterface.xml

CLEANFILES+=\
	$(top_builddir)/src/DBus/org.usbguard1.service \
	$(top_builddir)/src/DBus/usbguard-dbus.service \
	$(top_builddir)/src/DBus/DBusInterface.xml.cstr

usbguard_dbus_SOURCES=\
	src/DBus/gdbus-server.cpp \
	src/DBus/DBusBridge.cpp \
	src/DBus/DBusBridge.hpp

usbguard_dbus_CPPFLAGS=\
	-fPIE \
	$(AM_CPPFLAGS) \
	-I$(top_builddir)/src/DBus \
	@dbus_CFLAGS@

usbguard_dbus_LDADD=\
	$(top_builddir)/libusbguard.la \
	@dbus_LIBS@

%.xml:
	xmllint "$(top_srcdir)/$@" > /dev/null

%.xml.cstr: %.xml
	XMLLINT_INDENT="" xmllint --noblanks --format "$<" |\
	  sed -n -e '/<!--/,/-->/ d; s|\"|\\"|g; s|.*|"&"|; p' > "$(top_builddir)/$@"

%.service: %.service.in
	sed -e "s|%{sbindir}%|$(sbindir)|" "$<" > "$(top_builddir)/$@"

install-data-dbus: $(top_builddir)/src/DBus/org.usbguard1.service install-polkit-policy install-systemd-dbus-service
	$(MKDIR_P) $(DESTDIR)$(DBUS_SERVICES_DIR) && \
	  $(INSTALL_DATA) $(top_builddir)/src/DBus/org.usbguard1.service $(DESTDIR)$(DBUS_SERVICES_DIR)
	$(MKDIR_P) $(DESTDIR)$(DBUS_BUSCONFIG_DIR) && \
	  $(INSTALL_DATA) $(top_srcdir)/src/DBus/org.usbguard1.conf $(DESTDIR)$(DBUS_BUSCONFIG_DIR)

uninstall-data-dbus: uninstall-polkit-policy uninstall-systemd-dbus-service
	rm -f $(DESTDIR)$(DBUS_SERVICES_DIR)/org.usbguard1.service
	-rmdir $(DESTDIR)$(DBUS_SERVICES_DIR)
	rm -f $(DESTDIR)$(DBUS_BUSCONFIG_DIR)/org.usbguard1.conf
	-rmdir $(DESTDIR)$(DBUS_BUSCONFIG_DIR)

dbus-docs: $(top_srcdir)/src/DBus/DBusInterface.xml
#
# Copy the input files to builddir because gdbus-codegen
# doesn't provide an option to store the output files somewhere
# else than in the directory where the input files are. And we
# don't want to create files in the srcdir when building.
#
	$(MKDIR_P) "$(top_builddir)/src/DBus"
	cp "$<" "$(top_builddir)/src/DBus/"
	$(GDBUS_CODEGEN) --interface-prefix org.usbguard --generate-docbook=docbook \
	  "$(top_builddir)/src/DBus/DBusInterface.xml"
	for docbook in $(top_builddir)/docbook-org.usbguard.*.xml; do \
	  $(XSLTPROC) -o "$$(basename -s .xml $$docbook).html" \
	  "$(top_srcdir)/src/ThirdParty/xsl-stylesheets/xhtml-1_1/docbook.xsl" \
	  "$(top_builddir)/$$docbook"; \
	done

if POLICYKIT_ENABLED
install-polkit-policy:
	$(MKDIR_P) $(DESTDIR)$(POLKIT_POLICY_DIR) && \
	  $(INSTALL_DATA) $(top_srcdir)/src/DBus/org.usbguard1.policy $(DESTDIR)$(POLKIT_POLICY_DIR)

uninstall-polkit-policy:
	rm -f $(DESTDIR)$(POLKIT_POLICY_DIR)/org.usbguard1.policy
	-rmdir $(DESTDIR)$(POLKIT_POLICY_DIR)

else
install-polkit-policy:
uninstall-polkit-policy:
endif

if SYSTEMD_SUPPORT_ENABLED
install-systemd-dbus-service: $(top_builddir)/src/DBus/usbguard-dbus.service
	$(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR) && \
	  $(INSTALL_DATA) $(top_builddir)/src/DBus/usbguard-dbus.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)

uninstall-systemd-dbus-service:
	rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/usbguard-dbus.service
	-rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR)

else
install-systemd-dbus-service:
uninstall-systemd-dbus-service:
endif
else
install-data-dbus:
uninstall-data-dbus:
endif #DBUS_ENABLED

$(DIST_ARCHIVES):
	test -f "$@" || $(MAKE) dist

release-files: $(DIST_ARCHIVES)
	$(eval RELEASE_DIR:="release.$(PACKAGE)-$(VERSION)")
	$(eval GPG:=$(shell test -n "$$QUBES_GPG_DOMAIN" && echo qubes-gpg-client-wrapper || echo gpg2))
	$(MKDIR_P) $(RELEASE_DIR)
	cp $(DIST_ARCHIVES) $(RELEASE_DIR)
	cd $(RELEASE_DIR) && $(GPG) -b -a -o - $(DIST_ARCHIVES) > $(DIST_ARCHIVES).sig
	cd $(RELEASE_DIR) && openssl sha256 $(DIST_ARCHIVES) > $(DIST_ARCHIVES).sum

analyze-clang:
	$(eval ANALYSIS_ROOT:=$(shell mktemp -d -t usbguard-analyze-clang.XXXXXX))
	$(eval JOBS:=$(shell grep -c '^processor' /proc/cpuinfo 2> /dev/null || echo 1))
	cd "$(ANALYSIS_ROOT)" && scan-build $(abs_top_srcdir)/configure $(ANALYZE_CONFIGURE_ARGS)
	cd "$(ANALYSIS_ROOT)" && scan-build \
	  --status-bugs -maxloop 8 -disable-checker deadcode.DeadStores -o "$(abs_top_builddir)" \
	  make -j$(JOBS)
	rm -rf "$(ANALYSIS_ROOT)"

#
# overriding 'check' target to enable "make check" to perform build as well
#
check: all
	$(MAKE) $(AM_MAKEFLAGS) check-recursive


================================================
FILE: README.adoc
================================================
USBGuard
========
:toc:

[.clearfix]
--
[.left]
image::https://travis-ci.com/USBGuard/usbguard.svg?branch=master[Travis CI, link=https://travis-ci.com/USBGuard/usbguard]
[.left]
image::https://coveralls.io/repos/github/USBGuard/usbguard/badge.svg[Coverage, link=https://coveralls.io/github/USBGuard/usbguard]
[.left]
image::https://img.shields.io/github/license/USBGuard/usbguard.svg[License, link=https://github.com/USBGuard/usbguard/#license]
--

== About

USBGuard is a software framework for implementing USB device authorization policies (what kind of USB devices are authorized) as well as method of use policies (how a USB device may interact with the system).
Simply put, it is a USB device allowlisting tool.

== Documentation

 * User Guide (TBA)
 * Manual Pages
 ** <<doc/man/usbguard-daemon.8.adoc#name, usbguard-daemon(8)>>
 ** <<doc/man/usbguard-daemon.conf.5.adoc#name, usbguard-daemon.conf(5)>>
 ** <<doc/man/usbguard-rules.conf.5.adoc#name, usbguard-rules.conf(5)>>
 ** <<doc/man/usbguard.1.adoc#name, usbguard(1)>>
 ** <<doc/man/usbguard-dbus.8.adoc#name, usbguard-dbus(8)>>

== Compilation & Installation

WARNING: *Prior to starting the USBGuard daemon (or service) for the first time*
         (but after installation)
         we need to
         generate a rules file for USBGuard so that the currently attached
         USB devices (in particular mouse and keyboard) keep working
         so that you will not **get locked out of your system**.
         More on that below at <<before-the-first-start, Before the First Start>>.

To compile the source code, you will require at least C{plus}{plus}17. +
If you are compiling sources from a release tarball, you'll need the development files for:

 * https://github.com/ClusterLabs/libqb[libqb] - used for local UNIX socket based IPC
 * https://github.com/google/protobuf[protobuf] - used for IPC message (de)serialization
 * https://download.libsodium.org[libsodium] or https://www.gnupg.org/software/libgcrypt[libgcrypt] - used for hashing
 * https://asciidoc.org[asciidoc (a2x)] - needed to generate documentation

Optionally, you may want to install:

 * https://github.com/seccomp/libseccomp[libseccomp] - used to implement a syscall allowlist
 * https://people.redhat.com/sgrubb/libcap-ng/[libcap-ng] - used to drop process capabilities

If you are on a Debian based GNU/Linux distribution like Ubuntu 21.10,
installation of all build dependencies would be something like this:

    $ sudo apt update && \
      sudo apt install --no-install-recommends -V \
        asciidoc autoconf automake bash-completion build-essential catch2 \
        docbook-xml docbook-xsl git ldap-utils libaudit-dev libcap-ng-dev \
        libdbus-glib-1-dev libldap-dev libpolkit-gobject-1-dev libprotobuf-dev \
        libqb-dev libseccomp-dev libsodium-dev libtool libxml2-utils \
        libumockdev-dev pkg-config protobuf-compiler sudo tao-pegtl-dev xsltproc

And then do:

    $ ./configure        # for arguments of interest see below
    $ make
    $ make check         # if you would like to run the test suite
    $ sudo make install

Configure arguments that deserve explicit mentioning (quoting `./configure --help` output):

      --enable-systemd        install the systemd service unit file (default=no)

      --with-crypto-library   Select crypto backend library. Supported values:
                              sodium, gcrypt, openssl.

      --with-bundled-catch    Build using the bundled Catch library

      --with-bundled-pegtl    Build using the bundled PEGTL library

      --with-ldap             Build USBGuard with ldap support

If you want to compile the sources in a cloned repository, you'll have to run the `./autogen.sh` script.
It will fetch the sources (via git submodules) of https://github.com/taocpp/PEGTL/[PEGTL] and https://github.com/philsquared/Catch[Catch].
The script will then initialize the autotools based build system, e.g. generate the `./configure` script.

== Before the First Start

*Prior to starting the USBGuard daemon (or service) for the first time*
(but after installation)
we need to
generate a rules file for USBGuard so that the currently attached
USB devices (in particular mouse and keyboard) keep working
so that you will not **get locked out of your system**.

A rules file can be generated like this:

    $ sudo sh -c 'usbguard generate-policy > /etc/usbguard/rules.conf'

After that, you can safely start service `usbguard`:

    $ sudo systemctl start usbguard.service

And you can make systemd start the service every time your boot your machine:

    $ sudo systemctl enable usbguard.service

== License

Copyright (C) 2015-2019 Red Hat, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.


================================================
FILE: RELEASE_PROCESS.md
================================================
# USBGuard Release Process

1. Clean up any artifacts from your local repository.

```
$ git clean -xfd
```

2. Setup build directory.

```
$ ./autogen.sh
$ mkdir build && cd build
$ ../configure --enable-full-test-suite --with-crypto-library=gcrypt --with-ldap
$ make
```

3. Run the test suite. All the tests must pass.

```
$ sudo make check
```

4. Compare previous lib version with current.

```
$ abidiff --stat ../abi-ref/libusbguard.so.abi .libs/libusbguard.so
$ cd ..
```

5. Update the lib version (CURRENT, REVISION, AGE) in `configure.ac` according to comments.

6. Update ABI reference.

```
$ abidw --out-file abi-ref/libusbguard.so.abi build/.libs/libusbguard.so
$ sudo rm -rf build
```

7. Update the `VERSION` file and `CHANGELOG.md`. Commit your changes.

8. Build the final release tarball.

```
$ ./autogen.sh
$ mkdir build; cd build
$ ../configure --with-crypto-library=gcrypt
$ make dist
```

9. Tag the release with a signed tag.

```
$ git tag -s -m "usbguard-0.x.y" usbguard-0.x.y
$ git push origin usbguard-0.x.x
```

10. Hash and sign the release.

```
$ sha256sum usbguard-0.x.y.tar.gz > usbguard-0.x.y.tar.gz.sum
$ gpg --armor --detach-sign usbguard-0.x.y.tar.gz
$ gpg --clearsign usbguard-0.x.y.tar.gz.sum
```

11. Create a new GitHub release using the associated tag; add the relevant section from CHANGELOG.md. Upload:

    * usbguard-0.x.y.tar.gz
    * usbguard-0.x.y.tar.gz.asc
    * usbguard-0.x.y.tar.gz.sum
    * usbguard-0.x.y.tar.gz.sum.asc


================================================
FILE: VERSION
================================================
1.1.4


================================================
FILE: abi-ref/libusbguard.so.abi
================================================
<abi-corpus version='2.4' path='build/.libs/libusbguard.so' architecture='elf-amd-x86_64' soname='libusbguard.so.1'>
  <elf-needed>
    <dependency name='libqb.so.100'/>
    <dependency name='libprotobuf.so.30'/>
    <dependency name='libgcrypt.so.20'/>
    <dependency name='libgpg-error.so.0'/>
    <dependency name='libumockdev.so.0'/>
    <dependency name='libgobject-2.0.so.0'/>
    <dependency name='libglib-2.0.so.0'/>
    <dependency name='libstdc++.so.6'/>
    <dependency name='libm.so.6'/>
    <dependency name='libgcc_s.so.1'/>
    <dependency name='libc.so.6'/>
    <dependency name='ld-linux-x86-64.so.2'/>
  </elf-needed>
  <elf-function-symbols>
    <elf-symbol name='_ZN8usbguard10AuditEvent11setCommitedEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEvent6commitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEvent6setKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEvent7failureEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEvent7successEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEventC1EOS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEventC1ERKNS_13AuditIdentityERSt10shared_ptrINS_12AuditBackendEE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard10AuditEventC2ERKNS_13AuditIdentityERSt10shared_ptrINS_12AuditBackendEE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEventC2EOS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard10AuditEventC1EOS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEventC2ERKNS_13AuditIdentityERSt10shared_ptrINS_12AuditBackendEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEventD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard10AuditEventD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10AuditEventD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFile15setSettingValueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS6_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFile4openERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFile5closeEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFile5writeEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFileC1ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard10ConfigFileC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFileC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFileD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard10ConfigFileD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10ConfigFileD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10Predicates10isSubsetOfINS_11USBDeviceIDEEEbRKT_S5_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10Predicates10isSubsetOfINS_16USBInterfaceTypeEEEbRKT_S5_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10Predicates10isSubsetOfINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKT_SA_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10Predicates12isSupersetOfINS_11USBDeviceIDEEEbRKT_S5_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10Predicates12isSupersetOfINS_16USBInterfaceTypeEEEbRKT_S5_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard10Predicates12isSupersetOfINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKT_SA_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceID11setVendorIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceID12setProductIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceID13checkDeviceIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard11USBDeviceIDC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDC1ERKS0_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDC1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDC2ERKS0_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard11USBDeviceIDC1ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDC2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard11USBDeviceIDC1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard11USBDeviceIDD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard11USBDeviceIDaSERKS0_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12AuditBackend6commitERKNS_10AuditEventE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12AuditBackendC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard12AuditBackendC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12AuditBackendC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12AuditBackendD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12AuditBackendD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12AuditBackendD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard12AuditBackendD1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard12toRuleStringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES6_RKT_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13AuditIdentityC1Eji' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13AuditIdentityC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13AuditIdentityC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13AuditIdentityC2Eji' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13AuditIdentityC1Eji' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13AuditIdentityC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager11DeviceEventENS0_9EventTypeESt10shared_ptrINS_6DeviceEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager12insertDeviceESt10shared_ptrINS_6DeviceEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager12removeDeviceEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager13getDeviceListERKNS_4RuleE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager13getDeviceListEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager15DeviceExceptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager17eventTypeToStringB5cxx11ENS0_9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager18eventTypeToIntegerENS0_9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager20eventTypeFromIntegerEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager20setAuthorizedDefaultENS0_21AuthorizedDefaultTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager29authorizedDefaultTypeToStringB5cxx11ENS0_21AuthorizedDefaultTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager30authorizedDefaultTypeToIntegerENS0_21AuthorizedDefaultTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager31authorizedDefaultTypeFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager31setRestoreControllerDeviceStateEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager32authorizedDefaultTypeFromIntegerEi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager6createERNS_18DeviceManagerHooksERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManager9getDeviceEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13DeviceManagerC2ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerC1ERNS_18DeviceManagerHooksE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13DeviceManagerC2ERNS_18DeviceManagerHooksE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerC2ERNS_18DeviceManagerHooksE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13DeviceManagerD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManagerD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13DeviceManageraSERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSet4loadEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSet4saveEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetC1EPNS_9InterfaceE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13MemoryRuleSetC2ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetC2EPNS_9InterfaceE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13MemoryRuleSetC1EPNS_9InterfaceE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetD0Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard13MemoryRuleSetD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13MemoryRuleSetaSERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC1EOS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13RuleConditionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC2EOS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13RuleConditionC1EOS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13RuleConditionC1ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard13RuleConditionC1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard13RuleConditionD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionaSEOS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionaSERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditiondeEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard13RuleConditionptEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParser10viewConfigEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParser11parseStreamERSi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParser6getMapB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParser9parseLineERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParserC1ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_bb' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard14KeyValueParserC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_bb' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParserC1ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEbb' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard14KeyValueParserC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEbb' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParserC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_bb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParserC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEbb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParserD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard14KeyValueParserD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard14KeyValueParserD1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceType10typeStringB5cxx11Ehhhh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC1ERKNS_22USBInterfaceDescriptorEh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC1Ehhhh' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard16USBInterfaceTypeC2Ehhhh' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard16USBInterfaceTypeC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC2ERKNS_22USBInterfaceDescriptorEh' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard16USBInterfaceTypeC1ERKNS_22USBInterfaceDescriptorEh' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard16USBInterfaceTypeC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC2Ehhhh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard16USBInterfaceTypeC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBase17getImplementationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBase17getImplementationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_b' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBase4finiEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBase4initEPNS_9InterfaceE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBase8evaluateERKNS_4RuleE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_b' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard17RuleConditionBaseC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_b' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard17RuleConditionBaseC2ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_b' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard17RuleConditionBaseC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard17RuleConditionBaseD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard17RuleConditionBaseD1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard18DeviceManagerHooks17dmHookDeviceEventENS_13DeviceManager9EventTypeESt10shared_ptrINS_6DeviceEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParser13delDescriptorEh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParser13setDescriptorEhRKNS_13USBDescriptorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParser5parseERSi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParserC1ERNS_24USBDescriptorParserHooksE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParserC2ERNS_24USBDescriptorParserHooksE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard19USBDescriptorParserC1ERNS_24USBDescriptorParserHooksE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParserD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard19USBDescriptorParserD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19USBDescriptorParserD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19getDaemonConfigPathB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard19parseRuleFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_mb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard24USBDescriptorParserHooks17loadUSBDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard24USBDescriptorParserHooks18parseUSBDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS3_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard24USBDescriptorParserHooksC1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard24USBDescriptorParserHooksC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard24USBDescriptorParserHooksC2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard24USBParseDeviceDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS2_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard25USBParseUnknownDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS2_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard26USBParseEndpointDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS2_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard27USBParseInterfaceDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS2_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard28getIPCAccessControlFilesPathB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard31USBParseAudioEndpointDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS2_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard31USBParseConfigurationDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorEPS2_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard31getIPCAccessControlFileBasenameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule10fromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule10setViaPortERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule11setDeviceIDERKNS_11USBDeviceIDE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule13attributeHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule13attributeNameB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule13setParentHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule14attributeLabelB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule14targetToStringB5cxx11ENS0_6TargetE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule15attributeSerialB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule15targetToIntegerENS0_6TargetE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule16attributeViaPortB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule16targetFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule17attributeDeviceIDEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule17targetFromIntegerEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule18setWithConnectTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule19attributeConditionsEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule19attributeParentHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule19setOperatorToStringB5cxx11ERKNS0_11SetOperatorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule21setOperatorFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule22attributeWithInterfaceEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule22updateMetaDataCountersEbb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule24attributeWithConnectTypeB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule7setHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule7setNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule8internalEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule8setLabelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEE14setSetOperatorENS0_11SetOperatorE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEE3setERKS2_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEE6appendERKS2_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEEC1EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEEC2EPKc' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEEC2EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEED1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEED2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEED2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_11USBDeviceIDEEaSERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEE14setSetOperatorENS0_11SetOperatorE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEE6appendEOS2_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEE6valuesEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEEC1EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEEC2EPKc' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEEC2EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEED1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEED2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEED2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_13RuleConditionEEaSERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEE14setSetOperatorENS0_11SetOperatorE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEE3setERKSt6vectorIS2_SaIS2_EENS0_11SetOperatorE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEE6appendERKS2_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEEC1EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEEC2EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEEC1EPKc' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEED1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEED2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEED2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINS_16USBInterfaceTypeEEaSERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE14setSetOperatorENS0_11SetOperatorE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3setERKS7_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE6appendERKS7_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC1EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2EPKc' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC1EPKc' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9AttributeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEaSERKS8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9appliesToERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9setRuleIDEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9setSerialERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4Rule9setTargetENS0_6TargetE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard4RuleC1ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard4RuleC1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard4RuleD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard4RuleaSERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit10setBackendESt10unique_ptrINS_12AuditBackendESt14default_deleteIS2_EE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit10setHidePIIEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11deviceEventERKNS_13AuditIdentityESt10shared_ptrINS_6DeviceEENS_13DeviceManager9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11deviceEventERKNS_13AuditIdentityESt10shared_ptrINS_6DeviceEES6_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11deviceEventESt10shared_ptrINS_6DeviceEENS_13DeviceManager9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11deviceEventESt10shared_ptrINS_6DeviceEES3_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventERKNS_13AuditIdentityESt10shared_ptrINS_4RuleEENS_6Policy9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventERKNS_13AuditIdentityESt10shared_ptrINS_4RuleEES6_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventERKNS_13AuditIdentityESt10shared_ptrINS_6DeviceEENS_4Rule6TargetES8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventERKNS_13AuditIdentityESt10shared_ptrINS_6DeviceEENS_6Policy9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventESt10shared_ptrINS_4RuleEENS_6Policy9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventESt10shared_ptrINS_4RuleEES3_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventESt10shared_ptrINS_6DeviceEENS_4Rule6TargetES5_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5Audit11policyEventESt10shared_ptrINS_6DeviceEENS_6Policy9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5AuditC1ERKNS_13AuditIdentityE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard5AuditC2ERKNS_13AuditIdentityE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard5AuditC2ERKNS_13AuditIdentityE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device10updateHashEPKvm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device10updateHashERSim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device11setDeviceIDERKNS_11USBDeviceIDE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device11setParentIDEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device12finalizeHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device13getDeviceRuleEbbb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device13setParentHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device14initializeHashEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device14refDeviceMutexEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device14setConnectTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device20loadDeviceDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device22loadEndpointDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device23loadInterfaceDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device24refMutableInterfaceTypesEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device27loadConfigurationDescriptorEPNS_19USBDescriptorParserEPKNS_13USBDescriptorE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device5setIDEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device7setNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device7setPortERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device9setSerialERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Device9setTargetENS_4Rule6TargetE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard6DeviceC2ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceC1ERNS_13DeviceManagerE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard6DeviceC2ERNS_13DeviceManagerE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceC2ERNS_13DeviceManagerE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard6DeviceD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6DeviceaSERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger10setEnabledEbNS_9LogStream5LevelE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger12setAuditFileEbRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger13addOutputSinkERSt10unique_ptrINS_7LogSinkESt14default_deleteIS2_EE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger13delOutputSinkERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger13setOutputFileEbRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger15setOutputSyslogEbRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger16setOutputConsoleEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger20addOutputSink_nolockERSt10unique_ptrINS_7LogSinkESt14default_deleteIS2_EE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger20delOutputSink_nolockERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger5writeERKNS_9LogStream6SourceENS1_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Logger9timestampB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6LoggerC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard6LoggerC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6LoggerC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6LoggerD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard6LoggerD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6LoggerD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6LoggerclERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiS8_NS_9LogStream5LevelE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy10appendRuleERKNS_4RuleEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy10getRuleSetEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy10removeRuleEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy10setRuleSetESt6vectorISt10shared_ptrINS_7RuleSetEESaIS4_EE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy10upsertRuleERKNS_4RuleES3_b' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy16setDefaultTargetENS_4Rule6TargetE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy17eventTypeToStringB5cxx11ENS0_9EventTypeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy4saveEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy7getRuleEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy8assignIDESt10shared_ptrINS_4RuleEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy8assignIDEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6Policy8getRulesEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6PolicyC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard6PolicyC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard6PolicyC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7LogSinkC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7LogSinkC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard7LogSinkC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7LogSinkD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7LogSinkD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard7LogSinkD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7LogSinkD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet10appendRuleERKNS_4RuleEjb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet10isWritableEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet10removeRuleEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet10upsertRuleERKNS_4RuleES3_b' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet11setWritableEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet13clearWritableEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet16setDefaultTargetENS_4Rule6TargetE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet7getRuleEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet8assignIDESt10shared_ptrINS_4RuleEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet8assignIDEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSet8getRulesEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetC1EPNS_9InterfaceE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard7RuleSetC2EPNS_9InterfaceE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard7RuleSetC2ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetC2EPNS_9InterfaceE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetD0Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard7RuleSetD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard7RuleSetaSERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard8LDAPUtil13serializeLDIFESt6vectorISt10shared_ptrINS_7RuleSetEESaIS4_EERSoRSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESE_St4lessISE_ESaISt4pairIKSE_SE_EEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard8LDAPUtil6toLDIFESt10shared_ptrIKNS_4RuleEERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_St4lessISB_ESaISt4pairIKSB_SB_EEEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionC1ERKS0_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9ExceptionC2ERKS0_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9ExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionC2ERKS0_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionD0Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9ExceptionD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9ExceptionD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient10appendRuleERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient10disconnectEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient10removeRuleEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient11listDevicesERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient12IPCConnectedEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient12getParameterERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient12setParameterERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient15IPCDisconnectedEbRKNS_12IPCExceptionE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient16ExceptionMessageERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient17applyDevicePolicyEjNS_4Rule6TargetEb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient19DevicePolicyAppliedEjNS_4Rule6TargetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient19DevicePolicyChangedEjNS_4Rule6TargetES2_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient19checkIPCPermissionsERKNS_9IPCServer13AccessControl7SectionERKNS2_9PrivilegeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient21DevicePresenceChangedEjNS_13DeviceManager9EventTypeENS_4Rule6TargetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient24PropertyParameterChangedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient4waitEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient7connectEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClient9listRulesERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClientC1Eb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClientC2Eb' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCClientC1Eb' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClientD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClientD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCClientD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCClientD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl12setPrivilegeENS1_7SectionENS1_9PrivilegeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl15sectionToStringB5cxx11ENS1_7SectionE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl17privilegeToStringB5cxx11ENS1_9PrivilegeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl17sectionFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl19privilegeFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl4loadERSi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl5clearEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl5mergeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControl5mergeERKS1_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC1ENS1_7SectionENS1_9PrivilegeE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC1ERKS1_' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServer13AccessControlC2ERKS1_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC2ENS1_7SectionENS1_9PrivilegeE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServer13AccessControlC1ENS1_7SectionENS1_9PrivilegeE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServer13AccessControlC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC2ERKS1_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServer13AccessControlC1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServer13AccessControlD2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13AccessControlaSERKS1_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13addAllowedGIDEjRKNS0_13AccessControlE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer13addAllowedUIDEjRKNS0_13AccessControlE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer16ExceptionMessageERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer18addAllowedUsernameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_13AccessControlE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer19DevicePolicyAppliedEjNS_4Rule6TargetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer19DevicePolicyChangedEjNS_4Rule6TargetES2_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer19addAllowedGroupnameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_13AccessControlE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer21DevicePresenceChangedEjNS_13DeviceManager9EventTypeENS_4Rule6TargetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer22checkAccessControlNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer24PropertyParameterChangedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_S8_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer4stopEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServer5startEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServerC1Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServerC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServerC2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServerD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServerD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9IPCServerD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' alias='_ZN8usbguard9IPCServerD1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9InterfaceC1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9InterfaceC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9InterfaceC2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStream13levelToStringB5cxx11ENS0_5LevelE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStream14sourceToStringB5cxx11ERKNS0_6SourceE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStream6SourceC1ERKS1_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9LogStream6SourceC2ERKS1_' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStream6SourceC2ERKS1_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStream6SourceD1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStream6SourceD2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN8usbguard9LogStream6SourceD1Ev' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamC1ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamC1ERNS_6LoggerERKNS0_6SourceENS0_5LevelE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamC2ERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamC2ERNS_6LoggerERKNS0_6SourceENS0_5LevelE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamD0Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamD1Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN8usbguard9LogStreamD2Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx11char_traitsIcE2eqERKcS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEC1EiSt13_Ios_Openmodem' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEC2EiSt13_Ios_Openmodem' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEC1EiSt13_Ios_Openmodem' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED0Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEED2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEC1ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEC2ERKS4_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEC2ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEC1ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEC2ERKS4_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEC2ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEC1ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEC2ERKS4_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEC2ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard4RuleESt6vectorIS2_SaIS2_EEEC1ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard4RuleESt6vectorIS2_SaIS2_EEEC2ERKS4_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKN8usbguard4RuleESt6vectorIS2_SaIS2_EEEC1ERKS4_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC1ERKS8_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS8_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC1IPS6_vEERKNS0_IT_SB_EE' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2IPS6_vEERKNS0_IT_SB_EE' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2IPS6_vEERKNS0_IT_SB_EE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC1ERKS6_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2ERKS6_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC1Ev' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2Ev' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC1IPS4_vEERKNS0_IT_S9_EE' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2IPS4_vEERKNS0_IT_S9_EE' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2ERKS6_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2IPS4_vEERKNS0_IT_S9_EE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEC1ERKS6_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEC2ERKS6_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEC2ERKS6_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard13DeviceManager21AuthorizedDefaultTypeEESt6vectorISB_SaISB_EEEC1ERKSD_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard13DeviceManager21AuthorizedDefaultTypeEESt6vectorISB_SaISB_EEEC2ERKSD_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard13DeviceManager21AuthorizedDefaultTypeEESt6vectorISB_SaISB_EEEC2ERKSD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard13DeviceManager21AuthorizedDefaultTypeEESt6vectorISB_SaISB_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule11SetOperatorEESt6vectorISB_SaISB_EEEC1ERKSD_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule11SetOperatorEESt6vectorISB_SaISB_EEEC2ERKSD_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule11SetOperatorEESt6vectorISB_SaISB_EEEC2ERKSD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule11SetOperatorEESt6vectorISB_SaISB_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule6TargetEESt6vectorISB_SaISB_EEEC1ERKSD_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule6TargetEESt6vectorISB_SaISB_EEEC2ERKSD_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule6TargetEESt6vectorISB_SaISB_EEEC2ERKSD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule6TargetEESt6vectorISB_SaISB_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl7SectionEESt6vectorISC_SaISC_EEEC1ERKSE_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl7SectionEESt6vectorISC_SaISC_EEEC2ERKSE_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl7SectionEESt6vectorISC_SaISC_EEEC2ERKSE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl7SectionEESt6vectorISC_SaISC_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl9PrivilegeEESt6vectorISC_SaISC_EEEC1ERKSE_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl9PrivilegeEESt6vectorISC_SaISC_EEEC2ERKSE_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl9PrivilegeEESt6vectorISC_SaISC_EEEC2ERKSE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl9PrivilegeEESt6vectorISC_SaISC_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt6vectorIS8_SaIS8_EEEC1ERKSA_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt6vectorIS8_SaIS8_EEEC2ERKSA_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt6vectorIS8_SaIS8_EEEC2ERKSA_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt6vectorIS8_SaIS8_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC1ERKS2_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKS2_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC1IPcvEERKNS0_IT_S8_EE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKS2_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2IPcvEERKNS0_IT_S8_EE' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC1IPcvEERKNS0_IT_S8_EE' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEC1ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEC2ERKS3_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEC2ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEC1ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEC2ERKS3_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEC2ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13USBDescriptorESt6vectorIS2_SaIS2_EEEC1ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13USBDescriptorESt6vectorIS2_SaIS2_EEEC2ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13USBDescriptorESt6vectorIS2_SaIS2_EEEC1ERKS3_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard13USBDescriptorESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEC1ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEC2ERKS3_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEC2ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard4RuleESt6vectorIS2_SaIS2_EEEC1ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard4RuleESt6vectorIS2_SaIS2_EEEC2ERKS3_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard4RuleESt6vectorIS2_SaIS2_EEEC2ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPN8usbguard4RuleESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC1ERKS7_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS7_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS7_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEmmEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIKN8usbguard4RuleEESt6vectorIS5_SaIS5_EEEC1ERKS6_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIKN8usbguard4RuleEESt6vectorIS5_SaIS5_EEEC2ERKS6_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIKN8usbguard4RuleEESt6vectorIS5_SaIS5_EEEC2ERKS6_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIKN8usbguard4RuleEESt6vectorIS5_SaIS5_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC1ERKS5_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC2ERKS5_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEC1ERKS5_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard6DeviceEESt6vectorIS4_SaIS4_EEEC1ERKS5_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard6DeviceEESt6vectorIS4_SaIS4_EEEC2ERKS5_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard6DeviceEESt6vectorIS4_SaIS4_EEEC2ERKS5_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard6DeviceEESt6vectorIS4_SaIS4_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEC1ERKS5_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEC2ERKS5_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEC2ERKS5_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC1ERKS9_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC2ERKS9_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC2ERKS9_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEmmEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIhmESt6vectorIS2_SaIS2_EEEC1ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIhmESt6vectorIS2_SaIS2_EEEC2ERKS3_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIhmESt6vectorIS2_SaIS2_EEEC2ERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIhmESt6vectorIS2_SaIS2_EEEmmEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIhmESt6vectorIS2_SaIS2_EEEppEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC1ERKS1_' type='func-type' binding='weak-binding' visibility='default-visibility' alias='_ZN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKS1_' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKS1_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxx6__stoaIddcJEEET0_PFT_PKT1_PPS3_DpT2_EPKcS5_PmS9_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPKN8usbguard4RuleESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPKSt10shared_ptrIN8usbguard4RuleEEPS4_St6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T1_EERKNSB_IT0_SD_EE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPKSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxeqIPSt4pairIhmESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxgeIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxltIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxltIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxltIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxltIPSt4pairIhmESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSF_SI_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPKSt10shared_ptrIN8usbguard4RuleEEPS4_St6vectorIS4_SaIS4_EEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNSC_IT0_SE_EE' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSD_SG_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPN8usbguard13USBDescriptorESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPN8usbguard4RuleESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPSt10shared_ptrIKN8usbguard4RuleEESt6vectorIS5_SaIS5_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSD_SG_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPSt10shared_ptrIN8usbguard6DeviceEESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxmiIPSt4pairIhmESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKN8usbguard16USBInterfaceTypeESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard13DeviceManager21AuthorizedDefaultTypeEESt6vectorISB_SaISB_EEEEbRKNS_17__normal_iteratorIT_T0_EESM_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule11SetOperatorEESt6vectorISB_SaISB_EEEEbRKNS_17__normal_iteratorIT_T0_EESM_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard4Rule6TargetEESt6vectorISB_SaISB_EEEEbRKNS_17__normal_iteratorIT_T0_EESM_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl7SectionEESt6vectorISC_SaISC_EEEEbRKNS_17__normal_iteratorIT_T0_EESN_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8usbguard9IPCServer13AccessControl9PrivilegeEESt6vectorISC_SaISC_EEEEbRKNS_17__normal_iteratorIT_T0_EESN_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKSt4pairIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESJ_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPN8usbguard11USBDeviceIDESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPN8usbguard13RuleConditionESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPN8usbguard13USBDescriptorESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPN8usbguard4RuleESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPSt10shared_ptrIKN8usbguard4RuleEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPSt10shared_ptrIN8usbguard4RuleEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPSt10shared_ptrIN8usbguard6DeviceEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPSt10shared_ptrIN8usbguard7RuleSetEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZN9__gnu_cxxneIPSt4pairIhmESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard10AuditEvent4keysB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard10AuditEvent8identityEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard10ConfigFile15getSettingValueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard10ConfigFile15hasSettingValueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard11USBDeviceID10isSubsetOfERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard11USBDeviceID11getVendorIDB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard11USBDeviceID12getProductIDB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard11USBDeviceID12toRuleStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard11USBDeviceID8toStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard13AuditIdentity3pidEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard13AuditIdentity3uidEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard13AuditIdentity8toStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard13DeviceManager20getAuthorizedDefaultEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard13DeviceManager31getRestoreControllerDeviceStateEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard13RuleCondition12toRuleStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard16USBInterfaceType10typeStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard16USBInterfaceType12toRuleStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard16USBInterfaceType9appliesToERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard16USBInterfaceTypeeqERKS0_' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard17RuleConditionBase10identifierB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard17RuleConditionBase12hasParameterEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard17RuleConditionBase12toRuleStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard17RuleConditionBase8toStringB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard17RuleConditionBase9isNegatedEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard17RuleConditionBase9parameterB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard19USBDescriptorParser13getDescriptorEh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard19USBDescriptorParser14haveDescriptorEh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard19USBDescriptorParser19getDescriptorCountsEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule10getViaPortB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule10isImplicitEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule11getDeviceIDEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule13attributeHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule13attributeNameB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule13getParentHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule14attributeLabelB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule15attributeSerialB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule16attributeViaPortB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule17attributeDeviceIDEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule18getWithConnectTypeB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule19attributeConditionsEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule19attributeParentHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule22attributeWithInterfaceEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule24attributeWithConnectTypeB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule7getHashB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule7getNameB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule8getLabelB5cxx11Ev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule8internalEv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule8toStringB5cxx11Ebb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE11setOperatorEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE12toRuleStringB5cxx11Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE13setSolveAllOfERKSt6vectorIS2_SaIS2_EES8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE13setSolveOneOfERKSt6vectorIS2_SaIS2_EES8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE14setSolveEqualsERKSt6vectorIS2_SaIS2_EES8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE14setSolveNoneOfERKSt6vectorIS2_SaIS2_EES8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE16setSolveMatchAllERKSt6vectorIS2_SaIS2_EES8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE21setSolveEqualsOrderedERKSt6vectorIS2_SaIS2_EES8_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE3getEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE5countEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE5emptyEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE7getNameB5cxx11Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_11USBDeviceIDEE9appliesToERKS3_' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_13RuleConditionEE11setOperatorEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_13RuleConditionEE12toRuleStringB5cxx11Ev' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_13RuleConditionEE5countEv' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
    <elf-symbol name='_ZNK8usbguard4Rule9AttributeINS_13RuleConditionEE5emptyEv' type='func-type' bin
Download .txt
gitextract__08spewc/

├── .gitattributes
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       ├── build.yml
│       ├── docker.yml
│       └── polkit.yml
├── .gitignore
├── .gitmodules
├── .lgtm.yml
├── CHANGELOG.md
├── LICENSE
├── Makefile.am
├── README.adoc
├── RELEASE_PROCESS.md
├── VERSION
├── abi-ref/
│   └── libusbguard.so.abi
├── autogen.sh
├── configure.ac
├── doc/
│   └── man/
│       ├── .gitignore
│       ├── example-allow-device.adoc
│       ├── example-initial-policy.adoc
│       ├── footer.adoc
│       ├── usbguard-daemon.8.adoc
│       ├── usbguard-daemon.conf.5.adoc
│       ├── usbguard-dbus.8.adoc
│       ├── usbguard-ldap.conf.5.adoc
│       ├── usbguard-rules.conf.5.adoc
│       └── usbguard.1.adoc
├── libusbguard.pc.in
├── m4/
│   ├── ax_check_compile_flag.m4
│   ├── ax_pthread.m4
│   └── libgcrypt.m4
├── scripts/
│   ├── astyle.sh
│   ├── bash_completion/
│   │   └── usbguard
│   ├── copr-build-srpm.sh
│   ├── docker/
│   │   ├── build_on_alpine_linux_3_21.Dockerfile
│   │   ├── build_on_centos_8_2.Dockerfile
│   │   ├── build_on_debian_buster_with_gcc_9_2.Dockerfile
│   │   ├── build_on_ubuntu_22_04.Dockerfile
│   │   └── build_on_ubuntu_25_04.Dockerfile
│   ├── ldap/
│   │   ├── ldap.sh
│   │   ├── schema2ldif.pl
│   │   ├── setup.ldif
│   │   ├── usbguard-policy.ldif
│   │   ├── usbguard.ldif
│   │   └── usbguard.schema
│   ├── modeline.vim
│   ├── reformat-sources.sh
│   ├── rule-generator.sh
│   ├── usb-descriptor-collect.sh
│   └── usbguard-zsh-completion
├── src/
│   ├── .gitignore
│   ├── CLI/
│   │   ├── IPCSignalWatcher.cpp
│   │   ├── IPCSignalWatcher.hpp
│   │   ├── PolicyGenerator.cpp
│   │   ├── PolicyGenerator.hpp
│   │   ├── usbguard-add-user.cpp
│   │   ├── usbguard-add-user.hpp
│   │   ├── usbguard-allow-device.cpp
│   │   ├── usbguard-allow-device.hpp
│   │   ├── usbguard-append-rule.cpp
│   │   ├── usbguard-append-rule.hpp
│   │   ├── usbguard-apply-device-policy.cpp
│   │   ├── usbguard-apply-device-policy.hpp
│   │   ├── usbguard-block-device.cpp
│   │   ├── usbguard-block-device.hpp
│   │   ├── usbguard-generate-policy.cpp
│   │   ├── usbguard-generate-policy.hpp
│   │   ├── usbguard-get-parameter.cpp
│   │   ├── usbguard-get-parameter.hpp
│   │   ├── usbguard-list-devices.cpp
│   │   ├── usbguard-list-devices.hpp
│   │   ├── usbguard-list-rules.cpp
│   │   ├── usbguard-list-rules.hpp
│   │   ├── usbguard-print-version.cpp
│   │   ├── usbguard-print-version.hpp
│   │   ├── usbguard-read-descriptor.cpp
│   │   ├── usbguard-read-descriptor.hpp
│   │   ├── usbguard-reject-device.cpp
│   │   ├── usbguard-reject-device.hpp
│   │   ├── usbguard-remove-rule.cpp
│   │   ├── usbguard-remove-rule.hpp
│   │   ├── usbguard-remove-user.cpp
│   │   ├── usbguard-remove-user.hpp
│   │   ├── usbguard-rule-parser.cpp
│   │   ├── usbguard-set-parameter.cpp
│   │   ├── usbguard-set-parameter.hpp
│   │   ├── usbguard-watch.cpp
│   │   ├── usbguard-watch.hpp
│   │   ├── usbguard.cpp
│   │   └── usbguard.hpp
│   ├── Common/
│   │   ├── ByteOrder.hpp
│   │   ├── FDInputStream.hpp
│   │   ├── LDAPUtil.cpp
│   │   ├── LDAPUtil.hpp
│   │   ├── Thread.hpp
│   │   ├── Utility.cpp
│   │   └── Utility.hpp
│   ├── DBus/
│   │   ├── .gitignore
│   │   ├── DBusBridge.cpp
│   │   ├── DBusBridge.hpp
│   │   ├── DBusInterface.xml
│   │   ├── README.adoc
│   │   ├── gdbus-server.cpp
│   │   ├── generate-documentation.sh
│   │   ├── org.usbguard1.conf
│   │   ├── org.usbguard1.policy
│   │   ├── org.usbguard1.service.in
│   │   └── usbguard-dbus.service.in
│   ├── Daemon/
│   │   ├── Daemon.cpp
│   │   ├── Daemon.hpp
│   │   ├── FileAuditBackend.cpp
│   │   ├── FileAuditBackend.hpp
│   │   ├── FileRuleSet.cpp
│   │   ├── FileRuleSet.hpp
│   │   ├── LDAPHandler.cpp
│   │   ├── LDAPHandler.hpp
│   │   ├── LDAPRuleSet.cpp
│   │   ├── LDAPRuleSet.hpp
│   │   ├── LinuxAuditBackend.cpp
│   │   ├── LinuxAuditBackend.hpp
│   │   ├── NSHandler.cpp
│   │   ├── NSHandler.hpp
│   │   ├── RuleSetFactory.cpp
│   │   ├── RuleSetFactory.hpp
│   │   ├── Seccomp.c
│   │   ├── Seccomp.h
│   │   └── main.cpp
│   ├── Library/
│   │   ├── AllowedMatchesCondition.cpp
│   │   ├── AllowedMatchesCondition.hpp
│   │   ├── Base64.cpp
│   │   ├── Base64.hpp
│   │   ├── ConfigFilePrivate.cpp
│   │   ├── ConfigFilePrivate.hpp
│   │   ├── DeviceBase.cpp
│   │   ├── DeviceBase.hpp
│   │   ├── DeviceManagerBase.cpp
│   │   ├── DeviceManagerBase.hpp
│   │   ├── DeviceManagerPrivate.cpp
│   │   ├── DeviceManagerPrivate.hpp
│   │   ├── DevicePrivate.cpp
│   │   ├── DevicePrivate.hpp
│   │   ├── FixedStateCondition.cpp
│   │   ├── FixedStateCondition.hpp
│   │   ├── Hash.cpp
│   │   ├── Hash.hpp
│   │   ├── IPC/
│   │   │   ├── .gitignore
│   │   │   ├── Devices.proto
│   │   │   ├── Exception.proto
│   │   │   ├── Message.proto
│   │   │   ├── Parameter.proto
│   │   │   ├── Policy.proto
│   │   │   └── Rule.proto
│   │   ├── IPCClientPrivate.cpp
│   │   ├── IPCClientPrivate.hpp
│   │   ├── IPCPrivate.cpp
│   │   ├── IPCPrivate.hpp
│   │   ├── IPCServerPrivate.cpp
│   │   ├── IPCServerPrivate.hpp
│   │   ├── Init.cpp
│   │   ├── KeyValueParserPrivate.cpp
│   │   ├── KeyValueParserPrivate.hpp
│   │   ├── LocaltimeCondition.cpp
│   │   ├── LocaltimeCondition.hpp
│   │   ├── RandomStateCondition.cpp
│   │   ├── RandomStateCondition.hpp
│   │   ├── RuleAppliedCondition.cpp
│   │   ├── RuleAppliedCondition.hpp
│   │   ├── RuleEvaluatedCondition.cpp
│   │   ├── RuleEvaluatedCondition.hpp
│   │   ├── RuleParser/
│   │   │   ├── Actions.hpp
│   │   │   └── Grammar.hpp
│   │   ├── RulePrivate.cpp
│   │   ├── RulePrivate.hpp
│   │   ├── SysFSDevice.cpp
│   │   ├── SysFSDevice.hpp
│   │   ├── UEvent.cpp
│   │   ├── UEvent.hpp
│   │   ├── UEventDeviceManager.cpp
│   │   ├── UEventDeviceManager.hpp
│   │   ├── UEventParser.cpp
│   │   ├── UEventParser.hpp
│   │   ├── UMockdevDeviceDefinition.cpp
│   │   ├── UMockdevDeviceDefinition.hpp
│   │   ├── UMockdevDeviceManager.cpp
│   │   ├── UMockdevDeviceManager.hpp
│   │   ├── Utility.cpp
│   │   ├── Utility.hpp
│   │   └── public/
│   │       └── usbguard/
│   │           ├── Audit.cpp
│   │           ├── Audit.hpp
│   │           ├── ConfigFile.cpp
│   │           ├── ConfigFile.hpp
│   │           ├── Device.cpp
│   │           ├── Device.hpp
│   │           ├── DeviceManager.cpp
│   │           ├── DeviceManager.hpp
│   │           ├── DeviceManagerHooks.cpp
│   │           ├── DeviceManagerHooks.hpp
│   │           ├── Exception.hpp
│   │           ├── IPCClient.cpp
│   │           ├── IPCClient.hpp
│   │           ├── IPCServer.cpp
│   │           ├── IPCServer.hpp
│   │           ├── Interface.hpp
│   │           ├── KeyValueParser.cpp
│   │           ├── KeyValueParser.hpp
│   │           ├── Logger.cpp
│   │           ├── Logger.hpp
│   │           ├── MemoryRuleSet.cpp
│   │           ├── MemoryRuleSet.hpp
│   │           ├── Policy.cpp
│   │           ├── Policy.hpp
│   │           ├── Predicates.hpp
│   │           ├── Rule.cpp
│   │           ├── Rule.hpp
│   │           ├── RuleCondition.cpp
│   │           ├── RuleCondition.hpp
│   │           ├── RuleParser.cpp
│   │           ├── RuleParser.hpp
│   │           ├── RuleSet.cpp
│   │           ├── RuleSet.hpp
│   │           ├── Typedefs.cpp
│   │           ├── Typedefs.hpp
│   │           ├── USB.cpp
│   │           ├── USB.hpp
│   │           ├── USBGuard.cpp
│   │           └── USBGuard.hpp
│   ├── Tests/
│   │   ├── .gitignore
│   │   ├── Fuzzers/
│   │   │   ├── Makefile.am
│   │   │   ├── fuzzer-rules.cpp
│   │   │   ├── fuzzer-uevent.cpp
│   │   │   └── fuzzer-usb-descriptor.cpp
│   │   ├── LDAP/
│   │   │   ├── Sanity/
│   │   │   │   └── ldap-nsswitch.sh
│   │   │   ├── UseCase/
│   │   │   │   ├── ldap-test-1.sh
│   │   │   │   ├── ldap-test-2.sh
│   │   │   │   ├── ldap-test-3.sh
│   │   │   │   ├── ldap-test-4.sh
│   │   │   │   └── ldap-test-5.sh
│   │   │   ├── ansible/
│   │   │   │   ├── hosts
│   │   │   │   ├── playbook.yml
│   │   │   │   └── roles/
│   │   │   │       └── bennojoy.openldap_server/
│   │   │   │           ├── README.md
│   │   │   │           ├── defaults/
│   │   │   │           │   └── main.yml
│   │   │   │           ├── files/
│   │   │   │           │   ├── ldap
│   │   │   │           │   ├── slapd
│   │   │   │           │   └── slapd_fedora
│   │   │   │           ├── handlers/
│   │   │   │           │   └── main.yml
│   │   │   │           ├── meta/
│   │   │   │           │   └── main.yml
│   │   │   │           ├── tasks/
│   │   │   │           │   ├── configure_ldap.yml
│   │   │   │           │   ├── install_ldap.yml
│   │   │   │           │   └── main.yml
│   │   │   │           ├── templates/
│   │   │   │           │   ├── domain.ldif
│   │   │   │           │   ├── ldap.conf.j2
│   │   │   │           │   ├── slapd.conf.j2
│   │   │   │           │   ├── slapd.conf_ubuntu.j2
│   │   │   │           │   ├── slapd.fedora.ldif.j2
│   │   │   │           │   └── slapd.ubuntu.ldif.j2
│   │   │   │           └── vars/
│   │   │   │               ├── Debian.yml
│   │   │   │               ├── RedHat.yml
│   │   │   │               └── main.yml
│   │   │   ├── ldap.sh
│   │   │   ├── nsswitch.sh
│   │   │   ├── setup.ldif
│   │   │   ├── usbguard-policy.ldif
│   │   │   ├── usbguard.ldif
│   │   │   └── usbguard.schema
│   │   ├── Makefile.am
│   │   ├── Regression/
│   │   │   ├── github-PR209-config-parser.cpp
│   │   │   ├── test_Rule_ghi113.cpp
│   │   │   ├── test_Rule_ghi247.cpp
│   │   │   └── test_Rule_ghi37.cpp
│   │   ├── Rules/
│   │   │   ├── test-rules.bad
│   │   │   ├── test-rules.file
│   │   │   ├── test-rules.good
│   │   │   └── test-rules.sh
│   │   ├── Source/
│   │   │   ├── CheckScripts/
│   │   │   │   ├── code-style.sh
│   │   │   │   ├── copyright.sh
│   │   │   │   ├── private-with-build-config.sh
│   │   │   │   ├── public-without-build-config.sh
│   │   │   │   ├── spell-check.rws
│   │   │   │   ├── spell-check.sh
│   │   │   │   └── vim-modeline.sh
│   │   │   └── check-driver.sh
│   │   ├── USB/
│   │   │   ├── data/
│   │   │   │   └── 0001.out
│   │   │   └── test-descriptor-parser.sh
│   │   ├── Unit/
│   │   │   ├── test_Base64.cpp
│   │   │   ├── test_IPCServer_AccessControl.cpp
│   │   │   ├── test_Rule.cpp
│   │   │   ├── test_RuleAttribute_id.cpp
│   │   │   ├── test_RuleParser.cpp
│   │   │   ├── test_UEvent.cpp
│   │   │   ├── test_UEventParser.cpp
│   │   │   ├── test_UMockdevDeviceDefinition.cpp
│   │   │   ├── test_UMockdevDeviceDefinition.data.hpp
│   │   │   └── test_Utility.cpp
│   │   ├── UseCase/
│   │   │   ├── 000_executable.sh
│   │   │   ├── 001_cli_policy.sh
│   │   │   ├── 002_cli_devices.sh
│   │   │   ├── 003_cli_devices_umockdev.sh
│   │   │   ├── 004_daemonize.sh
│   │   │   ├── 005_cli_devices_advanced.sh
│   │   │   └── devices.umockdev
│   │   ├── bash-testlib.sh
│   │   ├── custom.supp
│   │   └── main.cpp
│   ├── ThirdParty/
│   │   └── xsl-stylesheets/
│   │       ├── VERSION.xsl
│   │       ├── common/
│   │       │   ├── af.xml
│   │       │   ├── am.xml
│   │       │   ├── ar.xml
│   │       │   ├── as.xml
│   │       │   ├── ast.xml
│   │       │   ├── autoidx-kimber.xsl
│   │       │   ├── autoidx-kosek.xsl
│   │       │   ├── az.xml
│   │       │   ├── bg.xml
│   │       │   ├── bn.xml
│   │       │   ├── bn_in.xml
│   │       │   ├── bs.xml
│   │       │   ├── ca.xml
│   │       │   ├── charmap.xml
│   │       │   ├── charmap.xsl
│   │       │   ├── common.xml
│   │       │   ├── common.xsl
│   │       │   ├── cs.xml
│   │       │   ├── cy.xml
│   │       │   ├── da.xml
│   │       │   ├── de.xml
│   │       │   ├── el.xml
│   │       │   ├── en.xml
│   │       │   ├── entities.ent
│   │       │   ├── eo.xml
│   │       │   ├── es.xml
│   │       │   ├── et.xml
│   │       │   ├── eu.xml
│   │       │   ├── fa.xml
│   │       │   ├── fi.xml
│   │       │   ├── fr.xml
│   │       │   ├── ga.xml
│   │       │   ├── gentext.xsl
│   │       │   ├── gl.xml
│   │       │   ├── gu.xml
│   │       │   ├── he.xml
│   │       │   ├── hi.xml
│   │       │   ├── hr.xml
│   │       │   ├── hu.xml
│   │       │   ├── id.xml
│   │       │   ├── insertfile.xsl
│   │       │   ├── is.xml
│   │       │   ├── it.xml
│   │       │   ├── ja.xml
│   │       │   ├── ka.xml
│   │       │   ├── kn.xml
│   │       │   ├── ko.xml
│   │       │   ├── ky.xml
│   │       │   ├── l10n.dtd
│   │       │   ├── l10n.xml
│   │       │   ├── l10n.xsl
│   │       │   ├── la.xml
│   │       │   ├── labels.xsl
│   │       │   ├── lt.xml
│   │       │   ├── lv.xml
│   │       │   ├── ml.xml
│   │       │   ├── mn.xml
│   │       │   ├── mr.xml
│   │       │   ├── nb.xml
│   │       │   ├── nds.xml
│   │       │   ├── nl.xml
│   │       │   ├── nn.xml
│   │       │   ├── olink.xsl
│   │       │   ├── or.xml
│   │       │   ├── pa.xml
│   │       │   ├── pi.xml
│   │       │   ├── pi.xsl
│   │       │   ├── pl.xml
│   │       │   ├── pt.xml
│   │       │   ├── pt_br.xml
│   │       │   ├── refentry.xml
│   │       │   ├── refentry.xsl
│   │       │   ├── ro.xml
│   │       │   ├── ru.xml
│   │       │   ├── sk.xml
│   │       │   ├── sl.xml
│   │       │   ├── sq.xml
│   │       │   ├── sr.xml
│   │       │   ├── sr_Latn.xml
│   │       │   ├── stripns.xsl
│   │       │   ├── subtitles.xsl
│   │       │   ├── sv.xml
│   │       │   ├── ta.xml
│   │       │   ├── table.xsl
│   │       │   ├── targetdatabase.dtd
│   │       │   ├── targets.xsl
│   │       │   ├── te.xml
│   │       │   ├── th.xml
│   │       │   ├── titles.xsl
│   │       │   ├── tl.xml
│   │       │   ├── tr.xml
│   │       │   ├── uk.xml
│   │       │   ├── utility.xml
│   │       │   ├── utility.xsl
│   │       │   ├── vi.xml
│   │       │   ├── xh.xml
│   │       │   ├── zh.xml
│   │       │   ├── zh_cn.xml
│   │       │   └── zh_tw.xml
│   │       ├── lib/
│   │       │   ├── dumpfragment.xsl
│   │       │   └── lib.xsl
│   │       └── xhtml-1_1/
│   │           ├── admon.xsl
│   │           ├── annotations.xsl
│   │           ├── autoidx-kimber.xsl
│   │           ├── autoidx-kosek.xsl
│   │           ├── autoidx-ng.xsl
│   │           ├── autoidx.xsl
│   │           ├── autotoc.xsl
│   │           ├── biblio-iso690.xsl
│   │           ├── biblio.xsl
│   │           ├── block.xsl
│   │           ├── callout.xsl
│   │           ├── changebars.xsl
│   │           ├── chunk-changebars.xsl
│   │           ├── chunk-code.xsl
│   │           ├── chunk-common.xsl
│   │           ├── chunk.xsl
│   │           ├── chunker.xsl
│   │           ├── chunkfast.xsl
│   │           ├── chunktoc.xsl
│   │           ├── component.xsl
│   │           ├── division.xsl
│   │           ├── docbook.xsl
│   │           ├── ebnf.xsl
│   │           ├── footnote.xsl
│   │           ├── formal.xsl
│   │           ├── glossary.xsl
│   │           ├── graphics.xsl
│   │           ├── highlight.xsl
│   │           ├── html-rtf.xsl
│   │           ├── html.xsl
│   │           ├── htmltbl.xsl
│   │           ├── index.xsl
│   │           ├── info.xsl
│   │           ├── inline.xsl
│   │           ├── keywords.xsl
│   │           ├── lists.xsl
│   │           ├── maketoc.xsl
│   │           ├── manifest.xsl
│   │           ├── math.xsl
│   │           ├── oldchunker.xsl
│   │           ├── onechunk.xsl
│   │           ├── param.xsl
│   │           ├── pi.xsl
│   │           ├── profile-chunk-code.xsl
│   │           ├── profile-chunk.xsl
│   │           ├── profile-docbook.xsl
│   │           ├── profile-onechunk.xsl
│   │           ├── qandaset.xsl
│   │           ├── refentry.xsl
│   │           ├── sections.xsl
│   │           ├── synop.xsl
│   │           ├── table.xsl
│   │           ├── task.xsl
│   │           ├── titlepage.templates.xsl
│   │           ├── titlepage.xsl
│   │           ├── toc.xsl
│   │           ├── verbatim.xsl
│   │           └── xref.xsl
│   ├── astylerc
│   └── test_filesystem.cpp
├── usbguard-daemon.conf.in
├── usbguard-tmpfiles.conf
└── usbguard.service.in
Download .txt
SYMBOL INDEX (830 symbols across 164 files)

FILE: src/CLI/IPCSignalWatcher.cpp
  type usbguard (line 34) | namespace usbguard
    type ::stat (line 179) | struct ::stat

FILE: src/CLI/IPCSignalWatcher.hpp
  type usbguard (line 26) | namespace usbguard
    class IPCSignalWatcher (line 28) | class IPCSignalWatcher : public IPCClient

FILE: src/CLI/PolicyGenerator.cpp
  type usbguard (line 26) | namespace usbguard

FILE: src/CLI/PolicyGenerator.hpp
  type usbguard (line 32) | namespace usbguard
    class PolicyGenerator (line 34) | class PolicyGenerator : public DeviceManagerHooks

FILE: src/CLI/usbguard-add-user.cpp
  type usbguard (line 33) | namespace usbguard
    type ::option (line 37) | struct ::option
    function showHelp (line 48) | static void showHelp(std::ostream& stream)
    function createIPCAccessControlFile (line 63) | static void createIPCAccessControlFile(const std::string& path, const ...
    function usbguard_add_user (line 84) | int usbguard_add_user(int argc, char* argv[])

FILE: src/CLI/usbguard-add-user.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-allow-device.cpp
  type usbguard (line 30) | namespace usbguard
    function usbguard_allow_device (line 32) | int usbguard_allow_device(int argc, char* argv[])

FILE: src/CLI/usbguard-allow-device.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-append-rule.cpp
  type usbguard (line 30) | namespace usbguard
    type ::option (line 34) | struct ::option
    function showHelp (line 41) | static void showHelp(std::ostream& stream)
    function usbguard_append_rule (line 54) | int usbguard_append_rule(int argc, char* argv[])

FILE: src/CLI/usbguard-append-rule.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-apply-device-policy.cpp
  type usbguard (line 32) | namespace usbguard
    type ::option (line 36) | struct ::option
    function showHelp (line 42) | static void showHelp(std::ostream& stream, Rule::Target target)
    function isNumeric (line 55) | static bool isNumeric(const std::string& s)
    function usbguard_apply_device_policy (line 62) | int usbguard_apply_device_policy(int argc, char** argv, Rule::Target t...

FILE: src/CLI/usbguard-apply-device-policy.hpp
  type usbguard (line 26) | namespace usbguard

FILE: src/CLI/usbguard-block-device.cpp
  type usbguard (line 30) | namespace usbguard
    function usbguard_block_device (line 32) | int usbguard_block_device(int argc, char* argv[])

FILE: src/CLI/usbguard-block-device.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-generate-policy.cpp
  type usbguard (line 35) | namespace usbguard
    type ::option (line 39) | struct ::option
    function showHelp (line 54) | static void showHelp(std::ostream& stream)
    function usbguard_generate_policy (line 77) | int usbguard_generate_policy(int argc, char** argv)

FILE: src/CLI/usbguard-generate-policy.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-get-parameter.cpp
  type usbguard (line 30) | namespace usbguard
    type ::option (line 34) | struct ::option
    function showHelp (line 39) | static void showHelp(std::ostream& stream)
    function usbguard_get_parameter (line 55) | int usbguard_get_parameter(int argc, char* argv[])

FILE: src/CLI/usbguard-get-parameter.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-list-devices.cpp
  type usbguard (line 32) | namespace usbguard
    type ::option (line 36) | struct ::option
    function showHelp (line 44) | static void showHelp(std::ostream& stream)
    function classicFormat (line 61) | static void classicFormat(const std::vector<Rule>& rules)
    function printNode (line 75) | static void printNode(
    function printTree (line 107) | static void printTree(const std::map<std::string, std::pair<Rule, std:...
    function treeFormat (line 141) | static void treeFormat(const std::vector<Rule>& rules)
    function usbguard_list_devices (line 173) | int usbguard_list_devices(int argc, char* argv[])

FILE: src/CLI/usbguard-list-devices.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-list-rules.cpp
  type usbguard (line 30) | namespace usbguard
    type ::option (line 34) | struct ::option
    function showHelp (line 41) | static void showHelp(std::ostream& stream)
    function usbguard_list_rules (line 52) | int usbguard_list_rules(int argc, char* argv[])

FILE: src/CLI/usbguard-list-rules.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-print-version.cpp
  type usbguard (line 33) | namespace usbguard
    function toHumanReadable (line 35) | static std::string toHumanReadable(const int enabled)
    function usbguard_print_version (line 40) | int usbguard_print_version(__attribute__((unused)) int argc, __attribu...

FILE: src/CLI/usbguard-print-version.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-read-descriptor.cpp
  type usbguard (line 34) | namespace usbguard
    type ::option (line 38) | struct ::option
    function showHelp (line 43) | static void showHelp(std::ostream& stream)
    class USBDescriptorPrinter (line 59) | class USBDescriptorPrinter : public USBDescriptorParserHooks
      method loadUSBDescriptor (line 62) | void loadUSBDescriptor(USBDescriptorParser* parser, const USBDescrip...
    function usbguard_read_descriptor (line 105) | int usbguard_read_descriptor(int argc, char* argv[])
    function printDeviceDescriptor (line 165) | void printDeviceDescriptor(const USBDescriptor* descriptor_base)
    function printConfigurationDescriptor (line 183) | void printConfigurationDescriptor(const USBDescriptor* descriptor_base)
    function printInterfaceDescriptor (line 196) | void printInterfaceDescriptor(const USBDescriptor* descriptor_base)
    function printEndpointDescriptor (line 210) | void printEndpointDescriptor(const USBDescriptor* descriptor_base)
    function printAudioEndpointDescriptor (line 221) | void printAudioEndpointDescriptor(const USBDescriptor* descriptor_base)
    function printUnknownDescriptor (line 234) | void printUnknownDescriptor(const USBDescriptor* descriptor)

FILE: src/CLI/usbguard-read-descriptor.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-reject-device.cpp
  type usbguard (line 30) | namespace usbguard
    function usbguard_reject_device (line 32) | int usbguard_reject_device(int argc, char* argv[])

FILE: src/CLI/usbguard-reject-device.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-remove-rule.cpp
  type usbguard (line 30) | namespace usbguard
    type ::option (line 34) | struct ::option
    function showHelp (line 39) | static void showHelp(std::ostream& stream)
    function usbguard_remove_rule (line 48) | int usbguard_remove_rule(int argc, char* argv[])

FILE: src/CLI/usbguard-remove-rule.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-remove-user.cpp
  type usbguard (line 32) | namespace usbguard
    type ::option (line 36) | struct ::option
    function showHelp (line 43) | static void showHelp(std::ostream& stream)
    function removeIPCAccessControlFile (line 54) | static void removeIPCAccessControlFile(const std::string& path, const ...
    function usbguard_remove_user (line 66) | int usbguard_remove_user(int argc, char* argv[])

FILE: src/CLI/usbguard-remove-user.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-rule-parser.cpp
  type ::option (line 47) | struct ::option
  function showHelp (line 54) | static void showHelp(std::ostream& stream, const char* usbguard_arg0)
  function main (line 68) | int main(int argc, char** argv)

FILE: src/CLI/usbguard-set-parameter.cpp
  type usbguard (line 30) | namespace usbguard
    type ::option (line 34) | struct ::option
    function showHelp (line 40) | static void showHelp(std::ostream& stream)
    function usbguard_set_parameter (line 57) | int usbguard_set_parameter(int argc, char* argv[])

FILE: src/CLI/usbguard-set-parameter.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard-watch.cpp
  type usbguard (line 30) | namespace usbguard
    type ::option (line 34) | struct ::option
    function showHelp (line 42) | static void showHelp(std::ostream& stream)
    function usbguard_watch (line 55) | int usbguard_watch(int argc, char* argv[])

FILE: src/CLI/usbguard-watch.hpp
  type usbguard (line 24) | namespace usbguard

FILE: src/CLI/usbguard.cpp
  type usbguard (line 57) | namespace usbguard
    function showTopLevelHelp (line 79) | static void showTopLevelHelp(std::ostream& stream = std::cout)
    function usbguard_cli (line 108) | static int usbguard_cli(int argc, char* argv[])
  function main (line 131) | int main(int argc, char* argv[])

FILE: src/CLI/usbguard.hpp
  type usbguard (line 30) | namespace usbguard

FILE: src/Common/ByteOrder.hpp
  type usbguard (line 27) | namespace usbguard
    function busEndianToHost (line 30) | static inline uint16_t busEndianToHost(uint16_t bus_value)

FILE: src/Common/FDInputStream.hpp
  type usbguard (line 34) | namespace usbguard
    class FDInputStream (line 37) | class FDInputStream : public std::ifstream
      method FDInputStream (line 40) | FDInputStream(int fd)
      method FDInputStream (line 46) | FDInputStream(FDInputStream&& stream)
      method FDInputStream (line 106) | FDInputStream(int fd) : std::istream(nullptr),
      method FDInputStream (line 112) | FDInputStream(FDInputStream&& stream) : std::istream(nullptr),
    class FDStreamBuf (line 57) | class FDStreamBuf :
      method FDStreamBuf (line 61) | FDStreamBuf(int fd) : fd_(fd) { }
      method xsgetn (line 71) | std::streamsize xsgetn(char* s, std::streamsize n)
      method underflow (line 87) | int underflow()
    class FDInputStream (line 103) | class FDInputStream : public std::istream
      method FDInputStream (line 40) | FDInputStream(int fd)
      method FDInputStream (line 46) | FDInputStream(FDInputStream&& stream)
      method FDInputStream (line 106) | FDInputStream(int fd) : std::istream(nullptr),
      method FDInputStream (line 112) | FDInputStream(FDInputStream&& stream) : std::istream(nullptr),

FILE: src/Common/LDAPUtil.cpp
  type usbguard (line 28) | namespace usbguard
    function toLDIF_appendNonEmptyAttribute (line 61) | static void toLDIF_appendNonEmptyAttribute(std::string& rule_string, c...

FILE: src/Common/LDAPUtil.hpp
  type usbguard (line 30) | namespace usbguard
    function LDAPUtil (line 32) | class DLL_PUBLIC LDAPUtil

FILE: src/Common/Thread.hpp
  type usbguard (line 30) | namespace usbguard
    class Thread (line 33) | class Thread
      method Thread (line 36) | Thread(C* method_class_ptr, void(C::*method)())
      method Thread (line 43) | Thread(Thread& thread)
      method Thread (line 51) | Thread& operator=(Thread& thread)
      method start (line 64) | void start()
      method stop (line 74) | void stop(bool do_wait = true)
      method wait (line 83) | void wait()
      method running (line 98) | bool running() const
      method stopRequested (line 103) | bool stopRequested() const

FILE: src/Common/Utility.cpp
  type usbguard (line 42) | namespace usbguard
    function runCommandExecChild (line 45) | static void runCommandExecChild(const std::string& path, const std::ve...
    function runCommand (line 106) | int runCommand(const char* const path, const char* const arg1, const i...
    function runCommand (line 113) | int runCommand(const char* const path, const char* const arg1, const c...
    function runCommand (line 121) | int runCommand(const std::string& path, const std::vector<std::string>...
    function filenameFromPath (line 185) | std::string filenameFromPath(const std::string& filepath, const bool i...
    function parentPath (line 205) | std::string parentPath(const std::string& path)
    function trimRight (line 253) | std::string trimRight(const std::string& s, const std::string& delimit...
    function trimLeft (line 265) | std::string trimLeft(const std::string& s, const std::string& delimiters)
    function trim (line 277) | std::string trim(const std::string& s, const std::string& delimiters)
    function numberToString (line 289) | std::string numberToString(const uint8_t number, const std::string& pr...
    function stringToNumber (line 297) | uint8_t stringToNumber(const std::string& s, const int base)
    function isNumericString (line 303) | bool isNumericString(const std::string& s)
    function loadFiles (line 314) | int loadFiles(const std::string& directory,
    function removePrefix (line 377) | std::string removePrefix(const std::string& prefix, const std::string&...
    function hasSuffix (line 387) | bool hasSuffix(const std::string& value, const std::string& suffix)
    function hasPrefix (line 398) | bool hasPrefix(const std::string& value, const std::string& prefix)
    function symlinkPath (line 408) | std::string symlinkPath(const std::string& linkpath, struct stat* st_u...
    function countPathComponents (line 459) | std::size_t countPathComponents(const std::string& path)
    function normalizePath (line 481) | std::string normalizePath(const std::string& path)
    function getConfigsFromDir (line 518) | std::vector<std::string> getConfigsFromDir(const std::string& path)
    function isValidUID (line 546) | static bool isValidUID(const std::string& uid)
    function isValidName (line 561) | static bool isValidName(const std::string& name)
    function isValidNameOrUID (line 586) | bool isValidNameOrUID(const std::string& input)

FILE: src/Common/Utility.hpp
  type usbguard (line 42) | namespace usbguard
    function tokenizeString (line 69) | void tokenizeString(const StringType& str, std::vector<StringType>& to...
    function numberToString (line 101) | std::string numberToString(const T number, const std::string& prefix =...
    function T (line 132) | T stringToNumber(const std::string& s, const int base = 10)
    type dirent (line 189) | struct dirent
    type stat (line 211) | struct stat
    class Restorer (line 232) | class Restorer
      method Restorer (line 235) | Restorer(Tvar& var, Tval transient, Tval restored)
    type FreeDeleter (line 252) | struct FreeDeleter {
    function make_unique (line 260) | std::unique_ptr<T> make_unique(Params&& ... params)
    class ScopedFD (line 268) | class ScopedFD
      method ScopedFD (line 271) | ScopedFD(int fd)
      method ScopedFD (line 274) | ScopedFD(const ScopedFD&) = delete;
    function joinElements (line 305) | std::string joinElements(T begin, T end, const std::string& separator ...

FILE: src/DBus/DBusBridge.cpp
  type usbguard (line 27) | namespace usbguard
    function GVariantBuilder (line 383) | GVariantBuilder* DBusBridge::deviceRuleToAttributes(const std::string&...

FILE: src/DBus/DBusBridge.hpp
  type usbguard (line 39) | namespace usbguard
    class DBusBridge (line 41) | class DBusBridge : public IPCClient

FILE: src/DBus/gdbus-server.cpp
  function handle_method_call (line 51) | static void
  function gboolean (line 79) | static gboolean
  function handle_usbguard_ipc_state (line 105) | static void
  function on_bus_acquired (line 139) | static void
  function on_name_acquired (line 175) | static void
  function on_name_lost (line 197) | static void
  type ::option (line 214) | struct ::option
  function showHelp (line 221) | static void showHelp(std::ostream& stream)
  function main (line 234) | int

FILE: src/Daemon/Daemon.cpp
  type usbguard (line 51) | namespace usbguard
    type stat (line 139) | struct stat
    type dirent (line 432) | struct dirent
    type timespec (line 616) | struct timespec

FILE: src/Daemon/Daemon.hpp
  type usbguard (line 45) | namespace usbguard
    class Daemon (line 47) | class Daemon : public IPCServer, public DeviceManagerHooks
      type DevicePolicyMethod (line 50) | enum DevicePolicyMethod {

FILE: src/Daemon/FileAuditBackend.cpp
  type usbguard (line 27) | namespace usbguard

FILE: src/Daemon/FileAuditBackend.hpp
  type usbguard (line 27) | namespace usbguard
    class FileAuditBackend (line 29) | class FileAuditBackend : public AuditBackend

FILE: src/Daemon/FileRuleSet.cpp
  type usbguard (line 32) | namespace usbguard
    function FileRuleSet (line 49) | const FileRuleSet& FileRuleSet::operator=(const FileRuleSet& rhs)

FILE: src/Daemon/FileRuleSet.hpp
  type usbguard (line 32) | namespace usbguard
    class Interface (line 34) | class Interface
    class FileRuleSet (line 35) | class FileRuleSet : public RuleSet

FILE: src/Daemon/LDAPHandler.cpp
  type usbguard (line 41) | namespace usbguard
    type berval (line 86) | struct berval
    type berval (line 148) | struct berval

FILE: src/Daemon/LDAPHandler.hpp
  type usbguard (line 34) | namespace usbguard
    class LDAPHandler (line 37) | class LDAPHandler
      type LDAPDeleter (line 40) | struct LDAPDeleter {

FILE: src/Daemon/LDAPRuleSet.cpp
  type usbguard (line 40) | namespace usbguard
    function LDAPRuleSet (line 60) | const LDAPRuleSet& LDAPRuleSet::operator=(const LDAPRuleSet& rhs)

FILE: src/Daemon/LDAPRuleSet.hpp
  type usbguard (line 37) | namespace usbguard
    class Interface (line 39) | class Interface
    function LDAPRuleSet (line 40) | class DLL_PUBLIC LDAPRuleSet : public RuleSet

FILE: src/Daemon/LinuxAuditBackend.cpp
  function audit_value_needs_encoding (line 56) | static bool audit_value_needs_encoding(const char* str, unsigned int size)
  type usbguard (line 134) | namespace usbguard
    function encodeMessageNVPair (line 137) | static std::string encodeMessageNVPair(const std::string& key, const s...
    function appendToMessage (line 144) | static void appendToMessage(std::string& message, const std::string& k...
    function translateTypeValue (line 153) | static std::string translateTypeValue(const std::string& value)

FILE: src/Daemon/LinuxAuditBackend.hpp
  type usbguard (line 27) | namespace usbguard
    class LinuxAuditBackend (line 29) | class LinuxAuditBackend : public AuditBackend

FILE: src/Daemon/NSHandler.cpp
  type usbguard (line 46) | namespace usbguard
    function NSHandler (line 117) | NSHandler& NSHandler::getRef()

FILE: src/Daemon/NSHandler.hpp
  type usbguard (line 36) | namespace usbguard
    class Interface (line 38) | class Interface
    function NSHandler (line 39) | class DLL_PUBLIC NSHandler

FILE: src/Daemon/RuleSetFactory.cpp
  type usbguard (line 40) | namespace usbguard

FILE: src/Daemon/RuleSetFactory.hpp
  type usbguard (line 40) | namespace usbguard
    function RuleSetFactory (line 42) | class DLL_PUBLIC RuleSetFactory

FILE: src/Daemon/Seccomp.c
  function setupSeccompWhitelist (line 39) | bool setupSeccompWhitelist(void)
  function setupSeccompWhitelist (line 159) | bool setupSeccompWhitelist(void)

FILE: src/Daemon/main.cpp
  function printUsage (line 49) | static void printUsage(std::ostream& stream, const char* arg0)
  function main (line 70) | int main(int argc, char* argv[])
  function setupCapabilities (line 222) | static void setupCapabilities(void)

FILE: src/Library/AllowedMatchesCondition.cpp
  type usbguard (line 29) | namespace usbguard
    function RuleConditionBase (line 62) | RuleConditionBase* AllowedMatchesCondition::clone() const

FILE: src/Library/AllowedMatchesCondition.hpp
  type usbguard (line 31) | namespace usbguard
    class AllowedMatchesCondition (line 33) | class AllowedMatchesCondition : public RuleConditionBase

FILE: src/Library/Base64.cpp
  type usbguard (line 26) | namespace usbguard
    function __b64_enc3 (line 118) | static void __b64_enc3(const uint8_t in[3], char out[4])
    function __b64_enc2 (line 126) | static void __b64_enc2 (const uint8_t in[2], char out[4])
    function __b64_enc1 (line 134) | static void __b64_enc1 (const uint8_t in, char out[4])
    function __check_b64_input (line 144) | static void __check_b64_input(const char* in, const size_t count)
    function __b64_dec4 (line 178) | static void __b64_dec4 (const char in[4], uint8_t out[3])
    function __b64_dec3 (line 186) | static void __b64_dec3 (const char in[3], uint8_t out[2])
    function __b64_dec2 (line 193) | static void __b64_dec2 (const char in[2], uint8_t out[1])
    function base64Encode (line 201) | std::string base64Encode (const uint8_t* const data, const size_t size)
    function base64Decode (line 237) | std::string base64Decode(const char* const data, const size_t size)
    function base64EncodedSize (line 288) | size_t base64EncodedSize(const size_t decoded_size)
    function base64DecodedSize (line 293) | size_t base64DecodedSize(const size_t encoded_size)
    function base64Encode (line 298) | std::string base64Encode(const std::string& value)
    function base64Decode (line 303) | std::string base64Decode(const std::string& value)

FILE: src/Library/Base64.hpp
  type usbguard (line 29) | namespace usbguard

FILE: src/Library/ConfigFilePrivate.cpp
  type usbguard (line 38) | namespace usbguard

FILE: src/Library/ConfigFilePrivate.hpp
  type usbguard (line 34) | namespace usbguard
    class ConfigFilePrivate (line 36) | class ConfigFilePrivate
      type NVPair (line 55) | struct NVPair {

FILE: src/Library/DeviceBase.cpp
  type usbguard (line 33) | namespace usbguard
    function SysFSDevice (line 155) | SysFSDevice& DeviceBase::sysfsDevice()

FILE: src/Library/DeviceBase.hpp
  type usbguard (line 29) | namespace usbguard
    class DeviceManagerBase (line 31) | class DeviceManagerBase
    class DeviceBase (line 33) | class DeviceBase : public Device, public USBDescriptorParserHooks

FILE: src/Library/DeviceManagerBase.cpp
  type usbguard (line 46) | namespace usbguard
    type dirent (line 107) | struct dirent
    type stat (line 128) | struct stat
    type sockaddr_nl (line 171) | struct sockaddr_nl

FILE: src/Library/DeviceManagerBase.hpp
  type usbguard (line 32) | namespace usbguard
    class DeviceBase (line 34) | class DeviceBase
    class DeviceManagerBase (line 36) | class DeviceManagerBase : public DeviceManager
      type dirent (line 53) | struct dirent

FILE: src/Library/DeviceManagerPrivate.cpp
  type usbguard (line 29) | namespace usbguard
    function DeviceManagerPrivate (line 45) | const DeviceManagerPrivate& DeviceManagerPrivate::operator=(const Devi...

FILE: src/Library/DeviceManagerPrivate.hpp
  type usbguard (line 33) | namespace usbguard
    class DeviceManagerHooks (line 35) | class DeviceManagerHooks
    class DeviceManagerPrivate (line 36) | class DeviceManagerPrivate

FILE: src/Library/DevicePrivate.cpp
  type usbguard (line 33) | namespace usbguard
    function DevicePrivate (line 53) | const DevicePrivate& DevicePrivate::operator=(const DevicePrivate& rhs)
    function DeviceManager (line 67) | DeviceManager& DevicePrivate::manager() const
    function USBDeviceID (line 245) | const USBDeviceID& DevicePrivate::getDeviceID() const

FILE: src/Library/DevicePrivate.hpp
  type usbguard (line 38) | namespace usbguard
    class DevicePrivate (line 40) | class DevicePrivate

FILE: src/Library/FixedStateCondition.cpp
  type usbguard (line 27) | namespace usbguard
    function RuleConditionBase (line 47) | RuleConditionBase* FixedStateCondition::clone() const

FILE: src/Library/FixedStateCondition.hpp
  type usbguard (line 29) | namespace usbguard
    class FixedStateCondition (line 31) | class FixedStateCondition : public RuleConditionBase

FILE: src/Library/Hash.cpp
  type usbguard (line 29) | namespace usbguard
    function Hash (line 97) | Hash& Hash::operator=(Hash&& rhs)

FILE: src/Library/Hash.hpp
  type usbguard (line 41) | namespace usbguard
    class Hash (line 43) | class Hash

FILE: src/Library/IPCClientPrivate.cpp
  type usbguard (line 37) | namespace usbguard
    type qb_ipc_request_header (line 227) | struct qb_ipc_request_header
    type iovec (line 230) | struct iovec
    type qb_ipc_response_header (line 319) | struct qb_ipc_response_header
    type qb_ipc_response_header (line 332) | struct qb_ipc_response_header
    type qb_ipc_response_header (line 333) | struct qb_ipc_response_header
    type qb_ipc_response_header (line 346) | struct qb_ipc_response_header

FILE: src/Library/IPCClientPrivate.hpp
  type usbguard (line 42) | namespace usbguard
    class IPCClientPrivate (line 44) | class IPCClientPrivate
      method registerHandler (line 85) | void registerHandler(MessageHandler::HandlerType method)
      method qbIPCSendRecvMessage (line 92) | std::unique_ptr<ProtobufType> qbIPCSendRecvMessage(ProtobufType& mes...

FILE: src/Library/IPCPrivate.cpp
  type usbguard (line 34) | namespace usbguard
    function IPCException (line 85) | IPCException IPC::IPCExceptionFromMessage(const MessagePointer& message)

FILE: src/Library/IPCPrivate.hpp
  type usbguard (line 31) | namespace usbguard
    type IPC (line 33) | namespace IPC
      class MessageHandler (line 50) | class MessageHandler
        method MessageHandler (line 55) | MessageHandler(C& c, HandlerType method, const MessageType& factory,
        method MessageHandler (line 66) | MessageHandler(const MessageHandler& rhs)
        method MessagePointer (line 75) | MessagePointer payloadToMessage(const std::string& payload)
        method run (line 82) | void run(MessagePointer& message)
        method run (line 88) | void run(MessagePointer& message, MessagePointer& response)
        method MessageHandler (line 98) | static MessageHandler create(C& c, HandlerType method,
        method section (line 105) | IPCServer::AccessControl::Section section() const
        method privilege (line 110) | IPCServer::AccessControl::Privilege privilege() const

FILE: src/Library/IPCServerPrivate.cpp
  type usbguard (line 39) | namespace usbguard
    type qb_ipcs_service_handlers (line 93) | struct qb_ipcs_service_handlers
    type qb_ipcs_poll_handlers (line 108) | struct qb_ipcs_poll_handlers
    type qb_loop_priority (line 213) | enum qb_loop_priority
    type qb_loop_priority (line 218) | enum qb_loop_priority
    type qb_loop_priority (line 224) | enum qb_loop_priority
    type qb_ipc_response_header (line 312) | struct qb_ipc_response_header
    type iovec (line 313) | struct iovec
    type qb_ipc_request_header (line 365) | struct qb_ipc_request_header
    type qb_ipc_request_header (line 377) | struct qb_ipc_request_header
    type qb_ipc_request_header (line 378) | struct qb_ipc_request_header
    type qb_ipc_request_header (line 408) | struct qb_ipc_request_header
    type qb_ipc_request_header (line 409) | struct qb_ipc_request_header
    type iovec (line 466) | struct iovec
    type qb_ipc_response_header (line 557) | struct qb_ipc_response_header
    type iovec (line 561) | struct iovec
    type passwd (line 703) | struct passwd
    type passwd (line 704) | struct passwd
    type group (line 722) | struct group
    type group (line 723) | struct group
    type group (line 742) | struct group
    type group (line 743) | struct group
    type group (line 766) | struct group
    type group (line 767) | struct group

FILE: src/Library/IPCServerPrivate.hpp
  type usbguard (line 42) | namespace usbguard
    class IPCServerPrivate (line 44) | class IPCServerPrivate
      type ClientContext (line 86) | struct ClientContext {
      type qb_loop_priority (line 105) | enum qb_loop_priority
      type qb_loop_priority (line 106) | enum qb_loop_priority
      type qb_loop_priority (line 107) | enum qb_loop_priority
      type iovec (line 126) | struct iovec
      method registerHandler (line 134) | void registerHandler(MessageHandler::HandlerType method, IPCServer::...

FILE: src/Library/Init.cpp
  type usbguard (line 36) | namespace usbguard
    class LibraryInit (line 38) | class LibraryInit
      method LibraryInit (line 41) | LibraryInit()

FILE: src/Library/KeyValueParserPrivate.cpp
  type usbguard (line 35) | namespace usbguard

FILE: src/Library/KeyValueParserPrivate.hpp
  type usbguard (line 36) | namespace usbguard
    class KeyValueParserPrivate (line 39) | class KeyValueParserPrivate

FILE: src/Library/LocaltimeCondition.cpp
  type usbguard (line 33) | namespace usbguard
    function RuleConditionBase (line 83) | RuleConditionBase* LocaltimeCondition::clone() const
    type tm (line 88) | struct tm
    type ::tm (line 116) | struct ::tm

FILE: src/Library/LocaltimeCondition.hpp
  type usbguard (line 32) | namespace usbguard
    class LocaltimeCondition (line 34) | class LocaltimeCondition : public RuleConditionBase
      type ::tm (line 44) | struct ::tm

FILE: src/Library/RandomStateCondition.cpp
  type usbguard (line 29) | namespace usbguard
    function RuleConditionBase (line 53) | RuleConditionBase* RandomStateCondition::clone() const

FILE: src/Library/RandomStateCondition.hpp
  type usbguard (line 31) | namespace usbguard
    class RandomStateCondition (line 33) | class RandomStateCondition : public RuleConditionBase

FILE: src/Library/RuleAppliedCondition.cpp
  type usbguard (line 34) | namespace usbguard
    function RuleConditionBase (line 67) | RuleConditionBase* RuleAppliedCondition::clone() const
    type ::tm (line 74) | struct ::tm

FILE: src/Library/RuleAppliedCondition.hpp
  type usbguard (line 31) | namespace usbguard
    class RuleAppliedCondition (line 33) | class RuleAppliedCondition : public RuleConditionBase

FILE: src/Library/RuleEvaluatedCondition.cpp
  type usbguard (line 35) | namespace usbguard
    function RuleConditionBase (line 68) | RuleConditionBase* RuleEvaluatedCondition::clone() const
    type ::tm (line 75) | struct ::tm

FILE: src/Library/RuleEvaluatedCondition.hpp
  type usbguard (line 31) | namespace usbguard
    class RuleEvaluatedCondition (line 33) | class RuleEvaluatedCondition : public RuleConditionBase

FILE: src/Library/RuleParser/Actions.hpp
  type usbguard (line 29) | namespace usbguard
    type RuleParser (line 31) | namespace RuleParser
      type comment (line 33) | struct comment
      type target (line 34) | struct target
      type device_id (line 35) | struct device_id
      type device_id_value (line 36) | struct device_id_value
      type string_value (line 37) | struct string_value
      type multiset_operator (line 38) | struct multiset_operator
      type interface_value (line 39) | struct interface_value
      type condition (line 40) | struct condition
      type str_name (line 41) | struct str_name
      type str_hash (line 42) | struct str_hash
      type str_parent_hash (line 43) | struct str_parent_hash
      type str_serial (line 44) | struct str_serial
      type str_id (line 45) | struct str_id
      type str_via_port (line 46) | struct str_via_port
      type str_with_interface (line 47) | struct str_with_interface
      type str_with_connect_type (line 48) | struct str_with_connect_type
      type str_if (line 49) | struct str_if
      type rule_parser_actions (line 52) | struct rule_parser_actions : tao::pegtl::nothing<Rule> {}
      type rule_parser_actions<comment> (line 55) | struct rule_parser_actions<comment> {
        method apply0 (line 56) | static void apply0(Rule& rule)
      type rule_parser_actions<target> (line 65) | struct rule_parser_actions<target> {
        method apply (line 67) | static void apply(const Input& in, Rule& rule)
      type rule_parser_actions<device_id> (line 79) | struct rule_parser_actions<device_id> {
        method apply (line 81) | static void apply(const Input& in, Rule& rule)
      function stringValueFromRule (line 95) | static const std::string stringValueFromRule(const std::string& value)
      type name_actions (line 102) | struct name_actions : tao::pegtl::nothing<Rule> {}
      type name_actions<str_name> (line 105) | struct name_actions<str_name> {
        method apply (line 107) | static void apply(const Input& in, Rule& rule)
      type name_actions<string_value> (line 116) | struct name_actions<string_value> {
        method apply (line 118) | static void apply(const Input& in, Rule& rule)
      type name_actions<multiset_operator> (line 130) | struct name_actions<multiset_operator> {
        method apply (line 132) | static void apply(const Input& in, Rule& rule)
      type id_actions (line 144) | struct id_actions : tao::pegtl::nothing<Rule> {}
      type id_actions<str_id> (line 147) | struct id_actions<str_id> {
        method apply (line 149) | static void apply(const Input& in, Rule& rule)
      type id_actions<device_id_value> (line 158) | struct id_actions<device_id_value> {
        method apply (line 160) | static void apply(const Input& in, Rule& rule)
      type id_actions<multiset_operator> (line 175) | struct id_actions<multiset_operator> {
        method apply (line 177) | static void apply(const Input& in, Rule& rule)
      type hash_actions (line 189) | struct hash_actions : tao::pegtl::nothing<Rule> {}
      type hash_actions<str_hash> (line 192) | struct hash_actions<str_hash> {
        method apply (line 194) | static void apply(const Input& in, Rule& rule)
      type hash_actions<string_value> (line 203) | struct hash_actions<string_value> {
        method apply (line 205) | static void apply(const Input& in, Rule& rule)
      type hash_actions<multiset_operator> (line 217) | struct hash_actions<multiset_operator> {
        method apply (line 219) | static void apply(const Input& in, Rule& rule)
      type parent_hash_actions (line 231) | struct parent_hash_actions : tao::pegtl::nothing<Rule> {}
      type parent_hash_actions<str_parent_hash> (line 234) | struct parent_hash_actions<str_parent_hash> {
        method apply (line 236) | static void apply(const Input& in, Rule& rule)
      type parent_hash_actions<string_value> (line 245) | struct parent_hash_actions<string_value> {
        method apply (line 247) | static void apply(const Input& in, Rule& rule)
      type parent_hash_actions<multiset_operator> (line 259) | struct parent_hash_actions<multiset_operator> {
        method apply (line 261) | static void apply(const Input& in, Rule& rule)
      type serial_actions (line 273) | struct serial_actions : tao::pegtl::nothing<Rule> {}
      type serial_actions<str_serial> (line 276) | struct serial_actions<str_serial> {
        method apply (line 278) | static void apply(const Input& in, Rule& rule)
      type serial_actions<string_value> (line 287) | struct serial_actions<string_value> {
        method apply (line 289) | static void apply(const Input& in, Rule& rule)
      type serial_actions<multiset_operator> (line 301) | struct serial_actions<multiset_operator> {
        method apply (line 303) | static void apply(const Input& in, Rule& rule)
      type label_actions (line 315) | struct label_actions : tao::pegtl::nothing<Rule> {}
      type label_actions<str_serial> (line 318) | struct label_actions<str_serial> {
        method apply (line 320) | static void apply(const Input& in, Rule& rule)
      type label_actions<string_value> (line 329) | struct label_actions<string_value> {
        method apply (line 331) | static void apply(const Input& in, Rule& rule)
      type label_actions<multiset_operator> (line 343) | struct label_actions<multiset_operator> {
        method apply (line 345) | static void apply(const Input& in, Rule& rule)
      type with_connect_type_actions (line 357) | struct with_connect_type_actions : tao::pegtl::nothing<Rule> {}
      type with_connect_type_actions<str_with_connect_type> (line 360) | struct with_connect_type_actions<str_with_connect_type> {
        method apply (line 362) | static void apply(const Input& in, Rule& rule)
      type with_connect_type_actions<string_value> (line 372) | struct with_connect_type_actions<string_value> {
        method apply (line 374) | static void apply(const Input& in, Rule& rule)
      type with_connect_type_actions<multiset_operator> (line 386) | struct with_connect_type_actions<multiset_operator> {
        method apply (line 388) | static void apply(const Input& in, Rule& rule)
      type via_port_actions (line 401) | struct via_port_actions : tao::pegtl::nothing<Rule> {}
      type via_port_actions<str_via_port> (line 404) | struct via_port_actions<str_via_port> {
        method apply (line 406) | static void apply(const Input& in, Rule& rule)
      type via_port_actions<string_value> (line 415) | struct via_port_actions<string_value> {
        method apply (line 417) | static void apply(const Input& in, Rule& rule)
      type via_port_actions<multiset_operator> (line 429) | struct via_port_actions<multiset_operator> {
        method apply (line 431) | static void apply(const Input& in, Rule& rule)
      type with_interface_actions (line 443) | struct with_interface_actions : tao::pegtl::nothing<Rule> {}
      type with_interface_actions<str_with_interface> (line 446) | struct with_interface_actions<str_with_interface> {
        method apply (line 448) | static void apply(const Input& in, Rule& rule)
      type with_interface_actions<interface_value> (line 457) | struct with_interface_actions<interface_value> {
        method apply (line 459) | static void apply(const Input& in, Rule& rule)
      type with_interface_actions<multiset_operator> (line 472) | struct with_interface_actions<multiset_operator> {
        method apply (line 474) | static void apply(const Input& in, Rule& rule)
      type condition_actions (line 486) | struct condition_actions : tao::pegtl::nothing<Rule> {}
      type condition_actions<str_if> (line 489) | struct condition_actions<str_if> {
        method apply (line 491) | static void apply(const Input& in, Rule& rule)
      type condition_actions<condition> (line 500) | struct condition_actions<condition> {
        method apply (line 502) | static void apply(const Input& in, Rule& rule)
      type condition_actions<multiset_operator> (line 514) | struct condition_actions<multiset_operator> {
        method apply (line 516) | static void apply(const Input& in, Rule& rule)

FILE: src/Library/RuleParser/Grammar.hpp
  type usbguard (line 29) | namespace usbguard
    type RuleParser (line 31) | namespace RuleParser
      type str_allow (line 37) | struct str_allow : TAO_PEGTL_STRING("allow") {}
      type str_block (line 39) | struct str_block : TAO_PEGTL_STRING("block") {}
      type str_reject (line 41) | struct str_reject : TAO_PEGTL_STRING("reject") {}
      type str_match (line 43) | struct str_match : TAO_PEGTL_STRING("match") {}
      type str_device (line 45) | struct str_device : TAO_PEGTL_STRING("device") {}
      type str_name (line 47) | struct str_name : TAO_PEGTL_STRING("name") {}
      type str_hash (line 49) | struct str_hash : TAO_PEGTL_STRING("hash") {}
      type str_serial (line 59) | struct str_serial : TAO_PEGTL_STRING("serial") {}
      type str_if (line 61) | struct str_if : TAO_PEGTL_STRING("if") {}
      type str_id (line 63) | struct str_id : TAO_PEGTL_STRING("id") {}
      type str_label (line 65) | struct str_label : TAO_PEGTL_STRING("label") {}
      type str_equals (line 73) | struct str_equals : TAO_PEGTL_STRING("equals") {}
      type multiset_operator (line 82) | struct multiset_operator
      type attribute_value_multiset (line 86) | struct attribute_value_multiset
      type rule_attribute (line 93) | struct rule_attribute
      type escaped_single (line 101) | struct escaped_single
      type escaped_decbyte (line 104) | struct escaped_decbyte
      type escaped_hexbyte (line 107) | struct escaped_hexbyte
      type character_escaped (line 111) | struct character_escaped
      type character_regular (line 114) | struct character_regular
      type character (line 118) | struct character
      type bounded_string (line 122) | struct bounded_string
      type string_value (line 125) | struct string_value
      type condition_argument (line 131) | struct condition_argument
      type condition_identifier (line 134) | struct condition_identifier
      type negation (line 137) | struct negation
      type condition (line 140) | struct condition
      type hex4 (line 146) | struct hex4
      type device_vid (line 149) | struct device_vid : sor<hex4, one<'*'>> {}
      type device_pid (line 150) | struct device_pid : sor<hex4, one<'*'>> {}
      type device_id_value (line 152) | struct device_id_value
      type device_id (line 155) | struct device_id
      type hex2 (line 161) | struct hex2
      type hex2orAsterisk (line 164) | struct hex2orAsterisk
      type interface_value (line 167) | struct interface_value
      type id_attribute (line 173) | struct id_attribute
      type name_attribute (line 176) | struct name_attribute
      type hash_attribute (line 179) | struct hash_attribute
      type parent_hash_attribute (line 182) | struct parent_hash_attribute
      type serial_attribute (line 185) | struct serial_attribute
      type with_connect_type_attribute (line 188) | struct with_connect_type_attribute
      type via_port_attribute (line 191) | struct via_port_attribute
      type with_interface_attribute (line 194) | struct with_interface_attribute
      type condition_attribute (line 197) | struct condition_attribute
      type label_attribute (line 200) | struct label_attribute
      type rule_attributes (line 203) | struct rule_attributes
      type target (line 218) | struct target
      type comment (line 224) | struct comment
      type rule (line 231) | struct rule
      type rule_grammar (line 241) | struct rule_grammar

FILE: src/Library/RulePrivate.cpp
  type usbguard (line 30) | namespace usbguard
    function USBDeviceID (line 241) | const USBDeviceID& RulePrivate::getDeviceID() const
    function toString_appendNonEmptyAttribute (line 417) | static void toString_appendNonEmptyAttribute(std::string& rule_string,...
    function Rule (line 475) | Rule RulePrivate::fromString(const std::string& rule_string)

FILE: src/Library/RulePrivate.hpp
  type usbguard (line 30) | namespace usbguard
    class Interface (line 32) | class Interface
    class RulePrivate (line 33) | class RulePrivate
      type MetaData (line 36) | struct MetaData {
        method MetaData (line 37) | MetaData()
        method MetaData (line 42) | MetaData(const MetaData& rhs) = default;
        method MetaData (line 43) | MetaData& operator=(const MetaData& rhs) = default;
      method RulePrivate (line 54) | RulePrivate& operator=(const RulePrivate& rhs) = default;

FILE: src/Library/SysFSDevice.cpp
  type usbguard (line 37) | namespace usbguard
    function SysFSDevice (line 103) | SysFSDevice& SysFSDevice::operator=(SysFSDevice&& rhs_device)
    function UEvent (line 124) | const UEvent& SysFSDevice::getUEvent() const
    type ::stat (line 136) | struct ::stat

FILE: src/Library/SysFSDevice.hpp
  type usbguard (line 30) | namespace usbguard
    class SysFSDevice (line 32) | class SysFSDevice

FILE: src/Library/UEvent.cpp
  type usbguard (line 28) | namespace usbguard
    function UEvent (line 39) | UEvent& UEvent::operator=(UEvent&& rhs)
    function UEvent (line 45) | UEvent UEvent::fromString(const std::string& uevent_string, bool attri...

FILE: src/Library/UEvent.hpp
  type usbguard (line 29) | namespace usbguard
    class UEvent (line 31) | class UEvent

FILE: src/Library/UEventDeviceManager.cpp
  type usbguard (line 48) | namespace usbguard
    type timeval (line 180) | struct timeval
    type iovec (line 220) | struct iovec
    type sockaddr_nl (line 223) | struct sockaddr_nl
    type cmsghdr (line 225) | struct cmsghdr
    type ucred (line 226) | struct ucred
    type ucred (line 228) | struct ucred
    type msghdr (line 231) | struct msghdr
    type cmsghdr (line 264) | struct cmsghdr
    type ucred (line 273) | struct ucred
    type ucred (line 282) | struct ucred
    type ucred (line 283) | struct ucred

FILE: src/Library/UEventDeviceManager.hpp
  type usbguard (line 28) | namespace usbguard
    class UEvent (line 30) | class UEvent
    class UEventDeviceManager (line 32) | class UEventDeviceManager : public DeviceManagerBase

FILE: src/Library/UEventParser.cpp
  type usbguard (line 38) | namespace usbguard
    type UEventParser (line 40) | namespace UEventParser
      type actions (line 43) | struct actions
      type actions<attribute> (line 47) | struct actions<attribute> {
        method apply (line 49) | static void apply(const Input& in, UEvent& uevent)
      type actions<action> (line 90) | struct actions<action> {
        method apply (line 92) | static void apply(const Input& in, UEvent& uevent)
      type actions<devpath> (line 99) | struct actions<devpath> {
        method apply (line 101) | static void apply(const Input& in, UEvent& uevent)
    function parseUEventFromFile (line 108) | void parseUEventFromFile(const std::string& uevent_path, UEvent& ueven...
    function parseUEventFromString (line 128) | void parseUEventFromString(const std::string& uevent_string, UEvent& u...
    function parseUEventFromString (line 149) | void parseUEventFromString(const std::string& uevent_string, UEvent& u...

FILE: src/Library/UEventParser.hpp
  type usbguard (line 28) | namespace usbguard
    class UEvent (line 30) | class UEvent
    type UEventParser (line 32) | namespace UEventParser
      type value (line 36) | struct value
      type key (line 39) | struct key
      type attribute (line 42) | struct attribute
      type attributes (line 45) | struct attributes
      type action (line 48) | struct action
      type devpath (line 51) | struct devpath
      type header (line 54) | struct header
      type uevent (line 57) | struct uevent
      type grammar (line 60) | struct grammar

FILE: src/Library/UMockdevDeviceDefinition.cpp
  type usbguard (line 35) | namespace usbguard
    type UMockdevParser (line 37) | namespace UMockdevParser
      type line_rest (line 68) | struct line_rest
      type devfs_node_value (line 71) | struct devfs_node_value
      type devfs_node_line (line 74) | struct devfs_node_line
      type ascii_attr_value (line 77) | struct ascii_attr_value
      type ascii_attr_line (line 80) | struct ascii_attr_line
      type property_value (line 83) | struct property_value
      type property_line (line 86) | struct property_line
      type unprocessed_line (line 89) | struct unprocessed_line
      type definition_rest (line 92) | struct definition_rest
      type sysfs_path_value (line 95) | struct sysfs_path_value
      type sysfs_path_line_begin (line 98) | struct sysfs_path_line_begin
      type sysfs_path_line (line 101) | struct sysfs_path_line
      type empty_line (line 104) | struct empty_line
      type definition (line 107) | struct definition
      type grammar (line 110) | struct grammar
      type actions (line 114) | struct actions
      type actions<sysfs_path_line_begin> (line 120) | struct actions<sysfs_path_line_begin> {
        method apply (line 122) | static void apply(const Input& in, Definitions& definitions, const...
      type actions<sysfs_path_value> (line 132) | struct actions<sysfs_path_value> {
        method apply (line 134) | static void apply(const Input& in, Definitions& definitions, const...
      type actions<devfs_node_value> (line 143) | struct actions<devfs_node_value> {
        method apply (line 145) | static void apply(const Input& in, Definitions& definitions, const...
      type actions<ascii_attr_value> (line 155) | struct actions<ascii_attr_value> {
        method apply (line 157) | static void apply(const Input& in, Definitions& definitions, const...
      type actions<property_value> (line 170) | struct actions<property_value> {
        method apply (line 172) | static void apply(const Input& in, Definitions& definitions, const...
      type actions<definition> (line 191) | struct actions<definition> {
        method apply (line 193) | static void apply(const Input& in, Definitions& definitions, const...

FILE: src/Library/UMockdevDeviceDefinition.hpp
  type usbguard (line 29) | namespace usbguard
    class UMockdevDeviceDefinition (line 31) | class UMockdevDeviceDefinition
      method UMockdevDeviceDefinition (line 35) | UMockdevDeviceDefinition(UMockdevDeviceDefinition&&) = default;

FILE: src/Library/UMockdevDeviceManager.cpp
  type usbguard (line 51) | namespace usbguard
    type dirent (line 176) | struct dirent
    type stat (line 178) | struct stat
    type inotify_event (line 251) | struct inotify_event
    type timeval (line 451) | struct timeval
    type iovec (line 498) | struct iovec
    type sockaddr_nl (line 501) | struct sockaddr_nl
    type cmsghdr (line 503) | struct cmsghdr
    type ucred (line 504) | struct ucred
    type ucred (line 506) | struct ucred
    type msghdr (line 509) | struct msghdr
    type cmsghdr (line 535) | struct cmsghdr
    type ucred (line 544) | struct ucred
    type ucred (line 553) | struct ucred
    type ucred (line 554) | struct ucred
    type libudev_netlink_header (line 581) | struct libudev_netlink_header {
    type libudev_netlink_header (line 607) | struct libudev_netlink_header

FILE: src/Library/UMockdevDeviceManager.hpp
  type usbguard (line 32) | namespace usbguard
    class UEvent (line 34) | class UEvent
    class UMockdevDeviceManager (line 36) | class UMockdevDeviceManager : public DeviceManagerBase
      type GObjectDeleter (line 48) | struct GObjectDeleter {

FILE: src/Library/Utility.cpp
  type usbguard (line 30) | namespace usbguard
    type Utility (line 32) | namespace Utility
      function escapeString (line 34) | std::string escapeString(const std::string& string_raw)
      function unescapeString (line 74) | std::string unescapeString(const std::string& string_escaped)
      function quoteEscapeString (line 139) | std::string quoteEscapeString(const std::string& value)

FILE: src/Library/Utility.hpp
  type usbguard (line 29) | namespace usbguard
    type Utility (line 31) | namespace Utility

FILE: src/Library/public/usbguard/Audit.cpp
  type usbguard (line 29) | namespace usbguard
    function uid_t (line 44) | uid_t AuditIdentity::uid() const
    function pid_t (line 49) | pid_t AuditIdentity::pid() const
    function AuditIdentity (line 124) | const AuditIdentity& AuditEvent::identity() const
    function AuditEvent (line 173) | AuditEvent Audit::policyEvent(std::shared_ptr<Rule> rule, Policy::Even...
    function AuditEvent (line 178) | AuditEvent Audit::policyEvent(std::shared_ptr<Rule> new_rule, std::sha...
    function AuditEvent (line 183) | AuditEvent Audit::policyEvent(std::shared_ptr<Device> device, Policy::...
    function AuditEvent (line 188) | AuditEvent Audit::policyEvent(std::shared_ptr<Device> device, Rule::Ta...
    function AuditEvent (line 193) | AuditEvent Audit::deviceEvent(std::shared_ptr<Device> device, DeviceMa...
    function AuditEvent (line 198) | AuditEvent Audit::deviceEvent(std::shared_ptr<Device> new_device, std:...
    function AuditEvent (line 203) | AuditEvent Audit::policyEvent(const AuditIdentity& identity, std::shar...
    function AuditEvent (line 212) | AuditEvent Audit::policyEvent(const AuditIdentity& identity, std::shar...
    function AuditEvent (line 222) | AuditEvent Audit::policyEvent(const AuditIdentity& identity, std::shar...
    function AuditEvent (line 232) | AuditEvent Audit::policyEvent(const AuditIdentity& identity, std::shar...
    function AuditEvent (line 244) | AuditEvent Audit::deviceEvent(const AuditIdentity& identity, std::shar...
    function AuditEvent (line 254) | AuditEvent Audit::deviceEvent(const AuditIdentity& identity, std::shar...

FILE: src/Library/public/usbguard/Audit.hpp
  type usbguard (line 37) | namespace usbguard
    function AuditIdentity (line 42) | class DLL_PUBLIC AuditIdentity
    class AuditBackend (line 87) | class AuditBackend
    function AuditEvent (line 93) | class DLL_PUBLIC AuditEvent
    function AuditBackend (line 195) | class DLL_PUBLIC AuditBackend
    function Audit (line 233) | class DLL_PUBLIC Audit

FILE: src/Library/public/usbguard/ConfigFile.cpp
  type usbguard (line 26) | namespace usbguard

FILE: src/Library/public/usbguard/ConfigFile.hpp
  type usbguard (line 28) | namespace usbguard
    class ConfigFilePrivate (line 30) | class ConfigFilePrivate
    function ConfigFile (line 36) | class DLL_PUBLIC ConfigFile

FILE: src/Library/public/usbguard/Device.cpp
  type usbguard (line 26) | namespace usbguard
    function Device (line 40) | const Device& Device::operator=(const Device& rhs)
    function DeviceManager (line 46) | DeviceManager& Device::manager() const
    function USBDeviceID (line 141) | const USBDeviceID& Device::getDeviceID() const

FILE: src/Library/public/usbguard/Device.hpp
  type usbguard (line 33) | namespace usbguard
    class DeviceManager (line 35) | class DeviceManager
    class DevicePrivate (line 36) | class DevicePrivate
    function Device (line 41) | class DLL_PUBLIC Device

FILE: src/Library/public/usbguard/DeviceManager.cpp
  type usbguard (line 29) | namespace usbguard
    function DeviceManager (line 128) | const DeviceManager& DeviceManager::operator=(const DeviceManager& rhs)

FILE: src/Library/public/usbguard/DeviceManager.hpp
  type usbguard (line 33) | namespace usbguard
    class DeviceManagerHooks (line 35) | class DeviceManagerHooks
    class DeviceManagerPrivate (line 36) | class DeviceManagerPrivate
    function DeviceManager (line 44) | class DLL_PUBLIC DeviceManager

FILE: src/Library/public/usbguard/DeviceManagerHooks.cpp
  type usbguard (line 25) | namespace usbguard

FILE: src/Library/public/usbguard/DeviceManagerHooks.hpp
  type usbguard (line 30) | namespace usbguard
    function DeviceManagerHooks (line 35) | class DLL_PUBLIC DeviceManagerHooks

FILE: src/Library/public/usbguard/Exception.hpp
  type usbguard (line 34) | namespace usbguard
    class DLL_PUBLIC (line 39) | class DLL_PUBLIC
    function Exception (line 51) | Exception(const Exception& rhs) = default;
    function Exception (line 54) | Exception(Exception&& rhs) = default;
    function setContext (line 72) | void setContext(const std::string& context)
    function setObject (line 77) | void setObject(const std::string& object)
    function setReason (line 82) | void setReason(const std::string& reason_val)
    function message (line 94) | virtual std::string message() const noexcept
    class ErrnoException (line 118) | class ErrnoException : public Exception
      method ErrnoException (line 121) | ErrnoException(const std::string& context, const std::string& object...
      method reasonFromErrno (line 126) | static std::string reasonFromErrno(const int errno_value)
    class IPCException (line 149) | class IPCException : public Exception
      method IPCException (line 152) | IPCException()
      method IPCException (line 157) | IPCException(const Exception& exception,
      method IPCException (line 164) | IPCException(const std::string& context,
      method IPCException (line 173) | IPCException(const IPCException& rhs)
      method hasMessageID (line 179) | bool hasMessageID() const noexcept
      method messageID (line 184) | uint64_t messageID() const noexcept
      method setMessageID (line 189) | void setMessageID(uint64_t message_id)

FILE: src/Library/public/usbguard/IPCClient.cpp
  type usbguard (line 26) | namespace usbguard

FILE: src/Library/public/usbguard/IPCClient.hpp
  type usbguard (line 36) | namespace usbguard
    class IPCClientPrivate (line 38) | class IPCClientPrivate
    function IPCClient (line 44) | class DLL_PUBLIC IPCClient : public Interface

FILE: src/Library/public/usbguard/IPCServer.cpp
  type usbguard (line 31) | namespace usbguard

FILE: src/Library/public/usbguard/IPCServer.hpp
  type usbguard (line 38) | namespace usbguard
    class IPCServerPrivate (line 40) | class IPCServerPrivate
    function IPCServer (line 46) | class DLL_PUBLIC IPCServer : public Interface

FILE: src/Library/public/usbguard/Interface.hpp
  type usbguard (line 33) | namespace usbguard
    function Interface (line 40) | class DLL_PUBLIC Interface

FILE: src/Library/public/usbguard/KeyValueParser.cpp
  type usbguard (line 36) | namespace usbguard

FILE: src/Library/public/usbguard/KeyValueParser.hpp
  type usbguard (line 33) | namespace usbguard
    class KeyValueParserPrivate (line 35) | class KeyValueParserPrivate
    function KeyValueParser (line 40) | class DLL_PUBLIC KeyValueParser

FILE: src/Library/public/usbguard/Logger.cpp
  type usbguard (line 42) | namespace usbguard
    class OStreamSink (line 116) | class OStreamSink : public LogSink
      method OStreamSink (line 119) | OStreamSink(const std::string& name, std::ostream& stream)
      method write (line 125) | void write(const LogStream::Source& source, LogStream::Level level, ...
    class ConsoleSink (line 147) | class ConsoleSink : public OStreamSink
      method ConsoleSink (line 150) | ConsoleSink()
    class SyslogSink (line 156) | class SyslogSink : public LogSink
      method SyslogSink (line 159) | SyslogSink(const std::string& ident)
      method levelToPriority (line 171) | int levelToPriority(const LogStream::Level level)
      method write (line 195) | void write(const LogStream::Source& source, LogStream::Level level, ...
    class FileSink (line 212) | class FileSink : public OStreamSink
      method FileSink (line 215) | FileSink(const std::string& filepath, bool append = true)
    class AuditFileSink (line 239) | class AuditFileSink : public OStreamSink
      method AuditFileSink (line 242) | AuditFileSink(const std::string& filepath)
      method write (line 260) | void write(const LogStream::Source& source, LogStream::Level level, ...
    function LogStream (line 393) | LogStream Logger::operator()(const std::string& file, const int line, ...
    type timeval (line 423) | struct timeval

FILE: src/Library/public/usbguard/Logger.hpp
  type usbguard (line 30) | namespace usbguard
    class Logger (line 32) | class Logger
    class DLL_PUBLIC (line 37) | class DLL_PUBLIC
    type Source (line 44) | struct Source {
    type Level (line 65) | enum class Level : int {
    function LogSink (line 117) | class DLL_PUBLIC LogSink
    function Logger (line 156) | class DLL_PUBLIC Logger

FILE: src/Library/public/usbguard/MemoryRuleSet.cpp
  type usbguard (line 27) | namespace usbguard
    function MemoryRuleSet (line 42) | const MemoryRuleSet& MemoryRuleSet::operator=(const MemoryRuleSet& rhs)

FILE: src/Library/public/usbguard/MemoryRuleSet.hpp
  type usbguard (line 28) | namespace usbguard
    class Interface (line 30) | class Interface
    function MemoryRuleSet (line 31) | class DLL_PUBLIC MemoryRuleSet : public RuleSet

FILE: src/Library/public/usbguard/Policy.cpp
  type usbguard (line 27) | namespace usbguard

FILE: src/Library/public/usbguard/Policy.hpp
  type usbguard (line 28) | namespace usbguard
    function Policy (line 30) | class DLL_PUBLIC Policy

FILE: src/Library/public/usbguard/Predicates.hpp
  type usbguard (line 25) | namespace usbguard
    type Predicates (line 27) | namespace Predicates DLL_PUBLIC
      function isSubsetOf (line 39) | bool isSubsetOf(const T& source, const T& target)
      function isSupersetOf (line 57) | bool isSupersetOf(const T& source, const T& target)

FILE: src/Library/public/usbguard/Rule.cpp
  type usbguard (line 28) | namespace usbguard
    function toRuleString (line 31) | std::string toRuleString(const std::string& value)
    function Rule (line 53) | const Rule& Rule::operator=(const Rule& rhs)
    function USBDeviceID (line 84) | const USBDeviceID& Rule::getDeviceID() const
    function Rule (line 297) | Rule Rule::fromString(const std::string& rule_string)

FILE: src/Library/public/usbguard/Rule.hpp
  type usbguard (line 36) | namespace usbguard
    function toRuleString (line 46) | std::string toRuleString(T* const value)
    function toRuleString (line 58) | std::string toRuleString(const T& value)
    class RulePrivate (line 72) | class RulePrivate
    function Rule (line 78) | class DLL_PUBLIC Rule

FILE: src/Library/public/usbguard/RuleCondition.cpp
  type usbguard (line 31) | namespace usbguard
    function RuleConditionBase (line 129) | RuleConditionBase* RuleConditionBase::getImplementation(const std::str...
    function RuleConditionBase (line 172) | RuleConditionBase* RuleConditionBase::getImplementation(const std::str...
    function RuleCondition (line 225) | RuleCondition& RuleCondition::operator=(const RuleCondition& rhs)
    function RuleCondition (line 231) | RuleCondition& RuleCondition::operator=(RuleCondition&& rhs)
    function RuleConditionBase (line 237) | RuleConditionBase* RuleCondition::operator->()
    function RuleConditionBase (line 242) | RuleConditionBase& RuleCondition::operator*()
  type usbguard (line 127) | namespace usbguard
    function RuleConditionBase (line 129) | RuleConditionBase* RuleConditionBase::getImplementation(const std::str...
    function RuleConditionBase (line 172) | RuleConditionBase* RuleConditionBase::getImplementation(const std::str...
    function RuleCondition (line 225) | RuleCondition& RuleCondition::operator=(const RuleCondition& rhs)
    function RuleCondition (line 231) | RuleCondition& RuleCondition::operator=(RuleCondition&& rhs)
    function RuleConditionBase (line 237) | RuleConditionBase* RuleCondition::operator->()
    function RuleConditionBase (line 242) | RuleConditionBase& RuleCondition::operator*()

FILE: src/Library/public/usbguard/RuleCondition.hpp
  type usbguard (line 26) | namespace usbguard
    class Interface (line 28) | class Interface
    class Rule (line 29) | class Rule
    function RuleConditionBase (line 34) | class DLL_PUBLIC RuleConditionBase
    function RuleCondition (line 192) | class DLL_PUBLIC RuleCondition

FILE: src/Library/public/usbguard/RuleParser.cpp
  type usbguard (line 43) | namespace usbguard
    function Rule (line 45) | Rule parseRuleFromString(const std::string& rule_spec, const std::stri...

FILE: src/Library/public/usbguard/RuleParser.hpp
  type usbguard (line 29) | namespace usbguard
    class RuleParserError (line 34) | class RuleParserError : public std::exception
      method RuleParserError (line 47) | RuleParserError(const std::string& rule_spec, const std::string& hin...
      method setHint (line 62) | void setHint(const std::string& hint)
      method setOffset (line 72) | void setOffset(size_t offset)
      method setFileInfo (line 84) | void setFileInfo(const std::string& file, size_t error_line, size_t ...
      method hasFileInfo (line 127) | bool hasFileInfo() const
      method fileInfo (line 138) | const std::string fileInfo() const
      method line (line 158) | size_t line() const
      method offset (line 168) | size_t offset() const

FILE: src/Library/public/usbguard/RuleSet.cpp
  type usbguard (line 33) | namespace usbguard
    function RuleSet (line 51) | const RuleSet& RuleSet::operator=(const RuleSet& rhs)

FILE: src/Library/public/usbguard/RuleSet.hpp
  type usbguard (line 28) | namespace usbguard
    class Interface (line 30) | class Interface
    function RuleSet (line 31) | class DLL_PUBLIC RuleSet

FILE: src/Library/public/usbguard/Typedefs.cpp
  type usbguard (line 25) | namespace usbguard
    function matches (line 28) | bool matches(const std::string& a, const std::string& b)

FILE: src/Library/public/usbguard/Typedefs.hpp
  type usbguard (line 24) | namespace usbguard
    function matches (line 34) | bool matches(const T& a, const T& b)

FILE: src/Library/public/usbguard/USB.cpp
  type usbguard (line 32) | namespace usbguard
    function USBParseDeviceDescriptor (line 281) | void USBParseDeviceDescriptor(USBDescriptorParser* parser, const USBDe...
    function USBParseConfigurationDescriptor (line 295) | void USBParseConfigurationDescriptor(USBDescriptorParser* parser, cons...
    function USBParseInterfaceDescriptor (line 307) | void USBParseInterfaceDescriptor(USBDescriptorParser* parser, const US...
    function USBParseEndpointDescriptor (line 317) | void USBParseEndpointDescriptor(USBDescriptorParser* parser, const USB...
    function USBParseAudioEndpointDescriptor (line 326) | void USBParseAudioEndpointDescriptor(USBDescriptorParser* parser, cons...
    function USBParseUnknownDescriptor (line 336) | void USBParseUnknownDescriptor(USBDescriptorParser* parser, const USBD...

FILE: src/Library/public/usbguard/USB.hpp
  type usbguard (line 35) | namespace usbguard
    type USBDescriptorType (line 77) | enum class USBDescriptorType : uint8_t {
    function USBDescriptorHeader (line 87) | struct DLL_PUBLIC USBDescriptorHeader {
    function USBDescriptor (line 90) | __attribute__((packed));
    function USBDeviceDescriptor (line 95) | __attribute__((packed));
    function USBConfigurationDescriptor (line 111) | __attribute__((packed));
    function USBInterfaceDescriptor (line 121) | __attribute__((packed));
    type USBEndpointDescriptor (line 134) | struct USBEndpointDescriptor {
      type USBDescriptorHeader (line 135) | struct USBDescriptorHeader
    type USBAudioEndpointDescriptor (line 142) | struct USBAudioEndpointDescriptor {
      type USBDescriptorHeader (line 143) | struct USBDescriptorHeader
    function USBDeviceID (line 159) | class DLL_PUBLIC USBDeviceID
    type Predicates (line 276) | namespace Predicates DLL_PUBLIC
    function USBInterfaceType (line 312) | class DLL_PUBLIC USBInterfaceType
    type Predicates (line 418) | namespace Predicates DLL_PUBLIC
    class USBDescriptorParser (line 435) | class USBDescriptorParser
    function USBDescriptorParserHooks (line 437) | class DLL_PUBLIC USBDescriptorParserHooks
    function USBDescriptorParser (line 447) | class DLL_PUBLIC USBDescriptorParser

FILE: src/Library/public/usbguard/USBGuard.cpp
  type usbguard (line 36) | namespace usbguard
    function getDaemonConfigPath (line 38) | std::string getDaemonConfigPath()
    function getIPCAccessControlFilesPath (line 53) | std::string getIPCAccessControlFilesPath()
    function getIPCAccessControlFileBasename (line 67) | std::string getIPCAccessControlFileBasename(const std::string& name, b...

FILE: src/Library/public/usbguard/USBGuard.hpp
  type usbguard (line 25) | namespace usbguard

FILE: src/Tests/Fuzzers/fuzzer-rules.cpp
  function LLVMFuzzerTestOneInput (line 37) | int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)

FILE: src/Tests/Fuzzers/fuzzer-uevent.cpp
  function LLVMFuzzerTestOneInput (line 36) | int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)

FILE: src/Tests/Fuzzers/fuzzer-usb-descriptor.cpp
  class DummyHooks (line 33) | class DummyHooks : public USBDescriptorParserHooks
    method loadUSBDescriptor (line 36) | void loadUSBDescriptor(USBDescriptorParser* parser, const USBDescripto...
  function LLVMFuzzerTestOneInput (line 47) | int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)

FILE: src/Tests/Regression/github-PR209-config-parser.cpp
  function createFile (line 34) | static std::string createFile(const std::vector<std::string> lines)

FILE: src/test_filesystem.cpp
  function main (line 19) | int main()
Condensed preview — 468 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,876K chars).
[
  {
    "path": ".gitattributes",
    "chars": 35,
    "preview": "src/ThirdParty/* linguist-vendored\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 937,
    "preview": "##\n## Copyright (c) 2023 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 4143,
    "preview": "name: C/C++ CI\n\non:\n  push:\n  pull_request:\n  schedule:\n    - cron: '0 4 * * 5'  # Every Friday at 4am\n\n# Drop permissio"
  },
  {
    "path": ".github/workflows/docker.yml",
    "chars": 2060,
    "preview": "##\n## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": ".github/workflows/polkit.yml",
    "chars": 2468,
    "preview": "##\n## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": ".gitignore",
    "chars": 397,
    "preview": "/libusbguard.pc\n/usbguard\n/usbguard-daemon\n/usbguard-daemon.conf\n/usbguard-dbus\n/usbguard-rule-parser\nMakefile\nMakefile."
  },
  {
    "path": ".gitmodules",
    "chars": 211,
    "preview": "[submodule \"src/ThirdParty/Catch\"]\n\tpath = src/ThirdParty/Catch\n\turl = https://github.com/philsquared/Catch\n[submodule \""
  },
  {
    "path": ".lgtm.yml",
    "chars": 571,
    "preview": "# lgtm.yml configuration file for C/C++ analysis\n# of USBGuard on lgtm.com:\n# https://lgtm.com/projects/g/USBGuard/usbgu"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 20562,
    "preview": "# Change Log\n\n## 1.1.4 - 2025-07-15\n\n### Fixed\n\n- Add tmpfiles.d file for /var/log/usbguard\n- Ignore errors from rmdir d"
  },
  {
    "path": "LICENSE",
    "chars": 18092,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
  },
  {
    "path": "Makefile.am",
    "chars": 18351,
    "preview": "##\n## Copyright (C) 2016 Red Hat, Inc.\n##\n## This program is free software; you can redistribute it and/or modify\n## it "
  },
  {
    "path": "README.adoc",
    "chars": 5283,
    "preview": "USBGuard\n========\n:toc:\n\n[.clearfix]\n--\n[.left]\nimage::https://travis-ci.com/USBGuard/usbguard.svg?branch=master[Travis "
  },
  {
    "path": "RELEASE_PROCESS.md",
    "chars": 1480,
    "preview": "# USBGuard Release Process\n\n1. Clean up any artifacts from your local repository.\n\n```\n$ git clean -xfd\n```\n\n2. Setup bu"
  },
  {
    "path": "VERSION",
    "chars": 6,
    "preview": "1.1.4\n"
  },
  {
    "path": "abi-ref/libusbguard.so.abi",
    "chars": 1184918,
    "preview": "<abi-corpus version='2.4' path='build/.libs/libusbguard.so' architecture='elf-amd-x86_64' soname='libusbguard.so.1'>\n  <"
  },
  {
    "path": "autogen.sh",
    "chars": 840,
    "preview": "#!/bin/sh\n##\n## Copyright (C) 2016 Red Hat, Inc.\n##\n## This program is free software; you can redistribute it and/or mod"
  },
  {
    "path": "configure.ac",
    "chars": 29319,
    "preview": "AC_PREREQ([2.69])\nAC_INIT([usbguard],\n        m4_esyscmd_s([cat VERSION]),\n        [usbguard@usbguard.org])\nAC_CONFIG_SR"
  },
  {
    "path": "doc/man/.gitignore",
    "chars": 45,
    "preview": "/*.1\n/*.1.roff\n/*.5\n/*.5.roff\n/*.8\n/*.8.roff\n"
  },
  {
    "path": "doc/man/example-allow-device.adoc",
    "chars": 275,
    "preview": "....\n    # Allow a device by ID(it is the very first number from the list-devices command output)\n    $ sudo usbguard al"
  },
  {
    "path": "doc/man/example-initial-policy.adoc",
    "chars": 229,
    "preview": "....\n    $ sudo usbguard generate-policy > rules.conf\n    $ vi rules.conf\n    (review/modify the rule set)\n    $ sudo in"
  },
  {
    "path": "doc/man/footer.adoc",
    "chars": 590,
    "preview": "== BUGS\nIf you find a bug in this software or if you'd like to request a feature to be implemented, please file a ticket"
  },
  {
    "path": "doc/man/usbguard-daemon.8.adoc",
    "chars": 2069,
    "preview": "usbguard-daemon(8)\n==================\n:doctype: manpage\n\n\n== NAME\nusbguard-daemon - USBGuard daemon\n\n\n== SYNOPSIS\nusbgua"
  },
  {
    "path": "doc/man/usbguard-daemon.conf.5.adoc",
    "chars": 8782,
    "preview": "usbguard-daemon.conf(5)\n=======================\n:doctype: manpage\n\n\n== NAME\nusbguard-daemon.conf - USBGuard daemon confi"
  },
  {
    "path": "doc/man/usbguard-dbus.8.adoc",
    "chars": 503,
    "preview": "usbguard-dbus(8)\n================\n:doctype: manpage\n\n\n== NAME\nusbguard-dbus - USBGuard D-Bus interface service\n\n\n== SYNO"
  },
  {
    "path": "doc/man/usbguard-ldap.conf.5.adoc",
    "chars": 2372,
    "preview": "usbguard-ldap.conf(5)\n=====================\n:doctype: manpage\n\n\n== NAME\nusbguard-ldap.conf - USBGuard daemon ldap config"
  },
  {
    "path": "doc/man/usbguard-rules.conf.5.adoc",
    "chars": 13224,
    "preview": "usbguard-rules.conf(5)\n======================\n:doctype: manpage\n\n\n== NAME\nusbguard-rules.conf - USBGuard rule set file.\n"
  },
  {
    "path": "doc/man/usbguard.1.adoc",
    "chars": 8292,
    "preview": "usbguard(1)\n===========\n:doctype: manpage\n\n\n== NAME\nusbguard - USBGuard command-line interface\n\n\n== SYNOPSIS\n\nusbguard ["
  },
  {
    "path": "libusbguard.pc.in",
    "chars": 274,
    "preview": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@/usbguard\n\nName: libusbguard\nDescriptio"
  },
  {
    "path": "m4/ax_check_compile_flag.m4",
    "chars": 3330,
    "preview": "# ===========================================================================\n#   http://www.gnu.org/software/autoconf-a"
  },
  {
    "path": "m4/ax_pthread.m4",
    "chars": 18391,
    "preview": "# ===========================================================================\n#        http://www.gnu.org/software/autoc"
  },
  {
    "path": "m4/libgcrypt.m4",
    "chars": 4717,
    "preview": "dnl Autoconf macros for libgcrypt\ndnl       Copyright (C) 2002, 2004, 2011 Free Software Foundation, Inc.\ndnl\ndnl This f"
  },
  {
    "path": "scripts/astyle.sh",
    "chars": 859,
    "preview": "#!/bin/bash\n#\n# Copyright (C) 2017 Red Hat, Inc.\n#\n# This program is free software; you can redistribute it and/or modif"
  },
  {
    "path": "scripts/bash_completion/usbguard",
    "chars": 11823,
    "preview": "_usbguard_get_ids() {\n    usbguard list-devices 2>/dev/null | cut -d \":\" -f1\n}\n\n_usbguard_get_rules() {\n    usbguard lis"
  },
  {
    "path": "scripts/copr-build-srpm.sh",
    "chars": 2163,
    "preview": "#!/bin/bash\n#\n# Copyright (C) 2016 Red Hat, Inc.\n#\n# This program is free software; you can redistribute it and/or modif"
  },
  {
    "path": "scripts/docker/build_on_alpine_linux_3_21.Dockerfile",
    "chars": 1877,
    "preview": "##\n## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": "scripts/docker/build_on_centos_8_2.Dockerfile",
    "chars": 2168,
    "preview": "##\n## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": "scripts/docker/build_on_debian_buster_with_gcc_9_2.Dockerfile",
    "chars": 2371,
    "preview": "##\n## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": "scripts/docker/build_on_ubuntu_22_04.Dockerfile",
    "chars": 2119,
    "preview": "##\n## Copyright (c) 2022 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": "scripts/docker/build_on_ubuntu_25_04.Dockerfile",
    "chars": 2207,
    "preview": "##\n## Copyright (c) 2025 Sebastian Pipping <sebastian@pipping.org>\n##\n## This program is free software; you can redistri"
  },
  {
    "path": "scripts/ldap/ldap.sh",
    "chars": 700,
    "preview": "#!/bin/bash\n\nset -e\n\nBASE=\"dc=example,dc=com\"\nUSER=\"cn=Manager,$BASE\"\n\nHOST=\"192.168.122.83\"\nPASS=\"passme\"\n\nping -q -c 1"
  },
  {
    "path": "scripts/ldap/schema2ldif.pl",
    "chars": 1057,
    "preview": "#!/usr/bin/env perl\n# Converts OpenLDAP schema from traditional slapd.conf format to LDIF format\n# usable for importing "
  },
  {
    "path": "scripts/ldap/setup.ldif",
    "chars": 187,
    "preview": "dn: dc=test,dc=com\nobjectclass: dcObject\nobjectclass: organization\ndc: test\no: \"Test server\"\n\ndn: ou=USBGuard,dc=test,dc"
  },
  {
    "path": "scripts/ldap/usbguard-policy.ldif",
    "chars": 1278,
    "preview": "dn: cn=Rule1,ou=USBGuard,dc=test,dc=com\nobjectClass: USBGuardPolicy\nobjectClass: top\ncn: Rule1\nRuleType: allow\nUSBGuardH"
  },
  {
    "path": "scripts/ldap/usbguard.ldif",
    "chars": 2952,
    "preview": "dn: cn=usbguard,cn=schema,cn=config\nobjectClass: olcSchemaConfig\ncn: usbguard\nolcAttributeTypes: ( 1.3.6.1.4.1.15955.9.1"
  },
  {
    "path": "scripts/ldap/usbguard.schema",
    "chars": 2756,
    "preview": "attributetype ( 1.3.6.1.4.1.15955.9.1.1\n  NAME 'USBGuardRuleTarget'\n  DESC 'Hostname for USBGuard host'\n  EQUALITY caseE"
  },
  {
    "path": "scripts/modeline.vim",
    "chars": 17,
    "preview": "set ts=2 sw=2 et\n"
  },
  {
    "path": "scripts/reformat-sources.sh",
    "chars": 1294,
    "preview": "#!/bin/bash\n#\n# Copyright (C) 2017 Red Hat, Inc.\n#\n# This program is free software; you can redistribute it and/or modif"
  },
  {
    "path": "scripts/rule-generator.sh",
    "chars": 4299,
    "preview": "#!/bin/sh\n#\n# Copyright (C) 2016 Red Hat, Inc.\n#\n# This program is free software; you can redistribute it and/or modify\n"
  },
  {
    "path": "scripts/usb-descriptor-collect.sh",
    "chars": 2692,
    "preview": "#!/bin/bash\n#\n# Copyright (C) 2016 Red Hat, Inc.\n#\n# This program is free software; you can redistribute it and/or modif"
  },
  {
    "path": "scripts/usbguard-zsh-completion",
    "chars": 6179,
    "preview": "#compdef usbguard\n#autoload\n\n# usbguard completion, based on cli help text\n\nlocal curcontext=\"$curcontext\" state line re"
  },
  {
    "path": "src/.gitignore",
    "chars": 35,
    "preview": "/build-config.h\n/build-config.h.in\n"
  },
  {
    "path": "src/CLI/IPCSignalWatcher.cpp",
    "chars": 9755,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/IPCSignalWatcher.hpp",
    "chars": 2294,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/PolicyGenerator.cpp",
    "chars": 4033,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/PolicyGenerator.hpp",
    "chars": 2121,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-add-user.cpp",
    "chars": 4711,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-add-user.hpp",
    "chars": 944,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-allow-device.cpp",
    "chars": 1193,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-allow-device.hpp",
    "chars": 948,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-append-rule.cpp",
    "chars": 2875,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-append-rule.hpp",
    "chars": 947,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-apply-device-policy.cpp",
    "chars": 4562,
    "preview": "//\n// Copyright (C) 2020 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-apply-device-policy.hpp",
    "chars": 1012,
    "preview": "//\n// Copyright (C) 2020 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-block-device.cpp",
    "chars": 1193,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-block-device.hpp",
    "chars": 948,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-generate-policy.cpp",
    "chars": 6448,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-generate-policy.hpp",
    "chars": 951,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-get-parameter.cpp",
    "chars": 2665,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-get-parameter.hpp",
    "chars": 949,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-list-devices.cpp",
    "chars": 5874,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-list-devices.hpp",
    "chars": 948,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-list-rules.cpp",
    "chars": 2754,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-list-rules.hpp",
    "chars": 946,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-print-version.cpp",
    "chars": 2461,
    "preview": "//\n// Copyright (C) 2022 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-print-version.hpp",
    "chars": 949,
    "preview": "//\n// Copyright (C) 2022 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-read-descriptor.cpp",
    "chars": 8260,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-read-descriptor.hpp",
    "chars": 951,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-reject-device.cpp",
    "chars": 1196,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-reject-device.hpp",
    "chars": 949,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-remove-rule.cpp",
    "chars": 2100,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-remove-rule.hpp",
    "chars": 947,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-remove-user.cpp",
    "chars": 3336,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-remove-user.hpp",
    "chars": 947,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-rule-parser.cpp",
    "chars": 4569,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-set-parameter.cpp",
    "chars": 3005,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-set-parameter.hpp",
    "chars": 949,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-watch.cpp",
    "chars": 4015,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard-watch.hpp",
    "chars": 941,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard.cpp",
    "chars": 5674,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/CLI/usbguard.hpp",
    "chars": 1023,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/ByteOrder.hpp",
    "chars": 1038,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/FDInputStream.hpp",
    "chars": 2737,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/LDAPUtil.cpp",
    "chars": 4285,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/LDAPUtil.hpp",
    "chars": 1710,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/Thread.hpp",
    "chars": 2577,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/Utility.cpp",
    "chars": 15094,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Common/Utility.hpp",
    "chars": 8670,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/DBus/.gitignore",
    "chars": 35,
    "preview": "/DBusInterface.xml.cstr\n/*.service\n"
  },
  {
    "path": "src/DBus/DBusBridge.cpp",
    "chars": 19483,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/DBus/DBusBridge.hpp",
    "chars": 3553,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/DBus/DBusInterface.xml",
    "chars": 10566,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE node PUBLIC\n  \"-//freedesktop//DTD D-Bus Object Introspection 1.0//EN\""
  },
  {
    "path": "src/DBus/README.adoc",
    "chars": 124,
    "preview": "USBGuard DBus\n=============\n\n== Generating DBus documentation\n\n[source,bash]\n----\ninclude::generate-documentation.sh[]\n-"
  },
  {
    "path": "src/DBus/gdbus-server.cpp",
    "chars": 8727,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/DBus/generate-documentation.sh",
    "chars": 1266,
    "preview": "#!/bin/sh\n#\n# Copyright (C) 2018 Red Hat, Inc.\n#\n# This program is free software; you can redistribute it and/or modify\n"
  },
  {
    "path": "src/DBus/org.usbguard1.conf",
    "chars": 619,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE busconfig PUBLIC\n  \"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
  },
  {
    "path": "src/DBus/org.usbguard1.policy",
    "chars": 2603,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE policyconfig PUBLIC \"-//freedesktop//DTD PolicyKit Policy Configuration"
  },
  {
    "path": "src/DBus/org.usbguard1.service.in",
    "chars": 117,
    "preview": "[D-BUS Service]\nName=org.usbguard1\nExec=%{sbindir}%/usbguard-dbus --system\nSystemdService=dbus-org.usbguard.service\n\n"
  },
  {
    "path": "src/DBus/usbguard-dbus.service.in",
    "chars": 281,
    "preview": "[Unit]\nDescription=USBGuard D-Bus Service\nRequires=usbguard.service\nDocumentation=man:usbguard-dbus(8)\n\n[Service]\nType=d"
  },
  {
    "path": "src/Daemon/Daemon.cpp",
    "chars": 35521,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/Daemon.hpp",
    "chars": 5652,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/FileAuditBackend.cpp",
    "chars": 1459,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/FileAuditBackend.hpp",
    "chars": 1010,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/FileRuleSet.cpp",
    "chars": 2776,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/FileRuleSet.hpp",
    "chars": 1600,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/LDAPHandler.cpp",
    "chars": 9309,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/LDAPHandler.hpp",
    "chars": 1893,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/LDAPRuleSet.cpp",
    "chars": 3325,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/LDAPRuleSet.hpp",
    "chars": 1697,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/LinuxAuditBackend.cpp",
    "chars": 8355,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/LinuxAuditBackend.hpp",
    "chars": 1098,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/NSHandler.cpp",
    "chars": 4825,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/NSHandler.hpp",
    "chars": 2124,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/RuleSetFactory.cpp",
    "chars": 3390,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/RuleSetFactory.hpp",
    "chars": 1490,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/Seccomp.c",
    "chars": 6771,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/Seccomp.h",
    "chars": 974,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Daemon/main.cpp",
    "chars": 6194,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/AllowedMatchesCondition.cpp",
    "chars": 2007,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/AllowedMatchesCondition.hpp",
    "chars": 1434,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Base64.cpp",
    "chars": 7139,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Base64.hpp",
    "chars": 1377,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/ConfigFilePrivate.cpp",
    "chars": 4421,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/ConfigFilePrivate.hpp",
    "chars": 1983,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DeviceBase.cpp",
    "chars": 7936,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DeviceBase.hpp",
    "chars": 1781,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DeviceManagerBase.cpp",
    "chars": 12148,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DeviceManagerBase.hpp",
    "chars": 2775,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DeviceManagerPrivate.cpp",
    "chars": 4286,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DeviceManagerPrivate.hpp",
    "chars": 2491,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DevicePrivate.cpp",
    "chars": 9486,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/DevicePrivate.hpp",
    "chars": 3506,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/FixedStateCondition.cpp",
    "chars": 1456,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/FixedStateCondition.hpp",
    "chars": 1295,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Hash.cpp",
    "chars": 5649,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Hash.hpp",
    "chars": 1792,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/IPC/.gitignore",
    "chars": 17,
    "preview": "/*.pb.cc\n/*.pb.h\n"
  },
  {
    "path": "src/Library/IPC/Devices.proto",
    "chars": 1370,
    "preview": "package usbguard.IPC;\n\nimport \"Message.proto\";\nimport \"Rule.proto\";\n\n\nmessage listDevicesRequest {\n  required string que"
  },
  {
    "path": "src/Library/IPC/Exception.proto",
    "chars": 170,
    "preview": "package usbguard.IPC;\n\nmessage Exception {\n  required string context = 1;\n  required string object = 2;\n  required strin"
  },
  {
    "path": "src/Library/IPC/Message.proto",
    "chars": 75,
    "preview": "package usbguard.IPC;\n\nmessage MessageHeader {\n  required uint64 id = 1;\n}\n"
  },
  {
    "path": "src/Library/IPC/Parameter.proto",
    "chars": 632,
    "preview": "package usbguard.IPC;\n\nimport \"Message.proto\";\n\n\nmessage setParameterRequest {\n  required string name = 1;\n  required st"
  },
  {
    "path": "src/Library/IPC/Policy.proto",
    "chars": 1323,
    "preview": "package usbguard.IPC;\n\nimport \"Message.proto\";\nimport \"Rule.proto\";\n\nmessage listRulesRequest {\n  required string label "
  },
  {
    "path": "src/Library/IPC/Rule.proto",
    "chars": 94,
    "preview": "package usbguard.IPC;\n\nmessage Rule {\n  required uint32 id = 1;\n  required string rule = 2;\n}\n"
  },
  {
    "path": "src/Library/IPCClientPrivate.cpp",
    "chars": 18080,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/IPCClientPrivate.hpp",
    "chars": 4598,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/IPCPrivate.cpp",
    "chars": 4365,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/IPCPrivate.hpp",
    "chars": 3920,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/IPCServerPrivate.cpp",
    "chars": 36311,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/IPCServerPrivate.hpp",
    "chars": 6675,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Init.cpp",
    "chars": 2096,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/KeyValueParserPrivate.cpp",
    "chars": 3848,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/KeyValueParserPrivate.hpp",
    "chars": 1969,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/LocaltimeCondition.cpp",
    "chars": 4035,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/LocaltimeCondition.hpp",
    "chars": 1532,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RandomStateCondition.cpp",
    "chars": 1746,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RandomStateCondition.hpp",
    "chars": 1456,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RuleAppliedCondition.cpp",
    "chars": 2640,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RuleAppliedCondition.hpp",
    "chars": 1448,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RuleEvaluatedCondition.cpp",
    "chars": 2673,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RuleEvaluatedCondition.hpp",
    "chars": 1456,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RuleParser/Actions.hpp",
    "chars": 14765,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RuleParser/Grammar.hpp",
    "chars": 7023,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RulePrivate.cpp",
    "chars": 11803,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/RulePrivate.hpp",
    "chars": 5396,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/SysFSDevice.cpp",
    "chars": 6026,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/SysFSDevice.hpp",
    "chars": 1971,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UEvent.cpp",
    "chars": 3009,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UEvent.hpp",
    "chars": 1597,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UEventDeviceManager.cpp",
    "chars": 14639,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UEventDeviceManager.hpp",
    "chars": 1885,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UEventParser.cpp",
    "chars": 4719,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UEventParser.hpp",
    "chars": 1945,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UMockdevDeviceDefinition.cpp",
    "chars": 12352,
    "preview": "//\n// Copyright (C) 2018 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UMockdevDeviceDefinition.hpp",
    "chars": 2185,
    "preview": "//\n// Copyright (C) 2018 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UMockdevDeviceManager.cpp",
    "chars": 28359,
    "preview": "//\n// Copyright (C) 2018 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/UMockdevDeviceManager.hpp",
    "chars": 3114,
    "preview": "//\n// Copyright (C) 2018 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Utility.cpp",
    "chars": 3976,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/Utility.hpp",
    "chars": 1171,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/Audit.cpp",
    "chars": 7824,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/Audit.hpp",
    "chars": 18886,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/ConfigFile.cpp",
    "chars": 1761,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/ConfigFile.hpp",
    "chars": 3320,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/Device.cpp",
    "chars": 4872,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/Device.hpp",
    "chars": 10567,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/DeviceManager.cpp",
    "chars": 7501,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/DeviceManager.hpp",
    "chars": 12652,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/DeviceManagerHooks.cpp",
    "chars": 1094,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/DeviceManagerHooks.hpp",
    "chars": 1822,
    "preview": "//\n// Copyright (C) 2017 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/Exception.hpp",
    "chars": 4661,
    "preview": "//\n// Copyright (C) 2016 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/IPCClient.cpp",
    "chars": 2541,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  },
  {
    "path": "src/Library/public/usbguard/IPCClient.hpp",
    "chars": 7640,
    "preview": "//\n// Copyright (C) 2015 Red Hat, Inc.\n//\n// This program is free software; you can redistribute it and/or modify\n// it "
  }
]

// ... and 268 more files (download for full content)

About this extraction

This page contains the full source code of the dkopecek/usbguard GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 468 files (6.8 MB), approximately 1.8M tokens, and a symbol index with 830 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!