[aur-dev] [PATCH 1/3] Fix the permission check in pkgbase_adopt()
Lukas Fleischer
lfleischer at archlinux.org
Fri May 22 15:29:40 UTC 2015
Filter the affected package bases before closing any package requests.
Signed-off-by: Lukas Fleischer <lfleischer at archlinux.org>
---
web/lib/pkgbasefuncs.inc.php | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 50cb47e..d10b5ad 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -579,7 +579,25 @@ function pkgbase_adopt ($base_ids, $action=true, $via) {
}
}
+ /* Verify package ownership. */
$base_ids = sanitize_ids($base_ids);
+
+ $q = "SELECT ID FROM PackageBases ";
+ $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") ";
+
+ if ($action && !has_credential(CRED_PKGBASE_ADOPT)) {
+ /* Regular users may only adopt orphan packages. */
+ $q.= "AND MaintainerUID IS NULL";
+ }
+ if (!$action && !has_credential(CRED_PKGBASE_DISOWN)) {
+ /* Regular users may only disown their own packages. */
+ $q.= "AND MaintainerUID = " . $uid;
+ }
+
+ $result = $dbh->query($q);
+ $base_ids = $result->fetchAll(PDO::FETCH_COLUMN, 0);
+
+ /* Error out if the list of remaining packages is empty. */
if (empty($base_ids)) {
if ($action) {
return array(false, __("You did not select any packages to adopt."));
@@ -618,16 +636,6 @@ function pkgbase_adopt ($base_ids, $action=true, $via) {
$q.= "SET MaintainerUID = NULL ";
}
$q.= "WHERE ID IN (" . implode(",", $base_ids) . ") ";
-
- if ($action && !has_credential(CRED_PKGBASE_ADOPT)) {
- /* Regular users may only adopt orphan packages. */
- $q.= "AND MaintainerUID IS NULL";
- }
- if (!$action && !has_credential(CRED_PKGBASE_DISOWN)) {
- /* Regular users may only disown their own packages. */
- $q.= "AND MaintainerUID = " . $uid;
- }
-
$dbh->exec($q);
if ($action) {
--
2.4.1
More information about the aur-dev
mailing list