From dab764d0195fc16d1d39330eee8a33e8917826d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Fri, 5 Aug 2022 17:57:24 +0200 Subject: [PATCH] Require symlink support Require lstat(2), lchown(2), S_IFLNK and S_ISLNK from POSIX.1-2001. Already unconditionally used in lib/tcbfuncs.c and lib/run_part.c. --- configure.ac | 2 +- lib/commonio.c | 2 -- lib/defines.h | 16 ---------------- libmisc/copydir.c | 10 ++-------- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/configure.ac b/configure.ac index b9a2263b..7e954c29 100644 --- a/configure.ac +++ b/configure.ac @@ -49,7 +49,7 @@ AC_CHECK_HEADER([shadow.h],,[AC_MSG_ERROR([You need a libc with shadow.h])]) AC_CHECK_FUNCS(arc4random_buf l64a fchmod fchown fsync futimes \ getentropy getrandom getspnam getusershell \ - getutent initgroups lchown lckpwdf lstat lutimes \ + getutent initgroups lckpwdf lutimes \ setgroups updwtmp updwtmpx innetgr getpwnam_r \ getpwuid_r getgrnam_r getgrgid_r getspnam_r \ memset_s explicit_bzero) diff --git a/lib/commonio.c b/lib/commonio.c index 9e0fde60..80288d64 100644 --- a/lib/commonio.c +++ b/lib/commonio.c @@ -65,7 +65,6 @@ int lrename (const char *old, const char *new) int res; char *r = NULL; -#if defined(S_ISLNK) #ifndef __GLIBC__ char resolved_path[PATH_MAX]; #endif /* !__GLIBC__ */ @@ -82,7 +81,6 @@ int lrename (const char *old, const char *new) new = r; } } -#endif /* S_ISLNK */ res = rename (old, new); diff --git a/lib/defines.h b/lib/defines.h index 4a2b90c9..ee33aa0d 100644 --- a/lib/defines.h +++ b/lib/defines.h @@ -205,22 +205,6 @@ static inline void memzero(void *ptr, size_t size) # define SEEK_END 2 #endif -#ifndef S_ISLNK -#define S_ISLNK(x) (0) -#endif - -#if HAVE_LCHOWN -#define LCHOWN lchown -#else -#define LCHOWN chown -#endif - -#if HAVE_LSTAT -#define LSTAT lstat -#else -#define LSTAT stat -#endif - #if HAVE_TERMIOS_H # include # define STTY(fd, termio) tcsetattr(fd, TCSANOW, termio) diff --git a/libmisc/copydir.c b/libmisc/copydir.c index 2929151d..648f562a 100644 --- a/libmisc/copydir.c +++ b/libmisc/copydir.c @@ -56,14 +56,12 @@ static int copy_dir (const char *src, const char *dst, const struct stat *statp, const struct timeval mt[], uid_t old_uid, uid_t new_uid, gid_t old_gid, gid_t new_gid); -#ifdef S_IFLNK static /*@null@*/char *readlink_malloc (const char *filename); static int copy_symlink (const char *src, const char *dst, unused bool reset_selinux, const struct stat *statp, const struct timeval mt[], uid_t old_uid, uid_t new_uid, gid_t old_gid, gid_t new_gid); -#endif /* S_IFLNK */ static int copy_hardlink (const char *dst, unused bool reset_selinux, struct link_name *lp); @@ -223,7 +221,7 @@ int copy_tree (const char *src_root, const char *dst_root, return -1; } - if (LSTAT (src_root, &sb) == -1) { + if (lstat (src_root, &sb) == -1) { return -1; } @@ -364,7 +362,7 @@ static int copy_entry (const char *src, const char *dst, struct link_name *lp; struct timeval mt[2]; - if (LSTAT (src, &sb) == -1) { + if (lstat (src, &sb) == -1) { /* If we cannot stat the file, do not care. */ } else { #ifdef HAVE_STRUCT_STAT_ST_ATIM @@ -396,7 +394,6 @@ static int copy_entry (const char *src, const char *dst, old_uid, new_uid, old_gid, new_gid); } -#ifdef S_IFLNK /* * Copy any symbolic links */ @@ -405,7 +402,6 @@ static int copy_entry (const char *src, const char *dst, err = copy_symlink (src, dst, reset_selinux, &sb, mt, old_uid, new_uid, old_gid, new_gid); } -#endif /* S_IFLNK */ /* * See if this is a previously copied link @@ -498,7 +494,6 @@ static int copy_dir (const char *src, const char *dst, return err; } -#ifdef S_IFLNK /* * readlink_malloc - wrapper for readlink * @@ -616,7 +611,6 @@ static int copy_symlink (const char *src, const char *dst, return 0; } -#endif /* S_IFLNK */ /* * copy_hardlink - copy a hardlink