diff options
author | Andrew Bartlett <abartlet@samba.org> | 2014-05-08 14:46:06 +1200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-06-11 10:18:26 +0200 |
commit | faa4452df7f2add0b4b583a25365b43da8ec1305 (patch) | |
tree | 6ba3da1e4ed07bb9f98679411444a0bc8b0e8815 /source3/winbindd/winbindd_irpc.c | |
parent | f4ab082d2b984b7deb3afbc7a26e238aa5b3b8c3 (diff) | |
download | samba-faa4452df7f2add0b4b583a25365b43da8ec1305.tar.gz samba-faa4452df7f2add0b4b583a25365b43da8ec1305.tar.xz samba-faa4452df7f2add0b4b583a25365b43da8ec1305.zip |
s3-winbind rename winbindd_update_rodc_dns to be for more generic irpc
Change-Id: I385ef8bd766848becc42e58694207dc94cd07a89
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source3/winbindd/winbindd_irpc.c')
-rw-r--r-- | source3/winbindd/winbindd_irpc.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/source3/winbindd/winbindd_irpc.c b/source3/winbindd/winbindd_irpc.c new file mode 100644 index 00000000000..e5aa53ffad4 --- /dev/null +++ b/source3/winbindd/winbindd_irpc.c @@ -0,0 +1,94 @@ +/* + Unix SMB/CIFS implementation. + async implementation of commands submitted over IRPC + Copyright (C) Volker Lendecke 2009 + Copyright (C) Guenther Deschner 2009 + Copyright (C) Andrew Bartlett 2014 + + 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 <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "winbindd.h" +#include "librpc/gen_ndr/ndr_winbind_c.h" +#include "source4/lib/messaging/irpc.h" +#include "librpc/gen_ndr/ndr_winbind.h" + +struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state { + struct irpc_message *msg; + struct winbind_DsrUpdateReadOnlyServerDnsRecords *req; +}; + +static void wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback(struct tevent_req *subreq); + +NTSTATUS wb_irpc_DsrUpdateReadOnlyServerDnsRecords(struct irpc_message *msg, + struct winbind_DsrUpdateReadOnlyServerDnsRecords *req) +{ + struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state *s; + struct tevent_req *subreq; + struct winbindd_domain *domain; + + DEBUG(5, ("wb_irpc_DsrUpdateReadOnlyServerDnsRecords called\n")); + + s = talloc(msg, struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state); + NT_STATUS_HAVE_NO_MEMORY(s); + + s->msg = msg; + s->req = req; + + domain = find_our_domain(); + if (domain == NULL) { + return NT_STATUS_NO_SUCH_DOMAIN; + } + + subreq = dcerpc_winbind_DsrUpdateReadOnlyServerDnsRecords_send(s, winbind_event_context(), + dom_child_handle(domain), + req->in.site_name, + req->in.dns_ttl, + req->in.dns_names); + if (!subreq) { + return NT_STATUS_NO_MEMORY; + } + + tevent_req_set_callback(subreq, + wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback, + s); + + msg->defer_reply = true; + return NT_STATUS_OK; +} + +static void wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback(struct tevent_req *subreq) +{ + struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state *s = + tevent_req_callback_data(subreq, + struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state); + NTSTATUS status, result; + + DEBUG(5, ("wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback called\n")); + + status = dcerpc_winbind_DsrUpdateReadOnlyServerDnsRecords_recv(subreq, s, &result); + any_nt_status_not_ok(status, result, &status); + TALLOC_FREE(subreq); + + irpc_send_reply(s->msg, status); +} + +NTSTATUS wb_irpc_register(void) +{ + NTSTATUS status; + status = IRPC_REGISTER(winbind_imessaging_context(), winbind, WINBIND_DSRUPDATEREADONLYSERVERDNSRECORDS, + wb_irpc_DsrUpdateReadOnlyServerDnsRecords, NULL); + return status; +} |