From 4dfb6f39c8b806269b860d503f7f549c8f14856f Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Oct 26 2016 12:32:13 +0000 Subject: Update to Samba 4.5.1 Guenther --- diff --git a/.gitignore b/.gitignore index d4b9649..e10dc13 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,4 @@ samba-3.6.0pre1.tar.gz /samba-4.5.0rc2.tar.xz /samba-4.5.0rc3.tar.xz /samba-4.5.0.tar.xz +/samba-4.5.1.tar.xz diff --git a/samba-4.5-fix_tevent_abi_issues.patch b/samba-4.5-fix_tevent_abi_issues.patch deleted file mode 100644 index 6f1e879..0000000 --- a/samba-4.5-fix_tevent_abi_issues.patch +++ /dev/null @@ -1,1597 +0,0 @@ -From e13b5ac52204bb8fb5569162d64a0e02111c86de Mon Sep 17 00:00:00 2001 -From: Stefan Metzmacher -Date: Wed, 27 Feb 2013 09:29:47 +0100 -Subject: [PATCH 01/12] s3:nmbd: fix talloc_zero_array() check in - nmbd_packets.c - -Signed-off-by: Stefan Metzmacher -Reviewed-by: Volker Lendecke - -Autobuild-User(master): Volker Lendecke -Autobuild-Date(master): Fri Sep 23 18:08:21 CEST 2016 on sn-devel-144 - -BUG: https://bugzilla.samba.org/show_bug.cgi?id=12283 - -(cherry picked from commit 4470f01605a2f09b054550ee5a8f8d3b4ebc2098) ---- - source3/nmbd/nmbd_packets.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index b608354..c9a2dc7 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1724,7 +1724,7 @@ static bool create_listen_pollfds(struct pollfd **pfds, - } - - attrs = talloc_array(NULL, struct socket_attributes, count); -- if (fds == NULL) { -+ if (attrs == NULL) { - DEBUG(1, ("create_listen_pollfds: malloc fail for attrs. " - "size %d\n", count)); - TALLOC_FREE(fds); --- -1.9.1 - - -From 5822d51b20780248082b9885af55d01250a09d48 Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 12:05:59 -0700 -Subject: [PATCH 02/12] s3: nmbd: Add fd, triggered elements to struct - socket_attributes. - -Zero the attrs array on allocation, and mirror the fd's. - -This will allow us to eventually remove source3/lib/events.c -dependency and make nmbd purely tevent based. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit d8ade0730797df22bfe28847e034eb6d116b0e00) ---- - source3/nmbd/nmbd_packets.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index c9a2dc7..619cc9a 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1683,6 +1683,8 @@ on subnet %s\n", rrec->response_id, inet_ntoa(rrec->packet->ip), subrec->subnet_ - struct socket_attributes { - enum packet_type type; - bool broadcast; -+ int fd; -+ bool triggered; - }; - - static bool create_listen_pollfds(struct pollfd **pfds, -@@ -1723,7 +1725,7 @@ static bool create_listen_pollfds(struct pollfd **pfds, - return true; - } - -- attrs = talloc_array(NULL, struct socket_attributes, count); -+ attrs = talloc_zero_array(NULL, struct socket_attributes, count); - if (attrs == NULL) { - DEBUG(1, ("create_listen_pollfds: malloc fail for attrs. " - "size %d\n", count)); -@@ -1734,11 +1736,13 @@ static bool create_listen_pollfds(struct pollfd **pfds, - num = 0; - - fds[num].fd = ClientNMB; -+ attrs[num].fd = ClientNMB; - attrs[num].type = NMB_PACKET; - attrs[num].broadcast = false; - num += 1; - - fds[num].fd = ClientDGRAM; -+ attrs[num].fd = ClientDGRAM; - attrs[num].type = DGRAM_PACKET; - attrs[num].broadcast = false; - num += 1; -@@ -1747,6 +1751,7 @@ static bool create_listen_pollfds(struct pollfd **pfds, - - if (subrec->nmb_sock != -1) { - fds[num].fd = subrec->nmb_sock; -+ attrs[num].fd = subrec->nmb_sock; - attrs[num].type = NMB_PACKET; - attrs[num].broadcast = false; - num += 1; -@@ -1754,6 +1759,7 @@ static bool create_listen_pollfds(struct pollfd **pfds, - - if (subrec->nmb_bcast != -1) { - fds[num].fd = subrec->nmb_bcast; -+ attrs[num].fd = subrec->nmb_bcast; - attrs[num].type = NMB_PACKET; - attrs[num].broadcast = true; - num += 1; -@@ -1761,6 +1767,7 @@ static bool create_listen_pollfds(struct pollfd **pfds, - - if (subrec->dgram_sock != -1) { - fds[num].fd = subrec->dgram_sock; -+ attrs[num].fd = subrec->dgram_sock; - attrs[num].type = DGRAM_PACKET; - attrs[num].broadcast = false; - num += 1; -@@ -1768,6 +1775,7 @@ static bool create_listen_pollfds(struct pollfd **pfds, - - if (subrec->dgram_bcast != -1) { - fds[num].fd = subrec->dgram_bcast; -+ attrs[num].fd = subrec->dgram_bcast; - attrs[num].type = DGRAM_PACKET; - attrs[num].broadcast = true; - num += 1; --- -1.9.1 - - -From ce0a36819b6d1fcf6c97a004227bdcb4a53143bc Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 12:12:43 -0700 -Subject: [PATCH 03/12] s3: nmbd: Ensure attrs array mirrors fd's array for - dns. - -This will allow us to eventually remove source3/lib/events.c -dependency and make nmbd purely tevent based. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit 7f0717e751930cd5da029c1852ff9f61f95e40b7) ---- - source3/nmbd/nmbd_packets.c | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index 619cc9a..2648679 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1919,8 +1919,23 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - if (fds == NULL) { - return true; - } -+ attrs = talloc_realloc(NULL, -+ attrs, -+ struct socket_attributes, -+ num_sockets + 1); -+ if (attrs == NULL) { -+ TALLOC_FREE(fds); -+ return true; -+ } - dns_pollidx = num_sockets; - fds[num_sockets].fd = dns_fd; -+ attrs[dns_pollidx].fd = dns_fd; -+ /* -+ * dummy values, we only need -+ * fd and triggered. -+ */ -+ attrs[dns_pollidx].type = NMB_PACKET; -+ attrs[dns_pollidx].broadcast = false; - num_sockets += 1; - } - #endif --- -1.9.1 - - -From 2d8baf18040b67f2d4504bded60cf03f65072cc5 Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 12:16:58 -0700 -Subject: [PATCH 04/12] s3: nmbd: Now attrs array mirrors fd's array use it in - preference. - -This will allow us to eventually remove source3/lib/events.c -dependency and make nmbd purely tevent based. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit 376e04656b6755d1a182430b39273a93495d00b2) ---- - source3/nmbd/nmbd_packets.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index 2648679..7321922 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -2004,7 +2004,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - client_port = DGRAM_PORT; - } - -- packet = read_packet(fds[i].fd, packet_type); -+ packet = read_packet(attrs[i].fd, packet_type); - if (!packet) { - continue; - } -@@ -2014,7 +2014,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - * only is set then check it came from one of our local nets. - */ - if (lp_bind_interfaces_only() && -- (fds[i].fd == client_fd) && -+ (attrs[i].fd == client_fd) && - (!is_local_net_v4(packet->ip))) { - DEBUG(7,("discarding %s packet sent to broadcast socket from %s:%d\n", - packet_name, inet_ntoa(packet->ip), packet->port)); -@@ -2053,10 +2053,10 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - - if (attrs[i].broadcast) { - /* this is a broadcast socket */ -- packet->send_fd = fds[i-1].fd; -+ packet->send_fd = attrs[i-1].fd; - } else { - /* this is already a unicast socket */ -- packet->send_fd = fds[i].fd; -+ packet->send_fd = attrs[i].fd; - } - - queue_packet(packet); --- -1.9.1 - - -From 6ad7738fd892b2edd75dc699e962dd557ebcf1b2 Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 12:18:37 -0700 -Subject: [PATCH 05/12] s3: nmbd: Add (currently unused) timeout and fd - handlers. - -This will allow us to eventually remove source3/lib/events.c -dependency and make nmbd purely tevent based. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit cca25c8f75147873280464eaf2699ff449f609ad) ---- - source3/nmbd/nmbd_packets.c | 26 ++++++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index 7321922..caef1db 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1872,6 +1872,32 @@ static void free_processed_packet_list(struct processed_packet **pp_processed_pa - } - - /**************************************************************************** -+ Timeout callback - just notice we timed out. -+***************************************************************************/ -+ -+static void nmbd_timeout_handler(struct tevent_context *ev, -+ struct tevent_timer *te, -+ struct timeval current_time, -+ void *private_data) -+{ -+ bool *got_timeout = private_data; -+ *got_timeout = true; -+} -+ -+/**************************************************************************** -+ fd callback - remember the fd that triggered. -+***************************************************************************/ -+ -+static void nmbd_fd_handler(struct tevent_context *ev, -+ struct tevent_fd *fde, -+ uint16_t flags, -+ void *private_data) -+{ -+ struct socket_attributes *attr = private_data; -+ attr->triggered = true; -+} -+ -+/**************************************************************************** - Listens for NMB or DGRAM packets, and queues them. - return True if the socket is dead - ***************************************************************************/ --- -1.9.1 - - -From 01573b2d214a20819226908f3e3653a513e78c11 Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 12:22:53 -0700 -Subject: [PATCH 06/12] s3: nmbd: Add a talloc_stackframe(). - -We will use this to create real tevent timer and fd -events. - -This will allow us to eventually remove source3/lib/events.c -dependency and make nmbd purely tevent based. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit 36b67729a6fc8518da71944db3fac6d9236b9348) ---- - source3/nmbd/nmbd_packets.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index caef1db..c0c4925 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1917,10 +1917,12 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - int dns_pollidx = -1; - #endif - struct processed_packet *processed_packet_list = NULL; -+ TALLOC_CTX *frame = talloc_stackframe(); - - if ((fds == NULL) || rescan_listen_set) { - if (create_listen_pollfds(&fds, &attrs, &listen_number)) { - DEBUG(0,("listen_for_packets: Fatal error. unable to create listen set. Exiting.\n")); -+ TALLOC_FREE(frame); - return True; - } - rescan_listen_set = False; -@@ -1934,6 +1936,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - - fds = talloc_realloc(NULL, fds, struct pollfd, listen_number); - if (fds == NULL) { -+ TALLOC_FREE(frame); - return true; - } - num_sockets = listen_number; -@@ -1943,6 +1946,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - if (dns_fd != -1) { - fds = talloc_realloc(NULL, fds, struct pollfd, num_sockets+1); - if (fds == NULL) { -+ TALLOC_FREE(frame); - return true; - } - attrs = talloc_realloc(NULL, -@@ -1951,6 +1955,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - num_sockets + 1); - if (attrs == NULL) { - TALLOC_FREE(fds); -+ TALLOC_FREE(frame); - return true; - } - dns_pollidx = num_sockets; -@@ -1972,6 +1977,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - - /* Process a signal and timer events now... */ - if (run_events_poll(nmbd_event_context(), 0, NULL, 0)) { -+ TALLOC_FREE(frame); - return False; - } - -@@ -1991,10 +1997,12 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - pollrtn = poll(fds, num_sockets, timeout); - - if (run_events_poll(nmbd_event_context(), pollrtn, fds, num_sockets)) { -+ TALLOC_FREE(frame); - return False; - } - - if (pollrtn == -1) { -+ TALLOC_FREE(frame); - return False; - } - -@@ -2089,6 +2097,7 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - } - - free_processed_packet_list(&processed_packet_list); -+ TALLOC_FREE(frame); - return False; - } - --- -1.9.1 - - -From 0a9d66eda6e3dd65ff669355081fc60f420968f3 Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 12:31:00 -0700 -Subject: [PATCH 07/12] s3: nmbd: Change over to using tevent functions from - direct poll. - -This will allow us to eventually remove source3/lib/events.c -dependency and make nmbd purely tevent based. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit b857bf9b3fa3a836647edc40ead92db7b782d367) ---- - source3/nmbd/nmbd_packets.c | 58 +++++++++++++++++++++++++++++---------------- - 1 file changed, 38 insertions(+), 20 deletions(-) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index c0c4925..3e94e6e 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1909,14 +1909,16 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - static int listen_number = 0; - int num_sockets; - int i; -+ int loop_rtn; -+ int timeout_secs; - -- int pollrtn; -- int timeout; - #ifndef SYNC_DNS - int dns_fd; - int dns_pollidx = -1; - #endif - struct processed_packet *processed_packet_list = NULL; -+ struct tevent_timer *te = NULL; -+ bool got_timeout = false; - TALLOC_CTX *frame = talloc_stackframe(); - - if ((fds == NULL) || rescan_listen_set) { -@@ -1972,13 +1974,17 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - #endif - - for (i=0; i -Date: Fri, 23 Sep 2016 12:37:52 -0700 -Subject: [PATCH 08/12] s3: nmbd: Final changeover to stock tevent for nmbd. - -Removes unused references to fds array used for (removed) -poll call. Renames create_listen_pollfds() to -create_listen_array(). - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit 6e8bd13660d7795df429dbf852345124db38ea96) ---- - source3/nmbd/nmbd_packets.c | 46 ++++----------------------------------------- - 1 file changed, 4 insertions(+), 42 deletions(-) - -diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c -index 3e94e6e..de5ae1e 100644 ---- a/source3/nmbd/nmbd_packets.c -+++ b/source3/nmbd/nmbd_packets.c -@@ -1687,14 +1687,12 @@ struct socket_attributes { - bool triggered; - }; - --static bool create_listen_pollfds(struct pollfd **pfds, -- struct socket_attributes **pattrs, -+static bool create_listen_array(struct socket_attributes **pattrs, - int *pnum_sockets) - { - struct subnet_record *subrec = NULL; - int count = 0; - int num = 0; -- struct pollfd *fds; - struct socket_attributes *attrs; - - /* The ClientNMB and ClientDGRAM sockets */ -@@ -1718,30 +1716,20 @@ static bool create_listen_pollfds(struct pollfd **pfds, - } - } - -- fds = talloc_zero_array(NULL, struct pollfd, count); -- if (fds == NULL) { -- DEBUG(1, ("create_listen_pollfds: malloc fail for fds. " -- "size %d\n", count)); -- return true; -- } -- - attrs = talloc_zero_array(NULL, struct socket_attributes, count); - if (attrs == NULL) { -- DEBUG(1, ("create_listen_pollfds: malloc fail for attrs. " -+ DEBUG(1, ("talloc fail for attrs. " - "size %d\n", count)); -- TALLOC_FREE(fds); - return true; - } - - num = 0; - -- fds[num].fd = ClientNMB; - attrs[num].fd = ClientNMB; - attrs[num].type = NMB_PACKET; - attrs[num].broadcast = false; - num += 1; - -- fds[num].fd = ClientDGRAM; - attrs[num].fd = ClientDGRAM; - attrs[num].type = DGRAM_PACKET; - attrs[num].broadcast = false; -@@ -1750,7 +1738,6 @@ static bool create_listen_pollfds(struct pollfd **pfds, - for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) { - - if (subrec->nmb_sock != -1) { -- fds[num].fd = subrec->nmb_sock; - attrs[num].fd = subrec->nmb_sock; - attrs[num].type = NMB_PACKET; - attrs[num].broadcast = false; -@@ -1758,7 +1745,6 @@ static bool create_listen_pollfds(struct pollfd **pfds, - } - - if (subrec->nmb_bcast != -1) { -- fds[num].fd = subrec->nmb_bcast; - attrs[num].fd = subrec->nmb_bcast; - attrs[num].type = NMB_PACKET; - attrs[num].broadcast = true; -@@ -1766,7 +1752,6 @@ static bool create_listen_pollfds(struct pollfd **pfds, - } - - if (subrec->dgram_sock != -1) { -- fds[num].fd = subrec->dgram_sock; - attrs[num].fd = subrec->dgram_sock; - attrs[num].type = DGRAM_PACKET; - attrs[num].broadcast = false; -@@ -1774,7 +1759,6 @@ static bool create_listen_pollfds(struct pollfd **pfds, - } - - if (subrec->dgram_bcast != -1) { -- fds[num].fd = subrec->dgram_bcast; - attrs[num].fd = subrec->dgram_bcast; - attrs[num].type = DGRAM_PACKET; - attrs[num].broadcast = true; -@@ -1782,9 +1766,6 @@ static bool create_listen_pollfds(struct pollfd **pfds, - } - } - -- TALLOC_FREE(*pfds); -- *pfds = fds; -- - TALLOC_FREE(*pattrs); - *pattrs = attrs; - -@@ -1904,7 +1885,6 @@ static void nmbd_fd_handler(struct tevent_context *ev, - - bool listen_for_packets(struct messaging_context *msg, bool run_election) - { -- static struct pollfd *fds = NULL; - static struct socket_attributes *attrs = NULL; - static int listen_number = 0; - int num_sockets; -@@ -1921,8 +1901,8 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - bool got_timeout = false; - TALLOC_CTX *frame = talloc_stackframe(); - -- if ((fds == NULL) || rescan_listen_set) { -- if (create_listen_pollfds(&fds, &attrs, &listen_number)) { -+ if ((attrs == NULL) || rescan_listen_set) { -+ if (create_listen_array(&attrs, &listen_number)) { - DEBUG(0,("listen_for_packets: Fatal error. unable to create listen set. Exiting.\n")); - TALLOC_FREE(frame); - return True; -@@ -1930,38 +1910,20 @@ bool listen_for_packets(struct messaging_context *msg, bool run_election) - rescan_listen_set = False; - } - -- /* -- * "fds" can be enlarged by event_add_to_poll_args -- * below. Shrink it again to what was given to us by -- * create_listen_pollfds. -- */ -- -- fds = talloc_realloc(NULL, fds, struct pollfd, listen_number); -- if (fds == NULL) { -- TALLOC_FREE(frame); -- return true; -- } - num_sockets = listen_number; - - #ifndef SYNC_DNS - dns_fd = asyncdns_fd(); - if (dns_fd != -1) { -- fds = talloc_realloc(NULL, fds, struct pollfd, num_sockets+1); -- if (fds == NULL) { -- TALLOC_FREE(frame); -- return true; -- } - attrs = talloc_realloc(NULL, - attrs, - struct socket_attributes, - num_sockets + 1); - if (attrs == NULL) { -- TALLOC_FREE(fds); - TALLOC_FREE(frame); - return true; - } - dns_pollidx = num_sockets; -- fds[num_sockets].fd = dns_fd; - attrs[dns_pollidx].fd = dns_fd; - /* - * dummy values, we only need --- -1.9.1 - - -From 9c5022ebec416cdfaa5c94097fea2eaf9b50d24a Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 19:07:39 -0700 -Subject: [PATCH 09/12] s3: winbind: Remove dump_event_list() calls. - -If needed we can add this into actual tevent. - -Preparing to remove source3/lib/events.c - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit 72785309aa2d1bed7abc6dd7c6475ff0f78411da) ---- - source3/winbindd/winbindd_dual.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c -index 17a89a7..c16b94e 100644 ---- a/source3/winbindd/winbindd_dual.c -+++ b/source3/winbindd/winbindd_dual.c -@@ -835,7 +835,7 @@ void winbind_msg_dump_event_list(struct messaging_context *msg_ctx, - - DEBUG(10,("winbind_msg_dump_event_list received\n")); - -- dump_event_list(winbind_event_context()); -+ DBG_WARNING("dump event list no longer implemented\n"); - - for (child = winbindd_children; child != NULL; child = child->next) { - -@@ -1240,8 +1240,7 @@ static void child_msg_dump_event_list(struct messaging_context *msg, - DATA_BLOB *data) - { - DEBUG(5,("child_msg_dump_event_list received\n")); -- -- dump_event_list(winbind_event_context()); -+ DBG_WARNING("dump_event_list no longer implemented\n"); - } - - NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself, --- -1.9.1 - - -From 74deb057bffa9ab18d22862b3bbd159c92a849dc Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 19:11:17 -0700 -Subject: [PATCH 10/12] s3: server: s3_tevent_context_init() -> - samba_tevent_context_init() - -We can now remove source3/lib/events.c - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(cherry picked from commit fbfea52e1ce8f22d8d020a2bf3aebd1bc69faceb) ---- - source3/lib/server_contexts.c | 2 +- - source3/rpc_server/rpc_ncacn_np.c | 8 ++++---- - source3/smbd/process.c | 4 ++-- - source3/smbd/server.c | 1 - - 4 files changed, 7 insertions(+), 8 deletions(-) - -diff --git a/source3/lib/server_contexts.c b/source3/lib/server_contexts.c -index d49e334..50072e6 100644 ---- a/source3/lib/server_contexts.c -+++ b/source3/lib/server_contexts.c -@@ -31,7 +31,7 @@ struct tevent_context *server_event_context(void) - * autofree context, to avoid side effects in forked - * children exiting. - */ -- server_event_ctx = s3_tevent_context_init(NULL); -+ server_event_ctx = samba_tevent_context_init(NULL); - } - if (!server_event_ctx) { - smb_panic("Could not init server's event context"); -diff --git a/source3/rpc_server/rpc_ncacn_np.c b/source3/rpc_server/rpc_ncacn_np.c -index f9c73de..083cbbe 100644 ---- a/source3/rpc_server/rpc_ncacn_np.c -+++ b/source3/rpc_server/rpc_ncacn_np.c -@@ -708,9 +708,9 @@ NTSTATUS make_external_rpc_pipe(TALLOC_CTX *mem_ctx, - goto out; - } - -- ev_ctx = s3_tevent_context_init(tmp_ctx); -+ ev_ctx = samba_tevent_context_init(tmp_ctx); - if (ev_ctx == NULL) { -- DEBUG(0, ("s3_tevent_context_init failed\n")); -+ DEBUG(0, ("samba_tevent_context_init failed\n")); - status = NT_STATUS_NO_MEMORY; - goto out; - } -@@ -816,9 +816,9 @@ struct np_proxy_state *make_external_rpc_pipe_p(TALLOC_CTX *mem_ctx, - goto fail; - } - -- ev = s3_tevent_context_init(talloc_tos()); -+ ev = samba_tevent_context_init(talloc_tos()); - if (ev == NULL) { -- DEBUG(0, ("s3_tevent_context_init failed\n")); -+ DEBUG(0, ("samba_tevent_context_init failed\n")); - goto fail; - } - -diff --git a/source3/smbd/process.c b/source3/smbd/process.c -index e3c32f9..8f097ec 100644 ---- a/source3/smbd/process.c -+++ b/source3/smbd/process.c -@@ -3224,9 +3224,9 @@ static void smbd_echo_loop(struct smbXsrv_connection *xconn, - } - state->xconn = xconn; - state->parent_pipe = parent_pipe; -- state->ev = s3_tevent_context_init(state); -+ state->ev = samba_tevent_context_init(state); - if (state->ev == NULL) { -- DEBUG(1, ("tevent_context_init failed\n")); -+ DEBUG(1, ("samba_tevent_context_init failed\n")); - TALLOC_FREE(state); - return; - } -diff --git a/source3/smbd/server.c b/source3/smbd/server.c -index 97c0fdc..6d0c664 100644 ---- a/source3/smbd/server.c -+++ b/source3/smbd/server.c -@@ -1670,7 +1670,6 @@ extern void build_options(bool screen); - * Initialize the event context. The event context needs to be - * initialized before the messaging context, cause the messaging - * context holds an event context. -- * FIXME: This should be s3_tevent_context_init() - */ - ev_ctx = server_event_context(); - if (ev_ctx == NULL) { --- -1.9.1 - - -From bc6a9794fe2b7fb95423c99174f5e31df9be35ee Mon Sep 17 00:00:00 2001 -From: Jeremy Allison -Date: Fri, 23 Sep 2016 20:00:33 -0700 -Subject: [PATCH 11/12] s3: events. Move events.c to util_event.c - -Remove all tevent internal code. - -Everything is now stock tevent. - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Jeremy Allison -Reviewed-by: Volker Lendecke -(similar to commit 4ed790ebbf474c4e4ef9b4f0f3aeca65118796df) ---- - source3/include/event.h | 42 ---- - source3/include/includes.h | 4 +- - source3/include/util_event.h | 28 +++ - source3/lib/events.c | 486 ------------------------------------------- - source3/lib/util_event.c | 101 +++++++++ - source3/wscript_build | 2 +- - 6 files changed, 132 insertions(+), 531 deletions(-) - delete mode 100644 source3/include/event.h - create mode 100644 source3/include/util_event.h - delete mode 100644 source3/lib/events.c - create mode 100644 source3/lib/util_event.c - -diff --git a/source3/include/event.h b/source3/include/event.h -deleted file mode 100644 -index 108026e..0000000 ---- a/source3/include/event.h -+++ /dev/null -@@ -1,42 +0,0 @@ --/* -- Unix SMB/CIFS implementation. -- event handling -- Copyright (C) Andrew Tridgell 1992-1998 -- Copyright (C) Volker Lendecke 2005-2007 -- -- 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 3 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, see . --*/ -- --#include -- --/* The following definitions come from lib/events.c */ --struct pollfd; --struct timeval *get_timed_events_timeout(struct tevent_context *event_ctx, -- struct timeval *to_ret); --void dump_event_list(struct tevent_context *event_ctx); --struct tevent_context *s3_tevent_context_init(TALLOC_CTX *mem_ctx); -- --bool event_add_to_poll_args(struct tevent_context *ev, TALLOC_CTX *mem_ctx, -- struct pollfd **pfds, int *num_pfds, -- int *ptimeout); --bool run_events_poll(struct tevent_context *ev, int pollrtn, -- struct pollfd *pfds, int num_pfds); -- --struct idle_event *event_add_idle(struct tevent_context *event_ctx, -- TALLOC_CTX *mem_ctx, -- struct timeval interval, -- const char *name, -- bool (*handler)(const struct timeval *now, -- void *private_data), -- void *private_data); -diff --git a/source3/include/includes.h b/source3/include/includes.h -index 81bba40..234a564 100644 ---- a/source3/include/includes.h -+++ b/source3/include/includes.h -@@ -310,8 +310,8 @@ typedef char fstring[FSTRING_LEN]; - #include "../lib/util/dlinklist.h" - - #include -- --#include "event.h" -+#include -+#include "util_event.h" - - #include "../lib/util/data_blob.h" - #include "../lib/util/time.h" -diff --git a/source3/include/util_event.h b/source3/include/util_event.h -new file mode 100644 -index 0000000..df608a1 ---- /dev/null -+++ b/source3/include/util_event.h -@@ -0,0 +1,28 @@ -+/* -+ Unix SMB/CIFS implementation. -+ event handling -+ Copyright (C) Andrew Tridgell 1992-1998 -+ Copyright (C) Volker Lendecke 2005-2007 -+ -+ 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 3 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, see . -+*/ -+ -+/* The following definitions come from lib/util_event.c */ -+struct idle_event *event_add_idle(struct tevent_context *event_ctx, -+ TALLOC_CTX *mem_ctx, -+ struct timeval interval, -+ const char *name, -+ bool (*handler)(const struct timeval *now, -+ void *private_data), -+ void *private_data); -diff --git a/source3/lib/events.c b/source3/lib/events.c -deleted file mode 100644 -index 2e862ca..0000000 ---- a/source3/lib/events.c -+++ /dev/null -@@ -1,486 +0,0 @@ --/* -- Unix SMB/CIFS implementation. -- Timed event library. -- Copyright (C) Andrew Tridgell 1992-1998 -- Copyright (C) Volker Lendecke 2005-2007 -- -- 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 3 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, see . --*/ -- --#include "includes.h" --#include "lib/tevent/tevent_internal.h" --#include "../lib/util/select.h" --#include "system/select.h" -- --struct tevent_poll_private { -- /* -- * Index from file descriptor into the pollfd array -- */ -- int *pollfd_idx; -- -- /* -- * Cache for s3_event_loop_once to avoid reallocs -- */ -- struct pollfd *pfds; --}; -- --static struct tevent_poll_private *tevent_get_poll_private( -- struct tevent_context *ev) --{ -- struct tevent_poll_private *state; -- -- state = (struct tevent_poll_private *)ev->additional_data; -- if (state == NULL) { -- state = talloc_zero(ev, struct tevent_poll_private); -- ev->additional_data = (void *)state; -- if (state == NULL) { -- DEBUG(10, ("talloc failed\n")); -- } -- } -- return state; --} -- --static void count_fds(struct tevent_context *ev, -- int *pnum_fds, int *pmax_fd) --{ -- struct tevent_fd *fde; -- int num_fds = 0; -- int max_fd = 0; -- -- for (fde = ev->fd_events; fde != NULL; fde = fde->next) { -- if (fde->flags & (TEVENT_FD_READ|TEVENT_FD_WRITE)) { -- num_fds += 1; -- if (fde->fd > max_fd) { -- max_fd = fde->fd; -- } -- } -- } -- *pnum_fds = num_fds; -- *pmax_fd = max_fd; --} -- --bool event_add_to_poll_args(struct tevent_context *ev, TALLOC_CTX *mem_ctx, -- struct pollfd **pfds, int *pnum_pfds, -- int *ptimeout) --{ -- struct tevent_poll_private *state; -- struct tevent_fd *fde; -- int i, num_fds, max_fd, num_pollfds, idx_len; -- struct pollfd *fds; -- struct timeval now, diff; -- int timeout; -- -- state = tevent_get_poll_private(ev); -- if (state == NULL) { -- return false; -- } -- count_fds(ev, &num_fds, &max_fd); -- -- idx_len = max_fd+1; -- -- if (talloc_array_length(state->pollfd_idx) < idx_len) { -- state->pollfd_idx = talloc_realloc( -- state, state->pollfd_idx, int, idx_len); -- if (state->pollfd_idx == NULL) { -- DEBUG(10, ("talloc_realloc failed\n")); -- return false; -- } -- } -- -- fds = *pfds; -- num_pollfds = *pnum_pfds; -- -- if (talloc_array_length(fds) < num_pollfds + num_fds) { -- fds = talloc_realloc(mem_ctx, fds, struct pollfd, -- num_pollfds + num_fds); -- if (fds == NULL) { -- DEBUG(10, ("talloc_realloc failed\n")); -- return false; -- } -- } -- -- memset(&fds[num_pollfds], 0, sizeof(struct pollfd) * num_fds); -- -- /* -- * This needs tuning. We need to cope with multiple fde's for a file -- * descriptor. The problem is that we need to re-use pollfd_idx across -- * calls for efficiency. One way would be a direct bitmask that might -- * be initialized quicker, but our bitmap_init implementation is -- * pretty heavy-weight as well. -- */ -- for (i=0; ipollfd_idx[i] = -1; -- } -- -- for (fde = ev->fd_events; fde; fde = fde->next) { -- struct pollfd *pfd; -- -- if ((fde->flags & (TEVENT_FD_READ|TEVENT_FD_WRITE)) == 0) { -- continue; -- } -- -- if (state->pollfd_idx[fde->fd] == -1) { -- /* -- * We haven't seen this fd yet. Allocate a new pollfd. -- */ -- state->pollfd_idx[fde->fd] = num_pollfds; -- pfd = &fds[num_pollfds]; -- num_pollfds += 1; -- } else { -- /* -- * We have already seen this fd. OR in the flags. -- */ -- pfd = &fds[state->pollfd_idx[fde->fd]]; -- } -- -- pfd->fd = fde->fd; -- -- if (fde->flags & TEVENT_FD_READ) { -- pfd->events |= (POLLIN|POLLHUP); -- } -- if (fde->flags & TEVENT_FD_WRITE) { -- pfd->events |= POLLOUT; -- } -- } -- *pfds = fds; -- *pnum_pfds = num_pollfds; -- -- if (ev->immediate_events != NULL) { -- *ptimeout = 0; -- return true; -- } -- if (ev->timer_events == NULL) { -- *ptimeout = MIN(*ptimeout, INT_MAX); -- return true; -- } -- -- now = timeval_current(); -- diff = timeval_until(&now, &ev->timer_events->next_event); -- timeout = timeval_to_msec(diff); -- -- if (timeout < *ptimeout) { -- *ptimeout = timeout; -- } -- -- return true; --} -- --bool run_events_poll(struct tevent_context *ev, int pollrtn, -- struct pollfd *pfds, int num_pfds) --{ -- struct tevent_poll_private *state; -- int *pollfd_idx; -- struct tevent_fd *fde; -- -- if (ev->signal_events && -- tevent_common_check_signal(ev)) { -- return true; -- } -- -- if (ev->immediate_events && -- tevent_common_loop_immediate(ev)) { -- return true; -- } -- -- if (pollrtn <= 0) { -- struct timeval tval; -- -- tval = tevent_common_loop_timer_delay(ev); -- if (tevent_timeval_is_zero(&tval)) { -- return true; -- } -- -- /* -- * No fd ready -- */ -- return false; -- } -- -- state = (struct tevent_poll_private *)ev->additional_data; -- pollfd_idx = state->pollfd_idx; -- -- for (fde = ev->fd_events; fde; fde = fde->next) { -- struct pollfd *pfd; -- uint16_t flags = 0; -- -- if ((fde->flags & (TEVENT_FD_READ|TEVENT_FD_WRITE)) == 0) { -- continue; -- } -- -- if (pollfd_idx[fde->fd] >= num_pfds) { -- DEBUG(1, ("internal error: pollfd_idx[fde->fd] (%d) " -- ">= num_pfds (%d)\n", pollfd_idx[fde->fd], -- num_pfds)); -- return false; -- } -- pfd = &pfds[pollfd_idx[fde->fd]]; -- -- if (pfd->fd != fde->fd) { -- DEBUG(1, ("internal error: pfd->fd (%d) " -- "!= fde->fd (%d)\n", pollfd_idx[fde->fd], -- num_pfds)); -- return false; -- } -- -- if (pfd->revents & (POLLHUP|POLLERR)) { -- /* If we only wait for TEVENT_FD_WRITE, we -- should not tell the event handler about it, -- and remove the writable flag, as we only -- report errors when waiting for read events -- to match the select behavior. */ -- if (!(fde->flags & TEVENT_FD_READ)) { -- TEVENT_FD_NOT_WRITEABLE(fde); -- continue; -- } -- flags |= TEVENT_FD_READ; -- } -- -- if (pfd->revents & POLLIN) { -- flags |= TEVENT_FD_READ; -- } -- if (pfd->revents & POLLOUT) { -- flags |= TEVENT_FD_WRITE; -- } -- if (flags & fde->flags) { -- DLIST_DEMOTE(ev->fd_events, fde); -- fde->handler(ev, fde, flags, fde->private_data); -- return true; -- } -- } -- -- return false; --} -- --struct timeval *get_timed_events_timeout(struct tevent_context *ev, -- struct timeval *to_ret) --{ -- struct timeval now; -- -- if ((ev->timer_events == NULL) && (ev->immediate_events == NULL)) { -- return NULL; -- } -- if (ev->immediate_events != NULL) { -- *to_ret = timeval_zero(); -- return to_ret; -- } -- -- now = timeval_current(); -- *to_ret = timeval_until(&now, &ev->timer_events->next_event); -- -- DEBUG(10, ("timed_events_timeout: %d/%d\n", (int)to_ret->tv_sec, -- (int)to_ret->tv_usec)); -- -- return to_ret; --} -- --static int s3_event_loop_once(struct tevent_context *ev, const char *location) --{ -- struct tevent_poll_private *state; -- int timeout; -- int num_pfds; -- int ret; -- int poll_errno; -- -- timeout = INT_MAX; -- -- state = tevent_get_poll_private(ev); -- if (state == NULL) { -- errno = ENOMEM; -- return -1; -- } -- -- if (run_events_poll(ev, 0, NULL, 0)) { -- return 0; -- } -- -- num_pfds = 0; -- if (!event_add_to_poll_args(ev, state, -- &state->pfds, &num_pfds, &timeout)) { -- return -1; -- } -- -- tevent_trace_point_callback(ev, TEVENT_TRACE_BEFORE_WAIT); -- ret = poll(state->pfds, num_pfds, timeout); -- poll_errno = errno; -- tevent_trace_point_callback(ev, TEVENT_TRACE_AFTER_WAIT); -- errno = poll_errno; -- -- if (ret == -1 && errno != EINTR) { -- tevent_debug(ev, TEVENT_DEBUG_FATAL, -- "poll() failed: %d:%s\n", -- errno, strerror(errno)); -- return -1; -- } -- -- run_events_poll(ev, ret, state->pfds, num_pfds); -- return 0; --} -- --static int s3_event_context_init(struct tevent_context *ev) --{ -- return 0; --} -- --void dump_event_list(struct tevent_context *ev) --{ -- struct tevent_timer *te; -- struct tevent_fd *fe; -- struct timeval evt, now; -- -- if (!ev) { -- return; -- } -- -- now = timeval_current(); -- -- DEBUG(10,("dump_event_list:\n")); -- -- for (te = ev->timer_events; te; te = te->next) { -- -- evt = timeval_until(&now, &te->next_event); -- -- DEBUGADD(10,("Timed Event \"%s\" %p handled in %d seconds (at %s)\n", -- te->handler_name, -- te, -- (int)evt.tv_sec, -- http_timestring(talloc_tos(), te->next_event.tv_sec))); -- } -- -- for (fe = ev->fd_events; fe; fe = fe->next) { -- -- DEBUGADD(10,("FD Event %d %p, flags: 0x%04x\n", -- fe->fd, -- fe, -- fe->flags)); -- } --} -- --static const struct tevent_ops s3_event_ops = { -- .context_init = s3_event_context_init, -- .add_fd = tevent_common_add_fd, -- .set_fd_close_fn = tevent_common_fd_set_close_fn, -- .get_fd_flags = tevent_common_fd_get_flags, -- .set_fd_flags = tevent_common_fd_set_flags, -- .add_timer = tevent_common_add_timer, -- .schedule_immediate = tevent_common_schedule_immediate, -- .add_signal = tevent_common_add_signal, -- .loop_once = s3_event_loop_once, -- .loop_wait = tevent_common_loop_wait, --}; -- --static bool s3_tevent_init(void) --{ -- static bool initialized; -- if (initialized) { -- return true; -- } -- initialized = tevent_register_backend("s3", &s3_event_ops); -- tevent_set_default_backend("s3"); -- return initialized; --} -- --struct tevent_context *s3_tevent_context_init(TALLOC_CTX *mem_ctx) --{ -- struct tevent_context *ev; -- -- s3_tevent_init(); -- -- ev = tevent_context_init_byname(mem_ctx, "s3"); -- if (ev) { -- samba_tevent_set_debug(ev, "s3_tevent"); -- } -- -- return ev; --} -- --struct idle_event { -- struct tevent_timer *te; -- struct timeval interval; -- char *name; -- bool (*handler)(const struct timeval *now, void *private_data); -- void *private_data; --}; -- --static void smbd_idle_event_handler(struct tevent_context *ctx, -- struct tevent_timer *te, -- struct timeval now, -- void *private_data) --{ -- struct idle_event *event = -- talloc_get_type_abort(private_data, struct idle_event); -- -- TALLOC_FREE(event->te); -- -- DEBUG(10,("smbd_idle_event_handler: %s %p called\n", -- event->name, event->te)); -- -- if (!event->handler(&now, event->private_data)) { -- DEBUG(10,("smbd_idle_event_handler: %s %p stopped\n", -- event->name, event->te)); -- /* Don't repeat, delete ourselves */ -- TALLOC_FREE(event); -- return; -- } -- -- DEBUG(10,("smbd_idle_event_handler: %s %p rescheduled\n", -- event->name, event->te)); -- -- event->te = tevent_add_timer(ctx, event, -- timeval_sum(&now, &event->interval), -- smbd_idle_event_handler, event); -- -- /* We can't do much but fail here. */ -- SMB_ASSERT(event->te != NULL); --} -- --struct idle_event *event_add_idle(struct tevent_context *event_ctx, -- TALLOC_CTX *mem_ctx, -- struct timeval interval, -- const char *name, -- bool (*handler)(const struct timeval *now, -- void *private_data), -- void *private_data) --{ -- struct idle_event *result; -- struct timeval now = timeval_current(); -- -- result = talloc(mem_ctx, struct idle_event); -- if (result == NULL) { -- DEBUG(0, ("talloc failed\n")); -- return NULL; -- } -- -- result->interval = interval; -- result->handler = handler; -- result->private_data = private_data; -- -- if (!(result->name = talloc_asprintf(result, "idle_evt(%s)", name))) { -- DEBUG(0, ("talloc failed\n")); -- TALLOC_FREE(result); -- return NULL; -- } -- -- result->te = tevent_add_timer(event_ctx, result, -- timeval_sum(&now, &interval), -- smbd_idle_event_handler, result); -- if (result->te == NULL) { -- DEBUG(0, ("event_add_timed failed\n")); -- TALLOC_FREE(result); -- return NULL; -- } -- -- DEBUG(10,("event_add_idle: %s %p\n", result->name, result->te)); -- return result; --} -- -diff --git a/source3/lib/util_event.c b/source3/lib/util_event.c -new file mode 100644 -index 0000000..4ca2840 ---- /dev/null -+++ b/source3/lib/util_event.c -@@ -0,0 +1,101 @@ -+/* -+ Unix SMB/CIFS implementation. -+ Timed event library. -+ Copyright (C) Andrew Tridgell 1992-1998 -+ Copyright (C) Volker Lendecke 2005-2007 -+ -+ 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 3 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, see . -+*/ -+ -+#include "includes.h" -+ -+struct idle_event { -+ struct tevent_timer *te; -+ struct timeval interval; -+ char *name; -+ bool (*handler)(const struct timeval *now, void *private_data); -+ void *private_data; -+}; -+ -+static void smbd_idle_event_handler(struct tevent_context *ctx, -+ struct tevent_timer *te, -+ struct timeval now, -+ void *private_data) -+{ -+ struct idle_event *event = -+ talloc_get_type_abort(private_data, struct idle_event); -+ -+ TALLOC_FREE(event->te); -+ -+ DEBUG(10,("smbd_idle_event_handler: %s %p called\n", -+ event->name, event->te)); -+ -+ if (!event->handler(&now, event->private_data)) { -+ DEBUG(10,("smbd_idle_event_handler: %s %p stopped\n", -+ event->name, event->te)); -+ /* Don't repeat, delete ourselves */ -+ TALLOC_FREE(event); -+ return; -+ } -+ -+ DEBUG(10,("smbd_idle_event_handler: %s %p rescheduled\n", -+ event->name, event->te)); -+ -+ event->te = tevent_add_timer(ctx, event, -+ timeval_sum(&now, &event->interval), -+ smbd_idle_event_handler, event); -+ -+ /* We can't do much but fail here. */ -+ SMB_ASSERT(event->te != NULL); -+} -+ -+struct idle_event *event_add_idle(struct tevent_context *event_ctx, -+ TALLOC_CTX *mem_ctx, -+ struct timeval interval, -+ const char *name, -+ bool (*handler)(const struct timeval *now, -+ void *private_data), -+ void *private_data) -+{ -+ struct idle_event *result; -+ struct timeval now = timeval_current(); -+ -+ result = talloc(mem_ctx, struct idle_event); -+ if (result == NULL) { -+ DEBUG(0, ("talloc failed\n")); -+ return NULL; -+ } -+ -+ result->interval = interval; -+ result->handler = handler; -+ result->private_data = private_data; -+ -+ if (!(result->name = talloc_asprintf(result, "idle_evt(%s)", name))) { -+ DEBUG(0, ("talloc failed\n")); -+ TALLOC_FREE(result); -+ return NULL; -+ } -+ -+ result->te = tevent_add_timer(event_ctx, result, -+ timeval_sum(&now, &interval), -+ smbd_idle_event_handler, result); -+ if (result->te == NULL) { -+ DEBUG(0, ("event_add_timed failed\n")); -+ TALLOC_FREE(result); -+ return NULL; -+ } -+ -+ DEBUG(10,("event_add_idle: %s %p\n", result->name, result->te)); -+ return result; -+} -diff --git a/source3/wscript_build b/source3/wscript_build -index 8546e8d..d19b583 100755 ---- a/source3/wscript_build -+++ b/source3/wscript_build -@@ -333,7 +333,7 @@ bld.SAMBA3_SUBSYSTEM('samba3core', - lib/dmallocmsg.c - intl/lang_tdb.c - lib/gencache.c -- lib/events.c -+ lib/util_event.c - lib/server_contexts.c - lib/server_prefork.c - lib/server_prefork_util.c --- -1.9.1 - - -From cf8c45874d968494b622e7b0c22ada4d054c5c05 Mon Sep 17 00:00:00 2001 -From: Volker Lendecke -Date: Sat, 24 Sep 2016 10:45:13 -0700 -Subject: [PATCH 12/12] glusterfs: Avoid tevent_internal.h -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Günther confirmed it still compiles :-) - -Bug: https://bugzilla.samba.org/show_bug.cgi?id=12283 -Signed-off-by: Volker Lendecke -Reviewed-by: Günther Deschner - -Autobuild-User(master): Volker Lendecke -Autobuild-Date(master): Sat Sep 24 23:41:56 CEST 2016 on sn-devel-144 - -(cherry picked from commit c60ea2c17814f9f7b55514e0d0a553accaa54b15) ---- - source3/modules/vfs_glusterfs.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c -index fbcaf5c..a467235 100644 ---- a/source3/modules/vfs_glusterfs.c -+++ b/source3/modules/vfs_glusterfs.c -@@ -41,7 +41,6 @@ - #include "api/glfs.h" - #include "lib/util/dlinklist.h" - #include "lib/util/tevent_unix.h" --#include "lib/tevent/tevent_internal.h" - #include "smbd/globals.h" - #include "lib/util/sys_rw.h" - #include "smbprofile.h" --- -1.9.1 - diff --git a/samba.spec b/samba.spec index d0b59ca..961f7e0 100644 --- a/samba.spec +++ b/samba.spec @@ -6,9 +6,9 @@ # ctdb is enabled by default, you can disable it with: --without clustering %bcond_without clustering -%define main_release 3 +%define main_release 0 -%define samba_version 4.5.0 +%define samba_version 4.5.1 %define talloc_version 2.1.8 %define tdb_version 1.3.10 %define tevent_version 0.9.29 @@ -107,8 +107,6 @@ Source6: samba.pamd Source200: README.dc Source201: README.downgrade -Patch0: samba-4.5-fix_tevent_abi_issues.patch - BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) Requires(pre): /usr/sbin/groupadd @@ -690,8 +688,6 @@ and use CTDB instead. %prep %setup -q -n samba-%{version}%{pre_release} -%patch0 -p1 -b .samba-4.5-fix_tevent_abi_issues.patch - %build %global _talloc_lib ,talloc,pytalloc,pytalloc-util %global _tevent_lib ,tevent,pytevent @@ -1277,6 +1273,7 @@ rm -rf %{buildroot} %{_libdir}/samba/libcmdline-credentials-samba4.so %{_libdir}/samba/libdbwrap-samba4.so %{_libdir}/samba/libdcerpc-samba-samba4.so +%{_libdir}/samba/libdsdb-garbage-collect-tombstones-samba4.so %{_libdir}/samba/libevents-samba4.so %{_libdir}/samba/libflag-mapping-samba4.so %{_libdir}/samba/libgenrand-samba4.so @@ -1966,6 +1963,7 @@ rm -rf %{buildroot} %{_libexecdir}/ctdb/tests/g_lock_loop %{_libexecdir}/ctdb/tests/lock_tdb %{_libexecdir}/ctdb/tests/message_ring +%{_libexecdir}/ctdb/tests/pidfile_test %{_libexecdir}/ctdb/tests/pkt_read_test %{_libexecdir}/ctdb/tests/pkt_write_test %{_libexecdir}/ctdb/tests/porting_tests @@ -2000,6 +1998,9 @@ rm -rf %{buildroot} %endif # with_clustering_support %changelog +* Wed Oct 26 2016 Guenther Deschner - 4.5.1-0 +- Update to Samba 4.5.1 + * Mon Oct 17 2016 Andreas Schneider - 4.5.0-3 - resolves: 1375973 - Fix tevent incompatibility issue diff --git a/sources b/sources index 1644c0d..0779f06 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -072bdc2ab2196eac1f715435e3107d75 samba-4.5.0.tar.xz +3c64c7ab5535f51abdf9a94ea5505677 samba-4.5.1.tar.xz