The patches below fix rfcomm_sppd to allow it to be used as a subprocess or pipe when communicating to a bluetooth device. It is not always useful to rely on rfcomm_sppd attaching itself to a tty, so we should handle the case when there is not TTY.
I attempted to mail the maintainer first, but I have not heard anything. Aaron Hsu --- Makefile.orig Thu Oct 23 00:00:42 2008 +++ Makefile Thu Oct 23 00:03:57 2008 @@ -2,7 +2,7 @@ COMMENT= bluetooth network tools DISTNAME= bluetooth-tools-20080217 -PKGNAME= ${DISTNAME}p0 +PKGNAME= ${DISTNAME}p1 CATEGORIES= net MAINTAINER= Uwe Stuehler <[EMAIL PROTECTED]> --- patches/patch-rfcomm_sppd_rfcomm_sppd_c.orig Mon Oct 27 20:33:29 2008 +++ patches/patch-rfcomm_sppd_rfcomm_sppd_c Wed Oct 22 23:57:37 2008 @@ -0,0 +1,35 @@ +$OpenBSD$ +--- rfcomm_sppd/rfcomm_sppd.c.orig Fri Sep 14 04:24:55 2007 ++++ rfcomm_sppd/rfcomm_sppd.c Wed Oct 22 23:57:09 2008 +@@ -228,18 +228,20 @@ main(int argc, char *argv[]) + * be used directly with stdio + */ + if (tty == NULL) { +- if (tcgetattr(tty_in, &t) < 0) +- err(EXIT_FAILURE, "tcgetattr"); ++ if (tcgetattr(tty_in, &t) < 0) { ++ if (errno != ENOTTY) ++ err(EXIT_FAILURE, "tcgetattr"); ++ } else { ++ memcpy(&tio, &t, sizeof(tio)); ++ t.c_lflag &= ~(ECHO | ICANON); ++ t.c_iflag &= ~(ICRNL); ++ ++ if (memcmp(&tio, &t, sizeof(tio))) { ++ if (tcsetattr(tty_in, TCSANOW, &t) < 0) ++ err(EXIT_FAILURE, "tcsetattr"); + +- memcpy(&tio, &t, sizeof(tio)); +- t.c_lflag &= ~(ECHO | ICANON); +- t.c_iflag &= ~(ICRNL); +- +- if (memcmp(&tio, &t, sizeof(tio))) { +- if (tcsetattr(tty_in, TCSANOW, &t) < 0) +- err(EXIT_FAILURE, "tcsetattr"); +- +- atexit(reset_tio); ++ atexit(reset_tio); ++ } + } + } else { + if (daemon(0, 0) < 0)