[BACK]Return to attr_copy_check.c CVS log [TXT][DIR] Up to [Development] / xfs-cmds / attr / libattr

File: [Development] / xfs-cmds / attr / libattr / attr_copy_check.c (download)

Revision 1.5, Thu Feb 16 02:51:16 2006 UTC (11 years, 8 months ago) by nathans.longdrop.melbourne.sgi.com
Branch: MAIN
Changes since 1.4: +5 -2 lines

Do not copy SGI DMI (data migration) attributes as well.
Merge of master-melb:xfs-cmds:25211a by kenmcd.

/* Copy extended attributes between files - default check callback */
 
/* Copyright (C) 2003 Andreas Gruenbacher <agruen@suse.de>, SuSE Linux AG.

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2 of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include <string.h>
#include "error_context.h"

int
attr_copy_check_permissions(const char *name, struct error_context *ctx)
{
	/* Skip POSIX ACLs. */
	if (strncmp(name, "system.posix_acl_", 17) == 0 &&
	    (strcmp(name+17, "access") == 0 ||
	     strcmp(name+17, "default") == 0))
		return 0;

	/* Skip permissions attributes which are used on IRIX, and
	   hence are part of the XFS ondisk format (incl. ACLs).
	   Also skip SGI DMF attributes as they are inappropriate
	   targets for copying over as well. */
	if (strncmp(name, "trusted.SGI_", 12) == 0 &&
	    (strcmp(name+12, "ACL_DEFAULT") == 0 ||
	     strcmp(name+12, "ACL_FILE") == 0 ||
	     strcmp(name+12, "CAP_FILE") == 0 ||
	     strcmp(name+12, "MAC_FILE") == 0 ||
	     strncmp(name+12, "DMI_", 4) == 0))
		return 0;

	/* The xfsroot namespace mirrored attributes, some of which
	   are also also available via the system.* and trusted.*
	   namespaces.  To avoid the problems this would cause,
	   we skip xfsroot altogether.
	   Note: xfsroot namespace has now been removed from XFS. */
	if (strncmp(name, "xfsroot.", 8) == 0)
		return 0;

	return 1;
}