Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 217290
Collapse All | Expand All

(-)file_not_specified_in_diff (-15 / +182 lines)
Line  Link Here
0
-- coreutils-6.11/configure.ac
0
++ coreutils-6.11/configure.ac
Lines 249-254 Link Here
249
AC_SUBST([CONFIG_STATUS_DEPENDENCIES])
249
AC_SUBST([CONFIG_STATUS_DEPENDENCIES])
250
############################################################################
250
############################################################################
251
251
252
# Extended attribute copying.
253
AC_FUNC_XATTR
254
252
AM_GNU_GETTEXT([external], [need-formatstring-macros])
255
AM_GNU_GETTEXT([external], [need-formatstring-macros])
253
AM_GNU_GETTEXT_VERSION([0.15])
256
AM_GNU_GETTEXT_VERSION([0.15])
254
257
255
-- coreutils-6.11/m4/xattr.m4
258
++ coreutils-6.11/m4/xattr.m4
Line 0 Link Here
0
-- coreutils-6.11/src/copy.c
1
# xattr.m4 - check for Extended Attributes (Linux)
2
3
# Copyright (C) 2003 Free Software Foundation, Inc.
4
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2, or (at your option)
8
# any later version.
9
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
14
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software Foundation,
17
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
18
19
# Written by Andreas Gruenbacher.
20
21
AC_DEFUN([AC_FUNC_XATTR],
22
[
23
  AC_ARG_ENABLE(xattr,
24
	[  --disable-xattr         turn off support for extended attributes],
25
	use_xattr=$enableval, use_xattr=yes)
26
27
  if test "$use_xattr" = "yes"; then
28
    AC_CHECK_HEADERS(attr/error_context.h attr/libattr.h)
29
    if test "$ac_cv_header_attr_libattr_h" = yes \
30
       && test "$ac_cv_header_attr_error_context_h" = yes; then
31
      use_xattr=1
32
    else
33
      use_xattr=0
34
    fi
35
    AC_DEFINE_UNQUOTED(USE_XATTR, $use_xattr,
36
		       [Define if you want extended attribute support.])
37
    xattr_saved_LIBS=$LIBS
38
    AC_SEARCH_LIBS(attr_copy_file, attr,
39
		   [test "$ac_cv_search_attr_copy_file" = "none required" || LIB_XATTR=$ac_cv_search_attr_copy_file])
40
    AC_SUBST(LIB_XATTR)
41
    AC_CHECK_FUNCS(attr_copy_file)
42
    LIBS=$xattr_saved_LIBS
43
  fi
44
])
45
++ coreutils-6.11/src/copy.c
Lines 53-58 Link Here
53
#include "areadlink.h"
53
#include "areadlink.h"
54
#include "yesno.h"
54
#include "yesno.h"
55
55
56
#if USE_XATTR
57
# include <stdarg.h>
58
# include <attr/error_context.h>
59
# include <attr/libattr.h>
60
#endif
61
56
#ifndef HAVE_FCHOWN
62
#ifndef HAVE_FCHOWN
57
# define HAVE_FCHOWN false
63
# define HAVE_FCHOWN false
58
# define fchown(fd, uid, gid) (-1)
64
# define fchown(fd, uid, gid) (-1)
Lines 118-123 is_ancestor (const struct stat *sb, cons Link Here
118
  return false;
124
  return false;
119
}
125
}
120
126
127
#if USE_XATTR
128
static void
129
copy_xattr_error (struct error_context *ctx, const char *fmt, ...)
130
{
131
  int err = errno;
132
  va_list ap;
133
  int len;
134
  char *buffer;
135
136
  /* There is no error function that takes a va_list argument,
137
     so we print the message in a buffer first.  */
138
139
  va_start (ap, fmt);
140
  len = vsnprintf (NULL, 0, fmt, ap);
141
  va_end (ap);
142
  if (len > 0)
143
    {
144
      buffer = xmalloc (len + 1);
145
      va_start (ap, fmt);
146
      vsnprintf (buffer, len + 1, fmt, ap);
147
      va_end (ap);
148
      error (0, err, "%s", buffer);
149
      free (buffer);
150
    }
151
}
152
153
static const char *
154
copy_xattr_quote (struct error_context *ctx, const char *str)
155
{
156
  return xstrdup (quote (str));
157
}
158
159
static void
160
copy_xattr_free (struct error_context *ctx, const char *str)
161
{
162
  free ((void *) str);
163
}
164
165
struct copy_xattr_context {
166
  struct error_context ctx;
167
  struct cp_options *x;
168
};
169
170
static int
171
copy_xattr_filter (const char *name, struct error_context *ctx)
172
{
173
  struct copy_xattr_context *copy_ctx = (struct copy_xattr_context *) ctx;
174
  int action;
175
176
  /* We handle POSIX ACLs separately. */
177
  if (!strcmp(name, "system.posix_acl_access")
178
      || !strcmp(name, "system.posix_acl_default"))
179
    return 0;
180
181
  action = attr_copy_action(name, ctx);
182
  return (action != ATTR_ACTION_SKIP &&
183
  	  (!copy_ctx->x->preserve_mode
184
	   || action != ATTR_ACTION_PERMISSIONS));
185
}
186
#endif  /* USE_XATTR */
187
188
static bool
189
copy_xattrs (const char *src_path, int source_desc, const char *dst_path,
190
	     int dest_desc, const struct cp_options *x)
