diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/client/Client.hxx | 2 | ||||
-rw-r--r-- | src/client/ClientFile.cxx | 2 | ||||
-rw-r--r-- | src/command/QueueCommands.cxx | 11 | ||||
-rw-r--r-- | src/decoder/plugins/OpusDecoderPlugin.cxx | 7 | ||||
-rw-r--r-- | src/event/ServerSocket.cxx | 2 | ||||
-rw-r--r-- | src/fs/AllocatedPath.cxx | 6 |
6 files changed, 25 insertions, 5 deletions
diff --git a/src/client/Client.hxx b/src/client/Client.hxx index 849a11ed4..c0a940ded 100644 --- a/src/client/Client.hxx +++ b/src/client/Client.hxx @@ -127,7 +127,7 @@ public: * a local (UNIX domain) socket? */ bool IsLocal() const { - return uid > 0; + return uid >= 0; } unsigned GetPermission() const { diff --git a/src/client/ClientFile.cxx b/src/client/ClientFile.cxx index eba64d09c..3ea8034d2 100644 --- a/src/client/ClientFile.cxx +++ b/src/client/ClientFile.cxx @@ -41,7 +41,7 @@ Client::AllowFile(Path path_fs, Error &error) const instance */ return true; - if (uid <= 0) { + if (uid < 0) { /* unauthenticated client */ error.Set(ack_domain, ACK_ERROR_PERMISSION, "Access denied"); return false; diff --git a/src/command/QueueCommands.cxx b/src/command/QueueCommands.cxx index 36c8ac84f..d0b789eb1 100644 --- a/src/command/QueueCommands.cxx +++ b/src/command/QueueCommands.cxx @@ -61,7 +61,16 @@ translate_uri(Client &client, const char *uri) CommandResult handle_add(Client &client, gcc_unused unsigned argc, char *argv[]) { - const char *const uri = translate_uri(client, argv[1]); + const char *uri = argv[1]; + if (memcmp(uri, "/", 2) == 0) + /* this URI is malformed, but some clients are buggy + and use "add /" to add the whole database, which + was never intended to work, but once did; in order + to retain backwards compatibility, work around this + here */ + uri = ""; + + uri = translate_uri(client, uri); if (uri == nullptr) return CommandResult::ERROR; diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx index b6b2e0465..25497fe8a 100644 --- a/src/decoder/plugins/OpusDecoderPlugin.cxx +++ b/src/decoder/plugins/OpusDecoderPlugin.cxx @@ -510,6 +510,13 @@ static const char *const opus_suffixes[] = { }; static const char *const opus_mime_types[] = { + /* the official MIME type (RFC 5334) */ + "audio/ogg", + + /* deprecated (RFC 5334) */ + "application/ogg", + + /* deprecated; from an early draft */ "audio/opus", nullptr }; diff --git a/src/event/ServerSocket.cxx b/src/event/ServerSocket.cxx index ce70a969b..313f0a6cf 100644 --- a/src/event/ServerSocket.cxx +++ b/src/event/ServerSocket.cxx @@ -130,7 +130,7 @@ get_remote_uid(int fd) socklen_t len = sizeof (cred); if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) - return 0; + return -1; return cred.uid; #else diff --git a/src/fs/AllocatedPath.cxx b/src/fs/AllocatedPath.cxx index 30ce7e3a9..ceaad73ea 100644 --- a/src/fs/AllocatedPath.cxx +++ b/src/fs/AllocatedPath.cxx @@ -46,7 +46,11 @@ AllocatedPath AllocatedPath::FromUTF8(const char *path_utf8) { #ifdef HAVE_GLIB - return AllocatedPath(Donate(), ::PathFromUTF8(path_utf8)); + char *path = ::PathFromUTF8(path_utf8); + if (path == nullptr) + return AllocatedPath::Null(); + + return AllocatedPath(Donate(), path); #else return FromFS(path_utf8); #endif |