Skip to content

[Bug]: Sorting by owner / id / disabled triggers “Invalid ORDER BY column” #781

@lukasdebaum

Description

@lukasdebaum

Describe the problem

Sorting fails with “Invalid ORDER BY column” when:

  • Sorting by owner in DNS Zones overview.
  • Sorting by id or disabled in Records overview of a Zone after applying a filter.

The likely cause is that the columns are missing from the $allowedSortColumns arrays:

  • owner missing in DomainRepository::getZones()
  • id and disabled missing in RecordRepository::getFilteredRecords()

(getZoneTemplRecords() and getReverseZones() include all required sortable columns)

Steps to reproduce

DNS Zones overview

  • Click column header to sort by owner
    → Error occurs

Zones → Edit a Zone (Records)

  • Apply a filter
  • Click column header to sort by id or disabled
    → Error occurs

Poweradmin version

4.0.1

Database

MySQL

Additional information (optional)

Browser error
An error occurred while processing the request.

php error log (zone)

PHP message: Invalid ORDER BY column: owner
PHP message: #0 /poweradmin/lib/Domain/Repository/DomainRepository.php(223): Poweradmin\Infrastructure\Database\TableNameService->validateOrderBy()
#1 /poweradmin/lib/Application/Controller/ListForwardZonesController.php(107): Poweradmin\Domain\Repository\DomainRepository->getZones()
#2 /poweradmin/lib/Application/Controller/ListForwardZonesController.php(58): Poweradmin\Application\Controller\ListForwardZonesController->listForwardZones()
#3 /poweradmin/lib/Application/Routing/BasicRouter.php(190): Poweradmin\Application\Controller\ListForwardZonesController->run()
#4 /poweradmin/index.php(68): Poweradmin\Application\Routing\BasicRouter->process()
#5 {main}

php error log (records)

PHP message: Invalid ORDER BY column: id
PHP message: #0 /poweradmin/lib/Domain/Repository/RecordRepository.php(376): Poweradmin\Infrastructure\Database\TableNameService->validateOrderBy()
#1 /poweradmin/lib/Application/Controller/EditController.php(377): Poweradmin\Domain\Repository\RecordRepository->getFilteredRecords()
#2 /poweradmin/lib/Application/Routing/BasicRouter.php(190): Poweradmin\Application\Controller\EditController->run()
#3 /poweradmin/index.php(68): Poweradmin\Application\Routing\BasicRouter->process()
#4 {main}

Fix
Add the missing columns to the respective $allowedSortColumns arrays so that sorting by owner (Zones) and id / disabled (Records) is allowed.

--- a/lib/Domain/Repository/RecordRepository.php
+++ b/lib/Domain/Repository/RecordRepository.php
@@ -372,7 +372,7 @@ class RecordRepository implements RecordRepositoryInterface
         string $content_filter = ''
     ): array {
         // Validate sort parameters
-        $allowedSortColumns = ['name', 'type', 'content', 'ttl', 'prio'];
+        $allowedSortColumns = ['id', 'name', 'type', 'content', 'ttl', 'prio', 'disabled'];
         $sort_by = $this->tableNameService->validateOrderBy($sort_by, $allowedSortColumns);
         $sort_direction = $this->tableNameService->validateDirection($sort_direction);
 
--- a/lib/Domain/Repository/DomainRepository.php
+++ b/lib/Domain/Repository/DomainRepository.php
@@ -219,7 +219,7 @@ class DomainRepository implements DomainRepositoryInterface
     public function getZones(string $perm, int $userid = 0, string $letterstart = 'all', int $rowstart = 0, int $rowamount = Constants::DEFAULT_MAX_ROWS, string $sortby = 'name', string $sortDirection = 'ASC', bool $excludeReverse = false): array
     {
         // Validate sort parameters
-        $allowedSortColumns = ['name', 'type', 'count_records'];
+        $allowedSortColumns = ['name', 'type', 'count_records', 'owner'];
         $sortby = $this->tableNameService->validateOrderBy($sortby, $allowedSortColumns);
         $sortDirection = $this->tableNameService->validateDirection($sortDirection);

Metadata

Metadata

Assignees

Labels

uiUser Interface

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions