Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Jul 2008 16:54:04 GMT
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 144723 for review
Message-ID:  <200807051654.m65Gs49U048694@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=144723

Change 144723 by trasz@trasz_traszkan on 2008/07/05 16:53:46

	Change the "flag" part of the API to be compatible with Darwin.

Affected files ...

.. //depot/projects/soc2008/trasz_nfs4acl/TODO#3 edit
.. //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/merge.c#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Makefile.inc#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Symbol.map#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_flag.c#1 add
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_from_text_nfs4.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_get.c#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_set.c#4 edit
.. //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_to_text_nfs4.c#2 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/sys/acl.h#8 edit

Differences ...

==== //depot/projects/soc2008/trasz_nfs4acl/TODO#3 (text+ko) ====

@@ -4,15 +4,6 @@
 
 - Add the ability to add ACE at a given position in ACL to setfacl(1),
 
-- Change acl_{get,set}_flags_np into Darwin-compatible calls:
-
-  int      acl_add_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
-  int      acl_clear_flags_np(acl_flagset_t flagset_d);
-  int      acl_delete_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
-  int      acl_get_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
-  int      acl_get_flagset_np(void *obj_p, acl_flagset_t *flagset_p);
-  int      acl_set_flagset_np(void *obj_p, acl_flagset_t flagset_d);
-
 - Find out what to do with chmod(1).  Right now, "chmod 600" on file
   which already has mode 0600 does not call chmod(2) at all - and it
   should, as it might cause ACL recomputation.

==== //depot/projects/soc2008/trasz_nfs4acl/bin/setfacl/merge.c#4 (text+ko) ====

@@ -43,7 +43,7 @@
 {
 	acl_permset_t permset;
 	acl_extended_t extended;
-	acl_flag_t flags;
+	acl_flagset_t flagset;
 	int have_entry;
 	uid_t *id, *id_new;
 
@@ -67,10 +67,10 @@
 				err(1, "acl_get_extended_np() failed");
 			if (acl_set_extended_np(*entry_new, extended))
 				err(1, "acl_set_extended_np() failed");
-			if (acl_get_flags_np(*entry, &flags))
-				err(1, "acl_get_flags_np() failed");
-			if (acl_set_flags_np(*entry_new, flags))
-				err(1, "acl_set_flags_np() failed");
+			if (acl_get_flagset_np(*entry, &flagset))
+				err(1, "acl_get_flagset_np() failed");
+			if (acl_set_flagset_np(*entry_new, flagset))
+				err(1, "acl_set_flagset_np() failed");
 		}
 
 		have_entry = 1;
@@ -92,7 +92,7 @@
 	acl_t acl_new;
 	acl_tag_t tag, tag_new;
 	acl_extended_t extended, extended_new;
-	acl_flag_t flags;
+	acl_flagset_t flagset;
 	int entry_id, entry_id_new, have_entry;
 
 	if (acl_type == ACL_TYPE_ACCESS || acl_type == ACL_TYPE_NFS4)
@@ -163,10 +163,10 @@
 						err(1, "acl_get_extended_np() failed");
 					if (acl_set_extended_np(entry_new, extended))
 						err(1, "acl_set_extended_np() failed");
-					if (acl_get_flags_np(entry, &flags))
-						err(1, "acl_get_flags_np() failed");
-					if (acl_set_flags_np(entry_new, flags))
-						err(1, "acl_set_flags_np() failed");
+					if (acl_get_flagset_np(entry, &flagset))
+						err(1, "acl_get_flagset_np() failed");
+					if (acl_set_flagset_np(entry_new, flagset))
+						err(1, "acl_set_flagset_np() failed");
 				}
 				have_entry = 1;
 				break;

==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Makefile.inc#4 (text+ko) ====

@@ -8,6 +8,7 @@
 	acl_delete.c			\
 	acl_delete_entry.c		\
 	acl_entry.c			\
