From patchwork Wed Feb 17 03:28:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Schwartz X-Patchwork-Id: 1875 Return-Path: Delivered-To: patchwork@archlinux.org Received: from mail.archlinux.org [95.216.189.61] by patchwork.archlinux.org with IMAP (fetchmail-6.4.16) for (single-drop); Wed, 17 Feb 2021 03:29:31 +0000 (UTC) Received: from mail.archlinux.org by mail.archlinux.org with LMTP id 0MzzFJuNLGCRkAEAK+/4rw (envelope-from ) for ; Wed, 17 Feb 2021 03:29:31 +0000 Received: from luna.archlinux.org (luna.archlinux.org [IPv6:2a01:4f8:160:3033::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits)) (No client certificate requested) by mail.archlinux.org (Postfix) with ESMTPS id ED3133FE93C; Wed, 17 Feb 2021 03:29:30 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id BCB862C6FF; Wed, 17 Feb 2021 03:29:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.archlinux.org; s=luna; t=1613532565; bh=ZZReJpKMuBALWUQzHmyNTE5YqqVe0KqNyjDSDtoUonc=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc; b=JM7aal93Zj9WcO2MEsqC5o1rwcFEU0chmeZ/8Hecb2KB/CInNwqQx4Lw5kX85O3iX 6aGjvCAJp7BmQJyVL+4gmZLCrZvN4MakjiFwzElsxMY0IivBAvau+4brmlMrLwzUGo c0pFqDm2GxIlpePLdWVAQk4lvkAuw43thZHCJsbgeHWJb2Dy11vBM0yGQ/vVGZbDUe U51kLcuuC1tIM3iRIlizGn5S79C/OgreQL//Ipgp6jmY/EU7Bm6FsujwrSAYjgQ5gt 0XXCMGzfZ9fE4vdpxZp/bZaonN3vYcV32deG0peESuUOKhLL42UzR7BHIq4yiFQva7 j7HXMDIHOSgibNme0pqjWehPfwr9Gch+0XEmsw8PmtHMRMldnc8Rr6IgRGA/2nrdrR Gyb4HNHa3G7u9qYbNICz00nAiTdVAY89CqKazyeg95e3QTE08aeWDB0/nrxX4vkEuP hUtp6KraOa04ehxKEznk+cdp468DWsjNaJJ2AiTifU6tJSbEec3mRotWpR8+tok1+m yPpuPI0SoMgFjv1L3MKknTDLkI11n+PP54eoFD6lUeWhQRzOj9FpRdkgvEe1V6Nst1 gIftN5FdJrBTNjNH3j7FBQifdNRWWiw6jghFWl7rQgm+P0/KnjM3YXqbbrqBitw1J+ GZq4LzCYmfGBK/4h7k8cu5ro= Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id E6B6B2C6F4 for ; Wed, 17 Feb 2021 03:29:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on luna.archlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1, LOCAL_FAKEBUSINESS=0.5,RCVD_IN_DNSWL_MED=-2.3,T_DMARC_POLICY_NONE=0.01 autolearn=failed autolearn_force=no version=3.4.4 X-Spam-BL-Results: [127.0.9.2] Received: from mail.archlinux.org (mail.archlinux.org [IPv6:2a01:4f9:c010:3052::1]) by luna.archlinux.org (Postfix) with ESMTPS for ; Wed, 17 Feb 2021 03:29:22 +0000 (UTC) To: aur-dev@archlinux.org Subject: [aur-dev][PATCH 3/3] rewrite query to support both mysql/sqlite Date: Tue, 16 Feb 2021 22:28:54 -0500 Message-Id: <20210217032854.245535-3-eschwartz@archlinux.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210217032854.245535-1-eschwartz@archlinux.org> References: <20210217032854.245535-1-eschwartz@archlinux.org> MIME-Version: 1.0 X-BeenThere: aur-dev@lists.archlinux.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: "Arch User Repository \(AUR\) Development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Eli Schwartz via aur-dev From: Eli Schwartz Reply-To: "Arch User Repository \(AUR\) Development" Cc: Eli Schwartz Errors-To: aur-dev-bounces@lists.archlinux.org Sender: "aur-dev" Authentication-Results: mail.archlinux.org; dkim=pass header.d=lists.archlinux.org header.s=luna header.b=JM7aal93; dmarc=pass (policy=none) header.from=archlinux.org; spf=pass (mail.archlinux.org: domain of aur-dev-bounces@lists.archlinux.org designates 2a01:4f8:160:3033::2 as permitted sender) smtp.mailfrom=aur-dev-bounces@lists.archlinux.org X-Rspamd-Queue-Id: ED3133FE93C X-Spamd-Result: default: False [3.79 / 15.00]; HAS_REPLYTO(0.00)[aur-dev@lists.archlinux.org]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2a01:4f8:160:3033::2:c]; R_MISSING_CHARSET(2.50)[]; REPLYTO_ADDR_EQ_FROM(0.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[4]; MID_RHS_MATCH_FROMTLD(0.00)[]; DKIM_TRACE(0.00)[lists.archlinux.org:+]; RCPT_COUNT_TWO(0.00)[2]; DMARC_POLICY_ALLOW(-0.50)[archlinux.org,none]; MAILLIST(-0.20)[mailman]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; FROM_NEQ_ENVFROM(0.00)[aur-dev@lists.archlinux.org,aur-dev-bounces@lists.archlinux.org]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[lists.archlinux.org:s=luna]; FROM_HAS_DN(0.00)[]; TAGGED_RCPT(0.00)[aur-dev]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; MID_RHS_MATCH_TO(1.00)[]; NEURAL_HAM(-0.00)[-1.000]; FORGED_SENDER_MAILLIST(0.00)[] X-Rspamd-Server: mail.archlinux.org Signed-off-by: Eli Schwartz --- I don't know nearly enough SQL to know any kind of tradeoffs between one or the other, but this one should theoretically *work* everywhere, and certainly runs to success here on my sqlite development environment. web/lib/acctfuncs.inc.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/web/lib/acctfuncs.inc.php b/web/lib/acctfuncs.inc.php index 30c4cfe0..752abe97 100644 --- a/web/lib/acctfuncs.inc.php +++ b/web/lib/acctfuncs.inc.php @@ -597,21 +597,17 @@ function try_login() { /* Generate a session ID and store it. */ while (!$logged_in && $num_tries < 5) { $session_limit = config_get_int('options', 'max_sessions_per_user'); - # FIXME: this does not work for sqlite (JOIN in a DELETE clause) - # hence non-prod instances can have a naughty amount of simultaneous logins - if ($backend == "mysql" && $session_limit) { + if ($session_limit) { /* * Delete all user sessions except the * last ($session_limit - 1). */ - $q = "DELETE s.* FROM Sessions s "; - $q.= "LEFT JOIN (SELECT SessionID FROM Sessions "; + $q = "DELETE FROM Sessions "; $q.= "WHERE UsersId = " . $userID . " "; + $q.= "AND SessionID NOT IN (SELECT SessionID FROM Sessions "; + $q.= "WHERE UsersID = " . $userID . " "; $q.= "ORDER BY LastUpdateTS DESC "; - $q.= "LIMIT " . ($session_limit - 1) . ") q "; - $q.= "ON s.SessionID = q.SessionID "; - $q.= "WHERE s.UsersId = " . $userID . " "; - $q.= "AND q.SessionID IS NULL;"; + $q.= "LIMIT " . ($session_limit - 1) . ")"; $dbh->query($q); }