191
{
192
  struct copy_xattr_context copy_xattr_ctx = {
193
      { copy_xattr_error,
194
	copy_xattr_quote,
195
	copy_xattr_free },
196
      x
197
    };
198
199
#if USE_XATTR
200
  if (x->preserve_xattrs)
201
    {
202
      int ret;
203
204
      if (source_desc != -1 && dest_desc != -1)
205
	ret = attr_copy_fd(src_path, source_desc, dst_path, dest_desc,
206
			   copy_xattr_filter, &copy_xattr_ctx.ctx);
207
      else
208
	ret = attr_copy_file (src_path, dst_path,
209
			      copy_xattr_filter, &copy_xattr_ctx.ctx);
210
      return ret == 0 || !x->require_preserve;
211
    }
212
  else
213
    return true;
214
#else  /* USE_XATTR */
215
  return true;
216
#endif  /* USE_XATTR */
217
}
218
121
/* Read the contents of the directory SRC_NAME_IN, and recursively
219
/* Read the contents of the directory SRC_NAME_IN, and recursively
122
   copy the contents to DST_NAME_IN.  NEW_DST is true if
220
   copy the contents to DST_NAME_IN.  NEW_DST is true if
123
   DST_NAME_IN is a directory that was created previously in the
221
   DST_NAME_IN is a directory that was created previously in the
Lines 509-514 copy_reg (char const *src_name, char con Link Here
509
	}
607
	}
510
    }
608
    }
511
609
610
  if (!copy_xattrs (src_name, source_desc, dst_name, dest_desc, x))
611
    return_val = false;
612
512
  set_author (dst_name, dest_desc, src_sb);
613
  set_author (dst_name, dest_desc, src_sb);
513
614
514
  if (x->preserve_mode || x->move_mode)
615
  if (x->preserve_mode || x->move_mode)
Lines 1755-1760 copy_internal (char const *src_name, cha Link Here
1755
	}
1856
	}
1756
    }
1857
    }
1757
1858
1859
  if (!copy_xattrs (src_name, -1, dst_name, -1, x))
1860
    delayed_ok = false;
1861
1758
  set_author (dst_name, -1, &src_sb);
1862
  set_author (dst_name, -1, &src_sb);
1759
1863
1760
  if (x->preserve_mode || x->move_mode)
1864
  if (x->preserve_mode || x->move_mode)
1761
-- coreutils-6.11/src/copy.h
1865
++ coreutils-6.11/src/copy.h
Lines 128-133 struct cp_options Link Here
128
  bool preserve_mode;
128
  bool preserve_mode;
129
  bool preserve_timestamps;
129
  bool preserve_timestamps;
130
130
131
  /* If true, attempt to copy extended attributes. */