+	acl_flag.c			\
 	acl_flags_nfs4.c		\
 	acl_free.c			\
 	acl_from_text.c			\

==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/Symbol.map#4 (text) ====

@@ -22,24 +22,28 @@
 	acl_get_file;
 	acl_get_link_np;
 	acl_get_extended_np;
-	acl_get_flags_np;
 	acl_get_fd;
 	acl_get_fd_np;
+	acl_get_flag_np;
 	acl_get_perm_np;
+	acl_get_flagset_np;
 	acl_get_permset;
 	acl_get_qualifier;
 	acl_get_tag_type;
 	acl_init;
 	acl_dup;
+	acl_add_flag_np;
 	acl_add_perm;
+	acl_clear_flags_np;
 	acl_clear_perms;
+	acl_delete_flag_np;
 	acl_delete_perm;
 	acl_set_extended_np;
-	acl_set_flags_np;
 	acl_set_file;
 	acl_set_link_np;
 	acl_set_fd;
 	acl_set_fd_np;
+	acl_set_flagset_np;
 	acl_set_permset;
 	acl_set_qualifier;
 	acl_set_tag_type;

==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_from_text_nfs4.c#2 (text+ko) ====

@@ -154,7 +154,7 @@
 		return (error);
 	}
 
-	error = acl_set_flags_np(entry, flags);
+	error = acl_set_flagset_np(entry, &flags);
 
 	return (error);
 }

==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_get.c#4 (text+ko) ====

@@ -243,21 +243,3 @@
 	return (0);
 }
 
-int
-acl_get_flags_np(acl_entry_t entry_d, acl_flag_t *flags_p)
-{
-	if (entry_d == NULL || flags_p == NULL) {
-		errno = EINVAL;
-		return (-1);
-	}
-
-	if (!_entry_is_nfs4(entry_d)) {
-		errno = EINVAL;
-		return (-1);
-	}
-
-	*flags_p = entry_d->ae_flags;
-
-	return (0);
-}
-

==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_set.c#4 (text+ko) ====

@@ -271,25 +271,3 @@
 	return (-1);
 }
 
-int
-acl_set_flags_np(acl_entry_t entry_d, acl_flag_t flags)
-{
-	if (entry_d == NULL) {
-		errno = EINVAL;
-		return (-1);
-	}
-
-	if ((flags & ACL_FLAGS_BITS) != flags) {
-		errno = EINVAL;
-		return (-1);
-	}
-
-	if (!_entry_must_be_nfs4(entry_d)) {
-		errno = EINVAL;
-		return (-1);
-	}
-
-	entry_d->ae_flags = flags;
-	return (0);
-}
-

==== //depot/projects/soc2008/trasz_nfs4acl/lib/libc/posix1e/acl_to_text_nfs4.c#2 (text+ko) ====

