diff options
-rw-r--r-- | source3/Makefile.in | 2 | ||||
-rw-r--r-- | source3/configure.in | 4 | ||||
-rw-r--r-- | source3/rpc_server/srv_pipe.c | 2 | ||||
-rw-r--r-- | source3/rpc_server/srv_samr.c | 565 |
4 files changed, 4 insertions, 569 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 9c16213e6c..da5a6ca489 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -467,7 +467,7 @@ RPC_LSA_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o librpc/gen_ndr/srv_ls RPC_NETLOG_OBJ = rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o \ librpc/gen_ndr/srv_netlogon.o -RPC_SAMR_OBJ = rpc_server/srv_samr.o rpc_server/srv_samr_nt.o \ +RPC_SAMR_OBJ = rpc_server/srv_samr_nt.o \ rpc_server/srv_samr_util.o \ librpc/gen_ndr/srv_samr.o diff --git a/source3/configure.in b/source3/configure.in index 5cc9019407..9e4692b696 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -707,7 +707,7 @@ AC_SUBST(DYNEXP) dnl Add modules that have to be built by default here dnl These have to be built static: -default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr2 rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs rpc_net rpc_netdfs rpc_srvsvc2 rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template" +default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs rpc_net rpc_netdfs rpc_srvsvc2 rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template" dnl These are preferably build shared, and static if dlopen() is not available default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_syncops vfs_xattr_tdb vfs_streams_xattr" @@ -6462,7 +6462,7 @@ SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC) SMB_MODULE(rpc_srvsvc2, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc2.$SHLIBEXT", RPC) SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC) SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC) -SMB_MODULE(rpc_samr2, \$(RPC_SAMR_OBJ), "bin/librpc_samr2.$SHLIBEXT", RPC) +SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC) SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC) SMB_SUBSYSTEM(RPC,smbd/server.o) diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index 8c7c43f686..06694a2701 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -2367,7 +2367,7 @@ void get_pipe_fns( int idx, struct api_struct **fns, int *n_fns ) dssetup_get_pipe_fns( &cmds, &n_cmds ); break; case PI_SAMR: - samr2_get_pipe_fns( &cmds, &n_cmds ); + samr_get_pipe_fns( &cmds, &n_cmds ); break; case PI_NETLOGON: netlog_get_pipe_fns( &cmds, &n_cmds ); diff --git a/source3/rpc_server/srv_samr.c b/source3/rpc_server/srv_samr.c deleted file mode 100644 index f7cc7eec10..0000000000 --- a/source3/rpc_server/srv_samr.c +++ /dev/null @@ -1,565 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * RPC Pipe client / server routines - * Copyright (C) Andrew Tridgell 1992-1997, - * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, - * Copyright (C) Paul Ashton 1997, - * Copyright (C) Marc Jacobsen 1999, - * Copyright (C) Jean François Micouleau 1998-2001, - * Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002-2003. - * - * Split into interface and implementation modules by, - * - * Copyright (C) Jeremy Allison 2001. - * - * 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/>. - */ - -/* - * This is the interface to the SAMR code. - */ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_RPC_SRV - -/******************************************************************* - ********************************************************************/ - -static bool proxy_samr_call(pipes_struct *p, uint8 opnum) -{ - struct api_struct *fns; - int n_fns; - - samr_get_pipe_fns(&fns, &n_fns); - - if (opnum >= n_fns) { - return false; - } - - if (fns[opnum].opnum != opnum) { - smb_panic("SAMR function table not sorted"); - } - - return fns[opnum].fn(p); -} - -/******************************************************************* - api_samr_close_hnd - ********************************************************************/ - -static bool api_samr_close_hnd(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CLOSE); -} - -/******************************************************************* - api_samr_open_domain - ********************************************************************/ - -static bool api_samr_open_domain(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_OPENDOMAIN); -} - -/******************************************************************* - api_samr_get_usrdom_pwinfo - ********************************************************************/ - -static bool api_samr_get_usrdom_pwinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_GETUSERPWINFO); -} - -/******************************************************************* - api_samr_set_sec_obj - ********************************************************************/ - -static bool api_samr_set_sec_obj(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_SETSECURITY); -} - -/******************************************************************* - api_samr_query_sec_obj - ********************************************************************/ - -static bool api_samr_query_sec_obj(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYSECURITY); -} - -/******************************************************************* - api_samr_enum_dom_users - ********************************************************************/ - -static bool api_samr_enum_dom_users(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_ENUMDOMAINUSERS); -} - -/******************************************************************* - api_samr_enum_dom_groups - ********************************************************************/ - -static bool api_samr_enum_dom_groups(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_ENUMDOMAINGROUPS); -} - -/******************************************************************* - api_samr_enum_dom_aliases - ********************************************************************/ - -static bool api_samr_enum_dom_aliases(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_ENUMDOMAINALIASES); -} - -/******************************************************************* - api_samr_query_dispinfo - ********************************************************************/ - -static bool api_samr_query_dispinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYDISPLAYINFO); -} - -/******************************************************************* - api_samr_query_aliasinfo - ********************************************************************/ - -static bool api_samr_query_aliasinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYALIASINFO); -} - -/******************************************************************* - api_samr_lookup_names - ********************************************************************/ - -static bool api_samr_lookup_names(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_LOOKUPNAMES); -} - -/******************************************************************* - api_samr_chgpasswd_user - ********************************************************************/ - -static bool api_samr_chgpasswd_user(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CHANGEPASSWORDUSER2); -} - -/******************************************************************* - api_samr_lookup_rids - ********************************************************************/ - -static bool api_samr_lookup_rids(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_LOOKUPRIDS); -} - -/******************************************************************* - api_samr_open_user - ********************************************************************/ - -static bool api_samr_open_user(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_OPENUSER); -} - -/******************************************************************* - api_samr_query_userinfo - ********************************************************************/ - -static bool api_samr_query_userinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYUSERINFO); -} - -/******************************************************************* - api_samr_query_usergroups - ********************************************************************/ - -static bool api_samr_query_usergroups(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_GETGROUPSFORUSER); -} - -/******************************************************************* - api_samr_query_domain_info - ********************************************************************/ - -static bool api_samr_query_domain_info(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYDOMAININFO); -} - -/******************************************************************* - api_samr_create_user - ********************************************************************/ - -static bool api_samr_create_user(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CREATEUSER2); -} - -/******************************************************************* - api_samr_connect_anon - ********************************************************************/ - -static bool api_samr_connect_anon(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CONNECT); -} - -/******************************************************************* - api_samr_connect - ********************************************************************/ - -static bool api_samr_connect(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CONNECT2); -} - -/******************************************************************* - api_samr_connect4 - ********************************************************************/ - -static bool api_samr_connect4(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CONNECT4); -} - -/******************************************************************* - api_samr_chgpasswd_user3 - ********************************************************************/ - -static bool api_samr_chgpasswd_user3(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CHANGEPASSWORDUSER3); -} - -/******************************************************************* - api_samr_connect5 - ********************************************************************/ - -static bool api_samr_connect5(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CONNECT5); -} - -/********************************************************************** - api_samr_lookup_domain - **********************************************************************/ - -static bool api_samr_lookup_domain(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_LOOKUPDOMAIN); -} - -/********************************************************************** - api_samr_enum_domains - **********************************************************************/ - -static bool api_samr_enum_domains(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_ENUMDOMAINS); -} - -/******************************************************************* - api_samr_open_alias - ********************************************************************/ - -static bool api_samr_open_alias(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_OPENALIAS); -} - -/******************************************************************* - api_samr_set_userinfo - ********************************************************************/ - -static bool api_samr_set_userinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_SETUSERINFO); -} - -/******************************************************************* - api_samr_set_userinfo2 - ********************************************************************/ - -static bool api_samr_set_userinfo2(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_SETUSERINFO2); -} - -/******************************************************************* - api_samr_query_useraliases - ********************************************************************/ - -static bool api_samr_query_useraliases(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_GETALIASMEMBERSHIP); -} - -/******************************************************************* - api_samr_query_aliasmem - ********************************************************************/ - -static bool api_samr_query_aliasmem(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_GETMEMBERSINALIAS); -} - -/******************************************************************* - api_samr_query_groupmem - ********************************************************************/ - -static bool api_samr_query_groupmem(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYGROUPMEMBER); -} - -/******************************************************************* - api_samr_add_aliasmem - ********************************************************************/ - -static bool api_samr_add_aliasmem(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_ADDALIASMEMBER); -} - -/******************************************************************* - api_samr_del_aliasmem - ********************************************************************/ - -static bool api_samr_del_aliasmem(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_DELETEALIASMEMBER); -} - -/******************************************************************* - api_samr_add_groupmem - ********************************************************************/ - -static bool api_samr_add_groupmem(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_ADDGROUPMEMBER); -} - -/******************************************************************* - api_samr_del_groupmem - ********************************************************************/ - -static bool api_samr_del_groupmem(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_DELETEGROUPMEMBER); -} - -/******************************************************************* - api_samr_delete_dom_user - ********************************************************************/ - -static bool api_samr_delete_dom_user(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_DELETEUSER); -} - -/******************************************************************* - api_samr_delete_dom_group - ********************************************************************/ - -static bool api_samr_delete_dom_group(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_DELETEDOMAINGROUP); -} - -/******************************************************************* - api_samr_delete_dom_alias - ********************************************************************/ - -static bool api_samr_delete_dom_alias(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_DELETEDOMALIAS); -} - -/******************************************************************* - api_samr_create_dom_group - ********************************************************************/ - -static bool api_samr_create_dom_group(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CREATEDOMAINGROUP); -} - -/******************************************************************* - api_samr_create_dom_alias - ********************************************************************/ - -static bool api_samr_create_dom_alias(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_CREATEDOMALIAS); -} - -/******************************************************************* - api_samr_query_groupinfo - ********************************************************************/ - -static bool api_samr_query_groupinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYGROUPINFO); -} - -/******************************************************************* - api_samr_set_groupinfo - ********************************************************************/ - -static bool api_samr_set_groupinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_SETGROUPINFO); -} - -/******************************************************************* - api_samr_set_aliasinfo - ********************************************************************/ - -static bool api_samr_set_aliasinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_SETALIASINFO); -} - -/******************************************************************* - api_samr_get_dom_pwinfo - ********************************************************************/ - -static bool api_samr_get_dom_pwinfo(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_GETDOMPWINFO); -} - -/******************************************************************* - api_samr_open_group - ********************************************************************/ - -static bool api_samr_open_group(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_OPENGROUP); -} - -/******************************************************************* - api_samr_remove_sid_foreign_domain - ********************************************************************/ - -static bool api_samr_remove_sid_foreign_domain(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN); -} - -/******************************************************************* - api_samr_query_dom_info2 - ********************************************************************/ - -static bool api_samr_query_domain_info2(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_QUERYDOMAININFO2); -} - -/******************************************************************* - api_samr_set_dom_info - ********************************************************************/ - -static bool api_samr_set_dom_info(pipes_struct *p) -{ - return proxy_samr_call(p, NDR_SAMR_SETDOMAININFO); -} - -/******************************************************************* - array of \PIPE\samr operations - ********************************************************************/ - -static struct api_struct api_samr_cmds [] = -{ - {"SAMR_CLOSE_HND" , SAMR_CLOSE_HND , api_samr_close_hnd }, - {"SAMR_CONNECT" , SAMR_CONNECT , api_samr_connect }, - {"SAMR_CONNECT_ANON" , SAMR_CONNECT_ANON , api_samr_connect_anon }, - {"SAMR_ENUM_DOMAINS" , SAMR_ENUM_DOMAINS , api_samr_enum_domains }, - {"SAMR_ENUM_DOM_USERS" , SAMR_ENUM_DOM_USERS , api_samr_enum_dom_users }, - - {"SAMR_ENUM_DOM_GROUPS" , SAMR_ENUM_DOM_GROUPS , api_samr_enum_dom_groups }, - {"SAMR_ENUM_DOM_ALIASES" , SAMR_ENUM_DOM_ALIASES , api_samr_enum_dom_aliases }, - {"SAMR_QUERY_USERALIASES" , SAMR_QUERY_USERALIASES, api_samr_query_useraliases}, - {"SAMR_QUERY_ALIASMEM" , SAMR_QUERY_ALIASMEM , api_samr_query_aliasmem }, - {"SAMR_QUERY_GROUPMEM" , SAMR_QUERY_GROUPMEM , api_samr_query_groupmem }, - {"SAMR_ADD_ALIASMEM" , SAMR_ADD_ALIASMEM , api_samr_add_aliasmem }, - {"SAMR_DEL_ALIASMEM" , SAMR_DEL_ALIASMEM , api_samr_del_aliasmem }, - {"SAMR_ADD_GROUPMEM" , SAMR_ADD_GROUPMEM , api_samr_add_groupmem }, - {"SAMR_DEL_GROUPMEM" , SAMR_DEL_GROUPMEM , api_samr_del_groupmem }, - - {"SAMR_DELETE_DOM_USER" , SAMR_DELETE_DOM_USER , api_samr_delete_dom_user }, - {"SAMR_DELETE_DOM_GROUP" , SAMR_DELETE_DOM_GROUP , api_samr_delete_dom_group }, - {"SAMR_DELETE_DOM_ALIAS" , SAMR_DELETE_DOM_ALIAS , api_samr_delete_dom_alias }, - {"SAMR_CREATE_DOM_GROUP" , SAMR_CREATE_DOM_GROUP , api_samr_create_dom_group }, - {"SAMR_CREATE_DOM_ALIAS" , SAMR_CREATE_DOM_ALIAS , api_samr_create_dom_alias }, - {"SAMR_LOOKUP_NAMES" , SAMR_LOOKUP_NAMES , api_samr_lookup_names }, - {"SAMR_OPEN_USER" , SAMR_OPEN_USER , api_samr_open_user }, - {"SAMR_QUERY_USERINFO" , SAMR_QUERY_USERINFO , api_samr_query_userinfo }, - {"SAMR_SET_USERINFO" , SAMR_SET_USERINFO , api_samr_set_userinfo }, - {"SAMR_SET_USERINFO2" , SAMR_SET_USERINFO2 , api_samr_set_userinfo2 }, - - {"SAMR_QUERY_DOMAIN_INFO" , SAMR_QUERY_DOMAIN_INFO, api_samr_query_domain_info}, - {"SAMR_QUERY_USERGROUPS" , SAMR_QUERY_USERGROUPS , api_samr_query_usergroups }, - {"SAMR_QUERY_DISPINFO" , SAMR_QUERY_DISPINFO , api_samr_query_dispinfo }, - {"SAMR_QUERY_DISPINFO3" , SAMR_QUERY_DISPINFO3 , api_samr_query_dispinfo }, - {"SAMR_QUERY_DISPINFO4" , SAMR_QUERY_DISPINFO4 , api_samr_query_dispinfo }, - - {"SAMR_QUERY_ALIASINFO" , SAMR_QUERY_ALIASINFO , api_samr_query_aliasinfo }, - {"SAMR_QUERY_GROUPINFO" , SAMR_QUERY_GROUPINFO , api_samr_query_groupinfo }, - {"SAMR_SET_GROUPINFO" , SAMR_SET_GROUPINFO , api_samr_set_groupinfo }, - {"SAMR_SET_ALIASINFO" , SAMR_SET_ALIASINFO , api_samr_set_aliasinfo }, - {"SAMR_CREATE_USER" , SAMR_CREATE_USER , api_samr_create_user }, - {"SAMR_LOOKUP_RIDS" , SAMR_LOOKUP_RIDS , api_samr_lookup_rids }, - {"SAMR_GET_DOM_PWINFO" , SAMR_GET_DOM_PWINFO , api_samr_get_dom_pwinfo }, - {"SAMR_CHGPASSWD_USER" , SAMR_CHGPASSWD_USER , api_samr_chgpasswd_user }, - {"SAMR_OPEN_ALIAS" , SAMR_OPEN_ALIAS , api_samr_open_alias }, - {"SAMR_OPEN_GROUP" , SAMR_OPEN_GROUP , api_samr_open_group }, - {"SAMR_OPEN_DOMAIN" , SAMR_OPEN_DOMAIN , api_samr_open_domain }, - {"SAMR_REMOVE_SID_FOREIGN_DOMAIN" , SAMR_REMOVE_SID_FOREIGN_DOMAIN , api_samr_remove_sid_foreign_domain }, - {"SAMR_LOOKUP_DOMAIN" , SAMR_LOOKUP_DOMAIN , api_samr_lookup_domain }, - - {"SAMR_QUERY_SEC_OBJECT" , SAMR_QUERY_SEC_OBJECT , api_samr_query_sec_obj }, - {"SAMR_SET_SEC_OBJECT" , SAMR_SET_SEC_OBJECT , api_samr_set_sec_obj }, - {"SAMR_GET_USRDOM_PWINFO" , SAMR_GET_USRDOM_PWINFO, api_samr_get_usrdom_pwinfo}, - {"SAMR_QUERY_DOMAIN_INFO2", SAMR_QUERY_DOMAIN_INFO2, api_samr_query_domain_info2}, - {"SAMR_SET_DOMAIN_INFO" , SAMR_SET_DOMAIN_INFO , api_samr_set_dom_info }, - {"SAMR_CONNECT4" , SAMR_CONNECT4 , api_samr_connect4 }, - {"SAMR_CHGPASSWD_USER3" , SAMR_CHGPASSWD_USER3 , api_samr_chgpasswd_user3 }, - {"SAMR_CONNECT5" , SAMR_CONNECT5 , api_samr_connect5 } -}; - -void samr2_get_pipe_fns( struct api_struct **fns, int *n_fns ) -{ - *fns = api_samr_cmds; - *n_fns = sizeof(api_samr_cmds) / sizeof(struct api_struct); -} - - -NTSTATUS rpc_samr2_init(void) -{ - return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "samr", "lsass", api_samr_cmds, - sizeof(api_samr_cmds) / sizeof(struct api_struct)); -} |