process_xattrs.c revision da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * CDDL HEADER START
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * The contents of this file are subject to the terms of the
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Common Development and Distribution License (the "License").
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * You may not use this file except in compliance with the License.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * See the License for the specific language governing permissions
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * and limitations under the License.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * When distributing Covered Code, include this CDDL HEADER in each
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * If applicable, add the following below this CDDL HEADER, with the
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * fields enclosed by brackets "[]" replaced with your own identifying
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * information: Portions Copyright [yyyy] [name of copyright owner]
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * CDDL HEADER END
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Use is subject to license terms.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#pragma ident "%Z%%M% %I% %E% SMI"
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Gets file descriptors of attribute directories for source and target
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * attribute files
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwget_attrdirs(int indfd, int outdfd, char *attrfile, int *sfd, int *tfd)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (0);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * mv_xattrs - Copies the content of the extended attribute files. Then
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * moves the extended system attributes from the input attribute files
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * to the target attribute files. Moves the extended system attributes
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * from source to the target file. This function returns 0 on success
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * and nonzero on error.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwmv_xattrs(char *cmd, char *infile, char *outfile, int sattr, int silent)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((indfd = openat(srcfd, ".", O_RDONLY|O_XATTR)) == -1) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((outdfd = attropen(outfile, ".", O_RDONLY)) == -1) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw etext = dgettext(TEXT_DOMAIN, "cannot attropen target");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "cannot open src attribute file");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "could not stat attribute file");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "cannot open target attribute file");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "could not stat attribute file");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if (writefile(sattrfd, tattrfd, infile, outfile, dp->d_name,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "failed to copy extended attribute "
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "from source to target");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Gets non default extended system attributes from
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * source to copy to target.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "Failed to open attribute files");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Copy extended system attribute from source
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * attribute file to target attribute file
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "Permission denied -"
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "failed to move system attribute");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "failed to move extended "
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "system attribute");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Copy extended system attribute from source to target */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "failed to move system attribute");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "%s: %s: cannot move extended attributes, "),
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "%s: %s: cannot move extended system "
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (0);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * The function returns non default extended system attribute list
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * associated with 'fname' and returns NULL when an error has occured
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * or when only extended system attributes other than archive,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * av_modified or crtime are set.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * The function returns system attribute list for the following cases:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * - any extended system attribute other than the default attributes
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * ('archive', 'av_modified' and 'crtime') is set
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * - nvlist has NULL name string
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * - nvpair has data type of 'nvlist'
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * - default data type.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "%s: %s: nvlist_alloc failed\n"),
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if (fgetattr(fd, XATTR_VIEW_READWRITE, &response) != 0) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "%s: %s: fgetattr failed\n"),
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw while ((pair = nvlist_next_nvpair(response, pair)) != NULL) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw switch (type) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw "nvpair_value_boolean_value "