Apprise URLs: schemes that act on the server itself, such as syslog://, are accepted from any account #12
Labels
No labels
bug
documentation
enhancement
security
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo-apprise#12
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found on 2026-09-29 in a read-only review of postulo-apprise at
7637d899d, reading which schemesbuild()accepts and how Apprise 1.13.1 implements the ones that have no remote party.build()accepts every URL thatapprise.Apprise().add()accepts. Apprise also ships services that deliver to the machine it runs on:syslog://wherever Python'ssyslogmodule imports, which is every Linux install, and the desktop ones (dbus,kde,qt,glib,gnome,macosx,windows) when their libraries are present. A connection is one person's setting; these write to something that belongs to the operator.src/postulo_apprise/notifier.py:59-71(build) has no list of schemes, allowed or refused.src/postulo_apprise/notifier.py:96-99(names_a_server) answers no for these, because their templates declare nohosttoken, sodestination_ofreturnsNoneand nothing further is asked. In Apprise,plugins/syslog.py:28importssyslogat module level, the class does not overrideenabled, its only token isfacility, and itssendcallssyslog.syslog(...)with the notification's title and body; thelogperroroption addsLOG_PERROR, which copies each message to the process's standard error.syslog://line, optionally naming a facility such asauthordaemon. Every notification for that account is then written to the host's system log under that facility, taggedApprise[pid]. With the standard-error option it is also written into Postulo's own log stream, in a container as much as on a bare host. The text is the notification's title and body: reminder text the account holder wrote, or text taken from a captured page. Where there is no log socket and the option is off, as in the container image, the line does nothing and Test still reports "Delivered to 1 service."_problems(syslog,dbus,kde,qt,glib,gnome,macosx,windows) is the minimum; an allow-list of reviewed schemes would cover it and any local service Apprise adds later. Compare againstserver.secure_protocolandserver.protocolas well as the typed scheme, since Apprise accepts aliases. Refuse at the form with a translated sentence naming the line, and again before sending, as the destination check already does.This was read, not run: the review machine is Windows, where
syslogdoes not import and Apprise rejects the scheme. The desktop classes are registered there and reportenabled = Falsefor lack of their libraries.Done when
tests/test_apprise.pyasserts thatvalidate()refuses asyslog://line with the new sentence, and thatsend()raisesConfigurationErrorfor a stored one. On Linux it fails today; make it independent of the platform by testing the refusal against the scheme rather than against what Apprise happens to load.body_format, so HTML services receive a captured page's words as markup #21Fixed by pull request #23.