From patchwork Sun Nov 10 02:35:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonio Quartulli X-Patchwork-Id: 905 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director8.mail.ord1d.rsapps.net ([172.31.255.6]) by backend30.mail.ord1d.rsapps.net with LMTP id CKrXNHoSyF3CdAAAIUCqbw for ; Sun, 10 Nov 2019 08:36:58 -0500 Received: from proxy10.mail.iad3b.rsapps.net ([172.31.255.6]) by director8.mail.ord1d.rsapps.net with LMTP id mFSaMnoSyF0oSQAAfY0hYg ; Sun, 10 Nov 2019 08:36:58 -0500 Received: from smtp16.gate.iad3b ([172.31.255.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy10.mail.iad3b.rsapps.net with LMTP id oBzPLXoSyF1jQAAA/F5p9A ; Sun, 10 Nov 2019 08:36:58 -0500 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp16.gate.iad3b.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dmarc=none (p=nil; dis=none) header.from=unstable.cc X-Suspicious-Flag: YES X-Classification-ID: 2b3ecc16-03bf-11ea-944e-5254004ed364-1-1 Received: from [216.105.38.7] ([216.105.38.7:49258] helo=lists.sourceforge.net) by smtp16.gate.iad3b.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 17/4F-26746-B7218CD5; Sun, 10 Nov 2019 08:36:59 -0500 Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1iTnNt-00083V-GR; Sun, 10 Nov 2019 13:36:05 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1iTnNs-00083O-BK for openvpn-devel@lists.sourceforge.net; Sun, 10 Nov 2019 13:36:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=1OG7OrjWFvjwjJgbZ2VIkhQha1yM3np5P1/FrIvx3Fg=; b=SD5A4FT8lbNSIDRAlQ8qhIKAdF 7Qn7P1A5uumPXXLmyhwkSTO87UgQbsYT51gLZY95Qh7V6PnsFYukTrxbE6fjov7PY8xsPQgp/CTGS z3z+OB+gvxRNLCeenbU/eQ+2+5ZmcLyrjyG5ncnaAgSf2Skp7W1btQS6duwZsd0eMZEU=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject:Cc:To:From :Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=1OG7OrjWFvjwjJgbZ2VIkhQha1yM3np5P1/FrIvx3Fg=; b=g Hla8mdekb/5YbgaJJid2n0m9xhEPSDnXQm1k3I8XdoedjNzlzuJq+xZ7Vy+dH5HvcFlvWPimiy/IF EVwO7Y+tHF2+Lc47sK4ZnmlEuNad2t3aDRZDZrn5wYzVJ6I/JnJFphZvvYIJvHWPhYT53Dp1mqkih ZpBGTi8nvNR81Dgk=; Received: from s2.neomailbox.net ([5.148.176.60]) by sfi-mx-3.v28.lw.sourceforge.com with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1iTnNo-00AZ4r-EP for openvpn-devel@lists.sourceforge.net; Sun, 10 Nov 2019 13:36:04 +0000 From: Antonio Quartulli To: openvpn-devel@lists.sourceforge.net Date: Sun, 10 Nov 2019 14:35:23 +0100 Message-Id: <20191110133525.6069-1-a@unstable.cc> MIME-Version: 1.0 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [5.148.176.60 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 AWL AWL: Adjusted score from AWL reputation of From: address X-Headers-End: 1iTnNo-00AZ4r-EP Subject: [Openvpn-devel] [PATCH 1/3] auth_token_kt: ensure key_type object is initialized X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Antonio Quartulli Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox Fixes the following warning: auth_token.c: In function 'auth_token_init_secret': auth_token.c:47: warning: 'kt.cipher_length' is used uninitialized in this function auth_token.c:34: note: 'kt.cipher_length' was declared here Signed-off-by: Arne Schwabe Signed-off-by: Antonio Quartulli Acked-by: Arne Schwabe --- src/openvpn/auth_token.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openvpn/auth_token.c b/src/openvpn/auth_token.c index 1edc8069..6275299d 100644 --- a/src/openvpn/auth_token.c +++ b/src/openvpn/auth_token.c @@ -31,7 +31,7 @@ const char *auth_token_pem_name = "OpenVPN auth-token server key"; static struct key_type auth_token_kt(void) { - struct key_type kt; + struct key_type kt = { 0 }; /* We do not encrypt our session tokens */ kt.cipher = NULL; kt.digest = md_kt_get("SHA256"); From patchwork Sun Nov 10 02:35:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonio Quartulli X-Patchwork-Id: 904 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director8.mail.ord1d.rsapps.net ([172.30.191.6]) by backend30.mail.ord1d.rsapps.net with LMTP id 4D3KEnoSyF1KHQAAIUCqbw for ; Sun, 10 Nov 2019 08:36:58 -0500 Received: from proxy12.mail.ord1d.rsapps.net ([172.30.191.6]) by director8.mail.ord1d.rsapps.net with LMTP id iKefEnoSyF1NSAAAfY0hYg ; Sun, 10 Nov 2019 08:36:58 -0500 Received: from smtp33.gate.ord1d ([172.30.191.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy12.mail.ord1d.rsapps.net with LMTP id EAVqEnoSyF1EbgAA7PHxkg ; Sun, 10 Nov 2019 08:36:58 -0500 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp33.gate.ord1d.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dmarc=none (p=nil; dis=none) header.from=unstable.cc X-Suspicious-Flag: YES X-Classification-ID: 2a5ddf8a-03bf-11ea-85a7-525400041ef2-1-1 Received: from [216.105.38.7] ([216.105.38.7:53644] helo=lists.sourceforge.net) by smtp33.gate.ord1d.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 58/D6-01167-97218CD5; Sun, 10 Nov 2019 08:36:57 -0500 Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1iTnNr-0000xO-2Z; Sun, 10 Nov 2019 13:36:03 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1iTnNq-0000xI-4x for openvpn-devel@lists.sourceforge.net; Sun, 10 Nov 2019 13:36:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=ded0sQRvwe0RL44TGrdLHTdrSBMlSqStqBAgmcJq7g0=; b=jUxdxWt7a1mIbLhKrHBQJgZNeh 6n1NAIoUYe5uUTllnL/kj4n8N34/gww8lik+C19taw0l83Icai50dq9/Oq4bJ3CeTaFVW/RJqRIA0 7T8WXSBZEOxEuXvgKWRaPQEbHSZXDdYA+Po7T14raf3BL22U5XBJrlXFS+B2K1/Kx8MA=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=ded0sQRvwe0RL44TGrdLHTdrSBMlSqStqBAgmcJq7g0=; b=XiDx2cpvdaWcseNVydOjBWF2mv YXg0T6jknwQqOAGxp03Tbfbl2Bt/oj4ivFRF4vYcz4qU2cg5tbQ/xcIX0YXHjsXAZkdS/haRBEVl5 7BLfoTe9UuTKTdbyYoxXkcT6/38wvw2WPTEbyA2U4B542eGw1shHyFmxXEpyah3AOTFA=; Received: from s2.neomailbox.net ([5.148.176.60]) by sfi-mx-3.v28.lw.sourceforge.com with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1iTnNo-00AZ4v-4v for openvpn-devel@lists.sourceforge.net; Sun, 10 Nov 2019 13:36:02 +0000 From: Antonio Quartulli To: openvpn-devel@lists.sourceforge.net Date: Sun, 10 Nov 2019 14:35:24 +0100 Message-Id: <20191110133525.6069-2-a@unstable.cc> In-Reply-To: <20191110133525.6069-1-a@unstable.cc> References: <20191110133525.6069-1-a@unstable.cc> MIME-Version: 1.0 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [5.148.176.60 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 AWL AWL: Adjusted score from AWL reputation of From: address X-Headers-End: 1iTnNo-00AZ4v-4v Subject: [Openvpn-devel] [PATCH 2/3] auth.c: make cast explicit in the crypto API X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Antonio Quartulli Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox mbedtls_md_get_size() returns unsigned char, while EVP_MD_size() returns int. Results coming from both functions are normally in a uint8_t member of the key_type struct, because it is known that 8bits are enough (also for EVP_MD_size()). This unexpected cast can, however, trigger unsolicited warnings. Make the cast explicit by changing the return value of our crypto API. Reported-by: Arne Schwabe Signed-off-by: Antonio Quartulli Acked-By: Arne Schwabe --- src/openvpn/crypto_backend.h | 2 +- src/openvpn/crypto_mbedtls.c | 2 +- src/openvpn/crypto_openssl.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openvpn/crypto_backend.h b/src/openvpn/crypto_backend.h index d119442f..1d206a8c 100644 --- a/src/openvpn/crypto_backend.h +++ b/src/openvpn/crypto_backend.h @@ -526,7 +526,7 @@ const char *md_kt_name(const md_kt_t *kt); * * @return Message digest size, in bytes, or 0 if ctx was NULL. */ -int md_kt_size(const md_kt_t *kt); +unsigned char md_kt_size(const md_kt_t *kt); /* diff --git a/src/openvpn/crypto_mbedtls.c b/src/openvpn/crypto_mbedtls.c index 648a988e..3e77fa9e 100644 --- a/src/openvpn/crypto_mbedtls.c +++ b/src/openvpn/crypto_mbedtls.c @@ -823,7 +823,7 @@ md_kt_name(const mbedtls_md_info_t *kt) return mbedtls_md_get_name(kt); } -int +unsigned char md_kt_size(const mbedtls_md_info_t *kt) { if (NULL == kt) diff --git a/src/openvpn/crypto_openssl.c b/src/openvpn/crypto_openssl.c index 520e40ee..a81dcfd8 100644 --- a/src/openvpn/crypto_openssl.c +++ b/src/openvpn/crypto_openssl.c @@ -930,10 +930,10 @@ md_kt_name(const EVP_MD *kt) return EVP_MD_name(kt); } -int +unsigned char md_kt_size(const EVP_MD *kt) { - return EVP_MD_size(kt); + return (unsigned char)EVP_MD_size(kt); } From patchwork Sun Nov 10 02:35:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonio Quartulli X-Patchwork-Id: 906 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director10.mail.ord1d.rsapps.net ([172.31.255.6]) by backend30.mail.ord1d.rsapps.net with LMTP id EGsKNH4SyF2vdAAAIUCqbw for ; Sun, 10 Nov 2019 08:37:02 -0500 Received: from proxy10.mail.iad3b.rsapps.net ([172.31.255.6]) by director10.mail.ord1d.rsapps.net with LMTP id 8K7UMX4SyF07PwAApN4f7A ; Sun, 10 Nov 2019 08:37:02 -0500 Received: from smtp40.gate.iad3b ([172.31.255.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy10.mail.iad3b.rsapps.net with LMTP id oAtALX4SyF0lQAAA/F5p9A ; Sun, 10 Nov 2019 08:37:02 -0500 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp40.gate.iad3b.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dmarc=none (p=nil; dis=none) header.from=unstable.cc X-Suspicious-Flag: YES X-Classification-ID: 2d292918-03bf-11ea-a718-5254000cc6d4-1-1 Received: from [216.105.38.7] ([216.105.38.7:41072] helo=lists.sourceforge.net) by smtp40.gate.iad3b.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 85/D9-19038-E7218CD5; Sun, 10 Nov 2019 08:37:02 -0500 Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1iTnNs-0005UO-AL; Sun, 10 Nov 2019 13:36:04 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1iTnNr-0005U1-1q for openvpn-devel@lists.sourceforge.net; Sun, 10 Nov 2019 13:36:03 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=jV3pgZhW9XzXyIMbofhAx5ksA2GuQ17uR//NOxqgl6c=; b=KNNDBBJyjgXHTbI7C728LLMtDP MgccnRKJAiEY7mfXdpGE3O0XSMrTVZTJeWMDQTP3ZoK48d6ly3I8UtRqlijW8hzI+/FTK1r7dfukw Filqmscaupalh8MM6XwVZEae4Fr5LroMA31/MgO4vCLtt+ncp/uA8jcgt7F1YrKVAX70=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=jV3pgZhW9XzXyIMbofhAx5ksA2GuQ17uR//NOxqgl6c=; b=dDvkeESK9gtfVOxXMnyxaGMK9n gazqnS0xYIhxofKgu7EBd3cMOgL+H0Gi8YAyhApNV/8R7HzKbGlq80buIjsAi2QOPB3at7mMJj/Bt 5bxbkR7qR2qY7rsThktbt7o6tTEYoWWjKxn+1W6Hv3KGyWVcnbXfAMujN0a3Y/76lb9w=; Received: from s2.neomailbox.net ([5.148.176.60]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1iTnNp-00DAOM-26 for openvpn-devel@lists.sourceforge.net; Sun, 10 Nov 2019 13:36:03 +0000 From: Antonio Quartulli To: openvpn-devel@lists.sourceforge.net Date: Sun, 10 Nov 2019 14:35:25 +0100 Message-Id: <20191110133525.6069-3-a@unstable.cc> In-Reply-To: <20191110133525.6069-1-a@unstable.cc> References: <20191110133525.6069-1-a@unstable.cc> MIME-Version: 1.0 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [5.148.176.60 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record 0.1 AWL AWL: Adjusted score from AWL reputation of From: address X-Headers-End: 1iTnNp-00DAOM-26 Subject: [Openvpn-devel] [PATCH 3/3] travis: compile with -Werror on Linux X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Antonio Quartulli Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox Signed-off-by: Antonio Quartulli Acked-By: Arne Schwabe --- .travis/build-check.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis/build-check.sh b/.travis/build-check.sh index 039a7dcf..250bb454 100755 --- a/.travis/build-check.sh +++ b/.travis/build-check.sh @@ -8,6 +8,7 @@ fi if [ "${TRAVIS_OS_NAME}" = "linux" ]; then export LD_LIBRARY_PATH="${PREFIX}/lib:${LD_LIBRARY_PATH:-}" + export CFLAGS="${CFLAGS} -Werror" fi if [ "${TRAVIS_OS_NAME}" = "osx" ]; then