diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-08-06 12:12:00 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-08-06 12:12:00 -0400 |
commit | 81cd8690e7c4fb4d316355b016a31b823ec9b507 (patch) | |
tree | 638e7ae054a4d050e0884af813ecb23a1ffa0ac9 | |
parent | 309293405cafadd2ba79e17d7e9555630e7ed21f (diff) |
prevent unlinking file if attempt to link to itself
-rw-r--r-- | ln.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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)); |