diff options
author | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-01-10 05:22:13 +0000 |
---|---|---|
committer | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-01-10 05:22:13 +0000 |
commit | 610ae5681637c1051a0c17b54e29d97f53da2f3a (patch) | |
tree | c231a1eb74b07e444fa7363012cb84bf23d83ce0 /sysutils/hal | |
parent | Add a new framework for browser plugins, USE_WEBPLUGINS. It is for which foo (diff) |
Presenting GNOME 2.24 for FreeBSD.
See http://library.gnome.org/misc/release-notes/2.24/ for the general
release notes. On the FreeBSD front, this release introduces Fuse support
in HAL, adds multi-CPU support to libgtop, WebKit updates, and fixes some
long-standing seahorse and gnome-keyring bugs. The documentation updates
to the website are forthcoming.
This release features commits by adamw, ahze, kwm, mezz, and myself. It would
not have been possible without are contributors and testers:
Alexander Loginov
Craig Butler [1]
Dmitry Marakasov [6]
Eric L. Chen
Joseph S. Atkinson
Kris Moore
Lapo Luchini [7]
Nikos Ntarmos
Pawel Worach
Romain Tartiere
TAOKA Fumiyoshi [3]
Yasuda Keisuke
Zyl
aZ [4]
bf [2] [5]
Florent Thoumie
Peter Wemm
pluknet
PR: 125857 [1]
126993 [2]
130031 [3]
127399 [4]
127661 [5]
124302 [6]
129570 [7]
129936
123790
Diffstat (limited to 'sysutils/hal')
-rw-r--r-- | sysutils/hal/Makefile | 14 | ||||
-rw-r--r-- | sysutils/hal/files/README.fuse | 31 | ||||
-rw-r--r-- | sysutils/hal/files/hald.in | 1 | ||||
-rw-r--r-- | sysutils/hal/files/mount-fuse | 129 | ||||
-rw-r--r-- | sysutils/hal/files/patch-consolekit03 | 87 | ||||
-rw-r--r-- | sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in | 13 | ||||
-rw-r--r-- | sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c | 182 | ||||
-rw-r--r-- | sysutils/hal/files/patch-hald_freebsd_hf-volume.c | 102 | ||||
-rw-r--r-- | sysutils/hal/files/patch-tools_hal-storage-eject.c | 11 | ||||
-rw-r--r-- | sysutils/hal/files/patch-tools_hal-storage-mount.c | 86 | ||||
-rw-r--r-- | sysutils/hal/files/patch-tools_hal-storage-shared.c | 45 | ||||
-rw-r--r-- | sysutils/hal/pkg-plist | 2 |
12 files changed, 659 insertions, 44 deletions
diff --git a/sysutils/hal/Makefile b/sysutils/hal/Makefile index bccb417b1c3d..07168189bcca 100644 --- a/sysutils/hal/Makefile +++ b/sysutils/hal/Makefile @@ -3,12 +3,12 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/hal/Makefile,v 1.43 2008/03/22 19:31:15 marcus Exp $ +# $MCom: ports/sysutils/hal/Makefile,v 1.54 2008/12/21 06:20:19 marcus Exp $ # PORTNAME= hal DISTVERSION= 0.5.11 -PORTREVISION= 1 +PORTREVISION= 10 CATEGORIES= sysutils MASTER_SITES= http://hal.freedesktop.org/releases/ @@ -22,7 +22,7 @@ RUN_DEPENDS= ${LOCALBASE}/share/pciids/pci.ids:${PORTSDIR}/misc/pciids USE_GETTEXT= yes USE_GMAKE= yes -USE_GNOME= gnomehack gnometarget intlhack ltverhack +USE_GNOME= gnomehack intlhack ltverhack USE_AUTOTOOLS= libtool:15 USE_LDCONFIG= yes USE_PYTHON= yes @@ -43,7 +43,7 @@ CONFIGURE_ARGS= --disable-gtk-doc \ --with-pid-file=/var/run/hald/hald.pid \ --with-deprecated-keys \ --localstatedir=/var -CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -DHAVE_CK_0_3" \ LDFLAGS="-L${LOCALBASE}/lib" \ GTKDOC="false" @@ -94,6 +94,8 @@ post-patch: ${WRKSRC}/hald/Makefile.in @${REINPLACE_CMD} -e 's|user="0"|group="operator"|g' \ ${WRKSRC}/hal.conf.in + @${SED} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \ + < ${FILESDIR}/README.fuse > ${WRKDIR}/README.fuse post-install: ${MKDIR} ${DATADIR}/dist @@ -101,6 +103,8 @@ post-install: ${MKDIR} ${PREFIX}/share/hal/fdi/policy/10osvendor ${INSTALL_DATA} ${FILESDIR}/10-mouse-sysmouse.fdi \ ${PREFIX}/share/hal/fdi/policy/10osvendor + ${INSTALL_SCRIPT} ${FILESDIR}/mount-fuse \ + ${PREFIX}/share/hal/mount-fuse .if !defined(PACKAGE_BUILDING) @${SETENV} PKG_PREFIX=${PREFIX} \ ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL @@ -112,6 +116,8 @@ post-install: ${MKDIR} ${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/hald/freebsd/README \ ${DOCSDIR}/README.freebsd + ${INSTALL_DATA} ${WRKDIR}/README.fuse \ + ${DOCSDIR}/README.fuse .endif .include <bsd.port.post.mk> diff --git a/sysutils/hal/files/README.fuse b/sysutils/hal/files/README.fuse new file mode 100644 index 000000000000..75adcab7d589 --- /dev/null +++ b/sysutils/hal/files/README.fuse @@ -0,0 +1,31 @@ +Mounting Fuse File Systems with HAL +----------------------------------- + +$FreeBSD$ + +Hal supports mounting Fuse device-backed file systems (e.g. NTFS). To enable +this feature, copy the included %%LOCALBASE%%/share/hal/mount-fuse script +to /sbin. Make sure this script is executable. Edit the script, and change +the FUSE_HELPER environment variable to the name of the executable which +will actually mount the Fuse volume (e.g. for NTFS, this is ``ntfs-3g''). + +Finally, the script must be renamed to ``mount_FSNAME''. FSNAME is the name +of the file system type (e.g. for NTFS, this is ``ntfs''). If there is +already an executable in /sbin or /usr/sbin with this name, the +existing executable must be renamed or deleted. + +As is stated in the examples above, overriding FreeBSD's existing NTFS +support with Fuse's ntfs-3g is the most common use case for this. The +ntfs-3g Fuse driver uses different mount options than FreeBSD's included +mount_ntfs. GNOME transparently supports switching between ntfs and +ntfs-3g. Simply edit the following GConf key in the GNOME +Configuration Editor (i.e. gconf-editor): + +/system/storage/default_options/ntfs/fstype_override + +Set the value to ``ntfs-3g'', then add your desired ntfs-3g options to the +following GConf key: + +/system/storage/default_options/ntfs-3g/mount_options + +Other desktop systems may have similar options. diff --git a/sysutils/hal/files/hald.in b/sysutils/hal/files/hald.in index 7f8f2c659c86..04e784e6ce6f 100644 --- a/sysutils/hal/files/hald.in +++ b/sysutils/hal/files/hald.in @@ -1,6 +1,7 @@ #!/bin/sh # # $FreeBSD$ +# $MCom: ports/sysutils/hal/files/hald.in,v 1.14 2008/08/21 16:04:48 mezz Exp $ # # PROVIDE: hald # REQUIRE: DAEMON usbd devd dbus diff --git a/sysutils/hal/files/mount-fuse b/sysutils/hal/files/mount-fuse new file mode 100644 index 000000000000..ae906a8140d3 --- /dev/null +++ b/sysutils/hal/files/mount-fuse @@ -0,0 +1,129 @@ +#!/bin/sh +# Wrapper script for FreeBSD and PC-BSD, which takes calls from HAL +# for running mount_ntfs, and performs it with a given FUSE helper. +################################################################### + +## Modify this next variable to point to the correct FUSE helper. +FUSE_HELPER="ntfs-3g" +## DO NOT modify anything below this. + +FUSEDB="/tmp" +if [ -n "${TMPDIR}" ] +then + FUSEDB=${TMPDIR} +fi + +FUSEDB="${FUSEDB}/.fuse-mnts" +MNTSTRING="" +OPTIONS="" +FOUNDOPT="0" +FOUNDU="0" +HWDEV="" +FOUNDDEV="0" + +for i in $@ +do + if [ "$FOUNDOPT" = "1" ] + then + OPTIONS="${OPTIONS} -o ${i}" + elif [ "${FOUNDU}" = "1" ] + then + OPTIONS="${OPTIONS} -o uid=${i}" + else + + if [ "${FOUNDDEV}" = "1" ] + then + # Save the mount-point, will be used later + MNTPOINT="${i}" + FOUNDDEV="2" + fi + + echo ${i}| grep -q "/dev" 2>/dev/null + if [ "$?" = "0" -a "${FOUNDDEV}" = "0" ] + then + FOUNDDEV="1" + # Lets check if we were given a fuse[] device + # or a real device name + echo "${i}" | grep -q "fuse" 2>/dev/null + if [ "$?" = "0" ] + then + # Lets save the old fuse device name we had saved + OLDFUSE="${i}" + + # Lets get the *real* device name for FUSE helper + REALHWDEV="`cat ${FUSEDB} | grep ${i} | cut -d '=' -f 2`" + + # Now lets change the string we will be saving + i="${REALHWDEV}" + else + # We are doing a first time mount of this device + + # Set the real device name for mounting + REALHWDEV="${i}" + fi + fi + + # Add the value to our mount string + if [ "${i}" != "-o" -a "${i}" != "-u" ] + then + MNTSTRING="${MNTSTRING} ${i}" + fi + + fi + + # Check if we are on a -u flag now + if [ "${i}" = "-u" ] + then + FOUNDU="1" + else + FOUNDU="0" + fi + + # Check if we are on a -o option + if [ "${i}" = "-o" ] + then + FOUNDOPT="1" + else + FOUNDOPT="0" + fi +done + +# Save our final string which our FUSE helper will use +FINALSTRING="${MNTSTRING} ${OPTIONS}" + + +# Check that fuse.ko is loaded +kldstat | grep -q fuse 2>/dev/null +if [ "$?" != "0" ] +then + kldload /usr/local/modules/fuse.ko +fi + +# Run the FUSE helper command now, with the options in the right order +${FUSE_HELPER} ${FINALSTRING} + +# If we have an OLDFUSE variable, lets clear it from the list +if [ ! -z "${OLDFUSE}" -a -e ${FUSEDB} ] +then + cat ${FUSEDB} | grep -v "${OLDFUSE}=" > /tmp/.newfuse + mv /tmp/.newfuse ${FUSEDB} +fi + +# Now lets figure out which fuse device was used and save it to DB +NEWFUSE="`mount | tr -s ' ' | grep \" ${MNTPOINT} \" | cut -d ' ' -f 1`" + +# Make sure we don't already have this fuse device listed +if [ -e ${FUSEDB} ] +then + cat ${FUSEDB} | grep -v "${NEWFUSE}=" > /tmp/.newfuse + mv /tmp/.newfuse ${FUSEDB} +else + touch ${FUSEDB} +fi + +# Save the fuse device to our DB +echo "${NEWFUSE}=${REALHWDEV}" >> ${FUSEDB} + + +# Finished! +exit 0 diff --git a/sysutils/hal/files/patch-consolekit03 b/sysutils/hal/files/patch-consolekit03 new file mode 100644 index 000000000000..a948b189b18e --- /dev/null +++ b/sysutils/hal/files/patch-consolekit03 @@ -0,0 +1,87 @@ +diff -p -up hal-0.5.11/configure.in.ck03 hal-0.5.11/configure.in +--- hal-0.5.11/configure.in.ck03 2008-05-07 19:24:31.000000000 -0400 ++++ configure.in 2008-08-11 06:18:07.000000000 -0400 +@@ -485,6 +485,20 @@ if test "x$enable_console_kit" != "xno"; + AM_CONDITIONAL(HAVE_CONKIT, true) + AC_DEFINE(HAVE_CONKIT, [], [Set if we use ConsoleKit]) + msg_conkit=yes ++ # yes this is ugly, but there is no other way to get the version of CK ++ AC_MSG_CHECKING([if ConsoleKit version 0.3.0 or newer]) ++ if $PKG_CONFIG --atleast-version=0.3.0 ck-connector; then ++ AC_MSG_RESULT([yes]) ++ AC_DEFINE(HAVE_CK_0_3, 1, [Define to 1 if ConsoleKit is v0.3.0 or newer]) ++ else ++ if $PKG_CONFIG --max-version=0.2.10 ck-connector; then ++ AC_MSG_RESULT([no]) ++ else ++ #assume we have the latest version ++ AC_MSG_WARN([Couldn't detect ConsoleKit version, install the devel package, assume for now you use >= 0.3.0]) ++ AC_DEFINE(HAVE_CK_0_3, 1, [Define to 1 if ConsoleKit is v0.3.0 or newer]) ++ fi ++ fi + fi + + AC_PATH_PROG(GPERF, [gperf], [no]) +diff -p -up hal-0.5.11/hald/ck-tracker.c.ck03 hal-0.5.11/hald/ck-tracker.c +--- hal-0.5.11/hald/ck-tracker.c.ck03 2008-05-07 19:23:48.000000000 -0400 ++++ hald/ck-tracker.c 2008-08-12 12:34:47.000000000 -0400 +@@ -256,7 +256,11 @@ ck_session_get_info (CKTracker *tracker, + goto error; + } + if (!dbus_message_get_args (reply, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_UINT32, &(session->user), ++#else + DBUS_TYPE_INT32, &(session->user), ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid GetUnixUser reply from CK")); + goto error; +@@ -531,7 +535,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &seat_objpath, ++#else + DBUS_TYPE_STRING, &seat_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SeatAdded signal from CK")); + goto out; +@@ -558,7 +566,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &seat_objpath, ++#else + DBUS_TYPE_STRING, &seat_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SeatRemoved signal from CK")); + goto out; +@@ -588,7 +600,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &session_objpath, ++#else + DBUS_TYPE_STRING, &session_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SessionAdded signal from CK")); + goto out; +@@ -624,7 +640,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &session_objpath, ++#else + DBUS_TYPE_STRING, &session_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SessionRemoved signal from CK")); + goto out; diff --git a/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in b/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in index beb677fa943a..f554c0650f3e 100644 --- a/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in +++ b/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in @@ -1,5 +1,5 @@ ---- hald/freebsd/addons/Makefile.in.orig 2008-03-27 00:45:50.000000000 -0400 -+++ hald/freebsd/addons/Makefile.in 2008-03-27 00:48:15.000000000 -0400 +--- hald/freebsd/addons/Makefile.in.orig 2008-12-13 12:08:36.000000000 -0500 ++++ hald/freebsd/addons/Makefile.in 2008-12-20 21:16:41.000000000 -0500 @@ -33,7 +33,8 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @@ -39,19 +39,20 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -@@ -227,6 +239,11 @@ hald_addon_storage_SOURCES = addon-stora +@@ -229,6 +241,12 @@ hald_addon_storage_SOURCES = addon-stora hald_addon_storage_LDADD = \ $(top_builddir)/hald/freebsd/libprobe/libhald_freebsd_probe.la +hald_addon_mouse_sysmouse_SOURCES = addon-mouse.c +hald_addon_mouse_sysmouse_CFLAGS = $(AM_CPPFLAGS) @GLIB_CFLAGS@ +hald_addon_mouse_sysmouse_LDADD = @GLIB_LIBS@ \ ++ -lutil \ + $(top_builddir)/hald/freebsd/libprobe/libhald_freebsd_probe.la + all: all-am .SUFFIXES: -@@ -288,6 +305,9 @@ clean-libexecPROGRAMS: +@@ -290,6 +308,9 @@ clean-libexecPROGRAMS: echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done @@ -61,7 +62,7 @@ hald-addon-storage$(EXEEXT): $(hald_addon_storage_OBJECTS) $(hald_addon_storage_DEPENDENCIES) @rm -f hald-addon-storage$(EXEEXT) $(LINK) $(hald_addon_storage_OBJECTS) $(hald_addon_storage_LDADD) $(LIBS) -@@ -299,6 +319,7 @@ distclean-compile: +@@ -301,6 +322,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addon-storage.Po@am__quote@ @@ -69,7 +70,7 @@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@@ -321,6 +342,20 @@ distclean-compile: +@@ -323,6 +345,20 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< diff --git a/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c b/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c index 21e413123908..70da9b2af8c6 100644 --- a/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c +++ b/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c @@ -1,6 +1,6 @@ ---- hald/freebsd/addons/addon-mouse.c.orig 2008-03-31 04:53:42.000000000 -0400 -+++ hald/freebsd/addons/addon-mouse.c 2008-03-31 05:07:19.000000000 -0400 -@@ -0,0 +1,216 @@ +--- hald/freebsd/addons/addon-mouse.c.orig 2008-12-21 01:15:41.000000000 -0500 ++++ hald/freebsd/addons/addon-mouse.c 2008-12-21 01:17:03.000000000 -0500 +@@ -0,0 +1,336 @@ +/*************************************************************************** + * CVSID: $Id$ + * @@ -28,6 +28,13 @@ +# include <config.h> +#endif + ++#include <sys/param.h> ++#if __FreeBSD_version >= 800058 ++#include <sys/types.h> ++#include <sys/user.h> ++#include <sys/sysctl.h> ++#include <libutil.h> ++#endif +#include <string.h> +#include <stdlib.h> +#include <assert.h> @@ -38,7 +45,9 @@ + +#include "../libprobe/hfp.h" + ++#if __FreeBSD_version < 800058 +#define CMD "/usr/bin/fstat %s" ++#endif + +#define MOUSE_DRIVER "mouse" +#define MOUSED_DEVICE "/dev/sysmouse" @@ -47,11 +56,121 @@ + +static struct +{ -+ const struct timespec update_interval; -+ char *device_file; -+ struct timespec next_update; ++ const struct timespec update_interval; ++ char *device_file; ++ struct timespec next_update; +} addon = { { 2, 0 } }; + ++#if __FreeBSD_version >= 800058 ++static struct kinfo_proc * ++hfp_kinfo_getproc (int *cntp) ++{ ++ int mib[3]; ++ int error; ++ int cnt; ++ size_t len; ++ char *buf, *bp, *eb; ++ struct kinfo_proc *kip, *kp, *ki; ++ ++ *cntp = 0; ++ ++ len = 0; ++ mib[0] = CTL_KERN; ++ mib[1] = KERN_PROC; ++ mib[2] = KERN_PROC_PROC; ++ ++ error = sysctl(mib, 3, NULL, &len, NULL, 0); ++ if (error) ++ return NULL; ++ ++ len = len * 4 / 3; ++ buf = (char *) g_malloc(len); ++ if (buf == NULL) ++ return NULL; ++ ++ error = sysctl(mib, 3, buf, &len, NULL, 0); ++ if (error) ++ { ++ g_free(buf); ++ return NULL; ++ } ++ ++ cnt = 0; ++ bp = buf; ++ eb = buf + len; ++ while (bp < eb) ++ { ++ ki = (struct kinfo_proc *) (uintptr_t) bp; ++ bp += ki->ki_structsize; ++ cnt++; ++ } ++ ++ kip = calloc(cnt, sizeof (*kip)); ++ if (kip == NULL) ++ { ++ g_free(buf); ++ return NULL; ++ } ++ ++ bp = buf; ++ eb = buf + len; ++ kp = kip; ++ while (bp < eb) ++ { ++ ki = (struct kinfo_proc *) (uintptr_t) bp; ++ memcpy(kp, ki, ki->ki_structsize); ++ bp += ki->ki_structsize; ++ kp->ki_structsize = sizeof(*kp); ++ kp++; ++ } ++ ++ g_free(buf); ++ *cntp = cnt; ++ return kip; ++} ++ ++static gboolean ++device_opened_by_proc (const char *device, const char *proc) ++{ ++ struct kinfo_proc *kip, *pfreep; ++ int cnt, i; ++ ++ pfreep = hfp_kinfo_getproc(&cnt); ++ if (pfreep == NULL) ++ return FALSE; ++ ++ for (i = 0; i < cnt; i++) ++ { ++ kip = &pfreep[i]; ++ ++ if (! strcmp(kip->ki_comm, proc)) ++ { ++ struct kinfo_file *kif, *ffreep; ++ int fcnt, j; ++ ++ ffreep = kinfo_getfile(kip->ki_pid, &fcnt); ++ if (ffreep == NULL) ++ continue; ++ for (j = 0; j < fcnt; j++) ++ { ++ kif = &ffreep[j]; ++ ++ if (kif->kf_type == KF_TYPE_VNODE && ++ ! strcmp(kif->kf_path, device)) ++ { ++ g_free(ffreep); ++ g_free(pfreep); ++ return TRUE; ++ } ++ } ++ g_free(ffreep); ++ } ++ } ++ g_free(pfreep); ++ ++ return FALSE; ++} ++#else +static gboolean +device_opened_by_proc (const char *device, const char *proc) +{ @@ -91,16 +210,16 @@ + if (len < 2) + { + g_strfreev(fields); -+ continue; -+ } ++ continue; ++ } + for (j = 1; j < len && fields[j] && *fields[j] == '\0'; j++) + ; + if (j < len && fields[j] && ! strcmp(fields[j], proc)) + { + found = TRUE; + g_strfreev(fields); -+ break; -+ } ++ break; ++ } + g_strfreev(fields); + } + @@ -111,6 +230,7 @@ + + return found; +} ++#endif + +static const char * +get_mouse_device (const char *device) @@ -186,27 +306,27 @@ + { + /* process dbus traffic until update interval has elapsed */ + while (TRUE) -+ { -+ struct timespec now; -+ -+ hfp_clock_gettime(&now); -+ if (hfp_timespeccmp(&now, &addon.next_update, <)) -+ { -+ struct timespec timeout; -+ -+ timeout = addon.next_update; -+ hfp_timespecsub(&timeout, &now); -+ -+ if (timeout.tv_sec < 0) /* current time went backwards */ -+ timeout = addon.update_interval; -+ -+ dbus_connection_read_write_dispatch(connection, timeout.tv_sec * 1000 + timeout.tv_nsec / 1000000); -+ if (! dbus_connection_get_is_connected(connection)) -+ goto end; -+ } -+ else -+ break; -+ } ++ { ++ struct timespec now; ++ ++ hfp_clock_gettime(&now); ++ if (hfp_timespeccmp(&now, &addon.next_update, <)) ++ { ++ struct timespec timeout; ++ ++ timeout = addon.next_update; ++ hfp_timespecsub(&timeout, &now); ++ ++ if (timeout.tv_sec < 0) /* current time went backwards */ ++ timeout = addon.update_interval; ++ ++ dbus_connection_read_write_dispatch(connection, timeout.tv_sec * 1000 + timeout.tv_nsec / 1000000); ++ if (! dbus_connection_get_is_connected(connection)) ++ goto end; ++ } ++ else ++ break; ++ } + + poll_for_moused(); + diff --git a/sysutils/hal/files/patch-hald_freebsd_hf-volume.c b/sysutils/hal/files/patch-hald_freebsd_hf-volume.c new file mode 100644 index 000000000000..039a1a6760f4 --- /dev/null +++ b/sysutils/hal/files/patch-hald_freebsd_hf-volume.c @@ -0,0 +1,102 @@ +--- hald/freebsd/hf-volume.c.orig 2008-05-07 19:24:03.000000000 -0400 ++++ hald/freebsd/hf-volume.c 2008-10-26 15:17:09.000000000 -0400 +@@ -45,6 +45,7 @@ + #include "hf-util.h" + + #define PROBE_VOLUME_TIMEOUT (HAL_HELPER_TIMEOUT * 6) ++#define HF_VOLUME_FUSE_DB "/tmp/.fuse-mnts" + + static void + hf_volume_get_mounts (struct statfs **mounts, int *n_mounts) +@@ -60,6 +61,55 @@ hf_volume_get_mounts (struct statfs **mo + } + } + ++static char * ++hf_volume_resolve_fuse (const char *special) ++{ ++ gchar *contents; ++ gchar **lines; ++ gsize len; ++ int i; ++ ++ g_return_val_if_fail(special != NULL, NULL); ++ ++ if (! g_file_get_contents(HF_VOLUME_FUSE_DB, &contents, &len, NULL)) ++ return g_strdup(special); ++ ++ lines = g_strsplit(contents, "\n", 0); ++ g_free(contents); ++ ++ for (i = 0; lines && lines[i]; i++) ++ { ++ gchar **fields; ++ ++ fields = g_strsplit(lines[i], "=", 2); ++ if (fields && g_strv_length(fields) == 2) ++ { ++ if (strcmp(fields[0], special) == 0) ++ { ++ g_strfreev(fields); ++ g_strfreev(lines); ++ return g_strdup(fields[1]); ++ } ++ } ++ g_strfreev(fields); ++ } ++ ++ g_strfreev(lines); ++ ++ return g_strdup(special); ++} ++ ++static char * ++hf_volume_resolve_special (const char *special) ++{ ++ g_return_val_if_fail(special != NULL, NULL); ++ ++ if (strstr(special, "fuse")) ++ return hf_volume_resolve_fuse(special); ++ ++ return g_strdup(special); ++} ++ + static const struct statfs * + hf_volume_mounts_find (const struct statfs *mounts, + int n_mounts, +@@ -71,8 +121,18 @@ hf_volume_mounts_find (const struct stat + g_return_val_if_fail(special != NULL, NULL); + + for (i = 0; i < n_mounts; i++) +- if (! strcmp(mounts[i].f_mntfromname, special)) +- return &mounts[i]; ++ { ++ char *resolved; ++ ++ resolved = hf_volume_resolve_special(mounts[i].f_mntfromname); ++ if (! strcmp(resolved, special)) ++ { ++ g_free(resolved); ++ return &mounts[i]; ++ } ++ ++ g_free(resolved); ++ } + + return NULL; + } +@@ -92,7 +152,13 @@ hf_volume_device_update_mount_properties + + special = hal_device_property_get_string(device, "block.device"); + if (special) +- mount = hf_volume_mounts_find(mounts, n_mounts, special); ++ { ++ mount = hf_volume_mounts_find(mounts, n_mounts, special); ++ if (mount && strcmp(special, mount->f_mntfromname)) ++ hal_device_property_set_string(device, "volume.freebsd.real_mounted_device", mount->f_mntfromname); ++ else ++ hal_device_property_remove(device, "volume.freebsd.real_mounted_device"); ++ } + } + + hal_device_property_set_bool(device, "volume.is_mounted", mount != NULL); diff --git a/sysutils/hal/files/patch-tools_hal-storage-eject.c b/sysutils/hal/files/patch-tools_hal-storage-eject.c new file mode 100644 index 000000000000..730e2a076d1c --- /dev/null +++ b/sysutils/hal/files/patch-tools_hal-storage-eject.c @@ -0,0 +1,11 @@ +--- tools/hal-storage-eject.c.orig 2008-10-27 13:23:11.000000000 -0400 ++++ tools/hal-storage-eject.c 2008-10-27 13:23:23.000000000 -0400 +@@ -190,7 +190,7 @@ main (int argc, char *argv[]) + unknown_eject_error ("Cannot obtain lock on /media/.hal-mtab"); + } + handle_unmount (hal_ctx, +- udi, volume_to_unmount, drive, ++ volume_udi, volume_to_unmount, drive, + libhal_volume_get_device_file (volume_to_unmount), + invoked_by_uid, invoked_by_syscon_name, + FALSE, FALSE); /* use neither lazy nor force */ diff --git a/sysutils/hal/files/patch-tools_hal-storage-mount.c b/sysutils/hal/files/patch-tools_hal-storage-mount.c index c270893c2b2c..390d35111481 100644 --- a/sysutils/hal/files/patch-tools_hal-storage-mount.c +++ b/sysutils/hal/files/patch-tools_hal-storage-mount.c @@ -1,11 +1,91 @@ ---- tools/hal-storage-mount.c.orig 2008-04-29 20:05:38.000000000 -0400 -+++ tools/hal-storage-mount.c 2008-04-29 20:05:44.000000000 -0400 -@@ -56,7 +56,7 @@ +--- tools/hal-storage-mount.c.orig 2008-05-07 19:24:23.000000000 -0400 ++++ tools/hal-storage-mount.c 2008-10-09 00:54:34.000000000 -0400 +@@ -56,8 +56,9 @@ #ifdef __FreeBSD__ #define MOUNT "/sbin/mount" -#define MOUNT_OPTIONS "noexec,nosuid" +#define MOUNT_OPTIONS "nosuid" #define MOUNT_TYPE_OPT "-t" ++#define FUSE_DB "/tmp/.fuse-mnts" #elif sun #define MOUNT "/sbin/mount" + #define MOUNT_OPTIONS "noexec,nosuid" +@@ -255,6 +256,51 @@ out: + return f; + } + ++#ifdef __FreeBSD__ ++static char * ++resolve_fuse (const char *special) ++{ ++ gchar *contents; ++ gchar **lines; ++ gsize len; ++ int i; ++ ++ if (! g_file_get_contents (FUSE_DB, &contents, &len, NULL)) ++ return g_strdup (special); ++ ++ lines = g_strsplit (contents, "\n", 0); ++ g_free (contents); ++ ++ for (i = 0; lines && lines[i]; i++) { ++ gchar **fields; ++ ++ fields = g_strsplit (lines[i], "=", 2); ++ if (fields && g_strv_length (fields) == 2) { ++ if (strcmp (fields[0], special) == 0) { ++ g_strfreev (fields); ++ g_strfreev (lines); ++ return g_strdup (fields[1]); ++ } ++ } ++ g_strfreev (fields); ++ } ++ ++ g_strfreev (lines); ++ ++ return g_strdup (special); ++} ++#endif ++ ++static char * ++resolve_special (const char *special) ++{ ++#ifdef __FreeBSD__ ++ if (strstr(special, "fuse")) ++ return resolve_fuse (special); ++#endif ++ return g_strdup (special); ++} ++ + static LibHalVolume * + volume_findby (LibHalContext *hal_ctx, const char *property, const char *value) + { +@@ -400,18 +446,20 @@ device_is_mounted (const char *device, c + unknown_error ("Cannot open /etc/mtab or equivalent"); + } + while (((entry = mtab_next (handle, mount_point)) != NULL) && (ret == FALSE)) { +- char *resolved; ++ char *resolved, *rspecial; + + resolved = resolve_symlink (entry); ++ rspecial = resolve_special (resolved); ++ g_free (resolved); + #ifdef DEBUG +- printf ("/proc/mounts: device %s -> %s \n", entry, resolved); ++ printf ("/proc/mounts: device %s -> %s \n", entry, rspecial); + #endif +- if (strcmp (device, resolved) == 0) { +- printf ("%s (-> %s) found in mount list. Not mounting.\n", entry, resolved); ++ if (strcmp (device, rspecial) == 0) { ++ printf ("%s (-> %s) found in mount list. Not mounting.\n", entry, rspecial); + ret = TRUE; + } + +- g_free (resolved); ++ g_free (rspecial); + } + mtab_close (handle); + return ret; diff --git a/sysutils/hal/files/patch-tools_hal-storage-shared.c b/sysutils/hal/files/patch-tools_hal-storage-shared.c new file mode 100644 index 000000000000..1ed7fe907bac --- /dev/null +++ b/sysutils/hal/files/patch-tools_hal-storage-shared.c @@ -0,0 +1,45 @@ +--- tools/hal-storage-shared.c.orig 2008-05-07 19:24:24.000000000 -0400 ++++ tools/hal-storage-shared.c 2008-10-20 14:53:35.000000000 -0400 +@@ -297,6 +297,9 @@ handle_unmount (LibHalContext *hal_ctx, + char *mount_point_to_unmount; + gboolean mounted_by_other_uid; + FILE *hal_mtab_new; ++#ifdef __FreeBSD__ ++ char *rdevice = NULL; ++#endif + + #ifdef DEBUG + printf ("device = %s\n", device); +@@ -473,7 +476,20 @@ line_found: + #endif + if (option_force) + args[na++] = "-f"; +- args[na++] = (char *) device; ++#ifdef __FreeBSD__ ++ dbus_error_init (&error); ++ if (libhal_device_property_exists (hal_ctx, udi, "volume.freebsd.real_mounted_device", NULL)) { ++ rdevice = libhal_device_get_property_string (hal_ctx, udi, "volume.freebsd.real_mounted_device", &error); ++ if (dbus_error_is_set (&error)) { ++ dbus_error_free (&error); ++ unknown_error ("Error while getting volume.freebsd.real_mounted_device"); ++ } ++ } ++ if (rdevice) ++ args[na++] = rdevice; ++ else ++#endif ++ args[na++] = (char *) device; + args[na++] = NULL; + + #ifdef DEBUG +@@ -497,6 +513,10 @@ line_found: + unknown_error ("Cannot spawn " UMOUNT); + } + ++#ifdef __FreeBSD__ ++ g_free (rdevice); ++#endif ++ + /* check if unmount was succesful */ + if (exit_status != 0) { + printf ("%s error %d, stdout='%s', stderr='%s'\n", UMOUNT, exit_status, sout, serr); diff --git a/sysutils/hal/pkg-plist b/sysutils/hal/pkg-plist index 1c75cccbe755..f42809179477 100644 --- a/sysutils/hal/pkg-plist +++ b/sysutils/hal/pkg-plist @@ -72,6 +72,7 @@ libexec/hald-probe-volume libexec/hald-runner sbin/hald %%PORTDOCS%%%%DOCSDIR%%/README.freebsd +%%PORTDOCS%%%%DOCSDIR%%/README.fuse %%DATADIR%%/dist/hal.conf %%DATADIR%%/fdi/fdi.dtd %%DATADIR%%/fdi/information/10freedesktop/01-deprecated-keys.fdi @@ -87,6 +88,7 @@ sbin/hald %%DATADIR%%/fdi/policy/10osvendor/15-storage-luks.fdi %%DATADIR%%/fdi/policy/10osvendor/20-storage-methods.fdi %%DATADIR%%/fdi/policy/10osvendor/30-wol.fdi +%%DATADIR%%/mount-fuse share/PolicyKit/policy/org.freedesktop.hal.dockstation.policy share/PolicyKit/policy/org.freedesktop.hal.killswitch.policy share/PolicyKit/policy/org.freedesktop.hal.policy |