Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Jan 2021 01:33:16 GMT
From:      "Simon J. Gerraty" <sjg@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b14cfecbf0ed - main - pkgfs_open: follow symlinks
Message-ID:  <202101150133.10F1XG8x011394@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by sjg:

URL: https://cgit.FreeBSD.org/src/commit/?id=b14cfecbf0ed04c841aa594dede3668b0a36344a

commit b14cfecbf0ed04c841aa594dede3668b0a36344a
Author:     Simon J. Gerraty <sjg@FreeBSD.org>
AuthorDate: 2021-01-15 01:33:05 +0000
Commit:     Simon J. Gerraty <sjg@FreeBSD.org>
CommitDate: 2021-01-15 01:33:05 +0000

    pkgfs_open: follow symlinks
    
    Caller is not interested in symlinks follow them.
    Throw an error if too many links encountered.
    
    Reviewed by:    stevek
    Sponsored by:   Juniper Networks
    --This line, and those below, will be ignored--
    > Description of fields to fill in above:                     76 columns --|
    > PR:                       If a GNATS PR is affected by the change.
    > Differential Revision:    https://reviews.freebsd.org/D### (*full* phabric URL needed).
    > Submitted by:             If someone else sent in the change.
    > Reviewed by:              If someone else reviewed your modification.
    > Approved by:              If you needed approval for this commit.
    > Obtained from:            If the change is from a third party.
    > MFC after:                N [day[s]|week[s]|month[s]].  Request a reminder email.
    > MFH:                      Ports tree branch name.  Request approval for merge.
    > Relnotes:                 Set to 'yes' for mention in release notes.
    > Security:                 Vulnerability reference (one per line) or description.
    > Sponsored by:             If the change was sponsored by an organization.
    > Empty fields above will be automatically removed.
    
    Change-Id: I4ef92ff256f503c620dc5bba79ed93b32cb2330d
---
 stand/libsa/pkgfs.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/stand/libsa/pkgfs.c b/stand/libsa/pkgfs.c
index 8018edd60d57..ffa16309ee6a 100644
--- a/stand/libsa/pkgfs.c
+++ b/stand/libsa/pkgfs.c
@@ -199,7 +199,7 @@ static int new_package(int, struct package **);
 static struct tarfile *scan_tarfile(struct package *, struct tarfile *);
 
 static int
-pkg_open(const char *fn, struct open_file *f)
+pkg_open_follow(const char *fn, struct open_file *f, int lnks)
 {
 	struct tarfile *tf;
 
@@ -242,6 +242,17 @@ pkg_open(const char *fn, struct open_file *f)
 		if (strcmp(fn, tf->tf_hdr.ut_name) == 0) {
 			f->f_fsdata = tf;
 			tf->tf_fp = 0;	/* Reset the file pointer. */
+			DBG(("%s: found %s type %c\n", __func__,
+			     fn, tf->tf_hdr.ut_typeflag[0]));
+			if (tf->tf_hdr.ut_typeflag[0] == '2') {
+			    /* we have a symlink
+			     * Note: ut_linkname is only 100 chars!
+			     */
+			    if (lnks++ >= 8)
+				return (EMLINK);
+			    return pkg_open_follow(tf->tf_hdr.ut_linkname,
+				f, lnks);
+			}
 			return (0);
 		}
 		tf = scan_tarfile(package, tf);
@@ -249,6 +260,12 @@ pkg_open(const char *fn, struct open_file *f)
 	return (errno);
 }
 
+static int
+pkg_open(const char *fn, struct open_file *f)
+{
+    return pkg_open_follow(fn, f, 0);
+}
+
 static int
 pkg_close(struct open_file *f)
 {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101150133.10F1XG8x011394>