The Samba-Bugzilla – Attachment 9267 Details for
Bug 10194
Offline logon cache not updating for cross child domain group membership
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for master
look2 (text/plain), 9.89 KB, created by
Andreas Schneider
on 2013-10-10 08:34:17 UTC
(
hide
)
Description:
Patch for master
Filename:
MIME Type:
Creator:
Andreas Schneider
Created:
2013-10-10 08:34:17 UTC
Size:
9.89 KB
patch
obsolete
>From 4a97522977c3554f4b1bebc9bf3de799e84d15db Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@cryptomilk.org> >Date: Thu, 10 Oct 2013 09:15:57 +0200 >Subject: [PATCH 1/5] idl: Add a new message for winbind domain states. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=10194 > >Signed-off-by: Andreas Schneider <asn@cryptomilk.org> >--- > source3/librpc/idl/messaging.idl | 2 ++ > 1 file changed, 2 insertions(+) > >diff --git a/source3/librpc/idl/messaging.idl b/source3/librpc/idl/messaging.idl >index ddcf0e3..9d16570 100644 >--- a/source3/librpc/idl/messaging.idl >+++ b/source3/librpc/idl/messaging.idl >@@ -100,6 +100,8 @@ interface messaging > MSG_WINBIND_VALIDATE_CACHE = 0x0408, > MSG_WINBIND_DUMP_DOMAIN_LIST = 0x0409, > MSG_WINBIND_IP_DROPPED = 0x040A, >+ MSG_WINBIND_DOMAIN_ONLINE = 0x040B, >+ MSG_WINBIND_DOMAIN_OFFLINE = 0x040C, > > /* event messages */ > MSG_DUMP_EVENT_LIST = 0x0500, >-- >1.8.4 > > >From 395807bc2d47ce9a9e2245e24ce0eec4af42c69a Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@cryptomilk.org> >Date: Thu, 10 Oct 2013 09:55:01 +0200 >Subject: [PATCH 2/5] s3-winbind: Add winbind parent pid functions. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=10194 > >Signed-off-by: Andreas Schneider <asn@cryptomilk.org> >--- > source3/winbindd/winbindd_dual.c | 16 ++++++++++++++++ > source3/winbindd/winbindd_proto.h | 4 ++++ > 2 files changed, 20 insertions(+) > >diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c >index 34896d5..9674f22 100644 >--- a/source3/winbindd/winbindd_dual.c >+++ b/source3/winbindd/winbindd_dual.c >@@ -1364,6 +1364,19 @@ static void child_handler(struct tevent_context *ev, struct tevent_fd *fde, > } > } > >+/* Parent pid handling */ >+static pid_t winbind_parent_pid; >+ >+void winbind_set_parent_pid(pid_t pid) >+{ >+ winbind_parent_pid = pid; >+} >+ >+pid_t winbind_get_parent_pid(void) >+{ >+ return winbind_parent_pid; >+} >+ > static bool fork_domain_child(struct winbindd_child *child) > { > int fdpair[2]; >@@ -1388,6 +1401,8 @@ static bool fork_domain_child(struct winbindd_child *child) > return False; > } > >+ winbind_set_parent_pid(sys_getpid()); >+ > ZERO_STRUCT(state); > state.child = child; > state.cli.pid = getpid(); >@@ -1408,6 +1423,7 @@ static bool fork_domain_child(struct winbindd_child *child) > ssize_t nread; > > close(fdpair[0]); >+ winbind_set_parent_pid(0); > > nread = sys_read(fdpair[1], &status, sizeof(status)); > if (nread != sizeof(status)) { >diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h >index b07f303..c605bc9 100644 >--- a/source3/winbindd/winbindd_proto.h >+++ b/source3/winbindd/winbindd_proto.h >@@ -296,6 +296,10 @@ NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself, > const char *logfilename); > struct winbindd_domain *wb_child_domain(void); > >+/* The following definitions come from winbindd/winbindd_dual.c */ >+void winbind_set_parent_pid(pid_t pid); >+pid_t winbind_get_parent_pid(void); >+ > /* The following definitions come from winbindd/winbindd_group.c */ > > void winbindd_getgrnam(struct winbindd_cli_state *state); >-- >1.8.4 > > >From 8db024dbb57fb3cc5afac12b6d3f01944c7738c0 Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@cryptomilk.org> >Date: Thu, 10 Oct 2013 10:01:40 +0200 >Subject: [PATCH 3/5] s3-winbind: Add functions for domain online/offline > handling. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=10194 > >Signed-off-by: Andreas Schneider <asn@cryptomilk.org> >--- > source3/winbindd/winbindd_cm.c | 40 +++++++++++++++++++++++++++++++++++++++ > source3/winbindd/winbindd_proto.h | 10 ++++++++++ > 2 files changed, 50 insertions(+) > >diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c >index 3906d3d..8f85d22 100644 >--- a/source3/winbindd/winbindd_cm.c >+++ b/source3/winbindd/winbindd_cm.c >@@ -340,6 +340,46 @@ static void calc_new_online_timeout_check(struct winbindd_domain *domain) > } > } > >+void winbind_msg_domain_offline(struct messaging_context *msg_ctx, >+ void *private_data, >+ uint32_t msg_type, >+ struct server_id server_id, >+ DATA_BLOB *data) >+{ >+ const char *domain_name = (const char *)data->data; >+ struct winbindd_domain *domain; >+ >+ domain = find_domain_from_name_noinit(domain_name); >+ if (domain == NULL) { >+ return; >+ } >+ >+ domain->online = false; >+ >+ DEBUG(0, ("Domain %s is marked as offline now.\n", >+ domain_name)); >+} >+ >+void winbind_msg_domain_online(struct messaging_context *msg_ctx, >+ void *private_data, >+ uint32_t msg_type, >+ struct server_id server_id, >+ DATA_BLOB *data) >+{ >+ const char *domain_name = (const char *)data->data; >+ struct winbindd_domain *domain; >+ >+ domain = find_domain_from_name_noinit(domain_name); >+ if (domain == NULL) { >+ return; >+ } >+ >+ domain->online = true; >+ >+ DEBUG(0, ("Domain %s is marked as online now.\n", >+ domain_name)); >+} >+ > /**************************************************************** > Set domain offline and also add handler to put us back online > if we detect a DC. >diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h >index c605bc9..0453788 100644 >--- a/source3/winbindd/winbindd_proto.h >+++ b/source3/winbindd/winbindd_proto.h >@@ -153,6 +153,16 @@ enum winbindd_result winbindd_dual_ccache_ntlm_auth(struct winbindd_domain *doma > void winbindd_ccache_save(struct winbindd_cli_state *state); > > /* The following definitions come from winbindd/winbindd_cm.c */ >+void winbind_msg_domain_offline(struct messaging_context *msg_ctx, >+ void *private_data, >+ uint32_t msg_type, >+ struct server_id server_id, >+ DATA_BLOB *data); >+void winbind_msg_domain_online(struct messaging_context *msg_ctx, >+ void *private_data, >+ uint32_t msg_type, >+ struct server_id server_id, >+ DATA_BLOB *data); > > void set_domain_offline(struct winbindd_domain *domain); > void set_domain_online_request(struct winbindd_domain *domain); >-- >1.8.4 > > >From 7c5577fda2755c986eb7375c1eda85a564e2c16f Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@cryptomilk.org> >Date: Thu, 10 Oct 2013 10:02:27 +0200 >Subject: [PATCH 4/5] s3-winbind: Register handlers for domain online/offline > messages. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=10194 > >Signed-off-by: Andreas Schneider <asn@cryptomilk.org> >--- > source3/winbindd/winbindd.c | 6 ++++++ > source3/winbindd/winbindd_dual.c | 5 +++++ > 2 files changed, 11 insertions(+) > >diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c >index 953e208..50573ac 100644 >--- a/source3/winbindd/winbindd.c >+++ b/source3/winbindd/winbindd.c >@@ -1168,6 +1168,12 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx, > messaging_register(msg_ctx, NULL, > MSG_WINBIND_ONLINESTATUS, winbind_msg_onlinestatus); > >+ /* Handle domain online/offline messages for domains */ >+ messaging_register(winbind_messaging_context(), NULL, >+ MSG_WINBIND_DOMAIN_OFFLINE, winbind_msg_domain_offline); >+ messaging_register(winbind_messaging_context(), NULL, >+ MSG_WINBIND_DOMAIN_ONLINE, winbind_msg_domain_online); >+ > messaging_register(msg_ctx, NULL, > MSG_DUMP_EVENT_LIST, winbind_msg_dump_event_list); > >diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c >index 9674f22..c07b709 100644 >--- a/source3/winbindd/winbindd_dual.c >+++ b/source3/winbindd/winbindd_dual.c >@@ -1241,6 +1241,11 @@ NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself, > messaging_deregister(winbind_messaging_context(), > MSG_DEBUG, NULL); > >+ messaging_deregister(winbind_messaging_context(), >+ MSG_WINBIND_DOMAIN_OFFLINE, NULL); >+ messaging_deregister(winbind_messaging_context(), >+ MSG_WINBIND_DOMAIN_ONLINE, NULL); >+ > /* We have destroyed all events in the winbindd_event_context > * in reinit_after_fork(), so clean out all possible pending > * event pointers. */ >-- >1.8.4 > > >From 909b8f10dc9c0e5ee6f6391c5a5e37db8d6756c8 Mon Sep 17 00:00:00 2001 >From: Andreas Schneider <asn@cryptomilk.org> >Date: Thu, 10 Oct 2013 10:03:32 +0200 >Subject: [PATCH 5/5] s3-winbind: Send online/offline message of the domain to > the parent. > >https://bugzilla.samba.org/show_bug.cgi?id=10194 > >Signed-off-by: Andreas Schneider <asn@cryptomilk.org> >--- > source3/winbindd/winbindd_cm.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > >diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c >index 8f85d22..5cc340d 100644 >--- a/source3/winbindd/winbindd_cm.c >+++ b/source3/winbindd/winbindd_cm.c >@@ -387,6 +387,8 @@ void winbind_msg_domain_online(struct messaging_context *msg_ctx, > > void set_domain_offline(struct winbindd_domain *domain) > { >+ pid_t parent_pid = winbind_get_parent_pid(); >+ > DEBUG(10,("set_domain_offline: called for domain %s\n", > domain->name )); > >@@ -434,6 +436,15 @@ void set_domain_offline(struct winbindd_domain *domain) > DEBUG(10,("set_domain_offline: added event handler for domain %s\n", > domain->name )); > >+ /* Send a message to the parrent that the domain is offline. */ >+ if (parent_pid > 0 && !domain->internal) { >+ messaging_send_buf(winbind_messaging_context(), >+ pid_to_procid(parent_pid), >+ MSG_WINBIND_DOMAIN_OFFLINE, >+ (uint8 *)domain->name, >+ strlen(domain->name) + 1); >+ } >+ > /* Send an offline message to the idmap child when our > primary domain goes offline */ > >@@ -458,6 +469,8 @@ void set_domain_offline(struct winbindd_domain *domain) > > static void set_domain_online(struct winbindd_domain *domain) > { >+ pid_t parent_pid = winbind_get_parent_pid(); >+ > DEBUG(10,("set_domain_online: called for domain %s\n", > domain->name )); > >@@ -509,6 +522,15 @@ static void set_domain_online(struct winbindd_domain *domain) > > domain->online = True; > >+ /* Send a message to the parrent that the domain is online. */ >+ if (parent_pid > 0 && !domain->internal) { >+ messaging_send_buf(winbind_messaging_context(), >+ pid_to_procid(parent_pid), >+ MSG_WINBIND_DOMAIN_ONLINE, >+ (uint8 *)domain->name, >+ strlen(domain->name) + 1); >+ } >+ > /* Send an online message to the idmap child when our > primary domain comes online */ > >-- >1.8.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
vl
:
review-
Actions:
View
Attachments on
bug 10194
:
9267
|
9271
|
9272
|
9275
|
9276
|
9277