aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/QtCodeStyle.xml234
-rw-r--r--doc/barrier.conf.example-advanced6
-rw-r--r--doc/barrier.conf.example-barebones17
-rw-r--r--doc/barrier.conf.example-basic4
-rw-r--r--doc/barrierc.12
-rw-r--r--doc/barriers.12
-rw-r--r--doc/newsfragments/README.md13
-rw-r--r--doc/org.barrier-foss.org.barrierc.plist18
-rw-r--r--doc/org.barrier-foss.org.barriers.plist12
-rw-r--r--doc/release_notes/index.md94
-rw-r--r--doc/release_notes/index.template.jinja37
11 files changed, 183 insertions, 256 deletions
diff --git a/doc/QtCodeStyle.xml b/doc/QtCodeStyle.xml
deleted file mode 100644
index e621c4f..0000000
--- a/doc/QtCodeStyle.xml
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorCodeStyle>
-<!-- Written by QtCreator 3.0.1, 2014-02-14T09:50:24. -->
-<qtcreator>
- <data>
- <variable>CodeStyleData</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="AlignAssignments">false</value>
- <value type="bool" key="AutoSpacesForTabs">false</value>
- <value type="bool" key="BindStarToIdentifier">true</value>
- <value type="bool" key="BindStarToLeftSpecifier">false</value>
- <value type="bool" key="BindStarToRightSpecifier">false</value>
- <value type="bool" key="BindStarToTypeName">false</value>
- <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
- <value type="bool" key="IndentAccessSpecifiers">false</value>
- <value type="bool" key="IndentBlockBody">true</value>
- <value type="bool" key="IndentBlockBraces">false</value>
- <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
- <value type="bool" key="IndentClassBraces">false</value>
- <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
- <value type="bool" key="IndentEnumBraces">false</value>
- <value type="bool" key="IndentFunctionBody">true</value>
- <value type="bool" key="IndentFunctionBraces">false</value>
- <value type="bool" key="IndentNamespaceBody">false</value>
- <value type="bool" key="IndentNamespaceBraces">false</value>
- <value type="int" key="IndentSize">4</value>
- <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentSwitchLabels">false</value>
- <value type="int" key="PaddingMode">2</value>
- <value type="bool" key="SpacesForTabs">false</value>
- <value type="int" key="TabSize">4</value>
- </valuemap>
- </data>
- <data>
- <variable>DisplayName</variable>
- <value type="QString">Barrier</value>
- </data>
-</qtcreator>
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorCodeStyle>
-<!-- Written by QtCreator 3.0.1, 2014-02-14T09:50:24. -->
-<qtcreator>
- <data>
- <variable>CodeStyleData</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="AlignAssignments">false</value>
- <value type="bool" key="AutoSpacesForTabs">false</value>
- <value type="bool" key="BindStarToIdentifier">true</value>
- <value type="bool" key="BindStarToLeftSpecifier">false</value>
- <value type="bool" key="BindStarToRightSpecifier">false</value>
- <value type="bool" key="BindStarToTypeName">false</value>
- <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
- <value type="bool" key="IndentAccessSpecifiers">false</value>
- <value type="bool" key="IndentBlockBody">true</value>
- <value type="bool" key="IndentBlockBraces">false</value>
- <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
- <value type="bool" key="IndentClassBraces">false</value>
- <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
- <value type="bool" key="IndentEnumBraces">false</value>
- <value type="bool" key="IndentFunctionBody">true</value>
- <value type="bool" key="IndentFunctionBraces">false</value>
- <value type="bool" key="IndentNamespaceBody">false</value>
- <value type="bool" key="IndentNamespaceBraces">false</value>
- <value type="int" key="IndentSize">4</value>
- <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentSwitchLabels">false</value>
- <value type="int" key="PaddingMode">2</value>
- <value type="bool" key="SpacesForTabs">false</value>
- <value type="int" key="TabSize">4</value>
- </valuemap>
- </data>
- <data>
- <variable>DisplayName</variable>
- <value type="QString">Barrier</value>
- </data>
-</qtcreator>
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorCodeStyle>
-<!-- Written by QtCreator 3.0.1, 2014-02-14T09:50:24. -->
-<qtcreator>
- <data>
- <variable>CodeStyleData</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="AlignAssignments">false</value>
- <value type="bool" key="AutoSpacesForTabs">false</value>
- <value type="bool" key="BindStarToIdentifier">true</value>
- <value type="bool" key="BindStarToLeftSpecifier">false</value>
- <value type="bool" key="BindStarToRightSpecifier">false</value>
- <value type="bool" key="BindStarToTypeName">false</value>
- <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
- <value type="bool" key="IndentAccessSpecifiers">false</value>
- <value type="bool" key="IndentBlockBody">true</value>
- <value type="bool" key="IndentBlockBraces">false</value>
- <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
- <value type="bool" key="IndentClassBraces">false</value>
- <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
- <value type="bool" key="IndentEnumBraces">false</value>
- <value type="bool" key="IndentFunctionBody">true</value>
- <value type="bool" key="IndentFunctionBraces">false</value>
- <value type="bool" key="IndentNamespaceBody">false</value>
- <value type="bool" key="IndentNamespaceBraces">false</value>
- <value type="int" key="IndentSize">4</value>
- <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentSwitchLabels">false</value>
- <value type="int" key="PaddingMode">2</value>
- <value type="bool" key="SpacesForTabs">false</value>
- <value type="int" key="TabSize">4</value>
- </valuemap>
- </data>
- <data>
- <variable>DisplayName</variable>
- <value type="QString">Barrier</value>
- </data>
-</qtcreator>
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorCodeStyle>
-<!-- Written by QtCreator 3.0.1, 2014-02-14T09:50:24. -->
-<qtcreator>
- <data>
- <variable>CodeStyleData</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="AlignAssignments">false</value>
- <value type="bool" key="AutoSpacesForTabs">false</value>
- <value type="bool" key="BindStarToIdentifier">true</value>
- <value type="bool" key="BindStarToLeftSpecifier">false</value>
- <value type="bool" key="BindStarToRightSpecifier">false</value>
- <value type="bool" key="BindStarToTypeName">false</value>
- <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
- <value type="bool" key="IndentAccessSpecifiers">false</value>
- <value type="bool" key="IndentBlockBody">true</value>
- <value type="bool" key="IndentBlockBraces">false</value>
- <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
- <value type="bool" key="IndentClassBraces">false</value>
- <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
- <value type="bool" key="IndentEnumBraces">false</value>
- <value type="bool" key="IndentFunctionBody">true</value>
- <value type="bool" key="IndentFunctionBraces">false</value>
- <value type="bool" key="IndentNamespaceBody">false</value>
- <value type="bool" key="IndentNamespaceBraces">false</value>
- <value type="int" key="IndentSize">4</value>
- <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentSwitchLabels">false</value>
- <value type="int" key="PaddingMode">2</value>
- <value type="bool" key="SpacesForTabs">false</value>
- <value type="int" key="TabSize">4</value>
- </valuemap>
- </data>
- <data>
- <variable>DisplayName</variable>
- <value type="QString">Barrier</value>
- </data>
-</qtcreator>
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorCodeStyle>
-<!-- Written by QtCreator 3.0.1, 2014-02-14T09:50:24. -->
-<qtcreator>
- <data>
- <variable>CodeStyleData</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="AlignAssignments">false</value>
- <value type="bool" key="AutoSpacesForTabs">false</value>
- <value type="bool" key="BindStarToIdentifier">true</value>
- <value type="bool" key="BindStarToLeftSpecifier">false</value>
- <value type="bool" key="BindStarToRightSpecifier">false</value>
- <value type="bool" key="BindStarToTypeName">false</value>
- <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
- <value type="bool" key="IndentAccessSpecifiers">false</value>
- <value type="bool" key="IndentBlockBody">true</value>
- <value type="bool" key="IndentBlockBraces">false</value>
- <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
- <value type="bool" key="IndentClassBraces">false</value>
- <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
- <value type="bool" key="IndentEnumBraces">false</value>
- <value type="bool" key="IndentFunctionBody">true</value>
- <value type="bool" key="IndentFunctionBraces">false</value>
- <value type="bool" key="IndentNamespaceBody">false</value>
- <value type="bool" key="IndentNamespaceBraces">false</value>
- <value type="int" key="IndentSize">4</value>
- <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentSwitchLabels">false</value>
- <value type="int" key="PaddingMode">2</value>
- <value type="bool" key="SpacesForTabs">false</value>
- <value type="int" key="TabSize">4</value>
- </valuemap>
- </data>
- <data>
- <variable>DisplayName</variable>
- <value type="QString">Barrier</value>
- </data>
-</qtcreator>
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorCodeStyle>
-<!-- Written by QtCreator 3.0.1, 2014-02-14T09:50:24. -->
-<qtcreator>
- <data>
- <variable>CodeStyleData</variable>
- <valuemap type="QVariantMap">
- <value type="bool" key="AlignAssignments">false</value>
- <value type="bool" key="AutoSpacesForTabs">false</value>
- <value type="bool" key="BindStarToIdentifier">true</value>
- <value type="bool" key="BindStarToLeftSpecifier">false</value>
- <value type="bool" key="BindStarToRightSpecifier">false</value>
- <value type="bool" key="BindStarToTypeName">false</value>
- <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
- <value type="bool" key="IndentAccessSpecifiers">false</value>
- <value type="bool" key="IndentBlockBody">true</value>
- <value type="bool" key="IndentBlockBraces">false</value>
- <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
- <value type="bool" key="IndentClassBraces">false</value>
- <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
- <value type="bool" key="IndentEnumBraces">false</value>
- <value type="bool" key="IndentFunctionBody">true</value>
- <value type="bool" key="IndentFunctionBraces">false</value>
- <value type="bool" key="IndentNamespaceBody">false</value>
- <value type="bool" key="IndentNamespaceBraces">false</value>
- <value type="int" key="IndentSize">4</value>
- <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
- <value type="bool" key="IndentSwitchLabels">false</value>
- <value type="int" key="PaddingMode">2</value>
- <value type="bool" key="SpacesForTabs">false</value>
- <value type="int" key="TabSize">4</value>
- </valuemap>
- </data>
- <data>
- <variable>DisplayName</variable>
- <value type="QString">Barrier</value>
- </data>
-</qtcreator>
diff --git a/doc/barrier.conf.example-advanced b/doc/barrier.conf.example-advanced
index ad9df29..e1b2392 100644
--- a/doc/barrier.conf.example-advanced
+++ b/doc/barrier.conf.example-advanced
@@ -47,9 +47,9 @@ section: links
end
# The aliases section is to map the full names of the computers to their logical names used in the screens section
-# One way to find the actual name of a comptuer is to run hostname from a command window
+# One way to find the actual name of a computer is to run hostname from a command window
section: aliases
# Laptop is actually known as John-Smiths-MacBook-3.local
- desktop2:
- John-Smiths-MacBook-3.local
+ John-Smiths-MacBook-3.local:
+ desktop2
end
diff --git a/doc/barrier.conf.example-barebones b/doc/barrier.conf.example-barebones
new file mode 100644
index 0000000..1a4558d
--- /dev/null
+++ b/doc/barrier.conf.example-barebones
@@ -0,0 +1,17 @@
+# barebones barrier.conf example
+# for two computers side by side
+# replace screen.name.server and screen.name.client with your screen names from gui
+# there's a 50/50 chance you'll want to swap left and right
+# save this as barrier.conf in your home folder and "Use existing configuration" on server
+
+section: screens
+ screen.name.server:
+ screen.name.client:
+end
+
+section: links
+ screen.name.server:
+ left = screen.name.client
+ screen.name.client:
+ right = screen.name.server
+end
diff --git a/doc/barrier.conf.example-basic b/doc/barrier.conf.example-basic
index 39ff6d6..57d71d9 100644
--- a/doc/barrier.conf.example-basic
+++ b/doc/barrier.conf.example-basic
@@ -34,6 +34,6 @@ end
section: aliases
# The "real" name of iMac is John-Smiths-iMac-3.local. If we wanted we could remove this alias and instead use John-Smiths-iMac-3.local everywhere iMac is above. Hopefully it should be easy to see why using an alias is nicer
- iMac:
- John-Smiths-iMac-3.local
+ John-Smiths-iMac-3.local:
+ iMac
end
diff --git a/doc/barrierc.1 b/doc/barrierc.1
index 2fd882a..d470447 100644
--- a/doc/barrierc.1
+++ b/doc/barrierc.1
@@ -1,5 +1,5 @@
.\" See UpdateManpages.txt about modification of this file. Most of it was generated by help2man 1.47.8.
-.TH BARRIERC "1" "November 2019" "barrierc 2.3.3-release" "User Commands"
+.TH BARRIERC "1" "November 2019" "barrierc 2.4.0-release" "User Commands"
.SH NAME
barrierc \- Barrier Keyboard/Mouse Client
.SH SYNOPSIS
diff --git a/doc/barriers.1 b/doc/barriers.1
index 098ea84..f4a460e 100644
--- a/doc/barriers.1
+++ b/doc/barriers.1
@@ -1,5 +1,5 @@
.\" See UpdateManpages.txt about modification of this file. Most of it was generated by help2man 1.47.8.
-.TH BARRIERS "1" "November 2019" "barriers 2.3.3-release" "User Commands"
+.TH BARRIERS "1" "November 2019" "barriers 2.4.0-release" "User Commands"
.SH NAME
barriers \- Barrier Keyboard/Mouse Server
.SH SYNOPSIS
diff --git a/doc/newsfragments/README.md b/doc/newsfragments/README.md
new file mode 100644
index 0000000..0338cf8
--- /dev/null
+++ b/doc/newsfragments/README.md
@@ -0,0 +1,13 @@
+This is the directory for release note fragments processed by
+[towncrier](https://github.com/hawkowl/towncrier).
+
+When making a user-visible change create a file in this directory and it will be automatically be
+included into the release note document when the next release is published.
+
+The file extension specifies the type of a change. The following are currently supported:
+
+ - .feature: a new feature.
+ - .bugfix: a bug fix.
+ - .security: a fix for security issue.
+ - .doc: a documentation improvement.
+ - .removal: a deprecation or removal of functionality.
diff --git a/doc/org.barrier-foss.org.barrierc.plist b/doc/org.barrier-foss.org.barrierc.plist
index 31e10ba..90345c8 100644
--- a/doc/org.barrier-foss.org.barrierc.plist
+++ b/doc/org.barrier-foss.org.barrierc.plist
@@ -4,17 +4,17 @@
<plist version="1.0">
<!-- Mac OSX only: Copy this plist file into [~]/Library/LaunchAgents to start barrier client automatically. Make sure you change the IP below. -->
<dict>
- <key>Label</key>
- <string>org.debauchee.com.barrierc.plist</string>
- <key>OnDemand</key>
- <false/>
- <key>ProgramArguments</key>
- <array>
+ <key>Label</key>
+ <string>org.debauchee.com.barrierc.plist</string>
+ <key>OnDemand</key>
+ <false/>
+ <key>ProgramArguments</key>
+ <array>
<string>/usr/bin/barrierc</string>
<!-- Replace this IP with the IP of your barriers server -->
<string>192.168.0.2</string>
- </array>
- <key>RunAtLoad</key>
- <true/>
+ </array>
+ <key>RunAtLoad</key>
+ <true/>
</dict>
</plist>
diff --git a/doc/org.barrier-foss.org.barriers.plist b/doc/org.barrier-foss.org.barriers.plist
index f1ab5bf..fed7b47 100644
--- a/doc/org.barrier-foss.org.barriers.plist
+++ b/doc/org.barrier-foss.org.barriers.plist
@@ -4,12 +4,12 @@
<plist version="1.0">
<!-- Mac OSX only: Copy this plist file into [~]/Library/LaunchAgents to start barrier server automatically. Make sure you change configuration file below -->
<dict>
- <key>Label</key>
- <string>org.debauchee.com.barriers.plist</string>
- <key>OnDemand</key>
- <false/>
- <key>ProgramArguments</key>
- <array>
+ <key>Label</key>
+ <string>org.debauchee.com.barriers.plist</string>
+ <key>OnDemand</key>
+ <false/>
+ <key>ProgramArguments</key>
+ <array>
<string>/usr/bin/barriers</string>
<string>--no-daemon</string>
<string>--config</string>
diff --git a/doc/release_notes/index.md b/doc/release_notes/index.md
new file mode 100644
index 0000000..72d3a43
--- /dev/null
+++ b/doc/release_notes/index.md
@@ -0,0 +1,94 @@
+Release notes
+=============
+
+[comment]: <> (towncrier release notes start)
+
+Barrier `2.4.0` ( `2021-11-01` )
+================================
+
+Security fixes
+--------------
+
+- Barrier now supports client identity verification (fixes CVE-2021-42072, CVE-2021-42073).
+
+ Previously a malicious client could connect to Barrier server without any authentication and
+ send application-level messages. This made the attack surface of Barrier significantly larger.
+ Additionally, in case the malicious client got possession of a valid screen name by brute forcing
+ or other means it could modify the clipboard contents of the server.
+
+ To support seamless upgrades from older versions of Barrier this is currently disabled by default.
+ The feature can be enabled in the settings dialog. If enabled, older clients of Barrier will be
+ rejected.
+
+- Barrier now uses SHA256 fingerprints for establishing security of encrypted SSL connections.
+ After upgrading client to new version the existing server fingerprint will need to be approved
+ again. Client and server will show both SHA1 and SHA256 server fingerprints to allow
+ interoperability with older versions of Barrier.
+
+Bug fixes
+---------
+
+- Fixed build failure on mips*el and riscv64 architecture.
+- Fixed reading of configuration on Windows when the paths contain non-ASCII characters
+(https://github.com/debauchee/barrier/issues/976, https://github.com/debauchee/barrier/issues/974,
+ https://github.com/debauchee/barrier/issues/444).
+- Barrier no longer uses openssl CLI tool for any operations and hooks into the openssl library directly.
+- More X11 clipboard MIME types have been mapped to corresponding converters (https://github.com/debauchee/barrier/issues/344).
+- Fixed setup of multiple actions associated with a hotkey.
+- Fixed setup of hotkeys with special characters such as comma and semicolon
+ (https://github.com/debauchee/barrier/issues/778).
+- Fixed transfer of non-ASCII characters coming from a Windows server in certain cases
+ (https://github.com/debauchee/barrier/issues/527).
+- Barrier will now regenerate server certificate if it's invalid instead of failing to launch
+ (https://github.com/debauchee/barrier/issues/802)
+- Added support for additional keys on Sun Microsystems USB keyboards
+ (https://github.com/debauchee/barrier/issues/784).
+- Updated Chinese translation.
+- Updated Slovak translation.
+- Theme icons are now preferred to icons distributed together with Barrier
+ (https://github.com/debauchee/barrier/issues/471).
+- Fixed incorrect setup of Barrier service path on Windows.
+
+Features
+--------
+
+- Added `--drop-target` option that improves drag and drop support on Windows when Barrier is
+ being run as a portable app.
+- The `--enable-crypto` command line option has been made the default to reduce chances of
+ accidental security mishaps when configuring Barrier from command line.
+ A new `--disable-crypto` command line option has been added to explicitly disable encryption.
+- Added support for randomart images for easier comparison of SSL certificate fingerprints.
+ The algorithm is identical to what OpenSSH uses.
+- Implemented a configuration option for Server GUI auto-start.
+- Made it possible to use keyboard instead of mouse to modify screen layout.
+- Added support for keyboard backlight media keys
+- Added support for Eisu_toggle and Muhenkan keys
+- Added `--profile-dir` option that allows to select custom profile directory.
+
+Barrier `2.3.4` ( `2021-11-01` )
+================================
+
+Security fixes
+--------------
+
+- Barrier will now correctly close connections when the app-level handshake fails (fixes CVE-2021-42075).
+
+ Previously repeated failing connections would leak file descriptors leading to Barrier being unable
+ to receive new connections from clients.
+
+- Barrier will now enforce a maximum length of input messages (fixes CVE-2021-42076).
+
+ Previously it was possible for a malicious client or server to send excessive length messages
+ leading to denial of service by resource exhaustion.
+
+- Fixed a bug which caused Barrier to crash when disconnecting a TCP session just after sending Hello message.
+ This bug allowed an unauthenticated attacker to crash Barrier with only network access.
+
+All of the above security issues have been reported by Matthias Gerstner who was really helpful
+resolving them.
+
+Bug fixes
+---------
+
+- Fixed a bug in SSL implementation that caused invalid data occasionally being sent to clients
+ under heavy load.
diff --git a/doc/release_notes/index.template.jinja b/doc/release_notes/index.template.jinja
new file mode 100644
index 0000000..418a1d3
--- /dev/null
+++ b/doc/release_notes/index.template.jinja
@@ -0,0 +1,37 @@
+{% for section, _ in sections|dictsort(by='key') %}
+{% set underline = "-" %}
+{% if section %}
+{{section}}
+{{ underline * section|length }}{% set underline = "-" %}
+
+{% endif %}
+{% if sections[section] %}
+{% for category, val in definitions|dictsort if category in sections[section]%}
+
+{{ definitions[category]['name'] }}
+{{ underline * definitions[category]['name']|length }}
+
+{% if definitions[category]['showcontent'] %}
+{% for text, values in sections[section][category]|dictsort(by='value') %}
+- {{ text }}
+{% endfor %}
+{% else %}
+- {{ sections[section][category]['']|sort|join(', ') }}
+
+
+{% endif %}
+{% if sections[section][category]|length == 0 %}
+
+No significant changes.
+
+
+{% else %}
+{% endif %}
+{% endfor %}
+{% else %}
+
+No significant changes.
+
+
+{% endif %}
+{% endfor %}