@@ -135,18 +135,26 @@
 format_entry_compact(char *str, size_t size, const acl_entry_t entry)
 {
 	size_t off = 0, maximum_who_field_length = 18;
+	acl_permset_t permset;
+	acl_flagset_t flagset;
 
 	assert(_entry_is_nfs4(entry));
 
+	if (acl_get_flagset_np(entry, &flagset))
+		return (0);
+
+	if (acl_get_permset(entry, &permset))
+		return (0);
+
 	off += format_who(str + off, size - off, entry);
 
 	if (off < maximum_who_field_length)
 		off += add_padding(str, size - off, maximum_who_field_length - off);
 
 	off += snprintf(str + off, size - off, ":");
-	off += _nfs4_format_access_mask(str + off, size - off, entry->ae_perm, 0);
+	off += _nfs4_format_access_mask(str + off, size - off, *permset, 0);
 	off += snprintf(str + off, size - off, ":");
-	off += _nfs4_format_flags(str + off, size - off, entry->ae_flags, 0);
+	off += _nfs4_format_flags(str + off, size - off, *flagset, 0);
 	off += snprintf(str + off, size - off, ":");
 	off += format_extended(str + off, size - off, entry);
 

==== //depot/projects/soc2008/trasz_nfs4acl/sys/sys/acl.h#8 (text+ko) ====

@@ -80,6 +80,7 @@
 typedef int	acl_extended_t;
 typedef int	acl_type_t;
 typedef int	*acl_permset_t;
+typedef int	*acl_flagset_t;
 
 struct acl_entry {
 	acl_tag_t	ae_tag;
@@ -297,8 +298,10 @@
  * filesystems (i.e., AFS).
  */
 __BEGIN_DECLS
+int	acl_add_flag_np(acl_flagset_t _flagset_d, acl_flag_t _flag);
 int	acl_add_perm(acl_permset_t _permset_d, acl_perm_t _perm);
 int	acl_calc_mask(acl_t *_acl_p);
+int	acl_clear_flags_np(acl_flagset_t _flagset_d);
 int	acl_clear_perms(acl_permset_t _permset_d);
 int	acl_copy_entry(acl_entry_t _dest_d, acl_entry_t _src_d);
 ssize_t	acl_copy_ext(void *_buf_p, acl_t _acl, ssize_t _size);
@@ -312,6 +315,7 @@
 int	acl_delete_link_np(const char *_path_p, acl_type_t _type);
 int	acl_delete_def_file(const char *_path_p);
 int	acl_delete_def_link_np(const char *_path_p);
+int	acl_delete_flag_np(acl_flagset_t _flagset_d, acl_flag_t _flag);
 int	acl_delete_perm(acl_permset_t _permset_d, acl_perm_t _perm);
 acl_t	acl_dup(acl_t _acl);
 int	acl_free(void *_obj_p);
@@ -320,20 +324,21 @@
 acl_t	acl_get_fd(int _fd);
 acl_t	acl_get_fd_np(int fd, acl_type_t _type);
 acl_t	acl_get_file(const char *_path_p, acl_type_t _type);
-int	acl_get_flags_np(acl_entry_t _entry_d, acl_flag_t *_flags_p);
 int	acl_get_extended_np(acl_entry_t _entry_d, acl_extended_t *_extended_p);
 acl_t	acl_get_link_np(const char *_path_p, acl_type_t _type);
 void	*acl_get_qualifier(acl_entry_t _entry_d);
+int	acl_get_flag_np(acl_flagset_t _flagset_d, acl_flag_t _flag);
 int	acl_get_perm_np(acl_permset_t _permset_d, acl_perm_t _perm);
+int	acl_get_flagset_np(acl_entry_t _entry_d, acl_flagset_t *_flagset_p);
 int	acl_get_permset(acl_entry_t _entry_d, acl_permset_t *_permset_p);
 int	acl_get_tag_type(acl_entry_t _entry_d, acl_tag_t *_tag_type_p);
 acl_t	acl_init(int _count);
 int	acl_set_fd(int _fd, acl_t _acl);
 int	acl_set_fd_np(int _fd, acl_t _acl, acl_type_t _type);
 int	acl_set_file(const char *_path_p, acl_type_t _type, acl_t _acl);
-int	acl_set_flags_np(acl_entry_t _entry_d, acl_flag_t _flags);
 int	acl_set_extended_np(acl_entry_t _entry_d, acl_extended_t _extended);
 int	acl_set_link_np(const char *_path_p, acl_type_t _type, acl_t _acl);
+int	acl_set_flagset_np(acl_entry_t _entry_d, acl_flagset_t _flagset_d);
 int	acl_set_permset(acl_entry_t _entry_d, acl_permset_t _permset_d);
 int	acl_set_qualifier(acl_entry_t _entry_d, const void *_tag_qualifier_p);
 int	acl_set_tag_type(acl_entry_t _entry_d, acl_tag_t _tag_type);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807051654.m65Gs49U048694>