Date: Sat, 18 Jan 1997 11:52:19 +0500 (ESK) From: "Serge A. Babkin" <babkin@hq.icb.chel.su> To: jkh@time.cdrom.com Cc: hackers@freebsd.org Subject: Patch for cp Message-ID: <199701180652.LAA09943@hq.icb.chel.su>
next in thread | raw e-mail | index | archive | help
Hi!
This patch fixes bug in /bin/cp that made it returning error "Operation
not permitted" when copying files with schg flags with -p key
like:
cp -p /usr/bin/passwd /tmp/x
Commit it please.
-SB
*** utils.c 1997/01/18 06:36:56 1.1
--- utils.c 1997/01/18 06:46:47
***************
*** 159,181 ****
* to remove it if we created it and its length is 0.
*/
! if (pflag && setfile(fs, to_fd))
! rval = 1;
/*
* If the source was setuid or setgid, lose the bits unless the
* copy is owned by the same user and group.
*/
#define RETAINBITS \
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
! else if (fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid)
! if (fstat(to_fd, &to_stat)) {
! warn("%s", to.p_path);
! rval = 1;
! } else if (fs->st_gid == to_stat.st_gid &&
! fchmod(to_fd, fs->st_mode & RETAINBITS & ~myumask)) {
! warn("%s", to.p_path);
! rval = 1;
! }
(void)close(from_fd);
if (close(to_fd)) {
warn("%s", to.p_path);
--- 159,184 ----
* to remove it if we created it and its length is 0.
*/
! if (pflag) {
! if (setfile(fs, to_fd))
! rval = 1;
/*
* If the source was setuid or setgid, lose the bits unless the
* copy is owned by the same user and group.
*/
#define RETAINBITS \
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
! } else {
! if (fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid)
! if (fstat(to_fd, &to_stat)) {
! warn("%s", to.p_path);
! rval = 1;
! } else if (fs->st_gid == to_stat.st_gid &&
! fchmod(to_fd, fs->st_mode & RETAINBITS & ~myumask)) {
! warn("%s", to.p_path);
! rval = 1;
! }
! }
(void)close(from_fd);
if (close(to_fd)) {
warn("%s", to.p_path);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701180652.LAA09943>
