diff options
| author | Paul Eggert | 2015-07-14 22:29:16 -0700 |
|---|---|---|
| committer | Paul Eggert | 2015-07-14 22:30:01 -0700 |
| commit | c40ea1328bb33abaec14f1fc92ac2349b5ee2715 (patch) | |
| tree | 8686d9899315dd1bea97c92078d20a42eb07b0aa | |
| parent | ff0e184ef3af49b19cdfb5ee5bb24212676c800b (diff) | |
| download | emacs-c40ea1328bb33abaec14f1fc92ac2349b5ee2715.tar.gz emacs-c40ea1328bb33abaec14f1fc92ac2349b5ee2715.zip | |
Merge from gnulib
This incorporates:
2015-07-05 acl-permissions: Document FreeBSD ACL_TYPE_NFS4 acls
2015-07-05 acl-permissions: Fix on FreeBSD
2015-07-05 file-has-acl, acl-permissions: fix some more HP-UX typos
* lib/acl-internal.c, lib/acl-internal.h, lib/get-permissions.c:
* lib/set-permissions.c: Copy from gnulib.
| -rw-r--r-- | lib/acl-internal.c | 7 | ||||
| -rw-r--r-- | lib/acl-internal.h | 6 | ||||
| -rw-r--r-- | lib/get-permissions.c | 6 | ||||
| -rw-r--r-- | lib/set-permissions.c | 12 |
4 files changed, 30 insertions, 1 deletions
diff --git a/lib/acl-internal.c b/lib/acl-internal.c index 1a2f8c44bf7..1eaa671bd37 100644 --- a/lib/acl-internal.c +++ b/lib/acl-internal.c | |||
| @@ -115,6 +115,13 @@ acl_access_nontrivial (acl_t acl) | |||
| 115 | # endif | 115 | # endif |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | int | ||
| 119 | acl_default_nontrivial (acl_t acl) | ||
| 120 | { | ||
| 121 | /* acl is non-trivial if it is non-empty. */ | ||
| 122 | return (acl_entries (acl) > 0); | ||
| 123 | } | ||
| 124 | |||
| 118 | # endif | 125 | # endif |
| 119 | 126 | ||
| 120 | #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ | 127 | #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ |
diff --git a/lib/acl-internal.h b/lib/acl-internal.h index 4f042adc96b..38a4ab2eb3a 100644 --- a/lib/acl-internal.h +++ b/lib/acl-internal.h | |||
| @@ -155,6 +155,12 @@ extern int acl_extended_nontrivial (acl_t); | |||
| 155 | Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. | 155 | Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. |
| 156 | Return -1 and set errno upon failure to determine it. */ | 156 | Return -1 and set errno upon failure to determine it. */ |
| 157 | extern int acl_access_nontrivial (acl_t); | 157 | extern int acl_access_nontrivial (acl_t); |
| 158 | |||
| 159 | /* ACL is an ACL, from a file, stored as type ACL_TYPE_DEFAULT. | ||
| 160 | Return 1 if the given ACL is non-trivial. | ||
| 161 | Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. | ||
| 162 | Return -1 and set errno upon failure to determine it. */ | ||
| 163 | extern int acl_default_nontrivial (acl_t); | ||
| 158 | # endif | 164 | # endif |
| 159 | 165 | ||
| 160 | # elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ | 166 | # elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ |
diff --git a/lib/get-permissions.c b/lib/get-permissions.c index 6c6618df989..459513c9251 100644 --- a/lib/get-permissions.c +++ b/lib/get-permissions.c | |||
| @@ -60,6 +60,12 @@ get_permissions (const char *name, int desc, mode_t mode, | |||
| 60 | return -1; | 60 | return -1; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | # if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ | ||
| 64 | |||
| 65 | /* TODO (see set_permissions). */ | ||
| 66 | |||
| 67 | # endif | ||
| 68 | |||
| 63 | # else /* HAVE_ACL_TYPE_EXTENDED */ | 69 | # else /* HAVE_ACL_TYPE_EXTENDED */ |
| 64 | /* Mac OS X */ | 70 | /* Mac OS X */ |
| 65 | 71 | ||
diff --git a/lib/set-permissions.c b/lib/set-permissions.c index 25c463d966d..1aa5b4941c7 100644 --- a/lib/set-permissions.c +++ b/lib/set-permissions.c | |||
| @@ -530,7 +530,8 @@ set_acls (struct permission_context *ctx, const char *name, int desc, | |||
| 530 | *acls_set = true; | 530 | *acls_set = true; |
| 531 | if (S_ISDIR(ctx->mode)) | 531 | if (S_ISDIR(ctx->mode)) |
| 532 | { | 532 | { |
| 533 | if (! from_mode && ctx->default_acl) | 533 | if (! from_mode && ctx->default_acl && |
| 534 | acl_default_nontrivial (ctx->default_acl)) | ||
| 534 | ret = acl_set_file (name, ACL_TYPE_DEFAULT, | 535 | ret = acl_set_file (name, ACL_TYPE_DEFAULT, |
| 535 | ctx->default_acl); | 536 | ctx->default_acl); |
| 536 | else | 537 | else |
| @@ -540,6 +541,15 @@ set_acls (struct permission_context *ctx, const char *name, int desc, | |||
| 540 | } | 541 | } |
| 541 | } | 542 | } |
| 542 | 543 | ||
| 544 | # if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ | ||
| 545 | |||
| 546 | /* File systems either support POSIX ACLs (for example, ufs) or NFS4 ACLs | ||
| 547 | (for example, zfs). */ | ||
| 548 | |||
| 549 | /* TODO: Implement setting ACLs once get_permissions() reads them. */ | ||
| 550 | |||
| 551 | # endif | ||
| 552 | |||
| 543 | # else /* HAVE_ACL_TYPE_EXTENDED */ | 553 | # else /* HAVE_ACL_TYPE_EXTENDED */ |
| 544 | /* Mac OS X */ | 554 | /* Mac OS X */ |
| 545 | 555 | ||