commit a09a93861baaf57323f65df3f9188b192ee78efd Author: CentOS Sources Date: Tue May 17 06:31:06 2022 -0400 import bluez-5.56-8.el9 diff --git a/.bluez.metadata b/.bluez.metadata new file mode 100644 index 0000000..ef5e331 --- /dev/null +++ b/.bluez.metadata @@ -0,0 +1 @@ +a862b9ddc039f34f7135bbee3c3e80040e82e046 SOURCES/bluez-5.56.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f035c34 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/bluez-5.56.tar.xz diff --git a/SOURCES/0001-build-Always-define-confdir-and-statedir.patch b/SOURCES/0001-build-Always-define-confdir-and-statedir.patch new file mode 100644 index 0000000..35f64e4 --- /dev/null +++ b/SOURCES/0001-build-Always-define-confdir-and-statedir.patch @@ -0,0 +1,35 @@ +From 5744f79d84ecee3929a682166034c5bbc36c0ef5 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 20 Sep 2017 12:49:10 +0200 +Subject: [PATCH 1/4] build: Always define confdir and statedir + +As we will need those paths to lock down on them. +--- + Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 9d25a815b..ac88c12e0 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -31,14 +31,14 @@ pkginclude_HEADERS = + AM_CFLAGS = $(WARNING_CFLAGS) $(MISC_CFLAGS) $(UDEV_CFLAGS) $(ell_cflags) + AM_LDFLAGS = $(MISC_LDFLAGS) + ++confdir = $(sysconfdir)/bluetooth ++statedir = $(localstatedir)/lib/bluetooth ++ + if DATAFILES + dbusdir = $(DBUS_CONFDIR)/dbus-1/system.d + dbus_DATA = src/bluetooth.conf + +-confdir = $(sysconfdir)/bluetooth + conf_DATA = +- +-statedir = $(localstatedir)/lib/bluetooth + state_DATA = + endif + +-- +2.21.0 + diff --git a/SOURCES/0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch b/SOURCES/0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch new file mode 100644 index 0000000..f79d3ad --- /dev/null +++ b/SOURCES/0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch @@ -0,0 +1,38 @@ +From 90b72b787a6ae6b9b0bf8ece238e108e8607a433 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Sat, 9 Nov 2013 18:13:43 +0100 +Subject: [PATCH 1/2] obex: Use GLib helper function to manipulate paths + +Instead of trying to do it by hand. This also makes sure that +relative paths aren't used by the agent. +--- + obexd/src/manager.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/obexd/src/manager.c b/obexd/src/manager.c +index f84384ae4..285c07c37 100644 +--- a/obexd/src/manager.c ++++ b/obexd/src/manager.c +@@ -650,14 +650,14 @@ static void agent_reply(DBusPendingCall *call, void *user_data) + DBUS_TYPE_STRING, &name, + DBUS_TYPE_INVALID)) { + /* Splits folder and name */ +- const char *slash = strrchr(name, '/'); ++ gboolean is_relative = !g_path_is_absolute(name); + DBG("Agent replied with %s", name); +- if (!slash) { +- agent->new_name = g_strdup(name); ++ if (is_relative) { ++ agent->new_name = g_path_get_basename(name); + agent->new_folder = NULL; + } else { +- agent->new_name = g_strdup(slash + 1); +- agent->new_folder = g_strndup(name, slash - name); ++ agent->new_name = g_path_get_basename(name); ++ agent->new_folder = g_path_get_dirname(name); + } + } + +-- +2.14.1 + diff --git a/SOURCES/0001-sdpd-Fix-leaking-buffers-stored-in-cstates-cache.patch b/SOURCES/0001-sdpd-Fix-leaking-buffers-stored-in-cstates-cache.patch new file mode 100644 index 0000000..11ce041 --- /dev/null +++ b/SOURCES/0001-sdpd-Fix-leaking-buffers-stored-in-cstates-cache.patch @@ -0,0 +1,468 @@ +From 4e6a2402ed4f46ea026ad0929fbc14faecf3a475 Mon Sep 17 00:00:00 2001 +From: Gopal Tiwari +Date: Wed, 1 Dec 2021 12:18:24 +0530 +Subject: [PATCH BlueZ] sdpd: Fix leaking buffers stored in cstates cache + +commit e79417ed7185b150a056d4eb3a1ab528b91d2fc0 +Author: Luiz Augusto von Dentz +Date: Thu Jul 15 11:01:20 2021 -0700 + + sdpd: Fix leaking buffers stored in cstates cache + + These buffer shall only be keep in cache for as long as they are + needed so this would cleanup any client cstates in the following + conditions: + + - There is no cstate on the response + - No continuation can be found for cstate + - Different request opcode + - Respond with an error + - Client disconnect + + Fixes: https://github.com/bluez/bluez/security/advisories/GHSA-3fqg-r8j5-f5xq +--- + src/sdpd-request.c | 170 ++++++++++++++++++++++++++++++++------------- + src/sdpd-server.c | 20 +++--- + src/sdpd.h | 3 + + unit/test-sdp.c | 2 +- + 4 files changed, 135 insertions(+), 60 deletions(-) + +diff --git a/src/sdpd-request.c b/src/sdpd-request.c +index 033d1e5bf..c8f5a2c72 100644 +--- a/src/sdpd-request.c ++++ b/src/sdpd-request.c +@@ -42,48 +42,78 @@ typedef struct { + + #define MIN(x, y) ((x) < (y)) ? (x): (y) + +-typedef struct _sdp_cstate_list sdp_cstate_list_t; ++typedef struct sdp_cont_info sdp_cont_info_t; + +-struct _sdp_cstate_list { +- sdp_cstate_list_t *next; ++struct sdp_cont_info { ++ int sock; ++ uint8_t opcode; + uint32_t timestamp; + sdp_buf_t buf; + }; + +-static sdp_cstate_list_t *cstates; ++static sdp_list_t *cstates; + +-/* FIXME: should probably remove it when it's found */ +-static sdp_buf_t *sdp_get_cached_rsp(sdp_cont_state_t *cstate) ++static int cstate_match(const void *data, const void *user_data) + { +- sdp_cstate_list_t *p; ++ const sdp_cont_info_t *cinfo = data; ++ const sdp_cont_state_t *cstate = user_data; + +- for (p = cstates; p; p = p->next) { +- /* Check timestamp */ +- if (p->timestamp != cstate->timestamp) +- continue; ++ /* Check timestamp */ ++ return cinfo->timestamp - cstate->timestamp; ++} ++ ++static void sdp_cont_info_free(sdp_cont_info_t *cinfo) ++{ ++ if (!cinfo) ++ return; ++ ++ cstates = sdp_list_remove(cstates, cinfo); ++ free(cinfo->buf.data); ++ free(cinfo); ++} ++ ++static sdp_cont_info_t *sdp_get_cont_info(sdp_req_t *req, ++ sdp_cont_state_t *cstate) ++{ ++ sdp_list_t *list; ++ ++ list = sdp_list_find(cstates, cstate, cstate_match); ++ if (list) { ++ sdp_cont_info_t *cinfo = list->data; + +- /* Check if requesting more than available */ +- if (cstate->cStateValue.maxBytesSent < p->buf.data_size) +- return &p->buf; ++ if (cinfo->opcode == req->opcode) ++ return cinfo; ++ ++ /* Cleanup continuation if the opcode doesn't match since its ++ * response buffer shall only be valid for the original requests ++ */ ++ sdp_cont_info_free(cinfo); ++ return NULL; + } + +- return 0; ++ /* Cleanup cstates if no continuation info could be found */ ++ sdp_cstate_cleanup(req->sock); ++ ++ return NULL; + } + +-static uint32_t sdp_cstate_alloc_buf(sdp_buf_t *buf) ++static uint32_t sdp_cstate_alloc_buf(sdp_req_t *req, sdp_buf_t *buf) + { +- sdp_cstate_list_t *cstate = malloc(sizeof(sdp_cstate_list_t)); ++ sdp_cont_info_t *cinfo = malloc(sizeof(sdp_cont_info_t)); + uint8_t *data = malloc(buf->data_size); + + memcpy(data, buf->data, buf->data_size); +- memset((char *)cstate, 0, sizeof(sdp_cstate_list_t)); +- cstate->buf.data = data; +- cstate->buf.data_size = buf->data_size; +- cstate->buf.buf_size = buf->data_size; +- cstate->timestamp = sdp_get_time(); +- cstate->next = cstates; +- cstates = cstate; +- return cstate->timestamp; ++ memset(cinfo, 0, sizeof(sdp_cont_info_t)); ++ cinfo->buf.data = data; ++ cinfo->buf.data_size = buf->data_size; ++ cinfo->buf.buf_size = buf->data_size; ++ cinfo->timestamp = sdp_get_time(); ++ cinfo->sock = req->sock; ++ cinfo->opcode = req->opcode; ++ ++ cstates = sdp_list_append(cstates, cinfo); ++ ++ return cinfo->timestamp; + } + + /* Additional values for checking datatype (not in spec) */ +@@ -274,14 +304,16 @@ static int sdp_set_cstate_pdu(sdp_buf_t *buf, sdp_cont_state_t *cstate) + return length; + } + +-static int sdp_cstate_get(uint8_t *buffer, size_t len, +- sdp_cont_state_t **cstate) ++static int sdp_cstate_get(sdp_req_t *req, uint8_t *buffer, size_t len, ++ sdp_cont_state_t **cstate, sdp_cont_info_t **cinfo) + { + uint8_t cStateSize = *buffer; + + SDPDBG("Continuation State size : %d", cStateSize); + + if (cStateSize == 0) { ++ /* Cleanup cstates if request doesn't contain a cstate */ ++ sdp_cstate_cleanup(req->sock); + *cstate = NULL; + return 0; + } +@@ -306,6 +338,8 @@ static int sdp_cstate_get(uint8_t *buffer, size_t len, + SDPDBG("Cstate TS : 0x%x", (*cstate)->timestamp); + SDPDBG("Bytes sent : %d", (*cstate)->cStateValue.maxBytesSent); + ++ *cinfo = sdp_get_cont_info(req, *cstate); ++ + return 0; + } + +@@ -360,6 +394,7 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + uint16_t expected, actual, rsp_count = 0; + uint8_t dtd; + sdp_cont_state_t *cstate = NULL; ++ sdp_cont_info_t *cinfo = NULL; + uint8_t *pCacheBuffer = NULL; + int handleSize = 0; + uint32_t cStateId = 0; +@@ -399,9 +434,9 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + + /* + * Check if continuation state exists, if yes attempt +- * to get rsp remainder from cache, else send error ++ * to get rsp remainder from continuation info, else send error + */ +- if (sdp_cstate_get(pdata, data_left, &cstate) < 0) { ++ if (sdp_cstate_get(req, pdata, data_left, &cstate, &cinfo) < 0) { + status = SDP_INVALID_SYNTAX; + goto done; + } +@@ -451,7 +486,7 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + + if (rsp_count > actual) { + /* cache the rsp and generate a continuation state */ +- cStateId = sdp_cstate_alloc_buf(buf); ++ cStateId = sdp_cstate_alloc_buf(req, buf); + /* + * subtract handleSize since we now send only + * a subset of handles +@@ -459,6 +494,7 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + buf->data_size -= handleSize; + } else { + /* NULL continuation state */ ++ sdp_cont_info_free(cinfo); + sdp_set_cstate_pdu(buf, NULL); + } + } +@@ -468,13 +504,15 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + short lastIndex = 0; + + if (cstate) { +- /* +- * Get the previous sdp_cont_state_t and obtain +- * the cached rsp +- */ +- sdp_buf_t *pCache = sdp_get_cached_rsp(cstate); +- if (pCache) { +- pCacheBuffer = pCache->data; ++ if (cinfo) { ++ /* Check if requesting more than available */ ++ if (cstate->cStateValue.maxBytesSent >= ++ cinfo->buf.data_size) { ++ status = SDP_INVALID_CSTATE; ++ goto done; ++ } ++ ++ pCacheBuffer = cinfo->buf.data; + /* get the rsp_count from the cached buffer */ + rsp_count = get_be16(pCacheBuffer); + +@@ -518,6 +556,7 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + if (i == rsp_count) { + /* set "null" continuationState */ + sdp_set_cstate_pdu(buf, NULL); ++ sdp_cont_info_free(cinfo); + } else { + /* + * there's more: set lastIndexSent to +@@ -540,6 +579,7 @@ static int service_search_req(sdp_req_t *req, sdp_buf_t *buf) + + done: + free(cstate); ++ + if (pattern) + sdp_list_free(pattern, free); + +@@ -619,15 +659,21 @@ static int extract_attrs(sdp_record_t *rec, sdp_list_t *seq, sdp_buf_t *buf) + } + + /* Build cstate response */ +-static int sdp_cstate_rsp(sdp_cont_state_t *cstate, sdp_buf_t *buf, +- uint16_t max) ++static int sdp_cstate_rsp(sdp_cont_info_t *cinfo, sdp_cont_state_t *cstate, ++ sdp_buf_t *buf, uint16_t max) + { +- /* continuation State exists -> get from cache */ +- sdp_buf_t *cache = sdp_get_cached_rsp(cstate); ++ sdp_buf_t *cache; + uint16_t sent; + +- if (!cache) ++ if (!cinfo) ++ return 0; ++ ++ if (cstate->cStateValue.maxBytesSent >= cinfo->buf.data_size) { ++ sdp_cont_info_free(cinfo); + return 0; ++ } ++ ++ cache = &cinfo->buf; + + sent = MIN(max, cache->data_size - cstate->cStateValue.maxBytesSent); + memcpy(buf->data, cache->data + cstate->cStateValue.maxBytesSent, sent); +@@ -637,8 +683,10 @@ static int sdp_cstate_rsp(sdp_cont_state_t *cstate, sdp_buf_t *buf, + SDPDBG("Response size : %d sending now : %d bytes sent so far : %d", + cache->data_size, sent, cstate->cStateValue.maxBytesSent); + +- if (cstate->cStateValue.maxBytesSent == cache->data_size) ++ if (cstate->cStateValue.maxBytesSent == cache->data_size) { ++ sdp_cont_info_free(cinfo); + return sdp_set_cstate_pdu(buf, NULL); ++ } + + return sdp_set_cstate_pdu(buf, cstate); + } +@@ -652,6 +700,7 @@ static int sdp_cstate_rsp(sdp_cont_state_t *cstate, sdp_buf_t *buf, + static int service_attr_req(sdp_req_t *req, sdp_buf_t *buf) + { + sdp_cont_state_t *cstate = NULL; ++ sdp_cont_info_t *cinfo = NULL; + short cstate_size = 0; + sdp_list_t *seq = NULL; + uint8_t dtd = 0; +@@ -708,7 +757,7 @@ static int service_attr_req(sdp_req_t *req, sdp_buf_t *buf) + * if continuation state exists, attempt + * to get rsp remainder from cache, else send error + */ +- if (sdp_cstate_get(pdata, data_left, &cstate) < 0) { ++ if (sdp_cstate_get(req, pdata, data_left, &cstate, &cinfo) < 0) { + status = SDP_INVALID_SYNTAX; + goto done; + } +@@ -737,7 +786,7 @@ static int service_attr_req(sdp_req_t *req, sdp_buf_t *buf) + buf->buf_size -= sizeof(uint16_t); + + if (cstate) { +- cstate_size = sdp_cstate_rsp(cstate, buf, max_rsp_size); ++ cstate_size = sdp_cstate_rsp(cinfo, cstate, buf, max_rsp_size); + if (!cstate_size) { + status = SDP_INVALID_CSTATE; + error("NULL cache buffer and non-NULL continuation state"); +@@ -749,7 +798,7 @@ static int service_attr_req(sdp_req_t *req, sdp_buf_t *buf) + sdp_cont_state_t newState; + + memset((char *)&newState, 0, sizeof(sdp_cont_state_t)); +- newState.timestamp = sdp_cstate_alloc_buf(buf); ++ newState.timestamp = sdp_cstate_alloc_buf(req, buf); + /* + * Reset the buffer size to the maximum expected and + * set the sdp_cont_state_t +@@ -793,6 +842,7 @@ static int service_search_attr_req(sdp_req_t *req, sdp_buf_t *buf) + int scanned, rsp_count = 0; + sdp_list_t *pattern = NULL, *seq = NULL, *svcList; + sdp_cont_state_t *cstate = NULL; ++ sdp_cont_info_t *cinfo = NULL; + short cstate_size = 0; + uint8_t dtd = 0; + sdp_buf_t tmpbuf; +@@ -852,7 +902,7 @@ static int service_search_attr_req(sdp_req_t *req, sdp_buf_t *buf) + * if continuation state exists attempt + * to get rsp remainder from cache, else send error + */ +- if (sdp_cstate_get(pdata, data_left, &cstate) < 0) { ++ if (sdp_cstate_get(req, pdata, data_left, &cstate, &cinfo) < 0) { + status = SDP_INVALID_SYNTAX; + goto done; + } +@@ -906,7 +956,7 @@ static int service_search_attr_req(sdp_req_t *req, sdp_buf_t *buf) + sdp_cont_state_t newState; + + memset((char *)&newState, 0, sizeof(sdp_cont_state_t)); +- newState.timestamp = sdp_cstate_alloc_buf(buf); ++ newState.timestamp = sdp_cstate_alloc_buf(req, buf); + /* + * Reset the buffer size to the maximum expected and + * set the sdp_cont_state_t +@@ -917,7 +967,7 @@ static int service_search_attr_req(sdp_req_t *req, sdp_buf_t *buf) + } else + cstate_size = sdp_set_cstate_pdu(buf, NULL); + } else { +- cstate_size = sdp_cstate_rsp(cstate, buf, max); ++ cstate_size = sdp_cstate_rsp(cinfo, cstate, buf, max); + if (!cstate_size) { + status = SDP_INVALID_CSTATE; + SDPDBG("Non-null continuation state, but null cache buffer"); +@@ -974,6 +1024,9 @@ static void process_request(sdp_req_t *req) + status = SDP_INVALID_PDU_SIZE; + goto send_rsp; + } ++ ++ req->opcode = reqhdr->pdu_id; ++ + switch (reqhdr->pdu_id) { + case SDP_SVC_SEARCH_REQ: + SDPDBG("Got a svc srch req"); +@@ -1020,6 +1073,8 @@ static void process_request(sdp_req_t *req) + + send_rsp: + if (status) { ++ /* Cleanup cstates on error */ ++ sdp_cstate_cleanup(req->sock); + rsphdr->pdu_id = SDP_ERROR_RSP; + put_be16(status, rsp.data); + rsp.data_size = sizeof(uint16_t); +@@ -1108,3 +1163,20 @@ void handle_request(int sk, uint8_t *data, int len) + + process_request(&req); + } ++ ++void sdp_cstate_cleanup(int sock) ++{ ++ sdp_list_t *list; ++ ++ /* Remove any cinfo for the client */ ++ for (list = cstates; list;) { ++ sdp_cont_info_t *cinfo = list->data; ++ ++ list = list->next; ++ ++ if (cinfo->sock != sock) ++ continue; ++ ++ sdp_cont_info_free(cinfo); ++ } ++} +diff --git a/src/sdpd-server.c b/src/sdpd-server.c +index dfd8b1f00..66ee7ba14 100644 +--- a/src/sdpd-server.c ++++ b/src/sdpd-server.c +@@ -146,16 +146,12 @@ static gboolean io_session_event(GIOChannel *chan, GIOCondition cond, gpointer d + + sk = g_io_channel_unix_get_fd(chan); + +- if (cond & (G_IO_HUP | G_IO_ERR)) { +- sdp_svcdb_collect_all(sk); +- return FALSE; +- } ++ if (cond & (G_IO_HUP | G_IO_ERR)) ++ goto cleanup; + + len = recv(sk, &hdr, sizeof(sdp_pdu_hdr_t), MSG_PEEK); +- if (len < 0 || (unsigned int) len < sizeof(sdp_pdu_hdr_t)) { +- sdp_svcdb_collect_all(sk); +- return FALSE; +- } ++ if (len < 0 || (unsigned int) len < sizeof(sdp_pdu_hdr_t)) ++ goto cleanup; + + size = sizeof(sdp_pdu_hdr_t) + ntohs(hdr.plen); + buf = malloc(size); +@@ -168,14 +164,18 @@ static gboolean io_session_event(GIOChannel *chan, GIOCondition cond, gpointer d + * inside handle_request() in order to produce ErrorResponse. + */ + if (len <= 0) { +- sdp_svcdb_collect_all(sk); + free(buf); +- return FALSE; ++ goto cleanup; + } + + handle_request(sk, buf, len); + + return TRUE; ++ ++cleanup: ++ sdp_svcdb_collect_all(sk); ++ sdp_cstate_cleanup(sk); ++ return FALSE; + } + + static gboolean io_accept_event(GIOChannel *chan, GIOCondition cond, gpointer data) +diff --git a/src/sdpd.h b/src/sdpd.h +index 257411f03..4316aff67 100644 +--- a/src/sdpd.h ++++ b/src/sdpd.h +@@ -27,8 +27,11 @@ typedef struct request { + int flags; + uint8_t *buf; + int len; ++ uint8_t opcode; + } sdp_req_t; + ++void sdp_cstate_cleanup(int sock); ++ + void handle_internal_request(int sk, int mtu, void *data, int len); + void handle_request(int sk, uint8_t *data, int len); + +diff --git a/unit/test-sdp.c b/unit/test-sdp.c +index d3a885f19..8f95fcb71 100644 +--- a/unit/test-sdp.c ++++ b/unit/test-sdp.c +@@ -235,7 +235,7 @@ static gboolean client_handler(GIOChannel *channel, GIOCondition cond, + tester_monitor('>', 0x0000, 0x0001, buf, len); + + g_assert(len > 0); +- g_assert((size_t) len == rsp_pdu->raw_size + rsp_pdu->cont_len); ++ g_assert_cmpuint(len, ==, rsp_pdu->raw_size + rsp_pdu->cont_len); + + g_assert(memcmp(buf, rsp_pdu->raw_data, rsp_pdu->raw_size) == 0); + +-- +2.26.2 + diff --git a/SOURCES/0002-systemd-Add-PrivateTmp-and-NoNewPrivileges-options.patch b/SOURCES/0002-systemd-Add-PrivateTmp-and-NoNewPrivileges-options.patch new file mode 100644 index 0000000..d6dff2a --- /dev/null +++ b/SOURCES/0002-systemd-Add-PrivateTmp-and-NoNewPrivileges-options.patch @@ -0,0 +1,38 @@ +From 36a44fc05feebe1aab16c33a1121f952986b2801 Mon Sep 17 00:00:00 2001 +From: Craig Andrews +Date: Wed, 13 Sep 2017 15:23:09 +0200 +Subject: [PATCH 2/4] systemd: Add PrivateTmp and NoNewPrivileges options + +PrivateTmp makes bluetoothd's /tmp and /var/tmp be inside a different +namespace. This is useful to secure access to temporary files of the +process. + +NoNewPrivileges ensures that service process and all its children +can never gain new privileges through execve(), lowering the risk of +possible privilege escalations. +--- + src/bluetooth.service.in | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/bluetooth.service.in b/src/bluetooth.service.in +index f9faaa452..7c2f60bb4 100644 +--- a/src/bluetooth.service.in ++++ b/src/bluetooth.service.in +@@ -12,8 +12,14 @@ NotifyAccess=main + #Restart=on-failure + CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE + LimitNPROC=1 ++ ++# Filesystem lockdown + ProtectHome=true + ProtectSystem=full ++PrivateTmp=true ++ ++# Privilege escalation ++NoNewPrivileges=true + + [Install] + WantedBy=bluetooth.target +-- +2.21.0 + diff --git a/SOURCES/0003-systemd-Add-more-filesystem-lockdown.patch b/SOURCES/0003-systemd-Add-more-filesystem-lockdown.patch new file mode 100644 index 0000000..d3d6dd4 --- /dev/null +++ b/SOURCES/0003-systemd-Add-more-filesystem-lockdown.patch @@ -0,0 +1,44 @@ +From 13a348670fef0047555395ce6977e86e0005f8bd Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 13 Sep 2017 15:37:11 +0200 +Subject: [PATCH 3/4] systemd: Add more filesystem lockdown + +We can only access the configuration file as read-only and read-write +to the Bluetooth cache directory and sub-directories. +--- + Makefile.am | 3 +++ + src/bluetooth.service.in | 4 ++++ + 2 files changed, 7 insertions(+) + +diff --git a/Makefile.am b/Makefile.am +index ac88c12e0..0a6d09847 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -562,6 +562,9 @@ MAINTAINERCLEANFILES = Makefile.in \ + + SED_PROCESS = $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \ + $(SED) -e 's,@pkglibexecdir\@,$(pkglibexecdir),g' \ ++ -e 's,@libexecdir\@,$(libexecdir),g' \ ++ -e 's,@statedir\@,$(statedir),g' \ ++ -e 's,@confdir\@,$(confdir),g' \ + < $< > $@ + + %.service: %.service.in Makefile +diff --git a/src/bluetooth.service.in b/src/bluetooth.service.in +index 7c2f60bb4..4daedef2a 100644 +--- a/src/bluetooth.service.in ++++ b/src/bluetooth.service.in +@@ -17,6 +17,10 @@ LimitNPROC=1 + ProtectHome=true + ProtectSystem=full + PrivateTmp=true ++ProtectKernelTunables=true ++ProtectControlGroups=true ++ReadWritePaths=@statedir@ ++ReadOnlyPaths=@confdir@ + + # Privilege escalation + NoNewPrivileges=true +-- +2.21.0 + diff --git a/SOURCES/0004-systemd-More-lockdown.patch b/SOURCES/0004-systemd-More-lockdown.patch new file mode 100644 index 0000000..4f9c218 --- /dev/null +++ b/SOURCES/0004-systemd-More-lockdown.patch @@ -0,0 +1,34 @@ +From a6963e0402695d7b6a89c1b1c75c40dbd8fcde52 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 13 Sep 2017 15:38:26 +0200 +Subject: [PATCH 4/4] systemd: More lockdown + +bluetoothd does not need to execute mapped memory, or real-time +access, so block those. +--- + src/bluetooth.service.in | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/bluetooth.service.in b/src/bluetooth.service.in +index 4daedef2a..f18801866 100644 +--- a/src/bluetooth.service.in ++++ b/src/bluetooth.service.in +@@ -22,9 +22,15 @@ ProtectControlGroups=true + ReadWritePaths=@statedir@ + ReadOnlyPaths=@confdir@ + ++# Execute Mappings ++MemoryDenyWriteExecute=true ++ + # Privilege escalation + NoNewPrivileges=true + ++# Real-time ++RestrictRealtime=true ++ + [Install] + WantedBy=bluetooth.target + Alias=dbus-org.bluez.service +-- +2.21.0 + diff --git a/SOURCES/0005-media-rename-local-function-conflicting-with-pause-2.patch b/SOURCES/0005-media-rename-local-function-conflicting-with-pause-2.patch new file mode 100644 index 0000000..1e84610 --- /dev/null +++ b/SOURCES/0005-media-rename-local-function-conflicting-with-pause-2.patch @@ -0,0 +1,42 @@ +From 124dee151746b4a8a2e8a7194af78f2c82f75d79 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 3 Mar 2021 08:57:36 +0100 +Subject: [PATCH] media: rename local function conflicting with pause(2) + +profiles/audio/media.c:1284:13: error: conflicting types for 'pause'; have '_Bool(void *)' + 1284 | static bool pause(void *user_data) + | ^~~~~ +In file included from /usr/include/bits/sigstksz.h:24, + from /usr/include/signal.h:315, + from /usr/include/glib-2.0/glib/gbacktrace.h:36, + from /usr/include/glib-2.0/glib.h:34, + from profiles/audio/media.c:21: +/usr/include/unistd.h:478:12: note: previous declaration of 'pause' with type 'int(void)' + 478 | extern int pause (void); + | ^~~~~ +--- + profiles/audio/media.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/profiles/audio/media.c b/profiles/audio/media.c +index c84bbe22dc..3d8c4b69c3 100644 +--- a/profiles/audio/media.c ++++ b/profiles/audio/media.c +@@ -1281,7 +1281,7 @@ static bool stop(void *user_data) + return media_player_send(mp, "Stop"); + } + +-static bool pause(void *user_data) ++static bool pause_play(void *user_data) + { + struct media_player *mp = user_data; + +@@ -1331,7 +1331,7 @@ static struct avrcp_player_cb player_cb = { + .set_volume = set_volume, + .play = play, + .stop = stop, +- .pause = pause, ++ .pause = pause_play, + .next = next, + .previous = previous, + }; diff --git a/SOURCES/bluez-avdtp-fix-removing-all-seps-when-loading-from-cache.patch b/SOURCES/bluez-avdtp-fix-removing-all-seps-when-loading-from-cache.patch new file mode 100644 index 0000000..c2e3415 --- /dev/null +++ b/SOURCES/bluez-avdtp-fix-removing-all-seps-when-loading-from-cache.patch @@ -0,0 +1,41 @@ +From 28ddec8d6b829e002fa268c07b71e4c564ba9e16 Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Thu, 11 Mar 2021 07:36:07 -0800 +Subject: [PATCH] avdtp: Fix removing all remote SEPs when loading from cache + +If avdtp_discover is called after cache has been loaded it end up +removing all remote SEPs as they have not been discovered yet. + +Fixes: https://github.com/bluez/bluez/issues/102 +--- + profiles/audio/avdtp.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c +index 088ca58b3..1d5871c62 100644 +--- a/profiles/audio/avdtp.c ++++ b/profiles/audio/avdtp.c +@@ -3381,10 +3381,18 @@ int avdtp_discover(struct avdtp *session, avdtp_discover_cb_t cb, + session->discover = g_new0(struct discover_callback, 1); + + if (session->seps) { +- session->discover->cb = cb; +- session->discover->user_data = user_data; +- session->discover->id = g_idle_add(process_discover, session); +- return 0; ++ struct avdtp_remote_sep *sep = session->seps->data; ++ ++ /* Check that SEP have been discovered as it may be loaded from ++ * cache. ++ */ ++ if (sep->discovered) { ++ session->discover->cb = cb; ++ session->discover->user_data = user_data; ++ session->discover->id = g_idle_add(process_discover, ++ session); ++ return 0; ++ } + } + + err = send_request(session, FALSE, NULL, AVDTP_DISCOVER, NULL, 0); + diff --git a/SOURCES/bluez.gitignore b/SOURCES/bluez.gitignore new file mode 100644 index 0000000..137d2e5 --- /dev/null +++ b/SOURCES/bluez.gitignore @@ -0,0 +1,100 @@ +*.o +*.a +*.lo +*.la +*.so +.deps +.libs +.dirstamp +Makefile +Makefile.in +aclocal.m4 +config.guess +config.h +config.h.in +config.log +config.status +config.sub +configure +depcomp +compile +install-sh +libtool +ltmain.sh +missing +stamp-h1 +autom4te.cache + +ylwrap +lexer.c +parser.h +parser.c + +bluez.pc +lib/bluetooth +src/builtin.h +src/bluetoothd +audio/telephony.c +sap/sap.c +scripts/bluetooth.rules +scripts/97-bluetooth.rules +scripts/97-bluetooth-hid2hci.rules + +sbc/sbcdec +sbc/sbcenc +sbc/sbcinfo +sbc/sbctester + +attrib/gatttool +tools/avctrl +tools/avinfo +tools/bccmd +tools/ciptool +tools/dfubabel +tools/dfutool +tools/hciattach +tools/hciconfig +tools/hcieventmask +tools/hcisecfilter +tools/hcitool +tools/hid2hci +tools/rfcomm +tools/l2ping +tools/ppporc +tools/sdptool +cups/bluetooth +test/agent +test/bdaddr +test/hciemu +test/attest +test/hstest +test/avtest +test/l2test +test/rctest +test/scotest +test/gaptest +test/sdptest +test/lmptest +test/ipctest +test/btiotest +test/test-textfile +test/uuidtest +test/mpris-player +compat/dund +compat/hidd +compat/pand +unit/test-eir +mgmt/btmgmt +monitor/btmon +emulator/btvirt + +doc/*.bak +doc/*.stamp +doc/bluez.* +doc/bluez-*.txt +doc/*.sgml +doc/version.xml +doc/xml +doc/html +src/bluetoothd.8 +src/bluetooth.service diff --git a/SPECS/bluez.spec b/SPECS/bluez.spec new file mode 100644 index 0000000..2922a53 --- /dev/null +++ b/SPECS/bluez.spec @@ -0,0 +1,1207 @@ +%if 0%{?fedora} || 0%{?rhel} <= 8 +%bcond_without deprecated +%else +%bcond_with deprecated +%endif + +Name: bluez +Version: 5.56 +Release: 8%{?dist} +Summary: Bluetooth utilities +License: GPLv2+ +URL: http://www.bluez.org/ + +Source0: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.xz +Source1: bluez.gitignore + +# https://github.com/hadess/bluez/commits/obex-5.46 +Patch1: 0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch +# https://github.com/hadess/bluez/commits/systemd-hardening +Patch10: 0001-build-Always-define-confdir-and-statedir.patch +Patch11: 0002-systemd-Add-PrivateTmp-and-NoNewPrivileges-options.patch +Patch12: 0003-systemd-Add-more-filesystem-lockdown.patch +Patch13: 0004-systemd-More-lockdown.patch +Patch14: 0005-media-rename-local-function-conflicting-with-pause-2.patch +Patch15: bluez-avdtp-fix-removing-all-seps-when-loading-from-cache.patch +Patch16: 0001-sdpd-Fix-leaking-buffers-stored-in-cstates-cache.patch + +BuildRequires: dbus-devel >= 1.6 +BuildRequires: glib2-devel +BuildRequires: libell-devel >= 0.37 +BuildRequires: libical-devel +BuildRequires: make +BuildRequires: readline-devel +# For bluetooth mesh +BuildRequires: json-c-devel +# For cable pairing +BuildRequires: systemd-devel +# For printing +BuildRequires: cups-devel +# For autoreconf +BuildRequires: libtool automake autoconf + +Requires: dbus >= 1.6 +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description +Utilities for use in Bluetooth applications: + - avinfo + - bluemoon + - bluetoothctl + - bluetoothd + - btattach + - btmon + - hex2hcd + - l2ping + - l2test + - mpris-proxy + - rctest + +The BLUETOOTH trademarks are owned by Bluetooth SIG, Inc., U.S.A. + +%package cups +Summary: CUPS printer backend for Bluetooth printers +Requires: bluez%{?_isa} = %{version}-%{release} +Requires: cups + +%description cups +This package contains the CUPS backend + +%if %{with deprecated} +%package deprecated +Summary: Deprecated Bluetooth applications +Requires: bluez%{?_isa} = %{version}-%{release} +Obsoletes: bluez < 5.55-2 + +%description deprecated +Bluetooth applications that have bee deprecated by upstream. They have been +replaced by funcationality in the core bluetoothctl and will eventually +be dropped by upstream. Utilities include: + - ciptool + - gatttool + - hciattach + - hciconfig + - hcidump + - hcitool + - rfcomm + - sdptool +%endif + +%package libs +Summary: Libraries for use in Bluetooth applications + +%description libs +Libraries for use in Bluetooth applications. + +%package libs-devel +Summary: Development libraries for Bluetooth applications +Requires: bluez-libs%{?_isa} = %{version}-%{release} + +%description libs-devel +bluez-libs-devel contains development libraries and headers for +use in Bluetooth applications. + +%package hid2hci +Summary: Put HID proxying bluetooth HCI's into HCI mode +Requires: bluez%{?_isa} = %{version}-%{release} + +%description hid2hci +Most allinone PC's and bluetooth keyboard / mouse sets which include a +bluetooth dongle, ship with a so called HID proxying bluetooth HCI. +The HID proxying makes the keyboard / mouse show up as regular USB HID +devices (after connecting using the connect button on the device + keyboard), +which makes them work without requiring any manual configuration. + +The bluez-hid2hci package contains the hid2hci utility and udev rules to +automatically switch supported Bluetooth devices into regular HCI mode. + +Install this package if you want to use the bluetooth function of the HCI +with other bluetooth devices like for example a mobile phone. + +Note that after installing this package you will first need to pair your +bluetooth keyboard and mouse with the bluetooth adapter before you can use +them again. Since you cannot use your bluetooth keyboard and mouse until +they are paired, this will require the use of a regular (wired) USB keyboard +and mouse. + +%package mesh +Summary: Bluetooth mesh +Requires: bluez%{?_isa} = %{version}-%{release} +Requires: bluez-libs%{?_isa} = %{version}-%{release} + +%description mesh +Services for bluetooth mesh + +%package obexd +Summary: Object Exchange daemon for sharing content +Requires: bluez%{?_isa} = %{version}-%{release} +Requires: bluez-libs%{?_isa} = %{version}-%{release} + +%description obexd +Object Exchange daemon for sharing files, contacts etc over bluetooth + +%prep +%autosetup -p1 + +%build +autoreconf -vif +%configure --enable-tools --enable-library \ +%if %{with deprecated} + --enable-deprecated \ +%endif + --enable-sixaxis --enable-cups --enable-nfc --enable-mesh \ + --enable-hid2hci --enable-testing \ + --with-systemdsystemunitdir=%{_unitdir} \ + --with-systemduserunitdir=%{_userunitdir} + +%{make_build} + +%install +%{make_install} + +%if %{with deprecated} +# "make install" fails to install gatttool, necessary for Bluetooth Low Energy +# Red Hat Bugzilla bug #1141909, Debian bug #720486 +install -m0755 attrib/gatttool $RPM_BUILD_ROOT%{_bindir} +%endif + +# "make install" fails to install avinfo +# Red Hat Bugzilla bug #1699680 +install -m0755 tools/avinfo $RPM_BUILD_ROOT%{_bindir} + +# btmgmt is not installed by "make install", but it is useful for debugging +# some issues and to set the MAC address on HCIs which don't have their +# MAC address configured +install -m0755 tools/btmgmt $RPM_BUILD_ROOT%{_bindir} + +# Remove libtool archive +find $RPM_BUILD_ROOT -name '*.la' -delete + +# Remove the cups backend from libdir, and install it in /usr/lib whatever the install +if test -d ${RPM_BUILD_ROOT}/usr/lib64/cups ; then + install -D -m0755 ${RPM_BUILD_ROOT}/usr/lib64/cups/backend/bluetooth ${RPM_BUILD_ROOT}%_cups_serverbin/backend/bluetooth + rm -rf ${RPM_BUILD_ROOT}%{_libdir}/cups +fi + +rm -f ${RPM_BUILD_ROOT}/%{_sysconfdir}/udev/*.rules ${RPM_BUILD_ROOT}/usr/lib/udev/rules.d/*.rules +install -D -p -m0644 tools/hid2hci.rules ${RPM_BUILD_ROOT}/%{_udevrulesdir}/97-hid2hci.rules + +install -d -m0755 $RPM_BUILD_ROOT/%{_localstatedir}/lib/bluetooth +install -d -m0755 $RPM_BUILD_ROOT/%{_localstatedir}/lib/bluetooth/mesh + +mkdir -p $RPM_BUILD_ROOT/%{_libdir}/bluetooth/ + +#copy bluetooth config file and setup auto enable +install -D -p -m0644 src/main.conf ${RPM_BUILD_ROOT}/etc/bluetooth/main.conf +install -D -p -m0644 mesh/mesh-main.conf ${RPM_BUILD_ROOT}/etc/bluetooth/mesh-main.conf +sed -i 's/#\[Policy\]$/\[Policy\]/; s/#AutoEnable=false/AutoEnable=true/' ${RPM_BUILD_ROOT}/%{_sysconfdir}/bluetooth/main.conf + +# Install the HCI emulator, useful for testing +install emulator/btvirt ${RPM_BUILD_ROOT}/%{_libexecdir}/bluetooth/ + +#check +#make check + +%ldconfig_scriptlets libs + +%post +%systemd_post bluetooth.service + +%preun +%systemd_preun bluetooth.service + +%postun +%systemd_postun_with_restart bluetooth.service + +%post hid2hci +/sbin/udevadm trigger --subsystem-match=usb + +%post mesh +%systemd_user_post bluetooth-mesh.service + +%preun mesh +%systemd_user_preun bluetooth-mesh.service + +%post obexd +%systemd_user_post obex.service + +%preun obexd +%systemd_user_preun obex.service + +%files +%license COPYING +%doc AUTHORS ChangeLog +%dir %{_sysconfdir}/bluetooth +%config %{_sysconfdir}/bluetooth/main.conf +%config %{_sysconfdir}/dbus-1/system.d/bluetooth.conf +%{_bindir}/avinfo +%{_bindir}/bluemoon +%{_bindir}/bluetoothctl +%{_bindir}/btattach +%{_bindir}/btmgmt +%{_bindir}/btmon +%{_bindir}/hex2hcd +%{_bindir}/l2ping +%{_bindir}/l2test +%{_bindir}/mpris-proxy +%{_bindir}/rctest +%{_mandir}/man1/btattach.1.* +%{_mandir}/man1/l2ping.1.* +%{_mandir}/man1/rctest.1.* +%{_mandir}/man8/bluetoothd.8.* +%dir %{_libexecdir}/bluetooth +%{_libexecdir}/bluetooth/bluetoothd +%{_libdir}/bluetooth/ +%{_localstatedir}/lib/bluetooth +%{_datadir}/dbus-1/system-services/org.bluez.service +%{_unitdir}/bluetooth.service +%{_datadir}/zsh/site-functions/_bluetoothctl + +%if %{with deprecated} +%files deprecated +%{_bindir}/ciptool +%{_bindir}/gatttool +%{_bindir}/hciattach +%{_bindir}/hciconfig +%{_bindir}/hcidump +%{_bindir}/hcitool +%{_bindir}/rfcomm +%{_bindir}/sdptool +%{_mandir}/man1/ciptool.1.* +%{_mandir}/man1/hciattach.1.* +%{_mandir}/man1/hciconfig.1.* +%{_mandir}/man1/hcidump.1.* +%{_mandir}/man1/hcitool.1.* +%{_mandir}/man1/rfcomm.1.* +%{_mandir}/man1/sdptool.1.* +%endif + +%files libs +%{!?_licensedir:%global license %%doc} +%license COPYING +%{_libdir}/libbluetooth.so.* + +%files libs-devel +%doc doc/*txt +%{_libdir}/libbluetooth.so +%{_includedir}/bluetooth +%{_libdir}/pkgconfig/bluez.pc +%dir %{_libexecdir}/bluetooth +%{_libexecdir}/bluetooth/btvirt + +%files cups +%_cups_serverbin/backend/bluetooth + +%files hid2hci +/usr/lib/udev/hid2hci +%{_mandir}/man1/hid2hci.1* +%{_udevrulesdir}/97-hid2hci.rules + +%files mesh +%doc tools/mesh-gatt/*.json +%config %{_sysconfdir}/bluetooth/mesh-main.conf +%config %{_sysconfdir}/dbus-1/system.d/bluetooth-mesh.conf +%{_bindir}/meshctl +%{_bindir}/mesh-cfgclient +%{_datadir}/dbus-1/system-services/org.bluez.mesh.service +%{_libexecdir}/bluetooth/bluetooth-meshd +%{_unitdir}/bluetooth-mesh.service +%{_localstatedir}/lib/bluetooth/mesh + +%files obexd +%{_libexecdir}/bluetooth/obexd +%{_datadir}/dbus-1/services/org.bluez.obex.service +%{_userunitdir}/obex.service + +%changelog + +* Fri Dec 16 2021 Gopal Tiwari - 5.56-8 +- Fixing Gating and version + Related: rhbz#2027435 + +* Tue Dec 14 2021 Gopal Tiwari - 5.56-7 +- Fixing CVE-2021-41229 + Related: rhbz#2027435 + +* Mon Aug 09 2021 Mohan Boddu - 5.56-6 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Thu Apr 15 2021 Mohan Boddu - 5.56-5 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Sun Mar 14 2021 Peter Robinson - 5.56-4 +- Fix for avdtp audio disconnexts + +* Sun Mar 14 2021 Hans de Goede - 5.56-3 +- Drop obsolete udev rule + systemd service to call btattach on BT-HCIs + connected via UART from userspace, this is all handled in the kernel now +- Add the btmgmt util to the packaged files + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 5.56-2 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Sat Feb 27 2021 Peter Robinson - 5.56-1 +- Update to 5.56 + +* Tue Jan 26 2021 Fedora Release Engineering - 5.55-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sun Sep 13 2020 Peter Robinson - 5.55-2 +- Split tools marked as deprecated to separate sub package (rhbz #1887569) + +* Sun Sep 06 2020 Peter Robinson - 5.55-1 +- Update to 5.55 + +* Sat Aug 01 2020 Fedora Release Engineering - 5.54-4 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 5.54-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Apr 21 2020 Björn Esser - 5.54-2 +- Rebuild (json-c) + +* Sun Mar 15 2020 Peter Robinson - 5.54-1 +- bluez 5.54 + +* Sun Feb 16 2020 Peter Robinson 5.53-2 +- Minor mesh updates + +* Sun Feb 16 2020 Peter Robinson 5.53-1 +- bluez 5.53 + +* Tue Jan 28 2020 Fedora Release Engineering - 5.52-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Dec 12 2019 Peter Robinson 5.52-3 +- Minor bluetooth mesh improvements + +* Mon Dec 02 2019 Lubomir Rintel - 5.52-2 +- Package the btvirt binary + +* Sun Nov 3 2019 Peter Robinson 5.52-1 +- bluez 5.52 + +* Fri Sep 20 2019 Peter Robinson 5.51-1 +- bluez 5.51 + +* Wed Jul 24 2019 Fedora Release Engineering - 5.50-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jun 06 2019 Bastien Nocera - 5.50-8 ++ bluez-5.50-8 +- Backport loads of fixes from upstream, including: + - dbus-broker support (#1711594) + - a2dp codecs discovery + - discoverability filter support (used in gnome-bluetooth, #1583442) + - sixaxis pairing fixes + +* Tue Apr 16 2019 Eduardo Minguez - 5.50-7 +- Added avinfo + +* Sun Feb 17 2019 Igor Gnatenko - 5.50-6 +- Disable tests temporarily + +* Sun Feb 17 2019 Igor Gnatenko - 5.50-5 +- Rebuild for readline 8.0 + +* Thu Jan 31 2019 Fedora Release Engineering - 5.50-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jul 12 2018 Fedora Release Engineering - 5.50-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jun 27 2018 Bastien Nocera - 5.50-2 ++ bluez-5.50-2 +- Fix A2DP disconnections with some headsets + +* Mon Jun 04 2018 Bastien Nocera - 5.50-1 ++ bluez-5.50-1 +- Update to 5.50 + +* Fri Apr 20 2018 Bastien Nocera - 5.49-3 ++ bluez-5.49-3 +- Fix crash on non-LE adapters (#1567622) + +* Tue Mar 27 2018 Björn Esser - 5.49-2 +- Rebuilt for libjson-c.so.4 (json-c v0.13.1) on fc28 + +* Tue Mar 20 2018 Peter Robinson 5.49-1 +- Update to 5.49 + +* Tue Mar 06 2018 Björn Esser - 5.48-5 +- Rebuilt for libjson-c.so.4 (json-c v0.13.1) + +* Fri Feb 09 2018 Bastien Nocera - 5.48-4 +- Fix PulseAudio interaction on resume (#1534857) + +* Wed Feb 07 2018 Fedora Release Engineering - 5.48-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 5.48-2 +- Switch to %%ldconfig_scriptlets + +* Thu Dec 28 2017 Pete Walter - 5.48-1 +- Update to 5.48 + +* Sun Dec 10 2017 Björn Esser - 5.47-7 +- Rebuilt for libjson-c.so.3 + +* Fri Nov 10 2017 Leigh Scott - 5.47-6 +- Rebuild for libical 3.x + +* Fri Oct 27 2017 Don Zickus - 5.47-5 +- Enable unit tests (Marek Kasik) +- Resolves: #1502677 + +* Tue Oct 10 2017 Bastien Nocera - 5.47-4 ++ bluez-5.47-4 +- Fix invalid paths in service file (#1499518) + +* Wed Sep 20 2017 Bastien Nocera - 5.47-3 ++ bluez-5.47-3 +- Fix adapter name not picking up PrettyHostname + +* Wed Sep 20 2017 Bastien Nocera - 5.47-2 ++ bluez-5.47-2 +- Lockdown Bluetooth systemd service + +* Thu Sep 14 2017 Peter Robinson 5.47-1 +- New upstream 5.47 bugfix release +- Initial support for Bluetooth LE mesh +- Blueooth 5 fixes and improvements + +* Mon Sep 11 2017 Don Zickus - 5.46-6 +- sdpd heap fixes +Resolves: rhbz#1490911 + +* Thu Sep 07 2017 Hans de Goede - 5.46-5 +- Add scripts to automatically btattach serial-port / uart connected + Broadcom HCIs found on some Atom based x86 hardware + +* Mon Sep 04 2017 Bastien Nocera - 5.46-4 ++ bluez-5.46-4 +- Patches cleanup +- Add DualShock4 cable pairing support +- BIND_NOW support for RELRO +- iCade autopairing support + +* Wed Aug 02 2017 Fedora Release Engineering - 5.46-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 5.46-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jul 19 2017 Peter Robinson 4.46-1 +- Update to 5.46 + +* Tue May 16 2017 Peter Robinson 5.45-1 +- Update to 5.45 +- Minor spec cleanups +- Include api docs in devel package + +* Sun Mar 12 2017 Peter Robinson 5.44-1 +- Update to 5.44 +- Enable deprecated option to keep all usual tools +- Ship btattach tool +- Minor spec cleanups + +* Fri Feb 10 2017 Fedora Release Engineering - 5.43-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Feb 3 2017 Don Zickus 5.43-3 +- Configure systemctl settings for bluez-obexd correctly +- Resolves rhbz#1259827 + +* Thu Jan 12 2017 Igor Gnatenko - 5.43-2 +- Rebuild for readline 7.x + +* Mon Oct 31 2016 Don Zickus 5.43-1 +- Update to 5.43 + +* Tue Oct 25 2016 Don Zickus 5.42-2 +- Fix OBEX connections + +* Wed Oct 19 2016 Peter Robinson 5.42-1 +- Update to 5.42 + +* Mon Aug 1 2016 Don Zickus 5.41-1 +- Update to 5.41 + +* Thu Jul 7 2016 Don Zickus 5.40-2 +- obexd fixes to prevent crashes +- add /etc/bluetooth/main.conf config file +- set 'AutoEnable=true' in /etc/bluetooth/main.conf file + +* Tue May 31 2016 Peter Robinson 5.40-1 +- Update to 5.40 bugfix relesae + +* Fri Apr 15 2016 David Tardon - 5.39-2 +- rebuild for ICU 57.1 + +* Tue Apr 12 2016 Peter Robinson 5.39-1 +- Update to 5.39 bugfix relesae + +* Sun Apr 3 2016 Peter Robinson 5.38-1 +- Update to 5.38 + +* Wed Feb 03 2016 Fedora Release Engineering - 5.37-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jan 18 2016 David Tardon - 5.37-2 +- rebuild for libical 2.0.0 + +* Tue Dec 29 2015 Peter Robinson 5.37-1 +- Update to 5.37 + +* Fri Nov 13 2015 Peter Robinson 5.36-1 +- Update to 5.36 + +* Fri Oct 30 2015 Peter Robinson 5.35-2 +- Split obexd out into a sub package + +* Mon Oct 5 2015 Peter Robinson 5.35-1 +- Update to 5.35 + +* Tue Sep 8 2015 Peter Robinson 5.34-1 +- Update to 5.34 + +* Fri Jul 31 2015 Peter Robinson 5.33-1 +- Update to 5.33 + +* Wed Jul 8 2015 Peter Robinson 5.32-1 +- Update to 5.32 + +* Mon Jun 22 2015 Peter Robinson 5.31-1 +- Update to 5.31 + +* Wed Jun 17 2015 Fedora Release Engineering - 5.30-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Jun 11 2015 Lubomir Rintel - 5.30-2 +- Fix NAP connections (rh #1230461) + +* Wed Apr 29 2015 Peter Robinson - 5.30-1 +- Update to 5.30 +- Use %%license + +* Sun Mar 29 2015 David Tardon - 5.29-2 +- fix header file + +* Wed Mar 25 2015 Don Zickus 5.29-1 +- Update to 5.29 + +* Wed Mar 11 2015 Bastien Nocera 5.28-1 +- Update to 5.28 + +* Thu Nov 20 2014 Bastien Nocera 5.25-1 +- Update to 5.25 + +* Thu Oct 30 2014 Eric Smith 5.23-2 +- Install gatttool and mpris-proxy + +* Tue Sep 23 2014 Bastien Nocera 5.23-1 +- Update to 5.23 + +* Fri Aug 15 2014 Fedora Release Engineering - 5.18-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 5.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Apr 14 2014 Bastien Nocera 5.18-1 +- Update to 5.18 + +* Wed Mar 26 2014 Bastien Nocera 5.17-1 +- Update to 5.17 + +* Thu Mar 13 2014 Bastien Nocera 5.16-1 +- Update to 5.16 + +* Wed Jan 29 2014 Bastien Nocera 5.14-1 +- Update to 5.14 + +* Mon Jan 06 2014 Bastien Nocera 5.13-1 +- Update to 5.13 +- Enable sixaxis plugin by default + +* Thu Dec 12 2013 Bastien Nocera 5.12-2 +- This update fixes Sixaxis PS3 joypad detection + +* Wed Dec 11 2013 Bastien Nocera 5.12-1 +- Update to 5.12 +- Sixaxis PS3 joypad support is now upstream + +* Tue Dec 10 2013 Bastien Nocera 5.11-2 +- Add crasher fixes (rhbz #1027365) + +* Mon Nov 18 2013 Bastien Nocera 5.11-1 +- Update to 5.11 + +* Tue Nov 12 2013 Bastien Nocera 5.10-4 +- Default to the XDG cache dir for receiving files + +* Mon Oct 21 2013 Bastien Nocera 5.10-3 +- Remove a few obsolete BRs and deps, thanks to Marcel Holtmann + +* Mon Oct 21 2013 Bastien Nocera 5.10-2 +- Add non-upstreamable patch to make bluetooth-sendto work again + +* Thu Oct 17 2013 Bastien Nocera 5.10-1 +- Update to 5.10 + +* Fri Sep 20 2013 Kalev Lember 5.9-4 +- Obsolete blueman-nautilus as well + +* Fri Sep 20 2013 Kalev Lember 5.9-3 +- Obsolete blueman and obex-data-server + +* Fri Sep 20 2013 Bastien Nocera 5.9-2 +- Fix problem unsetting discoverable + +* Fri Sep 20 2013 Bastien Nocera 5.9-1 +- Update to 5.9 + +* Fri Aug 16 2013 Kalev Lember - 5.8-2 +- Don't pull in -libs for the other subpackages +- Remove a stray .la file + +* Sat Aug 10 2013 Kalev Lember - 5.8-1 +- Update to 5.8 +- Hardened build +- Use systemd rpm macros + +* Sat Aug 10 2013 Kalev Lember - 5.5-1 +- Update to 5.5, based on earlier work from + https://bugzilla.redhat.com/show_bug.cgi?id=974145 + +* Sat Aug 03 2013 Fedora Release Engineering - 4.101-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Jul 23 2013 Bastien Nocera 4.101-9 +- Fix trust setting in Sixaxis devices + +* Wed Jun 26 2013 Bastien Nocera 4.101-8 +- Another pass at fixing A2DP support (#964031) + +* Tue Jun 25 2013 Bastien Nocera 4.101-7 +- Remove socket interface enablement for A2DP (#964031) + +* Mon Jan 28 2013 Peter Robinson 4.101-6 +- Add -vif to autoreconf to fix build issues + +* Thu Jan 10 2013 Bastien Nocera 4.101-5 +- Use git to manage distro patches +- Add numerous upstream and downstream patches (#892929) + +* Wed Nov 21 2012 Bastien Nocera 4.101-4 +- Clean up requires and build requires +- Use CUPS macro (#772236) +- Enable audio socket so a2dp works in PulseAudio again (#874015) +- Fix hid2hci not working with recent kernels (#877998) + +* Wed Aug 15 2012 Bastien Nocera 4.101-3 +- Enable pairing Wiimote support (#847481) + +* Wed Jul 18 2012 Fedora Release Engineering - 4.101-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sun Jun 17 2012 Bastien Nocera 4.100-2 +- Add PS3 BD Remote patches (power saving) + +* Thu Jun 14 2012 Bastien Nocera 4.100-1 +- Update to 4.100 + +* Fri Jun 1 2012 Peter Robinson - 4.99-2 +- Add patch for udev change to fix FTBFS on rawhide +- Drop sbc patch as fixed in gcc 4.7 final + +* Tue Mar 06 2012 Bastien Nocera 4.99-1 +- Update to 4.99 + +* Tue Feb 28 2012 Petr Pisar - 4.98-3 +- Make headers compilable with g++ 4.7 (bug #791292) + +* Fri Feb 24 2012 Peter Robinson 4.98-2 +- Add mmx patch to fix build of sbc component +- clean up spec, drop ancient obsoletes + +* Fri Jan 13 2012 Bastien Nocera 4.98-1 +- Update to 4.98 + +* Thu Jan 12 2012 Fedora Release Engineering - 4.97-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Dec 30 2011 Bastien Nocera 4.97-1 +- Update to 4.97 + +* Mon Sep 5 2011 Hans de Goede 4.96-3 +- Put hid2hci into its own (optional) subpackage, so that people who + just want to use their HID proxying HCI with the keyboard and mouse + it came with, will have things working out of the box. +- Put udev rules in /lib/udev, where package installed udev rules belong + +* Mon Aug 29 2011 Hans de Goede 4.96-2 +- hid2hci was recently removed from udev and added to bluez in 4.93, + udev in Fedora-16 no longer has hid2hci -> enable it in our bluez builds. + This fixes bluetooth not working on machines where the bluetooth hci + initially shows up as a hid device, such as with many Dell laptops. + +* Mon Aug 01 2011 Bastien Nocera 4.96-1 +- Update to 4.96 + +* Tue Jul 05 2011 Bastien Nocera 4.95-1 +- Update to 4.95 + +* Tue Jun 28 2011 Lennart Poettering - 4.94-4 +- Enable bluetoothd on all upgrades from 4.87-6 and older, in order to fix up broken F15 installations + +* Thu Jun 23 2011 Bastien Nocera 4.94-3 +- Update patches to apply correctly +- First compilable version with hostnamed support + +* Mon Jun 20 2011 Lennart Poettering - 4.94-2 +- Enable bluetoothd by default +- Follow-up on https://bugzilla.redhat.com/show_bug.cgi?id=694519 also fixing upgrades + +* Wed Jun 01 2011 Bastien Nocera 4.94-1 +- Update to 4.94 + +* Wed May 25 2011 Bastien Nocera 4.93-1 +- Update to 4.93 + +* Thu Apr 7 2011 Lennart Poettering - 4.90-2 +- Update systemd patch to make it possible to disable bluez + +* Thu Mar 17 2011 Bastien Nocera 4.90-1 +- Update to 4.90 + +* Mon Feb 21 2011 Bastien Nocera 4.89-1 +- Update to 4.89 + +* Mon Feb 14 2011 Bastien Nocera 4.88-1 +- Update to 4.88 + +* Mon Feb 07 2011 Fedora Release Engineering - 4.87-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Jan 26 2011 Bastien Nocera 4.87-1 +- Update to 4.87 + +* Thu Jan 20 2011 Bastien Nocera 4.86-1 +- Update to 4.86 + +* Thu Jan 13 2011 Bastien Nocera 4.85-1 +- Update to 4.85 + +* Sun Dec 19 2010 Bastien Nocera 4.82-1 +- Update to 4.82 + +* Wed Dec 01 2010 Bastien Nocera 4.81-1 +- Update to 4.81 + +* Mon Nov 22 2010 Bastien Nocera 4.80-1 +- Update to 4.80 + +* Tue Nov 09 2010 Bastien Nocera 4.79-1 +- Update to 4.79 + +* Sat Nov 06 2010 Bastien Nocera 4.78-1 +- Update to 4.78 + +* Wed Oct 27 2010 Bastien Nocera 4.77-1 +- Update to 4.77 + +* Sat Oct 16 2010 Bastien Nocera 4.76-1 +- Update to 4.76 + +* Tue Oct 05 2010 Bastien Nocera 4.74-1 +- Update to 4.74 + +* Mon Oct 04 2010 Bastien Nocera 4.73-1 +- Update to 4.73 + +* Wed Sep 29 2010 jkeating - 4.72-2 +- Rebuilt for gcc bug 634757 + +* Wed Sep 22 2010 Bastien Nocera 4.72-1 +- Update to 4.72 + +* Fri Sep 17 2010 Bill Nottingham 4.71-4 +- sync release number (but not package) with F-14 + +* Tue Sep 14 2010 Bastien Nocera 4.71-3 +- systemd hookup and cleanups from Lennart + +* Thu Sep 09 2010 Bastien Nocera 4.71-1 +- Update to 4.71 + +* Thu Aug 26 2010 Bastien Nocera 4.70-1 +- Update to 4.70 + +* Sat Jul 31 2010 Orcan Ogetbil 4.69-4 +- Re-add Requires: dbus-bluez-pin-helper, since blueman is now in + +* Sat Jul 31 2010 Orcan Ogetbil 4.69-3 +- Comment out Requires: dbus-bluez-pin-helper for bootstrapping. Otherwise + it drags in the old blueman, built against python-2.6 +* Fri Jul 23 2010 Bastien Nocera 4.69-2 +- Don't allow installing bluez-compat on its own + +* Fri Jul 16 2010 Bastien Nocera 4.69-1 +- Update to 4.69 + +* Sun Jul 11 2010 Dan Horák 4.66-3 +- don't require the pin helper on s390(x) now, we can disable the whole + bluetooth stack in the future + +* Mon Jun 21 2010 Bastien Nocera 4.66-2 +- Move hidd, pand and dund man pages to the -compat + sub-package (#593578) + +* Mon Jun 14 2010 Bastien Nocera 4.66-1 +- Update to 4.66 + +* Mon May 24 2010 Bastien Nocera 4.65-1 +- Update to 4.65 + +* Thu Apr 29 2010 Bastien Nocera 4.64-1 +- Update to 4.64 + +* Mon Apr 12 2010 Bastien Nocera 4.63-3 +- And actually apply the aforementioned patch + +* Mon Apr 12 2010 Bastien Nocera 4.63-2 +- Fix pairing and using mice, due to recent BtIO changes + +* Fri Mar 26 2010 Bastien Nocera 4.63-1 +- Update to 4.63 + +* Mon Mar 08 2010 Bastien Nocera 4.62-1 +- Update to 4.62 + +* Mon Feb 15 2010 Bastien Nocera 4.61-1 +- Update to 4.61 +- Remove Wacom tablet enabler, now in the kernel +- Fix linking with new DSO rules (#564799) + +* Mon Feb 15 2010 Bastien Nocera 4.60-2 +- Fix typo in init script (#558993) + +* Sun Jan 10 2010 Bastien Nocera 4.60-1 +- Update to 4.60 + +* Fri Dec 25 2009 Bastien Nocera 4.59-1 +- Update to 4.59 + +* Mon Nov 16 2009 Bastien Nocera 4.58-1 +- Update to 4.58 + +* Mon Nov 02 2009 Bastien Nocera 4.57-2 +- Move the rfcomm.conf to the compat package, otherwise + the comments at the top of it are confusing + +* Sat Oct 31 2009 Bastien Nocera 4.57-1 +- Update to 4.57 + +* Sat Oct 10 2009 Bastien Nocera 4.56-1 +- Update to 4.56 + +* Fri Oct 09 2009 Bastien Nocera 4.55-2 +- Update cable pairing plugin to use libudev + +* Mon Oct 05 2009 Bastien Nocera 4.55-1 +- Update to 4.55 +- Add libcap-ng support to drop capabilities (#517660) + +* Thu Sep 24 2009 Bastien Nocera 4.54-1 +- Update to 4.54 + +* Wed Sep 16 2009 Bastien Nocera 4.53-2 +- Update cable plugin for gudev changes + +* Thu Sep 10 2009 Bastien Nocera 4.53-1 +- Update to 4.53 + +* Fri Sep 04 2009 Bastien Nocera 4.52-1 +- Update to 4.52 + +* Thu Sep 03 2009 Bastien Nocera 4.51-1 +- Update to 4.51 + +* Tue Sep 01 2009 Bastien Nocera 4.50-2 +- Remove obsoleted patches +- Add another CUPS backend patch +- Update cable pairing patch for new build system + +* Tue Sep 01 2009 Bastien Nocera 4.50-1 +- Update to 4.50 + +* Tue Aug 25 2009 Karsten Hopp 4.47-6 +- don't buildrequire libusb1 on s390* + +* Tue Aug 11 2009 Bastien Nocera 4.47-5 +- More upstream CUPS fixes + +* Tue Aug 11 2009 Bastien Nocera 4.47-4 +- Fix cups discovery the first time we discover a device + +* Mon Aug 10 2009 Ville Skyttä - 4.47-3 +- Use bzipped upstream tarball. + +* Wed Aug 05 2009 Bastien Nocera 4.47-2 +- Remove hid2hci calls, they're in udev now +- Work-around udev bug, bluetoothd wasn't getting enabled + on coldplug + +* Sun Aug 02 2009 Bastien Nocera 4.47-1 +- Update to 4.47 + +* Wed Jul 29 2009 Bastien Nocera 4.46-3 +- Add rfkill plugin to restore the state of the adapters + after coming back from a blocked adapter + +* Fri Jul 24 2009 Fedora Release Engineering - 4.46-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sun Jul 19 2009 Bastien Nocera 4.46-1 +- Update to 4.46 + +* Wed Jul 08 2009 Bastien Nocera 4.45-1 +- Update to 4.45 + +* Tue Jul 07 2009 Bastien Nocera 4.44-1 +- Update to 4.44 + +* Fri Jul 03 2009 Bastien Nocera 4.43-2 +- Up the required udev requires so bluetoothd gets started + on boot when an adapter is present + +* Fri Jul 03 2009 Bastien Nocera 4.43-1 +- Update to 4.43 + +* Sun Jun 21 2009 Bastien Nocera 4.42-2 +- Update to 4.42 + +* Thu Jun 11 2009 Bastien Nocera 4.41-2 +- Switch to on-demand start/stop using udev + +* Mon Jun 08 2009 Bastien Nocera 4.41-1 +- Update to 4.41 + +* Fri Jun 05 2009 Bastien Nocera 4.40-2 +- Add patch to allow Sixaxis pairing + +* Tue May 19 2009 Bastien Nocera 4.40-1 +- Update to 4.40 + +* Sat May 09 2009 Bastien Nocera 4.39-1 +- Update to 4.39 + +* Tue May 05 2009 Petr Lautrbach 4.38-3 +- Start/stop the bluetooth service via udev (#484345) + +* Tue May 05 2009 Bastien Nocera 4.38-2 +- Add patch to activate the Socket Mobile CF kit (#498756) + +* Mon May 04 2009 Bastien Nocera 4.38-1 +- Update to 4.38 + +* Wed Apr 29 2009 Bastien Nocera 4.37-2 +- Split off dund, pand, hidd, and rfcomm helper into a compat package + (#477890, #473892) + +* Thu Apr 23 2009 - Bastien Nocera - 4.37-1 +- Update to 4.37 + +* Fri Apr 17 2009 - Bastien Nocera - 4.36-1 +- Update to 4.36 + +* Sat Apr 11 2009 - Bastien Nocera - 4.35-1 +- Update to 4.35 + +* Fri Apr 03 2009 - Bastien Nocera - 4.34-3 +- Avoid disconnecting audio devices straight after they're connected + +* Fri Apr 03 2009 - Bastien Nocera - 4.34-2 +- Don't crash when audio devices are registered and the adapter + is removed + +* Sun Mar 29 2009 - Bastien Nocera - 4.34-1 +- Update to 4.34 + +* Tue Mar 24 2009 - Bastien Nocera - 4.33-11 +- Fix a possible crasher + +* Mon Mar 16 2009 - Bastien Nocera - 4.33-1 +- Update to 4.33 + +* Sat Mar 14 2009 - Bastien Nocera - 4.32-10 +- Fix a couple of warnings in the CUPS/BlueZ 4.x patch + +* Fri Mar 13 2009 - Bastien Nocera - 4.32-9 +- Switch Wacom Bluetooth tablet to mode 2 + +* Mon Mar 09 2009 - Bastien Nocera - 4.32-8 +- Port CUPS backend to BlueZ 4.x + +* Mon Mar 09 2009 - Bastien Nocera - 4.32-7 +- A (slightly) different fix for parsing to XML when it contains a NULL + +* Mon Mar 09 2009 - Bastien Nocera - 4.32-6 +- Fix sdp_copy_record(), so records are properly exported through D-Bus + +* Fri Mar 06 2009 - Bastien Nocera - 4.32-5 +- Fix SDP parsing to XML when it contains NULLs + +* Thu Mar 05 2009 - Bastien Nocera - 4.32-4 +- Work-around broken devices that export their names in ISO-8859-1 + (#450081) + +* Thu Mar 05 2009 - Bastien Nocera - 4.32-3 +- Fix permissions on the udev rules (#479348) + +* Wed Mar 04 2009 - Bastien Nocera - 4.32-2 +- Own /usr/lib*/bluetooth and children (#474632) + +* Mon Mar 2 2009 Lennart Poettering - 4.32-1 +- Update to 4.32 + +* Thu Feb 26 2009 Lennart Poettering - 4.31-1 +- Update to 4.31 + +* Mon Feb 23 2009 Fedora Release Engineering - 4.30-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 - Bastien Nocera - 4.30-2 +- Fix the cups backend being a libtool stub + +* Thu Feb 12 2009 - Bastien Nocera - 4.30-1 +- Update to 4.30 + +* Thu Feb 12 2009 Karsten Hopp 4.29-3 +- disable 0001-Add-icon-for-other-audio-device.patch, already upstream + +* Thu Feb 12 2009 Karsten Hopp 4.29-2 +- bluez builds fine on s390(x) and the packages are required to build + other packages, drop ExcludeArch + +* Mon Feb 09 2009 - Bastien Nocera - 4.29-1 +- Update to 4.29 + +* Mon Feb 02 2009 - Bastien Nocera - 4.28-1 +- Update to 4.28 + +* Mon Jan 19 2009 - Bastien Nocera - 4.27-1 +- Update to 4.27 + +* Fri Jan 09 2009 - Bastien Nocera - 4.26-1 +- Update to 4.26 + +* Sat Jan 03 2009 - Bastien Nocera - 4.25-1 +- Update to 4.25 + +* Tue Dec 09 2008 - Bastien Nocera - 4.22-2 +- Fix D-Bus configuration for latest D-Bus (#475069) + +* Mon Dec 08 2008 - Bastien Nocera - 4.22-1 +- Update to 4.22 + +* Mon Dec 01 2008 - Bastien Nocera - 4.21-1 +- Update to 4.21 + +* Fri Nov 21 2008 - Bastien Nocera - 4.19-1 +- Update to 4.19 + +* Mon Nov 17 2008 - Bastien Nocera - 4.18-1 +- Update to 4.18 + +* Mon Oct 27 2008 - Bastien Nocera - 4.17-2 +- Own /var/lib/bluetooth (#468717) + +* Sun Oct 26 2008 - Bastien Nocera - 4.17-1 +- Update to 4.17 + +* Tue Oct 21 2008 - Bastien Nocera - 4.16-1 +- Update to 4.16 + +* Mon Oct 20 2008 - Bastien Nocera - 4.15-1 +- Update to 4.15 + +* Fri Oct 17 2008 - Bastien Nocera - 4.14-2 +- Add script to autoload uinput on startup, so the PS3 remote + works out-of-the-box + +* Fri Oct 17 2008 - Bastien Nocera - 4.14-1 +- Update to 4.14 + +* Tue Oct 14 2008 - Bastien Nocera - 4.13-3 +- Update udev rules (#246840) + +* Mon Oct 13 2008 - Bastien Nocera - 4.13-2 +- Fix PS3 BD remote input event generation + +* Fri Oct 10 2008 - Bastien Nocera - 4.13-1 +- Update to 4.13 + +* Mon Oct 06 2008 - Bastien Nocera - 4.12-1 +- Update to 4.12 + +* Sat Oct 04 2008 - Bastien Nocera - 4.11-1 +- Update to 4.11 + +* Fri Oct 03 2008 - Bastien Nocera - 4.10-1 +- Update to 4.10 + +* Mon Sep 29 2008 - Bastien Nocera - 4.9-1 +- Update to 4.9 + +* Mon Sep 29 2008 - Bastien Nocera - 4.8-1 +- Update to 4.8 + +* Fri Sep 26 2008 - Bastien Nocera - 4.7-1 +- Update to 4.7 + +* Wed Sep 24 2008 - Bastien Nocera - 4.6-4 +- Fix patch application + +* Wed Sep 24 2008 - Bastien Nocera - 4.6-3 +- Add fuzz + +* Wed Sep 24 2008 - Bastien Nocera - 4.6-2 +- Fix possible crasher on resume from suspend + +* Sun Sep 14 2008 - David Woodhouse - 4.6-1 +- Update to 4.6 + +* Fri Sep 12 2008 - David Woodhouse - 4.5-4 +- SDP browse fixes + +* Fri Sep 12 2008 - David Woodhouse - 4.5-3 +- Bluez-alsa needs to provide/obsolete bluez-utils-alsa +- Use versioned Obsoletes: + +* Fri Sep 12 2008 - David Woodhouse - 4.5-2 +- Change main utils package name to 'bluez'; likewise its subpackages +- Remove references to obsolete initscripts (hidd,pand,dund) + +* Fri Sep 12 2008 - Bastien Nocera - 4.5-1 +- Update to 4.5 +- Fix initscript to actually start bluetoothd by hand +- Add chkconfig information to the initscript + +* Tue Sep 09 2008 - David Woodhouse - 4.4-2 +- Fix rpmlint problems +- Fix input device handling + +* Tue Sep 09 2008 - Bastien Nocera - 4.4-1 +- Update to 4.4 +- Update source address, and remove unneeded deps (thanks Marcel) + +* Mon Aug 11 2008 - Bastien Nocera - 4.1-1 +- Initial build