1/* 2 Samba Unix/Linux SMB client library 3 Distributed SMB/CIFS Server Management Utility 4 Copyright (C) 2001 Andrew Bartlett (abartlet@samba.org) 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19/* 20 * A function of this type is passed to the ' 21 * run_rpc_command' wrapper. Must go before the net_proto.h 22 * include 23 */ 24 25#include "lib/netapi/netapi.h" 26#include "libnet/libnet.h" 27#include "localedir.h" 28 29#ifdef HAVE_LIBINTL_H 30#include <libintl.h> 31#endif 32 33#if defined(HAVE_GETTEXT) && !defined(__LCLINT__) 34#define _(foo) gettext(foo) 35#else 36#define _(foo) foo 37#endif 38 39#define MODULE_NAME "net" 40 41struct net_context { 42 const char *opt_requester_name; 43 const char *opt_host; 44 const char *opt_password; 45 const char *opt_user_name; 46 bool opt_user_specified; 47 const char *opt_workgroup; 48 int opt_long_list_entries; 49 int opt_reboot; 50 int opt_force; 51 int opt_stdin; 52 int opt_port; 53 int opt_verbose; 54 int opt_maxusers; 55 const char *opt_comment; 56 const char *opt_container; 57 int opt_flags; 58 int opt_timeout; 59 int opt_request_timeout; 60 const char *opt_target_workgroup; 61 int opt_machine_pass; 62 int opt_localgroup; 63 int opt_domaingroup; 64 int do_talloc_report; 65 const char *opt_newntname; 66 int opt_rid; 67 int opt_acls; 68 int opt_attrs; 69 int opt_timestamps; 70 const char *opt_exclude; 71 const char *opt_destination; 72 int opt_testmode; 73 int opt_kerberos; 74 int opt_force_full_repl; 75 int opt_ccache; 76 int opt_single_obj_repl; 77 int opt_clean_old_entries; 78 79 int opt_have_ip; 80 struct sockaddr_storage opt_dest_ip; 81 bool smb_encrypt; 82 struct libnetapi_ctx *netapi_ctx; 83 84 bool display_usage; 85 void *private_data; 86}; 87 88struct net_dc_info { 89 bool is_dc; 90 bool is_pdc; 91 bool is_ad; 92 bool is_mixed_mode; 93 const char *netbios_domain_name; 94 const char *dns_domain_name; 95 const char *forest_name; 96}; 97 98#define NET_TRANSPORT_LOCAL 0x01 99#define NET_TRANSPORT_RAP 0x02 100#define NET_TRANSPORT_RPC 0x04 101#define NET_TRANSPORT_ADS 0x08 102 103struct functable { 104 const char *funcname; 105 int (*fn)(struct net_context *c, int argc, const char **argv); 106 int valid_transports; 107 const char *description; 108 const char *usage; 109}; 110 111typedef NTSTATUS (*rpc_command_fn)(struct net_context *c, 112 const DOM_SID *, 113 const char *, 114 struct cli_state *cli, 115 struct rpc_pipe_client *, 116 TALLOC_CTX *, 117 int, 118 const char **); 119 120typedef struct copy_clistate { 121 TALLOC_CTX *mem_ctx; 122 struct cli_state *cli_share_src; 123 struct cli_state *cli_share_dst; 124 char *cwd; 125 uint16 attribute; 126 struct net_context *c; 127}copy_clistate; 128 129struct rpc_sh_ctx { 130 struct cli_state *cli; 131 132 DOM_SID *domain_sid; 133 const char *domain_name; 134 135 const char *whoami; 136 const char *thiscmd; 137 struct rpc_sh_cmd *cmds; 138 struct rpc_sh_ctx *parent; 139}; 140 141struct rpc_sh_cmd { 142 const char *name; 143 struct rpc_sh_cmd *(*sub)(struct net_context *c, 144 TALLOC_CTX *mem_ctx, 145 struct rpc_sh_ctx *ctx); 146 const struct ndr_syntax_id *interface; 147 NTSTATUS (*fn)(struct net_context *c, TALLOC_CTX *mem_ctx, 148 struct rpc_sh_ctx *ctx, 149 struct rpc_pipe_client *pipe_hnd, 150 int argc, const char **argv); 151 const char *help; 152}; 153 154enum netdom_domain_t { ND_TYPE_NT4, ND_TYPE_AD }; 155 156/* INCLUDE FILES */ 157 158#include "utils/net_proto.h" 159#include "utils/net_help_common.h" 160 161/* MACROS & DEFINES */ 162 163#define NET_FLAGS_MASTER 0x00000001 164#define NET_FLAGS_DMB 0x00000002 165#define NET_FLAGS_LOCALHOST_DEFAULT_INSANE 0x00000004 /* Would it be insane to set 'localhost' 166 as the default remote host for this 167 operation? For example, localhost 168 is insane for a 'join' operation. */ 169#define NET_FLAGS_PDC 0x00000008 /* PDC only */ 170#define NET_FLAGS_ANONYMOUS 0x00000010 /* use an anonymous connection */ 171#define NET_FLAGS_NO_PIPE 0x00000020 /* don't open an RPC pipe */ 172#define NET_FLAGS_SIGN 0x00000040 /* sign RPC connection */ 173#define NET_FLAGS_SEAL 0x00000080 /* seal RPC connection */ 174#define NET_FLAGS_TCP 0x00000100 /* use ncacn_ip_tcp */ 175 176/* net share operation modes */ 177#define NET_MODE_SHARE_MIGRATE 1 178 179