FreeBSD Bugzilla – Attachment 138592 Details for
Bug 184597
[PATCH] Fix rfcomm_sppd(1) pseudo slave TTY mode
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
rfcomm_sppd-to-pts-openpty.2.diff
rfcomm_sppd-to-pts-openpty.2.diff (text/x-diff; charset=us-ascii), 7.16 KB, created by
Tobias Rehbein
on 2013-12-12 18:11:40 UTC
(
hide
)
Description:
rfcomm_sppd-to-pts-openpty.2.diff
Filename:
MIME Type:
Creator:
Tobias Rehbein
Created:
2013-12-12 18:11:40 UTC
Size:
7.16 KB
patch
obsolete
>diff --git a/usr.bin/bluetooth/rfcomm_sppd/Makefile b/usr.bin/bluetooth/rfcomm_sppd/Makefile >index 9018f6e..0da7498 100644 >--- a/usr.bin/bluetooth/rfcomm_sppd/Makefile >+++ b/usr.bin/bluetooth/rfcomm_sppd/Makefile >@@ -6,6 +6,6 @@ SRCS= rfcomm_sppd.c rfcomm_sdp.c > WARNS?= 2 > > DPADD= ${LIBBLUETOOTH} ${LIBSDP} >-LDADD= -lbluetooth -lsdp >+LDADD= -lbluetooth -lsdp -lutil > > .include <bsd.prog.mk> >diff --git a/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.1 b/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.1 >index 92c7d45..38a8153 100644 >--- a/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.1 >+++ b/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.1 >@@ -33,10 +33,9 @@ > .Nd RFCOMM Serial Port Profile daemon > .Sh SYNOPSIS > .Nm >-.Op Fl bhS >+.Op Fl bhtS > .Fl a Ar address > .Fl c Ar channel >-.Op Fl t Ar tty > .Sh DESCRIPTION > The > .Nm >@@ -53,7 +52,7 @@ Once connection is established, the > .Nm > utility provides access to the server's remote serial port via stdin/stdout > or via >-.Xr pty 4 >+.Xr pts 4 > interface if > .Fl t > option was specified. >@@ -72,8 +71,7 @@ daemon. > If > .Fl t > options was specified, >-the server side of the virtual serial port is attached to the pseudo-terminal >-.Ar tty . >+the server side of the virtual serial port is attached to a pseudo-terminal. > Otherwise the virtual serial port is attached to the stdin/stdout. > .Nm > should be run as root in order to communicate with >@@ -146,24 +144,22 @@ Display usage message and exit. > .It Fl S > Server mode; see > .Sx DESCRIPTION . >-.It Fl t Ar tty >-Slave pseudo tty name. >+.It Fl t >+Use slave pseudo tty. > If not set stdin/stdout will be used. > This option is required if > .Fl b > option was specified. > .El > .Sh FILES >-.Bl -tag -width ".Pa /dev/tty[p-sP-S][0-9a-v]" -compact >-.It Pa /dev/pty[p-sP-S][0-9a-v] >-master pseudo terminals >-.It Pa /dev/tty[p-sP-S][0-9a-v] >+.Bl -tag -width ".Pa /dev/pts/[num]" -compact >+.It Pa /dev/pts/[num] > slave pseudo terminals > .El > .Sh EXIT STATUS > .Ex -std > .Sh EXAMPLES >-.Dl "rfcomm_sppd -a 00:01:02:03:04:05 -c 1 -t /dev/ttyp1" >+.Dl "rfcomm_sppd -a 00:01:02:03:04:05 -c 1 -t" > .Pp > Will start the > .Nm >@@ -171,13 +167,17 @@ utility and open RFCOMM connection to the server at > .Li 00:01:02:03:04:05 > and channel > .Li 1 . >-Once the connection has been established, >-.Pa /dev/ttyp1 >+Once the connection has been established, a >+.Xr pts 4 > can be used to talk to the remote serial port on the server. >+.Nm >+prints the name of the >+.Xr pts 4 >+to use. > .Sh SEE ALSO > .Xr bluetooth 3 , > .Xr ng_btsocket 4 , >-.Xr pty 4 , >+.Xr pts 4 , > .Xr rfcomm_pppd 8 , > .Xr sdpd 8 > .Sh AUTHORS >diff --git a/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.c b/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.c >index 4e0d04b..c052063 100644 >--- a/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.c >+++ b/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.c >@@ -32,6 +32,7 @@ > */ > > #include <sys/stat.h> >+#include <sys/types.h> > #include <bluetooth.h> > #include <ctype.h> > #include <err.h> >@@ -49,6 +50,7 @@ > #include <syslog.h> > #include <termios.h> > #include <unistd.h> >+#include <libutil.h> > > #define SPPD_IDENT "rfcomm_sppd" > #define SPPD_BUFFER_SIZE 1024 >@@ -58,7 +60,7 @@ int rfcomm_channel_lookup (bdaddr_t const *local, > bdaddr_t const *remote, > int service, int *channel, int *error); > >-static int sppd_ttys_open (char const *tty, int *amaster, int *aslave); >+static int sppd_ttys_open (char **tty, int *amaster, int *aslave); > static int sppd_read (int fd, char *buffer, int size); > static int sppd_write (int fd, char *buffer, int size); > static void sppd_sighandler (int s); >@@ -74,7 +76,8 @@ main(int argc, char *argv[]) > struct sockaddr_rfcomm ra; > bdaddr_t addr; > int n, background, channel, service, >- s, amaster, aslave, fd, doserver; >+ s, amaster, aslave, fd, doserver, >+ dopty; > fd_set rfd; > char *tty = NULL, *ep = NULL, buf[SPPD_BUFFER_SIZE]; > >@@ -82,9 +85,10 @@ main(int argc, char *argv[]) > background = channel = 0; > service = SDP_SERVICE_CLASS_SERIAL_PORT; > doserver = 0; >+ dopty = 0; > > /* Parse command line options */ >- while ((n = getopt(argc, argv, "a:bc:t:hS")) != -1) { >+ while ((n = getopt(argc, argv, "a:bc:thS")) != -1) { > switch (n) { > case 'a': /* BDADDR */ > if (!bt_aton(optarg, &addr)) { >@@ -130,11 +134,8 @@ main(int argc, char *argv[]) > background = 1; > break; > >- case 't': /* Slave TTY name */ >- if (optarg[0] != '/') >- asprintf(&tty, "%s%s", _PATH_DEV, optarg); >- else >- tty = optarg; >+ case 't': /* Open pseudo TTY */ >+ dopty = 1; > break; > > case 'S': >@@ -173,18 +174,18 @@ main(int argc, char *argv[]) > err(1, "Could not sigaction(SIGCHLD)"); > > /* Open TTYs */ >- if (tty == NULL) { >+ if (dopty) { >+ if (sppd_ttys_open(&tty, &amaster, &aslave) < 0) >+ exit(1); >+ >+ fd = amaster; >+ } else { > if (background) > usage(); > > amaster = STDIN_FILENO; > fd = STDOUT_FILENO; >- } else { >- if (sppd_ttys_open(tty, &amaster, &aslave) < 0) >- exit(1); >- >- fd = amaster; >- } >+ } > > /* Open RFCOMM connection */ > >@@ -359,70 +360,20 @@ main(int argc, char *argv[]) > > /* Open TTYs */ > static int >-sppd_ttys_open(char const *tty, int *amaster, int *aslave) >+sppd_ttys_open(char **tty, int *amaster, int *aslave) > { >- char pty[PATH_MAX], *slash; >- struct group *gr = NULL; >- gid_t ttygid; >+ char pty[PATH_MAX]; > struct termios tio; > >- /* >- * Construct master PTY name. The slave tty name must be less then >- * PATH_MAX characters in length, must contain '/' character and >- * must not end with '/'. >- */ >- >- if (strlen(tty) >= sizeof(pty)) { >- syslog(LOG_ERR, "Slave tty name is too long"); >- return (-1); >- } >- >- strlcpy(pty, tty, sizeof(pty)); >- slash = strrchr(pty, '/'); >- if (slash == NULL || slash[1] == '\0') { >- syslog(LOG_ERR, "Invalid slave tty name (%s)", tty); >- return (-1); >- } >- >- slash[1] = 'p'; >- >- if (strcmp(pty, tty) == 0) { >- syslog(LOG_ERR, "Master and slave tty are the same (%s)", tty); >- return (-1); >- } >- >- if ((*amaster = open(pty, O_RDWR, 0)) < 0) { >- syslog(LOG_ERR, "Could not open(%s). %s", pty, strerror(errno)); >- return (-1); >- } >- >- /* >- * Slave TTY >- */ >- >- if ((gr = getgrnam("tty")) != NULL) >- ttygid = gr->gr_gid; >- else >- ttygid = -1; >- >- (void) chown(tty, getuid(), ttygid); >- (void) chmod(tty, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); >- (void) revoke(tty); >+ cfmakeraw(&tio); > >- if ((*aslave = open(tty, O_RDWR, 0)) < 0) { >- syslog(LOG_ERR, "Could not open(%s). %s", tty, strerror(errno)); >- close(*amaster); >+ if (openpty(amaster, aslave, pty, &tio, NULL) == -1) { >+ syslog(LOG_ERR, "Could not openpty(). %s", strerror(errno)); > return (-1); > } > >- /* >- * Make slave TTY raw >- */ >- >- cfmakeraw(&tio); >- >- if (tcsetattr(*aslave, TCSANOW, &tio) < 0) { >- syslog(LOG_ERR, "Could not tcsetattr(). %s", strerror(errno)); >+ if ((*tty = strdup(pty)) == NULL) { >+ syslog(LOG_ERR, "Could not strdup(). %s", strerror(errno)); > close(*aslave); > close(*amaster); > return (-1); >@@ -496,7 +447,7 @@ usage(void) > "\t-a address Peer address (required in client mode)\n" \ > "\t-b Run in background\n" \ > "\t-c channel RFCOMM channel to connect to or listen on\n" \ >-"\t-t tty TTY name (required in background mode)\n" \ >+"\t-t use slave pseudo tty (required in background mode)\n" \ > "\t-S Server mode\n" \ > "\t-h Display this message\n", SPPD_IDENT); > exit(255);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 184597
:
138591
| 138592 |
145607