diff options
author | Andrew Bartlett <abartlet@samba.org> | 2014-05-06 17:00:09 +1200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-06-11 10:18:26 +0200 |
commit | 223fbdaf3872fe71a75fec62813b91612af73a2b (patch) | |
tree | 95fb233e98d024ba4bc6fae9d3cf517b26dd39ec /source3/winbindd/winbindd_dual_srv.c | |
parent | cb79cc342e30bb2bbac33868836ea13d2d594c30 (diff) | |
download | samba-223fbdaf3872fe71a75fec62813b91612af73a2b.tar.gz samba-223fbdaf3872fe71a75fec62813b91612af73a2b.tar.xz samba-223fbdaf3872fe71a75fec62813b91612af73a2b.zip |
s3-winbindd: Listen on IRPC and do forwarded DNS updates on an RODC
Change-Id: Ib87933c318f510d95f7008e122216d73803ede68
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source3/winbindd/winbindd_dual_srv.c')
-rw-r--r-- | source3/winbindd/winbindd_dual_srv.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c index f064467bf2..721d293c4d 100644 --- a/source3/winbindd/winbindd_dual_srv.c +++ b/source3/winbindd/winbindd_dual_srv.c @@ -29,6 +29,7 @@ #include "../librpc/gen_ndr/ndr_netlogon_c.h" #include "idmap.h" #include "../libcli/security/security.h" +#include "../libcli/auth/netlogon_creds_cli.h" void _wbint_Ping(struct pipes_struct *p, struct wbint_Ping *r) { @@ -717,3 +718,41 @@ NTSTATUS _wbint_PingDc(struct pipes_struct *p, struct wbint_PingDc *r) DEBUG(5, ("winbindd_dual_ping_dc succeeded\n")); return NT_STATUS_OK; } + +NTSTATUS _wbint_DsrUpdateReadOnlyServerDnsRecords(struct pipes_struct *p, + struct wbint_DsrUpdateReadOnlyServerDnsRecords *r) +{ + struct winbindd_domain *domain; + NTSTATUS status; + struct rpc_pipe_client *netlogon_pipe; + + domain = wb_child_domain(); + if (domain == NULL) { + return NT_STATUS_REQUEST_NOT_ACCEPTED; + } + + status = cm_connect_netlogon(domain, &netlogon_pipe); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(3, ("could not open handle to NETLOGON pipe\n")); + goto done; + } + + status = netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords(domain->conn.netlogon_creds, + netlogon_pipe->binding_handle, + r->in.site_name, + r->in.dns_ttl, + r->in.dns_names); + + /* Pass back result code - zero for success, other values for + specific failures. */ + + DEBUG(3,("DNS records for domain %s %s\n", domain->name, + NT_STATUS_IS_OK(status) ? "changed" : "unchanged")); + + done: + DEBUG(NT_STATUS_IS_OK(status) ? 5 : 2, + ("Update of DNS records via RW DC %s returned %s\n", + domain->name, nt_errstr(status))); + + return status; +} |