Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 602956 Details for
Bug 705166
sys-auth/pam_blue - add support for non-privileged users scan
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
support for non-privileged user scan
bluescan.patch (text/plain), 4.67 KB, created by
Andrea Postiglione
on 2020-01-11 16:24:55 UTC
(
hide
)
Description:
support for non-privileged user scan
Filename:
MIME Type:
Creator:
Andrea Postiglione
Created:
2020-01-11 16:24:55 UTC
Size:
4.67 KB
patch
obsolete
>--- src/bluescan.c.orig 2007-05-18 22:23:28.000000000 +1200 >+++ src/bluescan.c 2012-01-07 08:21:22.931623768 +1300 >@@ -62,31 +62,22 @@ > #endif /* DEBUG */ > > /* >-** derived form bluez-utils/tools/l2ping.c >-** tim - tim@spacetim.de >-*/ >- >-/* Improved connection timeout >-** David De Sousa - davidesousa@gmail.com >+** derived from bluez-utils/tools/hcitool.c > */ > > int bluescan > (struct entrybuff *enbfptr) > { >- struct sockaddr_l2 addr; >- socklen_t optlen; > unsigned char *buf; >- char str[18]; >- int i, sk, lost; >- int size = 44; >- int ident = 200; > int timeout; > bdaddr_t bdaddr; >- long skctl; // Socket Flags >- /* Setting variables for select to work. */ >- fd_set skset; > struct timeval tv; >- int lon, retval; >+ int retval; >+ char name[248]; >+ int opt, dd; >+ int dev_id = -1; >+ >+ retval = false; > > bacpy(&bdaddr, BDADDR_ANY); > >@@ -96,165 +87,29 @@ > timeout = enbfptr->timeout; > > >- buf = malloc(L2CAP_CMD_HDR_SIZE + size); >- if (!buf) { >- show_debug("Can't allocate buffer"); >- return(false); >- } >- >- /* Create socket */ >- sk = socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_L2CAP); >- if (sk < 0) { >- show_debug("Can't create socket"); >- free(buf); >- return(false); >- } >- >- /* Bind to local address */ >- memset(&addr, 0, sizeof(addr)); >- addr.l2_family = AF_BLUETOOTH; >- bacpy(&addr.l2_bdaddr, &bdaddr); >- >- if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { >- show_debug("Can't bind socket"); >- close(sk); >- free(buf); >- return(false); >- } >- >- /* Set non-blocking state for the socket. DDS */ >- skctl = fcntl(sk, F_GETFL, NULL); >- skctl |= O_NONBLOCK; >- fcntl(sk, F_SETFL, skctl); >- >- > /* Connect to remote device */ >- memset(&addr, 0, sizeof(addr)); >- addr.l2_family = AF_BLUETOOTH; >- str2ba(enbfptr->btmac, &addr.l2_bdaddr); >- >- /* Connecting with timeout. */ >- if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { >- if (errno == EINPROGRESS) { >- tv.tv_sec = timeout; >- tv.tv_usec = 0; >- FD_ZERO(&skset); >- FD_SET(sk, &skset); >- if (select(sk+1, NULL, &skset, NULL, &tv) > 0) { >- lon = sizeof(int); >- getsockopt(sk, SOL_SOCKET, SO_ERROR, (void*)(&retval), &lon); >- if (retval) >- show_debug ("Error Connecting!!!"); >- else >- show_debug ("Connected!!!"); >- } >- else { >- show_debug ("Connection Timeout [bluetooth device up?]"); >- retval = 1; >- } >- } >- else { >- show_debug ("Error Connecting"); >- retval = 1; >- } >- >- if (retval) { >- close(sk); >- free(buf); >- return(false); >- } >- } >+ str2ba(enbfptr->btmac, &bdaddr); > >- /* Set socket to original mode (blocking). */ >- >- skctl = fcntl(sk, F_GETFL, NULL); >- skctl &= (~O_NONBLOCK); >- fcntl(sk, F_SETFL, skctl); >- >- /* Get local address */ >- memset(&addr, 0, sizeof(addr)); >- optlen = sizeof(addr); >- >- if (getsockname(sk, (struct sockaddr *) &addr, &optlen) < 0) { >- show_debug("Can't get local address"); >- close(sk); >- free(buf); >- return(false); >+ if (dev_id < 0) { >+ dev_id = hci_get_route(&bdaddr); >+ if (dev_id < 0) { >+ fprintf(stderr, "Device is not available.\n"); >+ exit(1); >+ } > } > >- ba2str(&addr.l2_bdaddr, str); >- >- /* Initialize buffer */ >- for (i = 0; i < size; i++) >- buf[L2CAP_CMD_HDR_SIZE + i] = (i % 40) + 'A'; >- >- l2cap_cmd_hdr *cmd = (l2cap_cmd_hdr *) buf; >- >- /* Build command header */ >- cmd->code = L2CAP_ECHO_REQ; >- cmd->ident = ident; >- cmd->len = htobs(size); >- >- /* Send Echo Request */ >- if (send(sk, buf, L2CAP_CMD_HDR_SIZE + size, 0) <= 0) { >- show_debug("Send failed"); >- close(sk); >- free(buf); >- return(false); >+ dd = hci_open_dev(dev_id); >+ if (dd < 0) { >+ perror("HCI device open failed"); >+ exit(1); > } > >- /* Wait for Echo Response */ >- lost = 0; >- while (1) { >- struct pollfd pf[1]; >- int err; >- >- pf[0].fd = sk; >- pf[0].events = POLLIN; >- >- if ((err = poll(pf, 1, timeout * 1000)) < 0) { >- show_debug("Poll failed"); >- close(sk); >- free(buf); >- return(false); >- } >- >- if (!err) { >- lost = 1; >- break; >- } >- >- if ((err = recv(sk, buf, L2CAP_CMD_HDR_SIZE + size, 0)) < 0) { >- show_debug("Recv failed"); >- close(sk); >- free(buf); >- return(false); >- } >- >- if (!err){ >- show_debug("Disconnected\n"); >- close(sk); >- free(buf); >- return(false); >- } >- >- cmd->len = btohs(cmd->len); >+ if (hci_read_remote_name(dd, &bdaddr, sizeof(name), name, 25000) == 0) >+ retval = true; > >- if (cmd->ident != ident) >- continue; >+ close(dd); > >- if (cmd->code == L2CAP_ECHO_RSP) >- break; >- if (cmd->code == L2CAP_COMMAND_REJ) { >- show_debug("Peer doesn't support Echo packets\n"); >- close(sk); >- free(buf); >- return(false); >- } >- >- } > show_debug("pam_blue successful!"); >- close(sk); > free(buf); >- return(true); >+ return(retval); > }
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 705166
: 602956 |
603724
|
613940