132
  bool preserve_xattrs;
133
131
  /* Enabled for mv, and for cp by the --preserve=links option.
134
  /* Enabled for mv, and for cp by the --preserve=links option.
132
     If true, attempt to preserve in the destination files any
135
     If true, attempt to preserve in the destination files any
133
     logical hard links between the source files.  If used with cp's
136
     logical hard links between the source files.  If used with cp's
134
-- coreutils-6.11/src/cp.c
137
++ coreutils-6.11/src/cp.c
Lines 191-197 Mandatory arguments to long options are Link Here
191
  -p                           same as --preserve=mode,ownership,timestamps\n\
191
  -p                           same as --preserve=mode,ownership,timestamps\n\
192
      --preserve[=ATTR_LIST]   preserve the specified attributes (default:\n\
192
      --preserve[=ATTR_LIST]   preserve the specified attributes (default:\n\
193
                                 mode,ownership,timestamps), if possible\n\
193
                                 mode,ownership,timestamps), if possible\n\
194
                                 additional attributes: context, links, all\n\
194
                                 additional attributes: context, links, xattrs, all\n\
195
"), stdout);
195
"), stdout);
196
      fputs (_("\
196
      fputs (_("\
197
      --no-preserve=ATTR_LIST  don't preserve the specified attributes\n\
197
      --no-preserve=ATTR_LIST  don't preserve the specified attributes\n\
Lines 724-729 cp_option_init (struct cp_options *x) Link Here
724
  x->preserve_timestamps = false;
724
  x->preserve_timestamps = false;
725
  x->preserve_security_context = false;
725
  x->preserve_security_context = false;
726
  x->require_preserve_context = false;
726
  x->require_preserve_context = false;
727
  x->preserve_xattrs = false;
727
728
728
  x->require_preserve = false;
729
  x->require_preserve = false;
729
  x->recursive = false;
730
  x->recursive = false;
Lines 752-769 decode_preserve_arg (char const *arg, st Link Here
752
      PRESERVE_OWNERSHIP,
753
      PRESERVE_OWNERSHIP,
753
      PRESERVE_LINK,
754
      PRESERVE_LINK,
754
      PRESERVE_CONTEXT,
755
      PRESERVE_CONTEXT,
756
      PRESERVE_XATTRS,
755
      PRESERVE_ALL
757
      PRESERVE_ALL
756
    };
758
    };
757
  static enum File_attribute const preserve_vals[] =
759
  static enum File_attribute const preserve_vals[] =
758
    {
760
    {
759
      PRESERVE_MODE, PRESERVE_TIMESTAMPS,
761
      PRESERVE_MODE, PRESERVE_TIMESTAMPS,
760
      PRESERVE_OWNERSHIP, PRESERVE_LINK, PRESERVE_CONTEXT, PRESERVE_ALL
762
      PRESERVE_OWNERSHIP, PRESERVE_LINK, PRESERVE_CONTEXT,
763
      PRESERVE_XATTRS, PRESERVE_ALL
761
    };
764
    };
762
  /* Valid arguments to the `--preserve' option. */
765
  /* Valid arguments to the `--preserve' option. */
763
  static char const* const preserve_args[] =
766
  static char const* const preserve_args[] =
764
    {
767
    {
765
      "mode", "timestamps",
768
      "mode", "timestamps",
766
      "ownership", "links", "context", "all", NULL
769
      "ownership", "links", "context",
770
      "xattrs", "all", NULL
767
    };
771
    };
768
  ARGMATCH_VERIFY (preserve_args, preserve_vals);
772
  ARGMATCH_VERIFY (preserve_args, preserve_vals);
