winbindd_reconnect.c
来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 260 行
C
260 行
/* Unix SMB/CIFS implementation. Wrapper around winbindd_rpc.c to centralize retry logic. Copyright (C) Volker Lendecke 2005 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 2 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, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/#include "includes.h"#include "winbindd.h"#undef DBGC_CLASS#define DBGC_CLASS DBGC_WINBINDextern struct winbindd_methods msrpc_methods;/* List all users */static NTSTATUS query_user_list(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, uint32 *num_entries, WINBIND_USERINFO **info){ NTSTATUS result; result = msrpc_methods.query_user_list(domain, mem_ctx, num_entries, info); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.query_user_list(domain, mem_ctx, num_entries, info); return result;}/* list all domain groups */static NTSTATUS enum_dom_groups(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, uint32 *num_entries, struct acct_info **info){ NTSTATUS result; result = msrpc_methods.enum_dom_groups(domain, mem_ctx, num_entries, info); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.enum_dom_groups(domain, mem_ctx, num_entries, info); return result;}/* List all domain groups */static NTSTATUS enum_local_groups(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, uint32 *num_entries, struct acct_info **info){ NTSTATUS result; result = msrpc_methods.enum_local_groups(domain, mem_ctx, num_entries, info); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.enum_local_groups(domain, mem_ctx, num_entries, info); return result;}/* convert a single name to a sid in a domain */static NTSTATUS name_to_sid(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, const char *domain_name, const char *name, DOM_SID *sid, enum SID_NAME_USE *type){ NTSTATUS result; result = msrpc_methods.name_to_sid(domain, mem_ctx, domain_name, name, sid, type); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.name_to_sid(domain, mem_ctx, domain_name, name, sid, type); return result;}/* convert a domain SID to a user or group name*/static NTSTATUS sid_to_name(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **domain_name, char **name, enum SID_NAME_USE *type){ NTSTATUS result; result = msrpc_methods.sid_to_name(domain, mem_ctx, sid, domain_name, name, type); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.sid_to_name(domain, mem_ctx, sid, domain_name, name, type); return result;}/* Lookup user information from a rid or username. */static NTSTATUS query_user(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, const DOM_SID *user_sid, WINBIND_USERINFO *user_info){ NTSTATUS result; result = msrpc_methods.query_user(domain, mem_ctx, user_sid, user_info); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.query_user(domain, mem_ctx, user_sid, user_info); return result;}/* Lookup groups a user is a member of. I wish Unix had a call like this! */static NTSTATUS lookup_usergroups(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, const DOM_SID *user_sid, uint32 *num_groups, DOM_SID **user_gids){ NTSTATUS result; result = msrpc_methods.lookup_usergroups(domain, mem_ctx, user_sid, num_groups, user_gids); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.lookup_usergroups(domain, mem_ctx, user_sid, num_groups, user_gids); return result;}static NTSTATUS lookup_useraliases(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, uint32 num_sids, const DOM_SID *sids, uint32 *num_aliases, uint32 **alias_rids){ NTSTATUS result; result = msrpc_methods.lookup_useraliases(domain, mem_ctx, num_sids, sids, num_aliases, alias_rids); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.lookup_useraliases(domain, mem_ctx, num_sids, sids, num_aliases, alias_rids); return result;}/* Lookup group membership given a rid. */static NTSTATUS lookup_groupmem(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, const DOM_SID *group_sid, uint32 *num_names, DOM_SID **sid_mem, char ***names, uint32 **name_types){ NTSTATUS result; result = msrpc_methods.lookup_groupmem(domain, mem_ctx, group_sid, num_names, sid_mem, names, name_types); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.lookup_groupmem(domain, mem_ctx, group_sid, num_names, sid_mem, names, name_types); return result;}/* find the sequence number for a domain */static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq){ NTSTATUS result; result = msrpc_methods.sequence_number(domain, seq); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.sequence_number(domain, seq); return result;}/* get a list of trusted domains */static NTSTATUS trusted_domains(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx, uint32 *num_domains, char ***names, char ***alt_names, DOM_SID **dom_sids){ NTSTATUS result; result = msrpc_methods.trusted_domains(domain, mem_ctx, num_domains, names, alt_names, dom_sids); if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) result = msrpc_methods.trusted_domains(domain, mem_ctx, num_domains, names, alt_names, dom_sids); return result;}/* the rpc backend methods are exposed via this structure */struct winbindd_methods reconnect_methods = { False, query_user_list, enum_dom_groups, enum_local_groups, name_to_sid, sid_to_name, query_user, lookup_usergroups, lookup_useraliases, lookup_groupmem, sequence_number, trusted_domains,};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?