Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1733926ybz; Thu, 16 Apr 2020 14:39:57 -0700 (PDT) X-Google-Smtp-Source: APiQypK5qUzAprgUnG/hGooHn6CC+mKmi64i55kJlbJBF2uddcDyuL2EHAxlt5u0PWRrqCinK8vn X-Received: by 2002:a50:c042:: with SMTP id u2mr226921edd.250.1587073197833; Thu, 16 Apr 2020 14:39:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587073197; cv=none; d=google.com; s=arc-20160816; b=zppqil84MBSEWlkmdxycnr7ZOWdXsIi/zHpdvigs8u9QX6tmW0w6Ns5qh6NwwyK2aE YJ5KjU4oTSne5BKVIXJPNHTverWKjC2KhI0nZtLjkF/pbACtFA/hgeyjQfQKRKbtqcbf Oj6+OBOuiDYAKKim4AcaC0T0x82Nf50CYz0oyG4Ai5ROfPklKoKtZ57jzCE8/TE8YzRl LWy8SBt9k1gxPHdxkrCwFBdTYD1LZpAmO/zB8jWxdlacMmzweq0DcaHk8LuXQvWo2kIX bEEa0xEKpY7d8+bJVzjah0i8CKYNtatsxu5csc8WsS9mSXFetN4sVxJfBW7SIpCv52qK 22zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=k075o9IFNJ35Fo7DHDbYwejmXEH/e5DbVaFbjz+Uae4=; b=DHS5G2EASKiOIcHVefhC0CFLtLI/uHdGwcLiAL2LOk1kLRZv//lYYiHy6+mkPhxdGd SoE68Zw0Er41xzkQ7ndC8e4gNejOewP8yWrem+BPdUKchdUNlK5wZcEWalNjw/lWPRuz 5TBT4y+sU09+EYJ6U/FTD0bmNJKqVUvz9iu3y+EAn5Flj0EegljZalHqDgDXB3KLmlPW Q7EoTLDY8l7dUVoXYetcqZFAulte3Zj/pkyo5p1pCWGslVS68vNhweS1KzunmYx0OZ/g tcjvX5qIyFKiC4IFIJOefFThikGrsbWRTkKGb3D/XWFK9ZhL1YF9rdB39aGIBD6oSJn3 MD7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="C3/WQX6U"; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f3si6982112edn.165.2020.04.16.14.39.33; Thu, 16 Apr 2020 14:39:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="C3/WQX6U"; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726407AbgDPVjb (ORCPT + 99 others); Thu, 16 Apr 2020 17:39:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:53498 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726116AbgDPVjb (ORCPT ); Thu, 16 Apr 2020 17:39:31 -0400 Received: from localhost.localdomain (c-68-36-133-222.hsd1.mi.comcast.net [68.36.133.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0D0F3221F9; Thu, 16 Apr 2020 21:39:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587073171; bh=vT1282yyyejk8G/Ee89lBGCkVNIcKwl2iVRTwWKUBPU=; h=From:To:Cc:Subject:Date:From; b=C3/WQX6UVxo0XoW/VKUBtcpxEpg+CoCSpe+hB23HwkPKhUqAfFCjq2z6bKFVTeJJW ISllS091ZgJ/WSemQZG/jjPOgWw++tC3yp4NW/4zUJKlgNcaJicdi8wb9rKBJrL3vc 8RjQLzXHCTb/V27pOqRpXfseSz4CV3Um+OJntRGY= From: trondmy@kernel.org To: Steve Dickson Cc: Lance Shelton , linux-nfs@vger.kernel.org Subject: [PATCH] mountd: Preserve special characters in refer and replica path options Date: Thu, 16 Apr 2020 17:37:22 -0400 Message-Id: <20200416213722.80201-1-trondmy@kernel.org> X-Mailer: git-send-email 2.25.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Lance Shelton Allow referral paths to contain special character by adding an escaping mechanism. Signed-off-by: Lance Shelton Signed-off-by: Trond Myklebust --- support/nfs/exports.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/support/nfs/exports.c b/support/nfs/exports.c index 8fbb6b15c299..97eb31837816 100644 --- a/support/nfs/exports.c +++ b/support/nfs/exports.c @@ -247,23 +247,28 @@ void secinfo_show(FILE *fp, struct exportent *ep) } } +static void +fprintpath(FILE *fp, const char *path) +{ + int i; + for (i=0; path[i]; i++) + if (iscntrl(path[i]) || path[i] == '"' || path[i] == '\\' || path[i] == '#' || isspace(path[i])) + fprintf(fp, "\\%03o", path[i]); + else + fprintf(fp, "%c", path[i]); +} + void putexportent(struct exportent *ep) { FILE *fp; int *id, i; - char *esc=ep->e_path; if (!efp) return; fp = efp->x_fp; - for (i=0; esc[i]; i++) - if (iscntrl(esc[i]) || esc[i] == '"' || esc[i] == '\\' || esc[i] == '#' || isspace(esc[i])) - fprintf(fp, "\\%03o", esc[i]); - else - fprintf(fp, "%c", esc[i]); - + fprintpath(fp, ep->e_path); fprintf(fp, "\t%s(", ep->e_hostname); fprintf(fp, "%s,", (ep->e_flags & NFSEXP_READONLY)? "ro" : "rw"); fprintf(fp, "%ssync,", (ep->e_flags & NFSEXP_ASYNC)? "a" : ""); @@ -302,10 +307,14 @@ putexportent(struct exportent *ep) case FSLOC_NONE: break; case FSLOC_REFER: - fprintf(fp, "refer=%s,", ep->e_fslocdata); + fprintf(fp, "refer="); + fprintpath(fp, ep->e_fslocdata); + fprintf(fp, ","); break; case FSLOC_REPLICA: - fprintf(fp, "replicas=%s,", ep->e_fslocdata); + fprintf(fp, "replicas="); + fprintpath(fp, ep->e_fslocdata); + fprintf(fp, ","); break; #ifdef DEBUG case FSLOC_STUB: -- 2.25.2