diff -urN fam-oss-2.6.4/config.h.in fam-oss-2.6.4-freebsd/config.h.in --- fam-oss-2.6.4/config.h.in Sat May 20 05:50:17 2000 +++ fam-oss-2.6.4-freebsd/config.h.in Sun Mar 18 00:02:38 2001 @@ -12,6 +12,8 @@ /* Define if the system has imon and IMONIOC_ ioctl flags. */ #undef HAVE_IMON +#undef HAVE_MNTENT_H + /* Define if the system has the struct revokdi and the IMONIOC_REVOKDI ** ioctl flag. (IRIX 5.3 doesn't.) */ diff -urN fam-oss-2.6.4/configure.in fam-oss-2.6.4-freebsd/configure.in --- fam-oss-2.6.4/configure.in Sat May 20 06:23:17 2000 +++ fam-oss-2.6.4-freebsd/configure.in Sun Mar 18 00:36:29 2001 @@ -95,6 +95,8 @@ dnl AC_HEADER_SYS_WAIT dnl AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h syslog.h unistd.h) +AC_CHECK_HEADER(mntent.h, AC_DEFINE(HAVE_MNTENT_H)) + dnl dnl See if imon is available; if so, is it IRIX or Linux? dnl @@ -299,10 +301,10 @@ dnl If we don't have MNTTYPE_NFS , we croak. dnl -FAM_DECL_IN_MNTENT(MNTTYPE_NFS, ,AC_MSG_ERROR(Didn't find MNTTYPE_NFS in mntent.h)) -FAM_DECL_IN_MNTENT(MNTTYPE_NFS2, AC_DEFINE(HAVE_MNTTYPE_NFS2)) -FAM_DECL_IN_MNTENT(MNTTYPE_NFS3, AC_DEFINE(HAVE_MNTTYPE_NFS3)) -FAM_DECL_IN_MNTENT(MNTTYPE_CACHEFS, AC_DEFINE(HAVE_MNTTYPE_CACHEFS)) +dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS, ,AC_MSG_ERROR(Didn't find MNTTYPE_NFS in mntent.h)) +dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS2, AC_DEFINE(HAVE_MNTTYPE_NFS2)) +dnl FAM_DECL_IN_MNTENT(MNTTYPE_NFS3, AC_DEFINE(HAVE_MNTTYPE_NFS3)) +dnl FAM_DECL_IN_MNTENT(MNTTYPE_CACHEFS, AC_DEFINE(HAVE_MNTTYPE_CACHEFS)) dnl dnl Test for bindresvport() prototype. diff -urN fam-oss-2.6.4/fam/Client.h fam-oss-2.6.4-freebsd/fam/Client.h --- fam-oss-2.6.4/fam/Client.h Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/Client.h Sat Mar 17 00:14:35 2001 @@ -23,6 +23,7 @@ #ifndef Client_included #define Client_included +#include #include // for in_addr #include "Activity.h" diff -urN fam-oss-2.6.4/fam/FileSystem.c++ fam-oss-2.6.4-freebsd/fam/FileSystem.c++ --- fam-oss-2.6.4/fam/FileSystem.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/FileSystem.c++ Sat Mar 17 13:18:10 2001 @@ -22,7 +22,7 @@ #include "FileSystem.h" -#include +#include "mntent.h" #include #include "Event.h" diff -urN fam-oss-2.6.4/fam/FileSystemTable.c++ fam-oss-2.6.4-freebsd/fam/FileSystemTable.c++ --- fam-oss-2.6.4/fam/FileSystemTable.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/FileSystemTable.c++ Sat Mar 17 23:44:17 2001 @@ -21,9 +21,10 @@ // Temple Place - Suite 330, Boston MA 02111-1307, USA. #include +#include #include "FileSystemTable.h" -#include +#include "mntent.h" #include #include @@ -255,7 +256,10 @@ // create_fs_by_name initializes our "root" member variable. if (!fs_by_name) { create_fs_by_name(); +#if !defined(__FreeBSD__) + /* there is no mtab "file" in freebsd! */ mtab_watcher = new InternalClient(mtab_name, mtab_event_handler, NULL); +#endif } cr.become_user(); diff -urN fam-oss-2.6.4/fam/IMon.c++ fam-oss-2.6.4-freebsd/fam/IMon.c++ --- fam-oss-2.6.4/fam/IMon.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/IMon.c++ Sat Mar 17 14:06:17 2001 @@ -34,7 +34,9 @@ #endif #endif -#include +#if !defined(__FreeBSD__) +# include +#endif #include #include "Interest.h" diff -urN fam-oss-2.6.4/fam/Interest.c++ fam-oss-2.6.4-freebsd/fam/Interest.c++ --- fam-oss-2.6.4/fam/Interest.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/Interest.c++ Sat Mar 17 14:06:37 2001 @@ -25,7 +25,9 @@ #include #include #include -#include +#if !defined(__FreeBSD__) +# include +#endif #ifdef HAVE_IRIX_XTAB_VERIFICATION #include diff -urN fam-oss-2.6.4/fam/InternalClient.c++ fam-oss-2.6.4-freebsd/fam/InternalClient.c++ --- fam-oss-2.6.4/fam/InternalClient.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/InternalClient.c++ Sat Mar 17 23:20:15 2001 @@ -35,8 +35,8 @@ { assert(filename); assert(h); - assert(filename[0] == '/'); Log::debug("%s watching %s", name(), filename); + assert(filename[0] == '/'); interest = new File(filename, this, Request(0), Cred::SuperUser); } diff -urN fam-oss-2.6.4/fam/Listener.c++ fam-oss-2.6.4-freebsd/fam/Listener.c++ --- fam-oss-2.6.4/fam/Listener.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/Listener.c++ Sat Mar 17 14:12:57 2001 @@ -22,6 +22,8 @@ #include "Listener.h" +#include +#include #include #include #include @@ -202,7 +204,11 @@ // requested user and pass the name back to the client. char *tmpfile = tempnam("/tmp", ".fam"); +#if defined(__FreeBSD__) + sockaddr_un sun = { sizeof(sockaddr_un), AF_UNIX, "" }; +#else sockaddr_un sun = { AF_UNIX, "" }; +#endif if(strlen(tmpfile) >= (sizeof(sun.sun_path) - 1)) { Log::error("tmpnam() too long for sun_path (%d >= %d)!", @@ -235,7 +241,7 @@ return; } - if (chown(sun.sun_path, uid, -1) != 0) + if (chown(sun.sun_path, uid, (gid_t)-1) != 0) { Log::perror("localclient chown"); close(client_sock); return; @@ -271,7 +277,11 @@ // Get the new socket. +#if defined(__FreeBSD__) + struct sockaddr_un sun = { sizeof(sockaddr_un), AF_UNIX, "" }; +#else struct sockaddr_un sun = { AF_UNIX, "" }; +#endif CONFIG_SOCKLEN_T sunlen = sizeof(sun); int client_fd = accept(ofd, (struct sockaddr *) &sun, &sunlen); if (client_fd < 0) @@ -333,7 +343,11 @@ void Listener::dirty_ugly_hack() { +#if defined(__FreeBSD__) + static sockaddr_un sun = { sizeof (sockaddr_un), AF_UNIX, "/tmp/.fam_socket" }; +#else static sockaddr_un sun = { AF_UNIX, "/tmp/.fam_socket" }; +#endif int sock = socket(PF_UNIX, SOCK_STREAM, 0); if (sock < 0) diff -urN fam-oss-2.6.4/fam/Log.c++ fam-oss-2.6.4-freebsd/fam/Log.c++ --- fam-oss-2.6.4/fam/Log.c++ Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/Log.c++ Sat Mar 17 14:14:31 2001 @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include #include #include diff -urN fam-oss-2.6.4/fam/Makefile.am fam-oss-2.6.4-freebsd/fam/Makefile.am --- fam-oss-2.6.4/fam/Makefile.am Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/fam/Makefile.am Sat Mar 17 18:12:17 2001 @@ -72,6 +72,7 @@ main.c++ \ timeval.c++ \ timeval.h \ + mntent_compat.c++ \ @IMON_FUNCS@.c++ EXTRA_fam_SOURCES = IMonIrix.c++ IMonLinux.c++ IMonNone.c++ diff -urN fam-oss-2.6.4/fam/Scheduler.h fam-oss-2.6.4-freebsd/fam/Scheduler.h --- fam-oss-2.6.4/fam/Scheduler.h Sat May 20 05:46:32 2000 +++ fam-oss-2.6.4-freebsd/fam/Scheduler.h Sat Mar 17 00:14:04 2001 @@ -24,6 +24,7 @@ #define Scheduler_included #include +#include #include "Boolean.h" diff -urN fam-oss-2.6.4/fam/StringTable.h fam-oss-2.6.4-freebsd/fam/StringTable.h --- fam-oss-2.6.4/fam/StringTable.h Sat May 20 05:46:32 2000 +++ fam-oss-2.6.4-freebsd/fam/StringTable.h Sat Mar 17 18:05:38 2001 @@ -25,6 +25,7 @@ #include #include +#include "mntent.h" // A StringTable maps C strings onto values. It is a cheap O(n) // implementation, suitable only for small tables that are diff -urN fam-oss-2.6.4/fam/mntent.h fam-oss-2.6.4-freebsd/fam/mntent.h --- fam-oss-2.6.4/fam/mntent.h Thu Jan 1 01:00:00 1970 +++ fam-oss-2.6.4-freebsd/fam/mntent.h Sat Mar 17 18:11:08 2001 @@ -0,0 +1,56 @@ +/* + * mntent + * mntent.h - compatability header for FreeBSD + * + * Copyright (c) 2001 David Rufino + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(HAVE_MNTENT_H) +#include +#else +#ifndef _MNTENT_H +#define _MNTENT_H +#include + +#define MOUNTED "dummy" + +#define MNTTYPE_NFS "nfs" + +struct mntent { + char *mnt_fsname; + char *mnt_dir; + char *mnt_type; + char *mnt_opts; + int mnt_freq; + int mnt_passno; +}; + +#define setmntent(x,y) ((FILE *)0x1) +struct mntent *getmntent __P ((FILE *fp)); +char *hasmntopt __P ((const struct mntent *mnt, const char *option)); +#define endmntent(x) ((int)1) + +#endif /* _MNTENT_H */ +#endif /* HAVE_MNTENT_H */ diff -urN fam-oss-2.6.4/fam/mntent_compat.c++ fam-oss-2.6.4-freebsd/fam/mntent_compat.c++ --- fam-oss-2.6.4/fam/mntent_compat.c++ Thu Jan 1 01:00:00 1970 +++ fam-oss-2.6.4-freebsd/fam/mntent_compat.c++ Sat Mar 17 23:48:07 2001 @@ -0,0 +1,151 @@ +/* + * Copyright (c) 1980, 1989, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 2001 + * David Rufino + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* most of this was ripped from the mount(3) source */ + +#include "config.h" +#include "mntent.h" +#if !defined(HAVE_MNTENT_H) +#include +#include +#include +#include +#include + +static int pos = -1; +static int mntsize = -1; +static struct mntent _mntent; + +char * +hasmntopt (const struct mntent *mnt, const char *option) +{ + int found; + char *opt, *optbuf; + + optbuf = strdup(mnt->mnt_opts); + found = 0; + for (opt = optbuf; (opt = strtok(opt, " ")) != NULL; opt = NULL) { + if (!strcasecmp(opt, option)) { + opt = opt - optbuf + mnt->mnt_opts; + free (optbuf); + return (opt); + } + } + free (optbuf); + return (NULL); +} + +static char * +catopt (char *s0, const char *s1) +{ + size_t i; + char *cp; + + if (s1 == NULL || *s1 == '\0') + return s0; + if (s0 && *s0) { + i = strlen(s0) + strlen(s1) + 1 + 1; + if ((cp = (char *)malloc(i)) == NULL) + return (NULL); + (void)snprintf(cp, i, "%s %s", s0, s1); + } else + cp = strdup(s1); + + if (s0) + free(s0); + return (cp); +} + + +static char * +flags2opts (int flags) +{ + char *res; + res = NULL; + res = catopt(res, (flags & MNT_RDONLY) ? "ro" : "rw"); + if (flags & MNT_SYNCHRONOUS) res = catopt(res, "sync"); + if (flags & MNT_NOEXEC) res = catopt(res, "noexec"); + if (flags & MNT_NOSUID) res = catopt(res, "nosuid"); + if (flags & MNT_NODEV) res = catopt(res, "nodev"); + if (flags & MNT_UNION) res = catopt(res, "union"); + if (flags & MNT_ASYNC) res = catopt(res, "async"); + if (flags & MNT_NOATIME) res = catopt(res, "noatime"); + if (flags & MNT_NOCLUSTERR) res = catopt(res, "noclusterr"); + if (flags & MNT_NOCLUSTERW) res = catopt(res, "noclusterw"); + if (flags & MNT_NOSYMFOLLOW) res = catopt(res, "nosymfollow"); + if (flags & MNT_SUIDDIR) res = catopt(res, "suiddir"); + + return res; +} + +static struct mntent * +statfs_to_mntent (struct statfs *mntbuf) +{ + static char opts_buf[40], *tmp; + + _mntent.mnt_fsname = mntbuf->f_mntfromname; + _mntent.mnt_dir = mntbuf->f_mntonname; + _mntent.mnt_type = mntbuf->f_fstypename; + tmp = flags2opts (mntbuf->f_flags); + if (tmp) { + opts_buf[sizeof(opts_buf)-1] = '\0'; + strncpy (opts_buf, tmp, sizeof(opts_buf)-1); + free (tmp); + } else { + *opts_buf = '\0'; + } + _mntent.mnt_opts = opts_buf; + _mntent.mnt_freq = _mntent.mnt_passno = 0; + return (&_mntent); +} + +struct mntent * +getmntent (FILE *fp) +{ + struct statfs *mntbuf; + + if (pos == -1 || mntsize == -1) + mntsize = getmntinfo (&mntbuf, MNT_NOWAIT); + + ++pos; + if (pos == mntsize) { + pos = mntsize = -1; + return (NULL); + } + + return (statfs_to_mntent (&mntbuf[pos])); +} + +#endif /* HAVE_MNTENT_H */ diff -urN fam-oss-2.6.4/libfam/Client.c++ fam-oss-2.6.4-freebsd/libfam/Client.c++ --- fam-oss-2.6.4/libfam/Client.c++ Sat May 20 05:46:32 2000 +++ fam-oss-2.6.4-freebsd/libfam/Client.c++ Sat Mar 17 00:12:01 2001 @@ -20,6 +20,7 @@ // with this program; if not, write the Free Software Foundation, Inc., 59 // Temple Place - Suite 330, Boston MA 02111-1307, USA. +#include #include #include #include diff -urN fam-oss-2.6.4/libfam/fam.c++ fam-oss-2.6.4-freebsd/libfam/fam.c++ --- fam-oss-2.6.4/libfam/fam.c++ Sat May 20 05:46:32 2000 +++ fam-oss-2.6.4-freebsd/libfam/fam.c++ Sat Mar 17 00:12:43 2001 @@ -21,6 +21,7 @@ // Temple Place - Suite 330, Boston MA 02111-1307, USA. #include +#include #include #include #include diff -urN fam-oss-2.6.4/test/test.c++ fam-oss-2.6.4-freebsd/test/test.c++ --- fam-oss-2.6.4/test/test.c++ Sat May 20 05:46:32 2000 +++ fam-oss-2.6.4-freebsd/test/test.c++ Sat Mar 17 18:39:23 2001 @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include --- fam-oss-2.6.4/acconfig.h Sat May 20 05:46:31 2000 +++ fam-oss-2.6.4-freebsd/acconfig.h Sun Mar 18 00:40:47 2001 @@ -44,6 +44,8 @@ ** Otherwise, we'll use MNTTYPE_NFS. */ #undef HAVE_FSID_NFS2 +#undef HAVE_MNTENT_H + /* Define if we have MNTTYPE_NFS2 */ #define HAVE_MNTTYPE_NFS2 0