[SCM] Samba Shared Repository - branch v4-6-stable updated
Karolin Seeger
kseeger at samba.org
Fri Jan 27 04:45:53 UTC 2017
The branch, v4-6-stable has been updated
via 54b08f2 VERSION: Disable git snapshots for the 4.2.0rc2 release.
via 0270762 WHATSNEW: Add release notes for Samba 4.6.0rc2.
via 4817385 script/release.sh: fix off by 1 error in announce.${tagname}.mail.txt creation
via d5eebe5 winbind: Don't add duplicate IDs in wbinfo -r
via 4773e25 winbind: Fix a typo
via 1166de1 s3/winbindd: fix invalid free
via 6a87647 winbind: Fix CID 1398534 Dereference before null check
via 8c49f54 winbind: Fix CID 1398530 Resource leak
via bfd0fb3 winbind: Fix CID 1398530 Resource leak
via f629f59 winbind: Fix CID 1398531 Resource leak
via ff102c9 winbind: Fix CID 1398533 Resource leak
via bd82056 winbind: Fix CID 1398533 Resource leak
via 1a234f5 WHATSNEW: document winbind changes
via 56e9090 vfs_default: unlock the right file in copy chunk
via 479fd27 ctdb-tests: Add "13.per_ip_routing shutdown" test
via bcdf945 ctdb-scripts: Fix regression when cleaning up routing table IDs
via 5319e50 ctdb-daemon: Remove stale eventd socket
via e3c4968 ctdb-scripts: Fix remaining uses of "ctdb gratiousarp"
via 77a80b7 ctdb-tests: Add takeover helper tests with banned/disconnected nodes
via e733776 ctdb-takeover: Handle case where there are no RELEASE_IPs to send
via 11841d3 ctdb-takeover: Known and available IP lists should be the same size as nodemap
via c331736 ctdb-common: Add wait_send/wait_recv to sock_daemon_funcs
via a13e48f ctdb-common: Avoid any processing after finishing tevent_req
via 2930832 ctdb-common: Pass tevent_req to the computation sub-functions
via 6b67083 ctdb-common: Use consistent naming for sock_daemon_run computation functions
via bc79bda ctdb-common: Correct name of sock_daemon_run_send/recv state structure
via bc8e36a ctdb-tests: Add robust mutex test
via f1c8b35 ctdb-locking: Explicitly unlock record/db in lock helper
via cb31b71 ctdb-locking: Remove support for locking multiple databases
via 28ed3cd python/schema: fix tests flapping due to oid collision
via 63b9e1c messaging: Fix dead but not cleaned-up-yet destination sockets
via 65313eb s3:winbindd: talloc_steal the extra_data in winbindd_list_users_recv()
via bbe371e ctdb-tests: Do not attempt to unregister the join handler multiple times
via a01ba6c ctdb-tests: Add tests for generic socket I/O
via 554d208 ctdb-common: Fix a bug in packet reading code for generic socket I/O
via 6c9d136 ctdb-tests: Add another test for sock_daemon
via 969faf5 ctdb-common: Simplify async computation for sock_socket_write_send/recv
via 36562d5 VERSION: Bump version up to 4.6.0rc2...
from b88d95e VERSION: Diable git snapshots for the 4.6.0rc1 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-6-stable
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
VERSION | 2 +-
WHATSNEW.txt | 79 ++++-
ctdb/common/sock_daemon.c | 188 +++++------
ctdb/common/sock_daemon.h | 14 +-
ctdb/common/sock_io.c | 28 +-
ctdb/config/events.d/10.interface | 4 +-
ctdb/config/events.d/13.per_ip_routing | 8 +-
ctdb/config/events.d/91.lvs | 2 +-
ctdb/doc/ctdb.1.xml | 4 +-
ctdb/server/ctdb_lock.c | 6 +-
ctdb/server/ctdb_lock_helper.c | 194 +++++++++--
ctdb/server/ctdb_takeover_helper.c | 23 +-
ctdb/server/eventscript.c | 9 +
ctdb/tests/cunit/sock_daemon_test_001.sh | 25 +-
ctdb/tests/cunit/sock_io_test_001.sh | 9 +
ctdb/tests/eventscripts/13.per_ip_routing.024.sh | 31 ++
ctdb/tests/eventscripts/stubs/ctdb | 2 +-
ctdb/tests/src/cluster_wait.c | 40 ++-
ctdb/tests/src/sock_daemon_test.c | 400 +++++++++++++++++++++--
ctdb/tests/src/sock_io_test.c | 283 ++++++++++++++++
ctdb/tests/src/test_mutex_raw.c | 261 +++++++++++++++
ctdb/tests/takeover_helper/{010.sh => 027.sh} | 10 +-
ctdb/tests/takeover_helper/{010.sh => 028.sh} | 10 +-
ctdb/wscript | 9 +-
script/release.sh | 5 +-
source3/lib/messages.c | 11 +
source3/modules/vfs_default.c | 2 +-
source3/winbindd/wb_gettoken.c | 81 +++--
source3/winbindd/wb_sids2xids.c | 2 +-
source3/winbindd/winbindd_ads.c | 13 +-
source3/winbindd/winbindd_cache.c | 1 +
source3/winbindd/winbindd_list_users.c | 2 +-
source3/winbindd/winbindd_msrpc.c | 3 +-
source3/winbindd/winbindd_rpc.c | 1 +
source3/winbindd/winbindd_samr.c | 7 +-
source4/dsdb/tests/python/dsdb_schema_info.py | 12 +-
source4/dsdb/tests/python/ldap_schema.py | 54 +--
source4/setup/schema_samba4.ldif | 4 +
38 files changed, 1527 insertions(+), 312 deletions(-)
create mode 100755 ctdb/tests/cunit/sock_io_test_001.sh
create mode 100755 ctdb/tests/eventscripts/13.per_ip_routing.024.sh
create mode 100644 ctdb/tests/src/sock_io_test.c
create mode 100644 ctdb/tests/src/test_mutex_raw.c
copy ctdb/tests/takeover_helper/{010.sh => 027.sh} (72%)
copy ctdb/tests/takeover_helper/{010.sh => 028.sh} (72%)
Changeset truncated at 500 lines:
diff --git a/VERSION b/VERSION
index 5414011..7a4c23b 100644
--- a/VERSION
+++ b/VERSION
@@ -87,7 +87,7 @@ SAMBA_VERSION_PRE_RELEASE=
# e.g. SAMBA_VERSION_RC_RELEASE=1 #
# -> "3.0.0rc1" #
########################################################
-SAMBA_VERSION_RC_RELEASE=1
+SAMBA_VERSION_RC_RELEASE=2
########################################################
# To mark SVN snapshots this should be set to 'yes' #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 7795523..43c5200 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,7 +1,7 @@
Release Announcements
=====================
-This is the first preview release of Samba 4.6. This is *not*
+This is the second release candidate of Samba 4.6. This is *not*
intended for production environments and is designed for testing
purposes only. Please report any defects via the Samba bug reporting
system at https://bugzilla.samba.org/.
@@ -174,6 +174,53 @@ CTDB changes
To build/install these, use the --enable-etcd-reclock and
--enable-ceph-reclock configure options.
+winbind changes
+---------------
+
+4.6 winbind simplifies the calculation of supplementary groups to make
+it more reliable and predictable. Before 4.6, winbind contained code
+that tried to emulate the group membership calculation that domain
+controllers do when a user logs in. This group membership calculation
+is a very complex process, in particular for domain trust relationship
+situations. Also, in many scenarios it is impossible for winbind to
+correctly do this calculation due to access restrictions in the
+domains: winbind using its machine account simply does not have the
+rights to ask for an arbitrary user's group memberships.
+
+When a user logs in to a Samba server, the domain controller correctly
+calculates the user's group memberships authoritatively and makes the
+information available to the Samba server. This is the only reliable
+way Samba can get informed about the groups a user is member of.
+
+Because of its flakiness, the fallback group membership code was
+removed.
+
+This means that "id <username>" without the user having logged in
+previously stops showing any supplementary groups. Also, it will show
+"DOMAIN\Domain Users" as the primary group. Once the user has logged
+in, "id <username>" will correctly show the primary group and
+supplementary group list.
+
+winbind primary group and nss info
+----------------------------------
+
+With 4.6, it will be possible to optionally use the primary group as
+set in the "Unix Attributes" tab for the local unix token of a domain
+user. Before 4.6, the Windows primary group was always chosen as
+primary group for the local unix token.
+
+To activate the unix primary group, set
+
+idmap config <DOMAIN> : unix_primary_group = yes
+
+Similarly, set
+
+idmap config <DOMAIN> : unix_nss_info = yes
+
+to retrieve the home directory and login shell from the "Unix
+Attributes" of the user. This supersedes the "winbind nss info"
+parameter with a per-domain configuration option.
+
smb.conf changes
================
@@ -192,6 +239,36 @@ KNOWN ISSUES
Currently none.
+
+CHANGES SINCE 4.5.0rc1
+======================
+
+o Amitay Isaacs <amitay at gmail.com>
+ * BUG 12469: CTDB lock helper getting stuck trying to lock a record.
+ * BUG 12500: ctdb-common: Fix a bug in packet reading code for generic socket
+ I/O.
+ * BUG 12510: sock_daemon_test 4 crashes with SEGV.
+ * BUG 12513: ctdb-daemon: Remove stale eventd socket.
+
+o Björn Jacke <bj at sernet.de>
+ * BUG 12535: vfs_default: Unlock the right file in copy chunk.
+
+o Volker Lendecke <vl at samba.org>
+ * BUG 12509: messaging: Fix dead but not cleaned-up-yet destination sockets.
+ * BUG 12538: Backport winbind fixes.
+
+o Stefan Metzmacher <metze at samba.org>
+ * BUG 12501: s3:winbindd: talloc_steal the extra_data in
+ winbindd_list_users_recv().
+
+o Martin Schwenke <martin at meltin.net>
+ * BUG 12511: ctdb-takeover: Handle case where there are no RELEASE_IPs to
+ send.
+ * BUG 12512: ctdb-scripts: Fix remaining uses of "ctdb gratiousarp".
+ * BUG 12516: /etc/iproute2/rt_tables gets populated with multiple
+ 'default' entries.
+
+
#######################################
Reporting bugs & Development Discussion
#######################################
diff --git a/ctdb/common/sock_daemon.c b/ctdb/common/sock_daemon.c
index dc5dba0..b53b4d8 100644
--- a/ctdb/common/sock_daemon.c
+++ b/ctdb/common/sock_daemon.c
@@ -70,7 +70,6 @@ struct sock_daemon_context {
struct pidfile_context *pid_ctx;
struct sock_socket *socket_list;
- struct tevent_req *req;
};
/*
@@ -420,83 +419,37 @@ static bool sock_socket_start_recv(struct tevent_req *req, int *perr)
* Send message to a client
*/
-struct sock_socket_write_state {
- int status;
-};
-
-static void sock_socket_write_done(struct tevent_req *subreq);
-
struct tevent_req *sock_socket_write_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct sock_client_context *client_ctx,
uint8_t *buf, size_t buflen)
{
- struct tevent_req *req, *subreq;
- struct sock_socket_write_state *state;
-
- req = tevent_req_create(mem_ctx, &state,
- struct sock_socket_write_state);
- if (req == NULL) {
- return NULL;
- }
+ struct tevent_req *req;
- subreq = comm_write_send(state, ev, client_ctx->comm, buf, buflen);
- if (tevent_req_nomem(subreq, req)) {
- return tevent_req_post(req, ev);
- }
- tevent_req_set_callback(subreq, sock_socket_write_done, req);
+ req = comm_write_send(mem_ctx, ev, client_ctx->comm, buf, buflen);
return req;
}
-static void sock_socket_write_done(struct tevent_req *subreq)
+bool sock_socket_write_recv(struct tevent_req *req, int *perr)
{
- struct tevent_req *req = tevent_req_callback_data(
- subreq, struct tevent_req);
- struct sock_socket_write_state *state = tevent_req_data(
- req, struct sock_socket_write_state);
int ret;
bool status;
- status = comm_write_recv(subreq, &ret);
- TALLOC_FREE(subreq);
+ status = comm_write_recv(req, &ret);
if (! status) {
- state->status = ret;
- return;
- }
-}
-
-bool sock_socket_write_recv(struct tevent_req *req, int *perr)
-{
- struct sock_socket_write_state *state = tevent_req_data(
- req, struct sock_socket_write_state);
- int ret;
-
- if (tevent_req_is_unix_error(req, &ret)) {
if (perr != NULL) {
*perr = ret;
}
- return false;
- }
-
- if (state->status != 0) {
- if (perr != NULL) {
- *perr = state->status;
- }
- return false;
}
- if (perr != NULL) {
- *perr = 0;
- }
- return true;
+ return status;
}
+
/*
* Socket daemon
*/
-static int sock_daemon_context_destructor(struct sock_daemon_context *sockd);
-
int sock_daemon_setup(TALLOC_CTX *mem_ctx, const char *daemon_name,
const char *logging, const char *debug_level,
const char *pidfile,
@@ -531,21 +484,10 @@ int sock_daemon_setup(TALLOC_CTX *mem_ctx, const char *daemon_name,
}
}
- talloc_set_destructor(sockd, sock_daemon_context_destructor);
-
*out = sockd;
return 0;
}
-static int sock_daemon_context_destructor(struct sock_daemon_context *sockd)
-{
- if (sockd->req != NULL) {
- tevent_req_done(sockd->req);
- }
-
- return 0;
-}
-
int sock_daemon_add_unix(struct sock_daemon_context *sockd,
const char *sockpath,
struct sock_socket_funcs *funcs,
@@ -573,7 +515,7 @@ int sock_daemon_add_unix(struct sock_daemon_context *sockd,
* Run socket daemon
*/
-struct sock_daemon_start_state {
+struct sock_daemon_run_state {
struct tevent_context *ev;
struct sock_daemon_context *sockd;
pid_t pid_watch;
@@ -581,15 +523,16 @@ struct sock_daemon_start_state {
int fd;
};
-static void sock_daemon_started(struct tevent_req *subreq);
-static void sock_daemon_signal_handler(struct tevent_context *ev,
- struct tevent_signal *se,
- int signum, int count, void *siginfo,
- void *private_data);
-static void sock_daemon_socket_fail(struct tevent_req *subreq);
-static void sock_daemon_watch_pid(struct tevent_req *subreq);
-static void sock_daemon_reconfigure(struct sock_daemon_start_state *state);
-static void sock_daemon_shutdown(struct sock_daemon_start_state *state);
+static void sock_daemon_run_started(struct tevent_req *subreq);
+static void sock_daemon_run_signal_handler(struct tevent_context *ev,
+ struct tevent_signal *se,
+ int signum, int count, void *siginfo,
+ void *private_data);
+static void sock_daemon_run_reconfigure(struct tevent_req *req);
+static void sock_daemon_run_shutdown(struct tevent_req *req);
+static void sock_daemon_run_socket_fail(struct tevent_req *subreq);
+static void sock_daemon_run_watch_pid(struct tevent_req *subreq);
+static void sock_daemon_run_wait_done(struct tevent_req *subreq);
struct tevent_req *sock_daemon_run_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
@@ -597,12 +540,12 @@ struct tevent_req *sock_daemon_run_send(TALLOC_CTX *mem_ctx,
pid_t pid_watch)
{
struct tevent_req *req, *subreq;
- struct sock_daemon_start_state *state;
+ struct sock_daemon_run_state *state;
struct tevent_signal *se;
struct sock_socket *sock;
req = tevent_req_create(mem_ctx, &state,
- struct sock_daemon_start_state);
+ struct sock_daemon_run_state);
if (req == NULL) {
return NULL;
}
@@ -617,28 +560,28 @@ struct tevent_req *sock_daemon_run_send(TALLOC_CTX *mem_ctx,
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
- tevent_req_set_callback(subreq, sock_daemon_started, req);
+ tevent_req_set_callback(subreq, sock_daemon_run_started, req);
se = tevent_add_signal(ev, state, SIGHUP, 0,
- sock_daemon_signal_handler, req);
+ sock_daemon_run_signal_handler, req);
if (tevent_req_nomem(se, req)) {
return tevent_req_post(req, ev);
}
se = tevent_add_signal(ev, state, SIGUSR1, 0,
- sock_daemon_signal_handler, req);
+ sock_daemon_run_signal_handler, req);
if (tevent_req_nomem(se, req)) {
return tevent_req_post(req, ev);
}
se = tevent_add_signal(ev, state, SIGINT, 0,
- sock_daemon_signal_handler, req);
+ sock_daemon_run_signal_handler, req);
if (tevent_req_nomem(se, req)) {
return tevent_req_post(req, ev);
}
se = tevent_add_signal(ev, state, SIGTERM, 0,
- sock_daemon_signal_handler, req);
+ sock_daemon_run_signal_handler, req);
if (tevent_req_nomem(se, req)) {
return tevent_req_post(req, ev);
}
@@ -648,7 +591,8 @@ struct tevent_req *sock_daemon_run_send(TALLOC_CTX *mem_ctx,
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
- tevent_req_set_callback(subreq, sock_daemon_socket_fail, req);
+ tevent_req_set_callback(subreq, sock_daemon_run_socket_fail,
+ req);
sock->req = subreq;
}
@@ -659,20 +603,30 @@ struct tevent_req *sock_daemon_run_send(TALLOC_CTX *mem_ctx,
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
- tevent_req_set_callback(subreq, sock_daemon_watch_pid, req);
+ tevent_req_set_callback(subreq, sock_daemon_run_watch_pid,
+ req);
}
- sockd->req = req;
+ if (sockd->funcs != NULL && sockd->funcs->wait_send != NULL &&
+ sockd->funcs->wait_recv != NULL) {
+ subreq = sockd->funcs->wait_send(state, ev,
+ sockd->private_data);
+ if (tevent_req_nomem(subreq, req)) {
+ return tevent_req_post(req, ev);
+ }
+ tevent_req_set_callback(subreq, sock_daemon_run_wait_done,
+ req);
+ }
return req;
}
-static void sock_daemon_started(struct tevent_req *subreq)
+static void sock_daemon_run_started(struct tevent_req *subreq)
{
struct tevent_req *req = tevent_req_callback_data(
subreq, struct tevent_req);
- struct sock_daemon_start_state *state = tevent_req_data(
- req, struct sock_daemon_start_state);
+ struct sock_daemon_run_state *state = tevent_req_data(
+ req, struct sock_daemon_run_state);
struct sock_daemon_context *sockd = state->sockd;
D_NOTICE("daemon started, pid=%u\n", getpid());
@@ -682,31 +636,31 @@ static void sock_daemon_started(struct tevent_req *subreq)
}
}
-static void sock_daemon_signal_handler(struct tevent_context *ev,
- struct tevent_signal *se,
- int signum, int count, void *siginfo,
- void *private_data)
+static void sock_daemon_run_signal_handler(struct tevent_context *ev,
+ struct tevent_signal *se,
+ int signum, int count, void *siginfo,
+ void *private_data)
{
struct tevent_req *req = talloc_get_type_abort(
private_data, struct tevent_req);
- struct sock_daemon_start_state *state = tevent_req_data(
- req, struct sock_daemon_start_state);
D_NOTICE("Received signal %d\n", signum);
if (signum == SIGHUP || signum == SIGUSR1) {
- sock_daemon_reconfigure(state);
+ sock_daemon_run_reconfigure(req);
return;
}
if (signum == SIGINT || signum == SIGTERM) {
- sock_daemon_shutdown(state);
+ sock_daemon_run_shutdown(req);
tevent_req_error(req, EINTR);
}
}
-static void sock_daemon_reconfigure(struct sock_daemon_start_state *state)
+static void sock_daemon_run_reconfigure(struct tevent_req *req)
{
+ struct sock_daemon_run_state *state = tevent_req_data(
+ req, struct sock_daemon_run_state);
struct sock_daemon_context *sockd = state->sockd;
if (sockd->funcs != NULL && sockd->funcs->reconfigure != NULL) {
@@ -714,8 +668,10 @@ static void sock_daemon_reconfigure(struct sock_daemon_start_state *state)
}
}
-static void sock_daemon_shutdown(struct sock_daemon_start_state *state)
+static void sock_daemon_run_shutdown(struct tevent_req *req)
{
+ struct sock_daemon_run_state *state = tevent_req_data(
+ req, struct sock_daemon_run_state);
struct sock_daemon_context *sockd = state->sockd;
struct sock_socket *sock;
@@ -734,32 +690,29 @@ static void sock_daemon_shutdown(struct sock_daemon_start_state *state)
TALLOC_FREE(sockd->pid_ctx);
}
-static void sock_daemon_socket_fail(struct tevent_req *subreq)
+static void sock_daemon_run_socket_fail(struct tevent_req *subreq)
{
struct tevent_req *req = tevent_req_callback_data(
subreq, struct tevent_req);
- struct sock_daemon_start_state *state = tevent_req_data(
- req, struct sock_daemon_start_state);
int ret = 0;
bool status;
status = sock_socket_start_recv(subreq, &ret);
TALLOC_FREE(subreq);
+ sock_daemon_run_shutdown(req);
if (! status) {
tevent_req_error(req, ret);
} else {
tevent_req_done(req);
}
-
- sock_daemon_shutdown(state);
}
-static void sock_daemon_watch_pid(struct tevent_req *subreq)
+static void sock_daemon_run_watch_pid(struct tevent_req *subreq)
{
struct tevent_req *req = tevent_req_callback_data(
subreq, struct tevent_req);
- struct sock_daemon_start_state *state = tevent_req_data(
- req, struct sock_daemon_start_state);
+ struct sock_daemon_run_state *state = tevent_req_data(
+ req, struct sock_daemon_run_state);
int ret;
bool status;
@@ -774,7 +727,7 @@ static void sock_daemon_watch_pid(struct tevent_req *subreq)
if (ret == -1) {
if (errno == ESRCH) {
D_ERR("PID %d gone away, exiting\n", state->pid_watch);
- sock_daemon_shutdown(state);
+ sock_daemon_run_shutdown(req);
tevent_req_error(req, ESRCH);
return;
} else {
@@ -788,7 +741,27 @@ static void sock_daemon_watch_pid(struct tevent_req *subreq)
if (tevent_req_nomem(subreq, req)) {
return;
}
- tevent_req_set_callback(subreq, sock_daemon_watch_pid, req);
+ tevent_req_set_callback(subreq, sock_daemon_run_watch_pid, req);
+}
+
+static void sock_daemon_run_wait_done(struct tevent_req *subreq)
+{
+ struct tevent_req *req = tevent_req_callback_data(
+ subreq, struct tevent_req);
+ struct sock_daemon_run_state *state = tevent_req_data(
+ req, struct sock_daemon_run_state);
+ struct sock_daemon_context *sockd = state->sockd;
+ int ret;
+ bool status;
+
+ status = sockd->funcs->wait_recv(subreq, &ret);
+ TALLOC_FREE(subreq);
+ sock_daemon_run_shutdown(req);
+ if (! status) {
+ tevent_req_error(req, ret);
+ } else {
+ tevent_req_done(req);
+ }
}
bool sock_daemon_run_recv(struct tevent_req *req, int *perr)
--
Samba Shared Repository
More information about the samba-cvs
mailing list