From: Pavel Filipenský Date: Mon, 16 Dec 2024 13:16:07 +0000 (+0100) Subject: s3:winbindd: Remove implementation of WINBINDD_SHOW_SEQUENCE X-Git-Tag: tdb-1.4.13~284 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf20ec9642eacabc1a2379528cc0c3d4bb5cfc85;p=thirdparty%2Fsamba.git s3:winbindd: Remove implementation of WINBINDD_SHOW_SEQUENCE Signed-off-by: Pavel Filipenský Reviewed-by: Volker Lendecke Reviewed-by: Andreas Schneider --- diff --git a/source3/winbindd/wb_seqnum.c b/source3/winbindd/wb_seqnum.c deleted file mode 100644 index 7affd764ca2..00000000000 --- a/source3/winbindd/wb_seqnum.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - Unix SMB/CIFS implementation. - async seqnum - Copyright (C) Volker Lendecke 2009 - - 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 "winbindd.h" -#include "librpc/gen_ndr/ndr_winbind_c.h" - -struct wb_seqnum_state { - uint32_t seqnum; -}; - -static void wb_seqnum_done(struct tevent_req *subreq); - -struct tevent_req *wb_seqnum_send(TALLOC_CTX *mem_ctx, - struct tevent_context *ev, - struct winbindd_domain *domain) -{ - struct tevent_req *req, *subreq; - struct wb_seqnum_state *state; - - req = tevent_req_create(mem_ctx, &state, struct wb_seqnum_state); - if (req == NULL) { - return NULL; - } - subreq = dcerpc_wbint_QuerySequenceNumber_send( - state, ev, dom_child_handle(domain), &state->seqnum); - if (tevent_req_nomem(subreq, req)) { - return tevent_req_post(req, ev); - } - tevent_req_set_callback(subreq, wb_seqnum_done, req); - return req; -} - -static void wb_seqnum_done(struct tevent_req *subreq) -{ - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct wb_seqnum_state *state = tevent_req_data( - req, struct wb_seqnum_state); - NTSTATUS status, result; - - status = dcerpc_wbint_QuerySequenceNumber_recv(subreq, state, &result); - TALLOC_FREE(subreq); - if (any_nt_status_not_ok(status, result, &status)) { - tevent_req_nterror(req, status); - return; - } - tevent_req_done(req); -} - -NTSTATUS wb_seqnum_recv(struct tevent_req *req, uint32_t *seqnum) -{ - struct wb_seqnum_state *state = tevent_req_data( - req, struct wb_seqnum_state); - NTSTATUS status; - - if (tevent_req_is_nterror(req, &status)) { - return status; - } - *seqnum = state->seqnum; - return NT_STATUS_OK; -} diff --git a/source3/winbindd/wb_seqnums.c b/source3/winbindd/wb_seqnums.c deleted file mode 100644 index 24955ad92f8..00000000000 --- a/source3/winbindd/wb_seqnums.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - async seqnums, update the seqnums in winbindd_cache.c - - Copyright (C) Volker Lendecke 2009 - - 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 "winbindd.h" -#include "librpc/gen_ndr/ndr_winbind_c.h" - -struct wb_seqnums_state { - int num_domains; - int num_received; - - struct tevent_req **subreqs; - struct winbindd_domain **domains; - NTSTATUS *statuses; - uint32_t *seqnums; -}; - -static void wb_seqnums_done(struct tevent_req *subreq); - -struct tevent_req *wb_seqnums_send(TALLOC_CTX *mem_ctx, - struct tevent_context *ev) -{ - struct tevent_req *req; - struct wb_seqnums_state *state; - struct winbindd_domain *domain; - int i; - - req = tevent_req_create(mem_ctx, &state, struct wb_seqnums_state); - if (req == NULL) { - return NULL; - } - state->num_received = 0; - state->num_domains = 0; - - for (domain = domain_list(); domain != NULL; domain = domain->next) { - state->num_domains += 1; - } - - state->subreqs = talloc_array(state, struct tevent_req *, - state->num_domains); - state->domains = talloc_zero_array(state, struct winbindd_domain *, - state->num_domains); - state->statuses = talloc_array(state, NTSTATUS, state->num_domains); - state->seqnums = talloc_array(state, uint32_t, state->num_domains); - - if ((state->subreqs == NULL) || (state->domains == NULL) || - (state->statuses == NULL) || (state->seqnums == NULL)) { - tevent_req_nterror(req, NT_STATUS_NO_MEMORY); - return tevent_req_post(req, ev); - } - - i = 0; - - for (domain = domain_list(); domain != NULL; domain = domain->next) { - state->domains[i] = domain; - state->subreqs[i] = wb_seqnum_send(state->subreqs, ev, domain); - if (tevent_req_nomem(state->subreqs[i], req)) { - /* Don't even start all the other requests */ - TALLOC_FREE(state->subreqs); - return tevent_req_post(req, ev); - } - tevent_req_set_callback(state->subreqs[i], wb_seqnums_done, - req); - i += 1; - } - return req; -} - -static void wb_seqnums_done(struct tevent_req *subreq) -{ - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct wb_seqnums_state *state = tevent_req_data( - req, struct wb_seqnums_state); - NTSTATUS status; - uint32_t seqnum; - int i; - - status = wb_seqnum_recv(subreq, &seqnum); - - for (i=0; inum_domains; i++) { - if (subreq == state->subreqs[i]) { - break; - } - } - if (i < state->num_domains) { - /* found one */ - - state->subreqs[i] = NULL; - state->statuses[i] = status; - if (NT_STATUS_IS_OK(status)) { - state->seqnums[i] = seqnum; - - /* - * This first assignment might be removed - * later - */ - state->domains[i]->sequence_number = seqnum; - - if (!wcache_store_seqnum(state->domains[i]->name, - state->seqnums[i], - time(NULL))) { - DEBUG(1, ("wcache_store_seqnum failed for " - "domain %s\n", - state->domains[i]->name)); - } - } - } - - TALLOC_FREE(subreq); - - state->num_received += 1; - - if (state->num_received >= state->num_domains) { - tevent_req_done(req); - } -} - -NTSTATUS wb_seqnums_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, - int *num_domains, struct winbindd_domain ***domains, - NTSTATUS **statuses, uint32_t **seqnums) -{ - struct wb_seqnums_state *state = tevent_req_data( - req, struct wb_seqnums_state); - NTSTATUS status; - - if (tevent_req_is_nterror(req, &status)) { - return status; - } - *num_domains = state->num_domains; - *domains = talloc_move(mem_ctx, &state->domains); - *statuses = talloc_move(mem_ctx, &state->statuses); - *seqnums = talloc_move(mem_ctx, &state->seqnums); - return NT_STATUS_OK; -} diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index df0c7d08cf0..c7370bc859d 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -338,8 +338,6 @@ static struct winbindd_async_dispatch_table async_nonpriv_table[] = { winbindd_getuserdomgroups_send, winbindd_getuserdomgroups_recv }, { WINBINDD_GETGROUPS, "GETGROUPS", winbindd_getgroups_send, winbindd_getgroups_recv }, - { WINBINDD_SHOW_SEQUENCE, "SHOW_SEQUENCE", - winbindd_show_sequence_send, winbindd_show_sequence_recv }, { WINBINDD_GETGRGID, "GETGRGID", winbindd_getgrgid_send, winbindd_getgrgid_recv }, { WINBINDD_GETGRNAM, "GETGRNAM", diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index 5b90a7a731f..2904dec7e83 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -742,24 +742,6 @@ struct tevent_req *winbindd_getgroups_send(TALLOC_CTX *mem_ctx, NTSTATUS winbindd_getgroups_recv(struct tevent_req *req, struct winbindd_response *response); -struct tevent_req *wb_seqnum_send(TALLOC_CTX *mem_ctx, - struct tevent_context *ev, - struct winbindd_domain *domain); -NTSTATUS wb_seqnum_recv(struct tevent_req *req, uint32_t *seqnum); - -struct tevent_req *wb_seqnums_send(TALLOC_CTX *mem_ctx, - struct tevent_context *ev); -NTSTATUS wb_seqnums_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, - int *num_domains, struct winbindd_domain ***domains, - NTSTATUS **statuses, uint32_t **seqnums); - -struct tevent_req *winbindd_show_sequence_send(TALLOC_CTX *mem_ctx, - struct tevent_context *ev, - struct winbindd_cli_state *cli, - struct winbindd_request *request); -NTSTATUS winbindd_show_sequence_recv(struct tevent_req *req, - struct winbindd_response *response); - struct tevent_req *wb_group_members_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, const struct dom_sid *sid, diff --git a/source3/winbindd/winbindd_show_sequence.c b/source3/winbindd/winbindd_show_sequence.c deleted file mode 100644 index e12f476cd2d..00000000000 --- a/source3/winbindd/winbindd_show_sequence.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - Unix SMB/CIFS implementation. - async implementation of WINBINDD_SHOW_SEQUENCE - Copyright (C) Volker Lendecke 2009 - - 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 "winbindd.h" - -struct winbindd_show_sequence_state { - bool one_domain; - /* One domain */ - uint32_t seqnum; - - /* All domains */ - int num_domains; - NTSTATUS *statuses; - struct winbindd_domain **domains; - uint32_t *seqnums; -}; - -static void winbindd_show_sequence_done_one(struct tevent_req *subreq); -static void winbindd_show_sequence_done_all(struct tevent_req *subreq); - -struct tevent_req *winbindd_show_sequence_send(TALLOC_CTX *mem_ctx, - struct tevent_context *ev, - struct winbindd_cli_state *cli, - struct winbindd_request *request) -{ - struct tevent_req *req, *subreq; - struct winbindd_show_sequence_state *state; - - req = tevent_req_create(mem_ctx, &state, - struct winbindd_show_sequence_state); - if (req == NULL) { - return NULL; - } - state->one_domain = false; - state->domains = NULL; - state->statuses = NULL; - state->seqnums = NULL; - - /* Ensure null termination */ - request->domain_name[sizeof(request->domain_name)-1]='\0'; - - DEBUG(3, ("show_sequence %s\n", request->domain_name)); - - if (request->domain_name[0] != '\0') { - struct winbindd_domain *domain; - - state->one_domain = true; - - domain = find_domain_from_name_noinit( - request->domain_name); - if (domain == NULL) { - tevent_req_nterror(req, NT_STATUS_NO_SUCH_DOMAIN); - return tevent_req_post(req, ev); - } - - subreq = wb_seqnum_send(state, ev, domain); - if (tevent_req_nomem(subreq, req)) { - return tevent_req_post(req, ev); - } - tevent_req_set_callback( - subreq, winbindd_show_sequence_done_one, req); - return req; - } - - subreq = wb_seqnums_send(state, ev); - if (tevent_req_nomem(subreq, req)) { - return tevent_req_post(req, ev); - } - tevent_req_set_callback(subreq, winbindd_show_sequence_done_all, req); - return req; -} - -static void winbindd_show_sequence_done_one(struct tevent_req *subreq) -{ - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct winbindd_show_sequence_state *state = tevent_req_data( - req, struct winbindd_show_sequence_state); - NTSTATUS status; - - status = wb_seqnum_recv(subreq, &state->seqnum); - TALLOC_FREE(subreq); - if (tevent_req_nterror(req, status)) { - return; - } - tevent_req_done(req); -} - -static void winbindd_show_sequence_done_all(struct tevent_req *subreq) -{ - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct winbindd_show_sequence_state *state = tevent_req_data( - req, struct winbindd_show_sequence_state); - NTSTATUS status; - - status = wb_seqnums_recv(subreq, state, &state->num_domains, - &state->domains, &state->statuses, - &state->seqnums); - TALLOC_FREE(subreq); - if (tevent_req_nterror(req, status)) { - return; - } - tevent_req_done(req); -} - -NTSTATUS winbindd_show_sequence_recv(struct tevent_req *req, - struct winbindd_response *response) -{ - struct winbindd_show_sequence_state *state = tevent_req_data( - req, struct winbindd_show_sequence_state); - NTSTATUS status; - char *extra_data; - int i; - - if (tevent_req_is_nterror(req, &status)) { - return status; - } - - if (state->one_domain) { - response->data.sequence_number = state->seqnum; - return NT_STATUS_OK; - } - - extra_data = talloc_strdup(response, ""); - if (extra_data == NULL) { - return NT_STATUS_NO_MEMORY; - } - - for (i=0; inum_domains; i++) { - if (!NT_STATUS_IS_OK(state->statuses[i]) - || (state->seqnums[i] == DOM_SEQUENCE_NONE)) { - extra_data = talloc_asprintf_append_buffer( - extra_data, "%s : DISCONNECTED\n", - state->domains[i]->name); - } else { - extra_data = talloc_asprintf_append_buffer( - extra_data, "%s : %d\n", - state->domains[i]->name, - (int)state->seqnums[i]); - } - if (extra_data == NULL) { - return NT_STATUS_NO_MEMORY; - } - } - - response->extra_data.data = extra_data; - response->length += talloc_get_size(extra_data); - return NT_STATUS_OK; -} diff --git a/source3/winbindd/wscript_build b/source3/winbindd/wscript_build index 4c85876b5ad..03aa6e5c060 100644 --- a/source3/winbindd/wscript_build +++ b/source3/winbindd/wscript_build @@ -208,8 +208,6 @@ bld.SAMBA3_SUBSYSTEM('winbindd-lib', wb_lookupusergroups.c wb_getpwsid.c wb_gettoken.c - wb_seqnum.c - wb_seqnums.c wb_group_members.c wb_alias_members.c wb_getgrsid.c @@ -231,7 +229,6 @@ bld.SAMBA3_SUBSYSTEM('winbindd-lib', winbindd_getsidaliases.c winbindd_getuserdomgroups.c winbindd_getgroups.c - winbindd_show_sequence.c winbindd_getgrgid.c winbindd_getgrnam.c winbindd_getusersids.c