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.
This commit is contained in:
parent
f6f8bcd2a5
commit
dab764d019
@ -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 \
|
AC_CHECK_FUNCS(arc4random_buf l64a fchmod fchown fsync futimes \
|
||||||
getentropy getrandom getspnam getusershell \
|
getentropy getrandom getspnam getusershell \
|
||||||
getutent initgroups lchown lckpwdf lstat lutimes \
|
getutent initgroups lckpwdf lutimes \
|
||||||
setgroups updwtmp updwtmpx innetgr getpwnam_r \
|
setgroups updwtmp updwtmpx innetgr getpwnam_r \
|
||||||
getpwuid_r getgrnam_r getgrgid_r getspnam_r \
|
getpwuid_r getgrnam_r getgrgid_r getspnam_r \
|
||||||
memset_s explicit_bzero)
|
memset_s explicit_bzero)
|
||||||
|
@ -65,7 +65,6 @@ int lrename (const char *old, const char *new)
|
|||||||
int res;
|
int res;
|
||||||
char *r = NULL;
|
char *r = NULL;
|
||||||
|
|
||||||
#if defined(S_ISLNK)
|
|
||||||
#ifndef __GLIBC__
|
#ifndef __GLIBC__
|
||||||
char resolved_path[PATH_MAX];
|
char resolved_path[PATH_MAX];
|
||||||
#endif /* !__GLIBC__ */
|
#endif /* !__GLIBC__ */
|
||||||
@ -82,7 +81,6 @@ int lrename (const char *old, const char *new)
|
|||||||
new = r;
|
new = r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* S_ISLNK */
|
|
||||||
|
|
||||||
res = rename (old, new);
|
res = rename (old, new);
|
||||||
|
|
||||||
|
@ -205,22 +205,6 @@ static inline void memzero(void *ptr, size_t size)
|
|||||||
# define SEEK_END 2
|
# define SEEK_END 2
|
||||||
#endif
|
#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
|
#if HAVE_TERMIOS_H
|
||||||
# include <termios.h>
|
# include <termios.h>
|
||||||
# define STTY(fd, termio) tcsetattr(fd, TCSANOW, termio)
|
# define STTY(fd, termio) tcsetattr(fd, TCSANOW, termio)
|
||||||
|
@ -56,14 +56,12 @@ static int copy_dir (const char *src, const char *dst,
|
|||||||
const struct stat *statp, const struct timeval mt[],
|
const struct stat *statp, const struct timeval mt[],
|
||||||
uid_t old_uid, uid_t new_uid,
|
uid_t old_uid, uid_t new_uid,
|
||||||
gid_t old_gid, gid_t new_gid);
|
gid_t old_gid, gid_t new_gid);
|
||||||
#ifdef S_IFLNK
|
|
||||||
static /*@null@*/char *readlink_malloc (const char *filename);
|
static /*@null@*/char *readlink_malloc (const char *filename);
|
||||||
static int copy_symlink (const char *src, const char *dst,
|
static int copy_symlink (const char *src, const char *dst,
|
||||||
unused bool reset_selinux,
|
unused bool reset_selinux,
|
||||||
const struct stat *statp, const struct timeval mt[],
|
const struct stat *statp, const struct timeval mt[],
|
||||||
uid_t old_uid, uid_t new_uid,
|
uid_t old_uid, uid_t new_uid,
|
||||||
gid_t old_gid, gid_t new_gid);
|
gid_t old_gid, gid_t new_gid);
|
||||||
#endif /* S_IFLNK */
|
|
||||||
static int copy_hardlink (const char *dst,
|
static int copy_hardlink (const char *dst,
|
||||||
unused bool reset_selinux,
|
unused bool reset_selinux,
|
||||||
struct link_name *lp);
|
struct link_name *lp);
|
||||||
@ -223,7 +221,7 @@ int copy_tree (const char *src_root, const char *dst_root,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LSTAT (src_root, &sb) == -1) {
|
if (lstat (src_root, &sb) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -364,7 +362,7 @@ static int copy_entry (const char *src, const char *dst,
|
|||||||
struct link_name *lp;
|
struct link_name *lp;
|
||||||
struct timeval mt[2];
|
struct timeval mt[2];
|
||||||
|
|
||||||
if (LSTAT (src, &sb) == -1) {
|
if (lstat (src, &sb) == -1) {
|
||||||
/* If we cannot stat the file, do not care. */
|
/* If we cannot stat the file, do not care. */
|
||||||
} else {
|
} else {
|
||||||
#ifdef HAVE_STRUCT_STAT_ST_ATIM
|
#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);
|
old_uid, new_uid, old_gid, new_gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef S_IFLNK
|
|
||||||
/*
|
/*
|
||||||
* Copy any symbolic links
|
* 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,
|
err = copy_symlink (src, dst, reset_selinux, &sb, mt,
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
old_uid, new_uid, old_gid, new_gid);
|
||||||
}
|
}
|
||||||
#endif /* S_IFLNK */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See if this is a previously copied link
|
* See if this is a previously copied link
|
||||||
@ -498,7 +494,6 @@ static int copy_dir (const char *src, const char *dst,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef S_IFLNK
|
|
||||||
/*
|
/*
|
||||||
* readlink_malloc - wrapper for readlink
|
* readlink_malloc - wrapper for readlink
|
||||||
*
|
*
|
||||||
@ -616,7 +611,6 @@ static int copy_symlink (const char *src, const char *dst,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* S_IFLNK */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* copy_hardlink - copy a hardlink
|
* copy_hardlink - copy a hardlink
|
||||||
|
Loading…
Reference in New Issue
Block a user