769
773
Lines 799-811 decode_preserve_arg (char const *arg, st Link Here
799
	  x->require_preserve_context = on_off;
803
	  x->require_preserve_context = on_off;
800
	  break;
804
	  break;
801
805
806
	case PRESERVE_XATTRS:
807
	  x->preserve_xattrs = on_off;
808
	  break;
809
802
	case PRESERVE_ALL:
810
	case PRESERVE_ALL:
803
	  x->preserve_mode = on_off;
811
	  x->preserve_mode = on_off;
804
	  x->preserve_timestamps = on_off;
812
	  x->preserve_timestamps = on_off;
805
	  x->preserve_ownership = on_off;
813
	  x->preserve_ownership = on_off;
806
	  x->preserve_links = on_off;
814
	  x->preserve_links = on_off;
807
	  if (selinux_enabled)
815
	  if (selinux_enabled)
808
	    x->preserve_security_context = on_off;
816
	    x->preserve_security_context = on_off;
817
	  x->preserve_xattrs = on_off;
809
	  break;
818
	  break;
810
819
811
	default:
820
	default:
812
-- coreutils-6.11/src/install.c
821
++ coreutils-6.11/src/install.c
Lines 154-159 cp_option_init (struct cp_options *x) Link Here
154
  x->preserve_links = false;
154
  x->preserve_links = false;
155
  x->preserve_mode = false;
155
  x->preserve_mode = false;
156
  x->preserve_timestamps = false;
156
  x->preserve_timestamps = false;
157
  x->preserve_xattrs = false;
157
  x->require_preserve = false;
158
  x->require_preserve = false;
158
  x->require_preserve_context = false;
159
  x->require_preserve_context = false;
159
  x->recursive = false;
160
  x->recursive = false;
160
-- coreutils-6.11/src/mv.c
161
++ coreutils-6.11/src/mv.c
Lines 125-130 cp_option_init (struct cp_options *x) Link Here
125
  x->preserve_mode = true;
125
  x->preserve_mode = true;
126
  x->preserve_timestamps = true;
126
  x->preserve_timestamps = true;
127
  x->preserve_security_context = selinux_enabled;
127
  x->preserve_security_context = selinux_enabled;
128
  x->preserve_xattrs = true;
128
  x->require_preserve = false;  /* FIXME: maybe make this an option */
129
  x->require_preserve = false;  /* FIXME: maybe make this an option */
129
  x->require_preserve_context = false;
130
  x->require_preserve_context = false;
130
  x->recursive = true;
131
  x->recursive = true;
131
-- coreutils-6.11/doc/coreutils.texi
132
++ coreutils-6.11/doc/coreutils.texi
Lines 6948-6953 Preserve in the destination files Link Here
6948
any links between corresponding source files.
6948
any links between corresponding source files.
6949
@c Give examples illustrating how hard links are preserved.
6949
@c Give examples illustrating how hard links are preserved.
6950
@c Also, show how soft links map to hard links with -L and -H.
6950
@c Also, show how soft links map to hard links with -L and -H.
6951
@itemx xattrs
6952
Preserve extended attributes. (See /etc/xattr.conf.)
6951
@itemx all
6953
@itemx all
6952
Preserve all file attributes.
6954
Preserve all file attributes.
6953
Equivalent to specifying all of the above.
6955
Equivalent to specifying all of the above.
6954
-- coreutils-6.11/src/Makefile.am
6956
++ coreutils-6.11/src/Makefile.am
Lines 107-115 Link Here
107
dir_LDADD += $(LIB_ACL)
107
dir_LDADD += $(LIB_ACL)
108
ls_LDADD += $(LIB_ACL)
108
ls_LDADD += $(LIB_ACL)
109
vdir_LDADD += $(LIB_ACL)
109
vdir_LDADD += $(LIB_ACL)
110
cp_LDADD += $(LIB_ACL)
110
cp_LDADD += $(LIB_ACL) $(LIB_XATTR)
111
mv_LDADD += $(LIB_ACL)
111
mv_LDADD += $(LIB_ACL) $(LIB_XATTR)
112
ginstall_LDADD += $(LIB_ACL)
112
ginstall_LDADD += $(LIB_ACL) $(LIB_XATTR)
113
113
114
stat_LDADD = $(LDADD) $(LIB_SELINUX)
114
stat_LDADD = $(LDADD) $(LIB_SELINUX)
115
115

Return to bug 217290