diff options
-rw-r--r-- | source3/configure.in | 16 | ||||
-rw-r--r-- | source3/modules/vfs_notify_fam.c | 15 |
2 files changed, 26 insertions, 5 deletions
diff --git a/source3/configure.in b/source3/configure.in index 26ec10ba5c..9a190cc872 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2644,18 +2644,19 @@ if test x$enable_fam != xno; then # On IRIX, libfam requires libC, but other FAM implementations # might not need it. AC_CHECK_LIB(fam, FAMOpen2, - [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"], - [samba_cv_HAVE_LIBFAM=no]) + [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"; + AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)], + [samba_cv_HAVE_LIBFAM=no]) if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then samba_fam_xtra=-lC AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2, - [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"], - [samba_cv_HAVE_LIBFAM=no]) + [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"; + AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)], + [samba_cv_HAVE_LIBFAM=no]) unset samba_fam_xtra fi fi - if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then default_shared_modules="$default_shared_modules vfs_notify_fam" AC_TRY_COMPILE([#include <fam.h>], @@ -2665,6 +2666,11 @@ if test x$enable_fam != xno; then []) fi + if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then + AC_CHECK_LIB(fam, FAMNoExists, + [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)]) + fi + if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then AC_MSG_ERROR(FAM support requested but FAM library not available ) fi diff --git a/source3/modules/vfs_notify_fam.c b/source3/modules/vfs_notify_fam.c index 8f00c9207f..652e785e02 100644 --- a/source3/modules/vfs_notify_fam.c +++ b/source3/modules/vfs_notify_fam.c @@ -79,12 +79,27 @@ static NTSTATUS fam_open_connection(FAMConnection *fam_conn, ZERO_STRUCTP(fam_conn); FAMCONNECTION_GETFD(fam_conn) = -1; + +#ifdef HAVE_FAMNOEXISTS + /* We should honor outside setting of the GAM_CLIENT_ID. */ + setenv("GAM_CLIENT_ID","SAMBA",0); +#endif + if (asprintf(&name, "smbd (%lu)", (unsigned long)sys_getpid()) == -1) { DEBUG(0, ("No memory\n")); return NT_STATUS_NO_MEMORY; } res = FAMOpen2(fam_conn, name); + +#ifdef HAVE_FAMNOEXISTS + /* + * This reduces the chatter between GAMIN and samba making the pair + * much more reliable. + */ + FAMNoExists(fam_conn); +#endif + SAFE_FREE(name); if (res < 0) { |