From 105e1e3c0b8fdfc410bdfcafdff1bdccdcec314c Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Sat, 30 Jan 2021 22:07:55 +0100 Subject: [PATCH] MPD: Add the 'config' command for authentificated users --- README.md | 2 +- inc/lektor/commands.h | 1 + src/base/commands.c | 18 ++++++++++++++++++ src/net/listen.c | 2 ++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cde27020..26b32091 100644 --- a/README.md +++ b/README.md @@ -255,7 +255,7 @@ For the compatibility column, the possible values are the following: | `kill` | `kill` | + | | | `password {password}` | `password {password}` | + | | | `ping` | `ping` | + | | -| `config` | | | not implemented | +| `config` | `config` | + | all authentified client can do this command | | `sticker get {t} {uri} {n}` | `sticker get {type} {uri} {name}` | CHECK | check the return conventions | | `sticker set {t} {uri} {n} {val}` | `sticker set {t} {uri} {n} {val}` | CHECK | check the return conventions | | `sticker delete {t} {uri} [n]` | `sticker delete {t} {uri} [n]` | CHECK | check the return conventions | diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index 65affefa..8c1da8c2 100644 --- a/inc/lektor/commands.h +++ b/inc/lektor/commands.h @@ -95,6 +95,7 @@ bool command_kill (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARG bool command_import (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); bool command_update (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); bool command_rescan (struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX], int forced); +bool command_config (struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX]); /* Sticker management */ bool command_sticker_create(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); diff --git a/src/base/commands.c b/src/base/commands.c index fd61a9dc..4b6d3aeb 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -92,6 +92,24 @@ command_kill(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS LOG_FATAL("The SIGINT handler returned, now exiting"); } +bool +command_config(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX]) +{ + RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); + struct lkt_message *out; + out = lkt_message_new(); + char db_file[LKT_LINE_MAX]; + memset(db_file, 0, sizeof(db_file)); + database_config_get(srv->db, "database", "db_path", db_file, LKT_LINE_MAX); + out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, + "max_clients: %ld\n" + "db_file: %s\n" + "music_directory: %s\n", + srv->fds_max, db_file, srv->kara_prefix); + lkt_state_send(srv, c, out); + return true; +} + bool command_currentsong(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX]) { diff --git a/src/net/listen.c b/src/net/listen.c index c97aae32..883ad67f 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -169,6 +169,8 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) err = ! command_import(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "__rescan")) err = ! command_rescan(srv, c, cmd.args, true); + else if (STR_MATCH(cmd.name, "config")) + err = ! command_config(srv, c, NULL); /* Commands that are available if not in idle mode */ else if (STR_MATCH(cmd.name, "currentsong")) -- GitLab