summaryrefslogtreecommitdiffstats
path: root/source/n/bluez-utils
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--source/n/bluez-utils/60-bluetooth.rules35
-rw-r--r--source/n/bluez-utils/README.SLACKWARE18
-rw-r--r--source/n/bluez-utils/add-passkey.c394
-rw-r--r--source/n/bluez-utils/bluetooth.conf24
-rwxr-xr-xsource/n/bluez-utils/bluez-utils.SlackBuild188
-rw-r--r--source/n/bluez-utils/doinst.sh30
-rw-r--r--source/n/bluez-utils/rc.bluetooth114
-rw-r--r--source/n/bluez-utils/rc.bluetooth.conf33
-rw-r--r--source/n/bluez-utils/register-passkeys19
-rw-r--r--source/n/bluez-utils/slack-desc19
10 files changed, 874 insertions, 0 deletions
diff --git a/source/n/bluez-utils/60-bluetooth.rules b/source/n/bluez-utils/60-bluetooth.rules
new file mode 100644
index 000000000..0957225fd
--- /dev/null
+++ b/source/n/bluez-utils/60-bluetooth.rules
@@ -0,0 +1,35 @@
+# Brain Boxes BL-620 Bluetooth Adapter
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="Brain Boxes", SYSFS{prod_id2}=="Bluetooth PC Card", ENV{HCIOPTS}="bboxes", RUN+="bluetooth_serial"
+
+# Xircom CreditCard Bluetooth Adapter
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="Xircom", SYSFS{prod_id3}=="CBT", ENV{HCIOPTS}="xircom", RUN+="bluetooth_serial"
+
+# Xircom RealPort2 Bluetooth Adapter
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="Xircom", SYSFS{prod_id3}=="CBT", ENV{HCIOPTS}="xircom", RUN+="bluetooth_serial"
+
+# IBM Bluetooth PC Card II
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="IBM", SYSFS{prod_id2}=="Bluetooth PC Card II", ENV{HCIOPTS}="tdk", RUN+="bluetooth_serial"
+
+# TDK Bluetooth PC Card
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="TDK", SYSFS{prod_id2}=="Bluetooth PC Card II", ENV{HCIOPTS}="tdk", RUN+="bluetooth_serial"
+
+# AmbiCom BT2000C Bluetooth PC/CF Card
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="AmbiCom BT2000C", SYSFS{prod_id2}=="Bluetooth PC/CF Card", ENV{HCIOPTS}="bt2000c", RUN+="bluetooth_serial"
+
+# COM One Platinium Bluetooth PC Card
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="COM1 SA", SYSFS{prod_id2}=="MC310 CARD", ENV{HCIOPTS}="comone", RUN+="bluetooth_serial"
+
+# Sphinx PICO Card
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="SPHINX", SYSFS{prod_id2}=="BT-CARD", ENV{HCIOPTS}="picocard", RUN+="bluetooth_serial"
+
+# H-Soft blue+Card
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="H-Soft", SYSFS{prod_id2}=="Blue+CARD", ENV{HCIOPTS}="$sysfs{manf_id},$sysfs{card_id}", RUN+="bluetooth_serial"
+
+# Compaq iPAQ Bluetooth Sleeve, Belkin F8T020, any other muppet who used an OXCF950 and didn't bother to program it appropriately.
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="CF CARD", SYSFS{prod_id2}=="GENERIC", ENV{HCIOPTS}="$sysfs{manf_id},$sysfs{card_id}", RUN+="bluetooth_serial"
+
+# Zoom Bluetooth Card and Sitecom CN-504 Card
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="PCMCIA", SYSFS{prod_id2}=="Bluetooth Card", ENV{HCIOPTS}="zoom", RUN+="bluetooth_serial"
+
+# CC&C BT0100M
+SUBSYSTEM=="tty", BUS=="pcmcia", SYSFS{prod_id1}=="Bluetooth BT0100M", ENV{HCIOPTS}="bcsp 115200", RUN+="bluetooth_serial"
diff --git a/source/n/bluez-utils/README.SLACKWARE b/source/n/bluez-utils/README.SLACKWARE
new file mode 100644
index 000000000..795c8c5a2
--- /dev/null
+++ b/source/n/bluez-utils/README.SLACKWARE
@@ -0,0 +1,18 @@
+PIN (or passkey) management
+---------------------------
+since bluez 3.0 the old pin_helper script has been replaced by
+the dbus interface. To add a default passkey for every outgoing
+request (e.g. the old /etc/bluetooth/pin file) drop it into
+/etc/bluetooth/passkeys/default. (e.g. echo -n "1234" >
+/etc/bluetooth/passkeys/default )
+To add a passkey for a specific outgoing connection replace default
+with the device's address. ( /etc/bluetooth/passkeys/aa:bb:cc:dd:ee:ff
+will contain passkey for aa:bb:cc:dd:ee:ff ).
+After adding a passkey you should restart bluetooth with
+
+/etc/init.d/bluetooth restart
+
+and the new passkeys will be registered.
+
+
+(This behaviour has been copied from Debian)
diff --git a/source/n/bluez-utils/add-passkey.c b/source/n/bluez-utils/add-passkey.c
new file mode 100644
index 000000000..b9dcbb517
--- /dev/null
+++ b/source/n/bluez-utils/add-passkey.c
@@ -0,0 +1,394 @@
+/*
+ * add-passkey.c:
+ * registers as an agent for the bluez bluetooth linux stack, the code is
+ * shamelessly stolen from bluez source found at http://bluez.sf.net
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2005-2006 Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <getopt.h>
+#include <string.h>
+
+#include <dbus/dbus.h>
+
+#define INTERFACE "org.bluez.Security"
+
+// FIXME assumption
+#define PASSKEYMAXLENGTH 255
+
+static char *passkey = NULL;
+static char *address = NULL;
+
+static volatile sig_atomic_t __io_canceled = 0;
+static volatile sig_atomic_t __io_terminated = 0;
+
+static void sig_term(int sig)
+{
+ __io_canceled = 1;
+}
+
+static DBusHandlerResult agent_filter(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ const char *name, *old, *new;
+
+ if (!dbus_message_is_signal(msg, DBUS_INTERFACE_DBUS, "NameOwnerChanged"))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ if (!dbus_message_get_args(msg, NULL,
+ DBUS_TYPE_STRING, &name, DBUS_TYPE_STRING, &old,
+ DBUS_TYPE_STRING, &new, DBUS_TYPE_INVALID)) {
+ fprintf(stderr, "Invalid arguments for NameOwnerChanged signal");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ if (!strcmp(name, "org.bluez") && *new == '\0') {
+ __io_terminated = 1;
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static DBusHandlerResult request_message(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessage *reply;
+ const char *path, *address;
+
+ if (!passkey)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &path,
+ DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID)) {
+ fprintf(stderr, "Invalid arguments for passkey Request method");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ reply = dbus_message_new_method_return(msg);
+ if (!reply) {
+ fprintf(stderr, "Can't create reply message\n");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ dbus_message_append_args(reply, DBUS_TYPE_STRING, &passkey,
+ DBUS_TYPE_INVALID);
+
+ dbus_connection_send(conn, reply, NULL);
+
+ dbus_connection_flush(conn);
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusHandlerResult release_message(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessage *reply;
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_INVALID)) {
+ fprintf(stderr, "Invalid arguments for passkey Release method");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ reply = dbus_message_new_method_return(msg);
+ if (!reply) {
+ fprintf(stderr, "Can't create reply message\n");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ dbus_message_append_args(reply, DBUS_TYPE_INVALID);
+
+ dbus_connection_send(conn, reply, NULL);
+
+ dbus_connection_flush(conn);
+
+ dbus_message_unref(reply);
+
+ if (!__io_canceled)
+ fprintf(stderr, "Passkey service has been released\n");
+
+ __io_terminated = 1;
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusHandlerResult agent_message(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ if (dbus_message_is_method_call(msg, "org.bluez.PasskeyAgent", "Request"))
+ return request_message(conn, msg, data);
+
+ if (dbus_message_is_method_call(msg, "org.bluez.PasskeyAgent", "Release"))
+ return release_message(conn, msg, data);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static const DBusObjectPathVTable agent_table = {
+ .message_function = agent_message,
+};
+
+static int register_agent(DBusConnection *conn, const char *agent_path,
+ const char *remote_address, int use_default)
+{
+ DBusMessage *msg, *reply;
+ DBusError err;
+ const char *path, *method, *address = remote_address;
+
+ if (!dbus_connection_register_object_path(conn, agent_path,
+ &agent_table, NULL)) {
+ fprintf(stderr, "Can't register path object path for agent\n");
+ return -1;
+ }
+
+ if (use_default) {
+ path = "/org/bluez";
+ method = "RegisterDefaultPasskeyAgent";
+ } else {
+ path = "/org/bluez/hci0";
+ method = "RegisterPasskeyAgent";
+ }
+
+ msg = dbus_message_new_method_call("org.bluez", path, INTERFACE, method);
+ if (!msg) {
+ fprintf(stderr, "Can't allocate new method call\n");
+ return -1;
+ }
+
+ if (use_default)
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path,
+ DBUS_TYPE_INVALID);
+ else
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path,
+ DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID);
+
+ dbus_error_init(&err);
+
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
+
+ dbus_message_unref(msg);
+
+ if (!reply) {
+ fprintf(stderr, "Can't register passkey agent\n");
+ if (dbus_error_is_set(&err)) {
+ fprintf(stderr, "%s\n", err.message);
+ dbus_error_free(&err);
+ }
+ return -1;
+ }
+
+ dbus_message_unref(reply);
+
+ dbus_connection_flush(conn);
+
+ return 0;
+}
+
+static int unregister_agent(DBusConnection *conn, const char *agent_path,
+ const char *remote_address, int use_default)
+{
+ DBusMessage *msg, *reply;
+ DBusError err;
+ const char *path, *method, *address = remote_address;
+
+ if (use_default) {
+ path = "/org/bluez";
+ method = "UnregisterDefaultPasskeyAgent";
+ } else {
+ path = "/org/bluez/hci0";
+ method = "UnregisterPasskeyAgent";
+ }
+
+ msg = dbus_message_new_method_call("org.bluez", path, INTERFACE, method);
+ if (!msg) {
+ fprintf(stderr, "Can't allocate new method call\n");
+ dbus_connection_close(conn);
+ exit(1);
+ }
+
+ if (use_default)
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path,
+ DBUS_TYPE_INVALID);
+ else
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &agent_path,
+ DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID);
+
+ dbus_error_init(&err);
+
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
+
+ dbus_message_unref(msg);
+
+ if (!reply) {
+ fprintf(stderr, "Can't unregister passkey agent\n");
+ if (dbus_error_is_set(&err)) {
+ fprintf(stderr, "%s\n", err.message);
+ dbus_error_free(&err);
+ }
+ return -1;
+ }
+
+ dbus_message_unref(reply);
+
+ dbus_connection_flush(conn);
+
+ dbus_connection_unregister_object_path(conn, agent_path);
+
+ return 0;
+}
+
+static void usage(void)
+{
+// printf("Bluetooth passkey agent ver %s\n\n", VERSION);
+
+ printf("Usage:\n"
+ "\tadd-passkey [--passkey-fd n] [--default] [--path agent-path] [address]\n"
+ "\n"
+ "add-passkey will read from passkey-fd (default: stdin) adding a default passkey\n"
+ "if --default is given, or for a specific address if supplied on commandline.\n\n"
+ "--default or address are mandatory.\n"
+ "this program is based on bluez passkey-agent.c from http://bluez.sf.net\n"
+ "\n");
+}
+
+static struct option main_options[] = {
+ { "passkey-fd", 1, 0, 'f'},
+ { "default", 0, 0, 'd' },
+ { "path", 1, 0, 'p' },
+ { "help", 0, 0, 'h' },
+ { 0, 0, 0, 0 }
+};
+
+int main(int argc, char *argv[])
+{
+ struct sigaction sa;
+ DBusConnection *conn;
+ char match_string[128], default_path[128], *agent_path = NULL;
+ int opt, use_default = 0, passkey_fd = 0;
+ char *tmppasskey;
+
+ snprintf(default_path, sizeof(default_path),
+ "/org/bluez/passkey_agent_%d", getpid());
+
+ while ((opt = getopt_long(argc, argv, "+fdp:h", main_options, NULL)) != EOF) {
+ switch(opt) {
+ case 'f':
+ passkey_fd = atoi(optarg);
+ case 'd':
+ use_default = 1;
+ break;
+ case 'p':
+ if (optarg[0] != '/') {
+ fprintf(stderr, "Invalid path\n");
+ exit(1);
+ }
+ agent_path = strdup(optarg);
+ break;
+ case 'h':
+ usage();
+ exit(0);
+ default:
+ exit(1);
+ }
+ }
+
+ argc -= optind;
+ argv += optind;
+ optind = 0;
+
+ if (argc < 1 && !use_default) {
+ usage();
+ exit(1);
+ }
+
+ passkey = malloc(PASSKEYMAXLENGTH * sizeof(char));
+
+ if (!read(passkey_fd, passkey, PASSKEYMAXLENGTH)) {
+ fprintf(stderr, "Unable to read passkey from fd %d\n", passkey_fd);
+ exit(1);
+ }
+
+ if (tmppasskey = index(passkey, '\n')) {
+ *tmppasskey = '\0';
+ }
+
+ address = (argc > 0) ? strdup(argv[0]) : NULL;
+
+ if (!use_default && !address) {
+ usage();
+ exit(1);
+ }
+
+ if (!agent_path)
+ agent_path = strdup(default_path);
+
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (!conn) {
+ fprintf(stderr, "Can't get on system bus");
+ exit(1);
+ }
+
+ if (register_agent(conn, agent_path, address, use_default) < 0) {
+ dbus_connection_close(conn);
+ exit(1);
+ }
+
+ if (!dbus_connection_add_filter(conn, agent_filter, NULL, NULL))
+ fprintf(stderr, "Can't add signal filter");
+
+ snprintf(match_string, sizeof(match_string),
+ "interface=%s,member=NameOwnerChanged,arg0=%s",
+ DBUS_INTERFACE_DBUS, "org.bluez");
+
+ dbus_bus_add_match(conn, match_string, NULL);
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_flags = SA_NOCLDSTOP;
+ sa.sa_handler = sig_term;
+ sigaction(SIGTERM, &sa, NULL);
+ sigaction(SIGINT, &sa, NULL);
+
+ while (!__io_canceled && !__io_terminated) {
+ if (dbus_connection_read_write_dispatch(conn, 100) != TRUE)
+ break;
+ }
+
+ if (!__io_terminated)
+ unregister_agent(conn, agent_path, address, use_default);
+
+ if (passkey)
+ free(passkey);
+
+ dbus_connection_close(conn);
+
+ return 0;
+}
diff --git a/source/n/bluez-utils/bluetooth.conf b/source/n/bluez-utils/bluetooth.conf
new file mode 100644
index 000000000..c0476237a
--- /dev/null
+++ b/source/n/bluez-utils/bluetooth.conf
@@ -0,0 +1,24 @@
+<!-- This configuration file specifies the required security policies
+ for Bluetooth core daemon to work. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+ <!-- ../system.conf have denied everything, so we just punch some holes -->
+
+ <policy user="root">
+ <allow own="org.bluez"/>
+ <allow send_destination="org.bluez"/>
+ <allow send_interface="org.bluez.Agent"/>
+ </policy>
+
+ <policy at_console="true">
+ <allow send_destination="org.bluez"/>
+ </policy>
+
+ <policy context="default">
+ <deny send_destination="org.bluez"/>
+ </policy>
+
+</busconfig>
diff --git a/source/n/bluez-utils/bluez-utils.SlackBuild b/source/n/bluez-utils/bluez-utils.SlackBuild
new file mode 100755
index 000000000..7f8b95746
--- /dev/null
+++ b/source/n/bluez-utils/bluez-utils.SlackBuild
@@ -0,0 +1,188 @@
+#!/bin/sh
+#
+# SlackBuild for bluez-utils
+# http://www.bluez.org
+# By SukkoPera <enjoy.the.silence@iol.it>
+# Thanks a lot to CAT for his Slackware package cration
+# guide (http://www.slacky.it/misto/tutorial/spunleashed.txt)
+#
+# Check out
+# - http://www.sukkopera.tk
+# - http://www.slacky.it
+# - http://www.nyft.org
+#
+# Notes:
+# - Many files and the whole PIN management system have been stolen from the
+# Debian package. Thanks.
+#
+# Rewritten for Slackware 2007-05 <pjv>
+
+NAME=bluez-utils
+VERSION=${VERSION:-3.36}
+ARCH=${ARCH:-x86_64}
+NUMJOBS=${NUMJOBS:-" -j7 "}
+BUILD=${BUILD:-7}
+
+
+if [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$NAME
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+mkdir -p $PKG/etc/rc.d \
+ $PKG/etc/bluetooth/passkeys \
+ $PKG/usr/lib${LIBDIRSUFFIX}/bluetooth
+# Is there any reason for a non-root user to be able to see these?
+chmod 700 $PKG/etc/bluetooth/passkeys
+cd $TMP
+rm -rf $NAME-$VERSION
+tar xvf $CWD/${NAME}-${VERSION}.tar.bz2 || exit 1
+cd $NAME-$VERSION
+
+chown -R root:root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \;
+
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --mandir=/usr/man \
+ --localstatedir=/var \
+ --enable-tools\
+ --enable-bccmd \
+ --enable-hid2hci \
+ --enable-dfutool \
+ --enable-hidd \
+ --enable-pand \
+ --enable-dund \
+ --enable-cups \
+ --enable-manpages \
+ --enable-configfiles \
+ --build=$ARCH-slackware-linux
+
+make $NUMJOBS || make || exit 1
+make install DESTDIR=$PKG
+
+mkdir -p $PKG/lib/udev
+cp -a scripts/bluetooth_serial $PKG/lib/udev/bluetooth_serial || exit 1
+chmod 755 $PKG/lib/udev/bluetooth_serial
+
+mkdir -p $PKG/lib/udev/rules.d
+cp -a scripts/bluetooth.rules $PKG/lib/udev/rules.d/60-bluetooth.rules || exit 1
+chmod 644 $PKG/lib/udev/rules.d/60-bluetooth.rules
+
+# This appears to be gone/obsolete:
+#if [ ! -e $PKG/etc/bluetooth/transfer.service ]; then
+# cat transfer/transfer.service > $PKG/etc/bluetooth/transfer.service
+#fi
+#if [ ! -e $PKG/usr/lib${LIBDIRSUFFIX}/bluetooth/bluetoothd-service-transfer -a -e transfer/bluetoothd-service-transfer ]; then
+# cat transfer/bluetoothd-service-transfer > $PKG/usr/lib${LIBDIRSUFFIX}/bluetooth/bluetoothd-service-transfer
+# chmod 755 $PKG/usr/lib${LIBDIRSUFFIX}/bluetooth/bluetoothd-service-transfer
+#fi
+
+# Install Debian's add-passkey program:
+DEBDEST=/usr/lib${LIBDIRSUFFIX}/bluetooth
+gcc $(pkg-config --libs --cflags dbus-1) -DDBUS_API_SUBJECT_TO_CHANGE \
+ $CWD/add-passkey.c -o $PKG/$DEBDEST/add-passkey || exit 1
+cp $CWD/register-passkeys $PKG/$DEBDEST
+if [ "$ARCH" = "x86_64" ]; then
+ sed -i "s,/usr/lib/,/usr/lib${LIBDIRSUFFIX}/,g" $PKG/$DEBDEST/register-passkeys
+fi
+chmod a+x $PKG/$DEBDEST/*
+
+# Default PIN (wow, does this seem insecure!)
+#echo "1234" > $PKG/etc/bluetooth/passkeys/default
+touch $PKG/etc/bluetooth/passkeys/default
+
+mkdir -p $PKG/usr/doc/$NAME-$VERSION
+cp -a \
+ AUTHORS ChangeLog COPYING* INSTALL NEWS README $CWD/README.SLACKWARE \
+ $PKG/usr/doc/$NAME-$VERSION
+( cd $PKG/etc/bluetooth
+ ln -sf /usr/doc/$NAME-$VERSION/README.SLACKWARE .
+)
+
+# Arrange init scripts and config files:
+CONF=/etc/rc.d/rc.bluetooth.conf
+mkdir -p $PKG/etc/rc.d
+cp $CWD/rc.bluetooth $PKG/etc/rc.d/rc.bluetooth
+if [ "$ARCH" = "x86_64" ]; then
+ sed -i "s,/usr/lib/,/usr/lib${LIBDIRSUFFIX}/,g" $PKG/etc/rc.d/rc.bluetooth
+fi
+cp -a $CWD/rc.bluetooth.conf $PKG/etc/rc.d/rc.bluetooth.conf
+sed -i "s:\(HIDD_ENABLE=\).*:\1false:" $PKG/$CONF || exit 1
+sed -i "s:\(HID2HCI_ENABLE=\).*:\1false:" $PKG/$CONF || exit 1
+
+mkdir -p $PKG/etc/bluetooth
+cp -a audio/audio.conf $PKG/etc/bluetooth
+cp -a audio/asound.conf $PKG/etc/bluetooth
+cp -a input/input.conf $PKG/etc/bluetooth
+cp -a hcid/hcid.conf $PKG/etc/bluetooth
+cp -a network/network.conf $PKG/etc/bluetooth
+cp -a rfcomm/rfcomm.conf $PKG/etc/bluetooth
+chmod 644 $PKG/etc/bluetooth/*.conf
+
+# Do not overwrite configuration
+# Well, let the dbus file be overwritten, as it is not usually user-edited.
+( cd $PKG
+ for file in \
+ etc/bluetooth/audio.conf \
+ etc/asound.conf \
+ etc/bluetooth/asound.conf \
+ etc/bluetooth/input.conf \
+ etc/bluetooth/hcid.conf \
+ etc/bluetooth/network.conf \
+ etc/bluetooth/rfcomm.conf \
+ etc/bluetooth/passkeys/default \
+ etc/rc.d/rc.bluetooth \
+ etc/rc.d/rc.bluetooth.conf ; do
+ mv ${file} ${file}.new
+ done
+)
+
+# Replace the bluetooth.conf file with one from BlueZ4 that works with the newest dbus:
+cat $CWD/bluetooth.conf > $PKG/etc/dbus-1/system.d/bluetooth.conf
+
+# Compress and if needed symlink the man pages:
+if [ -d $PKG/usr/man ]; then
+ ( cd $PKG/usr/man
+ for manpagedir in $(find . -type d -name "man*") ; do
+ ( cd $manpagedir
+ for eachpage in $( find . -type l -maxdepth 1) ; do
+ ln -s $( readlink $eachpage ).gz $eachpage.gz
+ rm $eachpage
+ done
+ gzip -9 *.?
+ )
+ done
+ )
+fi
+
+find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/$NAME-$VERSION-$ARCH-$BUILD.txz
+
diff --git a/source/n/bluez-utils/doinst.sh b/source/n/bluez-utils/doinst.sh
new file mode 100644
index 000000000..e738d14bd
--- /dev/null
+++ b/source/n/bluez-utils/doinst.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+config() {
+ NEW="$1"
+ OLD="`dirname $NEW`/`basename $NEW .new`"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+if [ ! -e etc/rc.d/rc.bluetooth -o ! -x etc/rc.d/rc.bluetooth ]; then
+ chmod 644 etc/rc.d/rc.bluetooth.new
+else
+ chmod 755 etc/rc.d/rc.bluetooth.new
+fi
+config etc/rc.d/rc.bluetooth.new
+config etc/rc.d/rc.bluetooth.conf.new
+config etc/bluetooth/asound.conf.new
+config etc/bluetooth/audio.conf.new
+config etc/bluetooth/hcid.conf.new
+config etc/bluetooth/input.conf.new
+config etc/bluetooth/network.conf.new
+config etc/bluetooth/rfcomm.conf.new
+config etc/bluetooth/passkeys/default.new
+
+if [ ! -e etc/asound.conf ]; then
+ ( cd etc ; ln -sf bluetooth/asound.conf . )
+fi
diff --git a/source/n/bluez-utils/rc.bluetooth b/source/n/bluez-utils/rc.bluetooth
new file mode 100644
index 000000000..cf891dcf9
--- /dev/null
+++ b/source/n/bluez-utils/rc.bluetooth
@@ -0,0 +1,114 @@
+#!/bin/sh
+#
+# Start/stop the Bluetooth daemons
+#
+# This version has been modified by SukkoPera, taking inspiration from then
+# Debian init script, to add support for register-passkeys. Modified by
+# Patrick Volkerding to add "restart" support, and cleaned up a tiny bit.
+
+set -e
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DESC="Bluetooth subsystem"
+
+# The register-passkeys script was originally written by Debian:
+REGISTER_PASSKEYS=/usr/lib/bluetooth/register-passkeys
+
+HCID_NAME=hcid
+HIDD_NAME=hidd
+HID2HCI_NAME=hid2hci
+RFCOMM_NAME=rfcomm
+PAND_NAME=pand
+DUND_NAME=dund
+
+HCID_EXEC="`which $HCID_NAME || true`"
+HIDD_EXEC="`which $HIDD_NAME || true`"
+HID2HCI_EXEC="`which $HID2HCI_NAME || true`"
+RFCOMM_EXEC="`which $RFCOMM_NAME || true`"
+PAND_EXEC="`which $PAND_NAME || true`"
+DUND_EXEC="`which $DUND_NAME || true`"
+
+HCID_CONFIG="/etc/bluetooth/hcid.conf"
+RFCOMM_CONFIG="/etc/bluetooth/rfcomm.conf"
+
+# Source rc.bluetooth.conf
+. /etc/rc.d/rc.bluetooth.conf
+
+bluetooth_start() {
+ echo -n "Starting $DESC: "
+ if [ -x "$HIDD_EXEC" ] ; then
+ if $HIDD_ENABLE && [ -x "$HIDD_EXEC" -a -n "$HIDD_OPTIONS" ] ; then
+ $HIDD_EXEC $HIDD_OPTIONS || true
+ echo -n " $HIDD_NAME"
+ fi
+ else
+ echo "BlueZ does not appear to be installed!"
+ exit
+ fi
+ # Separate sdp daemon is depreciated, now internal function.
+ if $SDPD_ENABLE ; then
+ $HCID_EXEC -s -f $HCID_CONFIG
+ echo -n " $HCID_NAME sdp"
+ else
+ $HCID_EXEC -f $HCID_CONFIG
+ echo -n " $HCID_NAME"
+ fi
+ if $HID2HCI_ENABLE && [ -x "$HID2HCI_EXEC" ] ; then
+ $HID2HCI_EXEC --tohci > /dev/null 2>&1 || true
+ echo -n " $HID2HCI_NAME"
+ fi
+ if $RFCOMM_ENABLE && [ -x "$RFCOMM_EXEC" -a -f "$RFCOMM_CONFIG" ] ; then
+ $RFCOMM_EXEC -f $RFCOMM_CONFIG bind all || true
+ echo -n " $RFCOMM_NAME"
+ fi
+ if $DUND_ENABLE && [ -x "$DUND_EXEC" -a -n "$DUND_OPTIONS" ] ; then
+ $DUND_EXEC $DUND_OPTIONS
+ echo -n " $DUND_NAME"
+ fi
+ if $PAND_ENABLE && [ -x "$PAND_EXEC" -a -n "$PAND_OPTIONS" ] ; then
+ $PAND_EXEC $PAND_OPTIONS
+ echo -n " $PAND_NAME"
+ fi
+ if [ -x $REGISTER_PASSKEYS ]; then
+ $REGISTER_PASSKEYS
+ echo -n " passkeys"
+ fi
+ echo "."
+}
+
+bluetooth_stop() {
+ echo -n "Stopping $DESC: "
+ killall $PAND_NAME > /dev/null 2>&1 || true
+ echo -n " $PAND_NAME"
+ killall $DUND_NAME > /dev/null 2>&1 || true
+ echo -n " $DUND_NAME"
+ if [ -x "$RFCOMM_EXEC" ] ; then
+ $RFCOMM_EXEC release all > /dev/null 2>&1 || true
+ echo -n " $RFCOMM_NAME"
+ fi
+ killall $HIDD_NAME > /dev/null 2>&1 || true
+ echo -n " $HIDD_NAME"
+ killall $HCID_NAME > /dev/null 2>&1 || true
+ echo -n " $HCID_NAME"
+ echo "."
+}
+
+case "$1" in
+ start)
+ bluetooth_start
+ ;;
+ stop)
+ bluetooth_stop
+ ;;
+ restart)
+ bluetooth_stop
+ sleep 1
+ bluetooth_start
+ ;;
+ *)
+ echo "Usage: $0 start|stop|restart" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/source/n/bluez-utils/rc.bluetooth.conf b/source/n/bluez-utils/rc.bluetooth.conf
new file mode 100644
index 000000000..09df405fb
--- /dev/null
+++ b/source/n/bluez-utils/rc.bluetooth.conf
@@ -0,0 +1,33 @@
+# /etc/rc.d/rc.bluetooth.conf
+#
+# This file contains the configuration for the Bluetooth subsystem, BlueZ.
+
+# The lines below allow you to configure which BlueZ daemons will be started,
+# along with any daemon-specific options.
+
+# Allowed values for each (unless otherwise noted) are "true" and "false"
+
+# =============================================================================
+
+# The SDP daemon allows clients to detect supported Bluetooth services
+SDPD_ENABLE=true
+
+# The HID daemon supports Bluetooth Human Interface Devices
+HIDD_ENABLE=false
+HIDD_OPTIONS="--server"
+
+# This switches your Bluetooth device into HCI mode, use this if your input
+# device does not support Bluetooth HID
+HID2HCI_ENABLE=false
+
+# The RFCOMM daemon is used to simulate serial connections over Bluetooth
+RFCOMM_ENABLE=true
+
+# The DUN daemon is used for Dial Up Networking over Bluetooth
+DUND_ENABLE=false
+DUND_OPTIONS="--listen --persist --msdun call dun"
+
+# The PAN daemon is used to setup a Bluetooth network.
+PAND_ENABLE=false
+PAND_OPTIONS="--listen --role NAP"
+
diff --git a/source/n/bluez-utils/register-passkeys b/source/n/bluez-utils/register-passkeys
new file mode 100644
index 000000000..f57042c3c
--- /dev/null
+++ b/source/n/bluez-utils/register-passkeys
@@ -0,0 +1,19 @@
+#!/bin/bash
+# register every passkey found in $PASSKEYS_DIR
+
+PASSKEYS_DIR="/etc/bluetooth/passkeys/"
+PASSKEY_AGENT="/usr/lib/bluetooth/add-passkey"
+
+cd $PASSKEYS_DIR
+
+for f in $(ls -1 ${PASSKEYS_DIR}); do
+ if [ ! -r "$f" ]; then continue; fi
+
+ # default passkey
+ if [ "$f" == "default" ]; then
+ cat "$f" | $PASSKEY_AGENT --default > /dev/null 2>&1 &
+ # specific passkey
+ elif echo "$f" | egrep -q '([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2}'; then
+ cat "$f" | $PASSKEY_AGENT "$f" > /dev/null 2>&1 &
+ fi
+done
diff --git a/source/n/bluez-utils/slack-desc b/source/n/bluez-utils/slack-desc
new file mode 100644
index 000000000..159f02466
--- /dev/null
+++ b/source/n/bluez-utils/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+bluez-utils: bluez-utils (Utilities for working with Bluetooth(TM))
+bluez-utils:
+bluez-utils: The bluez-utils package contains utilities for supporting
+bluez-utils: Bluetooth(TM) on Linux.
+bluez-utils:
+bluez-utils: For more info, visit: http://www.bluez.org
+bluez-utils:
+bluez-utils:
+bluez-utils:
+bluez-utils:
+bluez-utils: