From e9a5a0601b2bbd2d9251fd065b16a149d3cb4f7d Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Fri, 18 Sep 2020 09:43:58 +0200 Subject: [PATCH] Remove useless DISTINCT to basic queries and apply ACLs to .media command --- bacula/src/dird/ua_dotcmds.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/bacula/src/dird/ua_dotcmds.c b/bacula/src/dird/ua_dotcmds.c index 6eb9cea2b..1d4b88d49 100644 --- a/bacula/src/dird/ua_dotcmds.c +++ b/bacula/src/dird/ua_dotcmds.c @@ -2265,7 +2265,7 @@ static bool mediatypescmd(UAContext *ua, const char *cmd) return true; } if (!db_sql_query(ua->db, - "SELECT DISTINCT MediaType FROM MediaType ORDER BY MediaType", + "SELECT MediaType FROM MediaType ORDER BY MediaType", one_handler, (void *)ua)) { ua->error_msg(_("List MediaType failed: ERR=%s\n"), db_strerror(ua->db)); @@ -2275,12 +2275,19 @@ static bool mediatypescmd(UAContext *ua, const char *cmd) static bool mediacmd(UAContext *ua, const char *cmd) { + POOL_MEM query; if (!open_client_db(ua)) { return true; } + + /* If ACLs are used, we restrict the volume list to the pool we can access */ + const char *where = ua->db->get_acl(DB_ACL_POOL, true); + const char *join = *where ? ua->db->get_acl_join_filter(DB_ACL_BIT(DB_ACL_POOL)) : ""; + + Mmsg(query, "SELECT Media.VolumeName FROM Media %s %s ORDER BY VolumeName", join, where); if (!db_sql_query(ua->db, - "SELECT DISTINCT Media.VolumeName FROM Media ORDER BY VolumeName", - one_handler, (void *)ua)) + query.c_str(), + one_handler, (void *)ua)) { ua->error_msg(_("List Media failed: ERR=%s\n"), db_strerror(ua->db)); } @@ -2293,7 +2300,7 @@ static bool locationscmd(UAContext *ua, const char *cmd) return true; } if (!db_sql_query(ua->db, - "SELECT DISTINCT Location FROM Location ORDER BY Location", + "SELECT Location FROM Location ORDER BY Location", one_handler, (void *)ua)) { ua->error_msg(_("List Location failed: ERR=%s\n"), db_strerror(ua->db)); -- 2.47.3