diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-02-05 22:51:33 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-02-05 22:51:33 +0100 |
commit | 8d462f966657d7bdedc470a10e20b1b635d64576 (patch) | |
tree | d0e85f85949acc2478c29e32e7d97dc4659a8a63 /src | |
parent | a8c8a688ac66958f9d1d8763925cefe739e46ccc (diff) | |
download | vim-git-8d462f966657d7bdedc470a10e20b1b635d64576.tar.gz |
updated for version 7.3.432v7.3.432
Problem: ACLs are not supported for ZFS or NFSv4 on Solaris.
Solution: Add configure check and code. (Danek Duvall)
Diffstat (limited to 'src')
-rwxr-xr-x | src/auto/configure | 44 | ||||
-rw-r--r-- | src/config.h.in | 1 | ||||
-rw-r--r-- | src/configure.in | 4 | ||||
-rw-r--r-- | src/os_unix.c | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 65 insertions, 2 deletions
diff --git a/src/auto/configure b/src/auto/configure index a22706ddd..3321f4913 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -11328,7 +11328,47 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5 +$as_echo_n "checking for acl_get in -lsec... " >&6; } +if test "${ac_cv_lib_sec_acl_get+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsec $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acl_get (); +int +main () +{ +return acl_get (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_sec_acl_get=yes +else + ac_cv_lib_sec_acl_get=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5 +$as_echo "$ac_cv_lib_sec_acl_get" >&6; } +if test "x$ac_cv_lib_sec_acl_get" = x""yes; then : + LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5 $as_echo_n "checking for Solaris ACL support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11355,6 +11395,8 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5 $as_echo_n "checking for AIX ACL support... " >&6; } diff --git a/src/config.h.in b/src/config.h.in index db07f863c..d1adb3a3a 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -363,6 +363,7 @@ /* Define if you want to add support for ACL */ #undef HAVE_POSIX_ACL +#undef HAVE_SOLARIS_ZFS_ACL #undef HAVE_SOLARIS_ACL #undef HAVE_AIX_ACL diff --git a/src/configure.in b/src/configure.in index 55c897aa5..2ede332ad 100644 --- a/src/configure.in +++ b/src/configure.in @@ -3106,6 +3106,7 @@ AC_TRY_LINK([ dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI dnl when -lacl works, also try to use -lattr (required for Debian). +dnl On Solaris, use the acl_get/set functions in libsec, if present. AC_MSG_CHECKING(--disable-acl argument) AC_ARG_ENABLE(acl, [ --disable-acl Don't check for ACL support.], @@ -3128,6 +3129,7 @@ acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS); AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL), AC_MSG_RESULT(no)) +AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)], AC_MSG_CHECKING(for Solaris ACL support) AC_TRY_LINK([ #ifdef HAVE_SYS_ACL_H @@ -3135,7 +3137,7 @@ AC_TRY_LINK([ #endif], [acl("foo", GETACLCNT, 0, NULL); ], AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL), - AC_MSG_RESULT(no)) + AC_MSG_RESULT(no))) AC_MSG_CHECKING(for AIX ACL support) AC_TRY_LINK([ diff --git a/src/os_unix.c b/src/os_unix.c index 30593ef47..043d0a800 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -2746,6 +2746,13 @@ mch_get_acl(fname) #ifdef HAVE_POSIX_ACL ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS); #else +#ifdef HAVE_SOLARIS_ZFS_ACL + acl_t *aclent; + + if (acl_get((char *)fname, 0, &aclent) < 0) + return NULL; + ret = (vim_acl_T)aclent; +#else #ifdef HAVE_SOLARIS_ACL vim_acl_solaris_T *aclent; @@ -2791,6 +2798,7 @@ mch_get_acl(fname) ret = (vim_acl_T)aclent; #endif /* HAVE_AIX_ACL */ #endif /* HAVE_SOLARIS_ACL */ +#endif /* HAVE_SOLARIS_ZFS_ACL */ #endif /* HAVE_POSIX_ACL */ return ret; } @@ -2808,6 +2816,9 @@ mch_set_acl(fname, aclent) #ifdef HAVE_POSIX_ACL acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent); #else +#ifdef HAVE_SOLARIS_ZFS_ACL + acl_set((char *)fname, (acl_t *)aclent); +#else #ifdef HAVE_SOLARIS_ACL acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt, ((vim_acl_solaris_T *)aclent)->acl_entry); @@ -2816,6 +2827,7 @@ mch_set_acl(fname, aclent) chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len); #endif /* HAVE_AIX_ACL */ #endif /* HAVE_SOLARIS_ACL */ +#endif /* HAVE_SOLARIS_ZFS_ACL */ #endif /* HAVE_POSIX_ACL */ } @@ -2828,6 +2840,9 @@ mch_free_acl(aclent) #ifdef HAVE_POSIX_ACL acl_free((acl_t)aclent); #else +#ifdef HAVE_SOLARIS_ZFS_ACL + acl_free((acl_t *)aclent); +#else #ifdef HAVE_SOLARIS_ACL free(((vim_acl_solaris_T *)aclent)->acl_entry); free(aclent); @@ -2836,6 +2851,7 @@ mch_free_acl(aclent) free(aclent); #endif /* HAVE_AIX_ACL */ #endif /* HAVE_SOLARIS_ACL */ +#endif /* HAVE_SOLARIS_ZFS_ACL */ #endif /* HAVE_POSIX_ACL */ } #endif diff --git a/src/version.c b/src/version.c index 89720f950..c1c568d0a 100644 --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 432, +/**/ 431, /**/ 430, |