From 81cd8690e7c4fb4d316355b016a31b823ec9b507 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Tue, 6 Aug 2019 12:12:00 -0400 Subject: prevent unlinking file if attempt to link to itself --- ln.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ln.c b/ln.c index 4f30824..6929bfa 100644 --- a/ln.c +++ b/ln.c @@ -47,6 +47,14 @@ static int ln(const char *path, int dirfd, const char *target, int sym, int forc fprintf(stderr, "ln: %s: %s\n", target, strerror(EEXIST)); return 1; } + + struct stat s2; + if (stat(path, &s2) == 0) { + if (st.st_dev == s2.st_dev && st.st_ino == s2.st_ino) { + fprintf(stderr, "ln: %s -> %s: same file\n", path, target); + return 1; + } + } if (unlinkat(dirfd, target, 0) != 0) { fprintf(stderr, "ln: %s: %s\n", target, strerror(errno)); -- cgit v1.2.1