]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Fix SQL query generated with ACLs
authorEric Bollengier <eric@baculasystems.com>
Thu, 5 Aug 2021 09:06:19 +0000 (11:06 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 24 Mar 2022 08:03:03 +0000 (09:03 +0100)
Issue reported by the console-acl-test

05-Aug 10:59 localhost-dir JobId 0: bdb.h:141 SELECT JobId,Media.VolumeName,FirstIndex,LastIndex FROM JobMedia JOIN Media
USING (MediaId)  JOIN Job USING (JobId)  JOIN Client USING (ClientId)  JOIN Pool USING (PoolId)  LEFT JOIN FileSet USING (
FileSetId)    WHERE  (Client.Name IN ('localhost-fd'))  ORDER BY JobMediaId ASC
05-Aug 10:59 localhost-dir JobId 0: Fatal error: bdb.h:141 bdb.h:141 query SELECT JobMediaId,JobId,Media.MediaId,Media.VolumeName,FirstIndex,LastIndex,StartFile,JobMedia.EndFile,StartBlock,JobMedia.EndBlock FROM JobMedia JOIN Media USING (MediaId)  JOIN Job USING (JobId)  JOIN Client USING (ClientId)  JOIN Pool USING (PoolId)  LEFT JOIN FileSet USING (FileSetId) WHERE  (Client.Name IN ('localhost-fd'))  ORDER BY JobMediaId ASC failed:
ERROR:  common column name "poolid" appears more than once in left table

The Pool restriction was introduced recently and is not mandatory.

bacula/src/cats/sql_list.c

index bc180fd45a11abfe0ebad3fcee8870fec296f234..d0ebc6dc227ac4f4931b7a55485ceb05b03889f3 100644 (file)
@@ -399,12 +399,10 @@ void BDB::bdb_list_jobmedia_records(JCR *jcr, uint32_t JobId, char *volume,
    /* Get some extra SQL parameters if needed */
    const char *where = get_acls(DB_ACL_BIT(DB_ACL_JOB)     |
                                 DB_ACL_BIT(DB_ACL_FILESET) |
-                                DB_ACL_BIT(DB_ACL_POOL)    |
                                 DB_ACL_BIT(DB_ACL_CLIENT), (JobId == 0 || volume != NULL));
 
    const char *join = *where ? get_acl_join_filter(DB_ACL_BIT(DB_ACL_JOB)     |
                                                    DB_ACL_BIT(DB_ACL_FILESET) |
-                                                   DB_ACL_BIT(DB_ACL_POOL)    |
                                                    DB_ACL_BIT(DB_ACL_CLIENT)) : "";
 
    if (JobId) {