]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix comparing the empty string for global credentials
authorJoas Schilling <coding@schilljs.com>
Mon, 9 Nov 2020 16:33:05 +0000 (17:33 +0100)
committerJoas Schilling <coding@schilljs.com>
Tue, 10 Nov 2020 14:36:26 +0000 (15:36 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
lib/private/DB/Connection.php
lib/private/Security/CredentialsManager.php

index 6835226357f71673dedf4bacece29d6d955fc681..0ea71637943abc4520b9b8b3c1a1920794e10dc3 100644 (file)
@@ -332,11 +332,17 @@ class Connection extends ReconnectWrapper implements IDBConnection {
                        $where = $updateQb->expr()->andX();
                        $whereValues = array_merge($keys, $updatePreconditionValues);
                        foreach ($whereValues as $name => $value) {
-                               $where->add($updateQb->expr()->eq(
-                                       $name,
-                                       $updateQb->createNamedParameter($value, $this->getType($value)),
-                                       $this->getType($value)
-                               ));
+                               if ($value === '') {
+                                       $where->add($updateQb->expr()->emptyString(
+                                               $name
+                                       ));
+                               } else {
+                                       $where->add($updateQb->expr()->eq(
+                                               $name,
+                                               $updateQb->createNamedParameter($value, $this->getType($value)),
+                                               $this->getType($value)
+                                       ));
+                               }
                        }
                        $updateQb->where($where);
                        $affected = $updateQb->execute();
index a40a7e1d88e9f457f9f415364e2972922961347b..20af25ae10fab15b8226136d8f055e2751c19854 100644 (file)
@@ -81,9 +81,13 @@ class CredentialsManager implements ICredentialsManager {
                $qb = $this->dbConnection->getQueryBuilder();
                $qb->select('credentials')
                        ->from(self::DB_TABLE)
-                       ->where($qb->expr()->eq('user', $qb->createNamedParameter((string)$userId)))
-                       ->andWhere($qb->expr()->eq('identifier', $qb->createNamedParameter($identifier)))
-               ;
+                       ->where($qb->expr()->eq('identifier', $qb->createNamedParameter($identifier)));
+
+               if ($userId === '') {
+                       $qb->andWhere($qb->expr()->emptyString('user'));
+               } else {
+                       $qb->andWhere($qb->expr()->eq('user', $qb->createNamedParameter((string)$userId)));
+               }
 
                $qResult = $qb->execute();
                $result = $qResult->fetch();
@@ -107,9 +111,14 @@ class CredentialsManager implements ICredentialsManager {
        public function delete($userId, $identifier) {
                $qb = $this->dbConnection->getQueryBuilder();
                $qb->delete(self::DB_TABLE)
-                       ->where($qb->expr()->eq('user', $qb->createNamedParameter((string)$userId)))
-                       ->andWhere($qb->expr()->eq('identifier', $qb->createNamedParameter($identifier)))
-               ;
+                       ->where($qb->expr()->eq('identifier', $qb->createNamedParameter($identifier)));
+
+               if ($userId === '') {
+                       $qb->andWhere($qb->expr()->emptyString('user'));
+               } else {
+                       $qb->andWhere($qb->expr()->eq('user', $qb->createNamedParameter((string)$userId)));
+               }
+
                return $qb->execute();
        }