summaryrefslogtreecommitdiff
path: root/source3/utils/net.h
blob: 80024bd958a7c4f2fe205539ebe60bf66d2e8ab1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
   Samba Unix/Linux SMB client library
   Distributed SMB/CIFS Server Management Utility
   Copyright (C) 2001 Andrew Bartlett (abartlet@samba.org)

   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/>.  */

/*
 * A function of this type is passed to the '
 * run_rpc_command' wrapper.  Must go before the net_proto.h
 * include
 */

#include "lib/netapi/netapi.h"

typedef NTSTATUS (*rpc_command_fn)(struct net_context *c,
				const DOM_SID *,
				const char *,
				struct cli_state *cli,
				struct rpc_pipe_client *,
				TALLOC_CTX *,
				int,
				const char **);

typedef struct copy_clistate {
	TALLOC_CTX *mem_ctx;
	struct cli_state *cli_share_src;
	struct cli_state *cli_share_dst;
	char *cwd;
	uint16 attribute;
	struct net_context *c;
}copy_clistate;

struct rpc_sh_ctx {
	struct cli_state *cli;

	DOM_SID *domain_sid;
	const char *domain_name;

	const char *whoami;
	const char *thiscmd;
	struct rpc_sh_cmd *cmds;
	struct rpc_sh_ctx *parent;
};

struct rpc_sh_cmd {
	const char *name;
	struct rpc_sh_cmd *(*sub)(struct net_context *c,
				  TALLOC_CTX *mem_ctx,
				  struct rpc_sh_ctx *ctx);
	int pipe_idx;
	NTSTATUS (*fn)(struct net_context *c, TALLOC_CTX *mem_ctx,
		       struct rpc_sh_ctx *ctx,
		       struct rpc_pipe_client *pipe_hnd,
		       int argc, const char **argv);
	const char *help;
};

enum netdom_domain_t { ND_TYPE_NT4, ND_TYPE_AD };

struct net_context {
	const char *opt_requester_name;
	const char *opt_host;
	const char *opt_password;
	const char *opt_user_name;
	bool opt_user_specified;
	const char *opt_workgroup;
	int opt_long_list_entries;
	int opt_reboot;
	int opt_force;
	int opt_stdin;
	int opt_port;
	int opt_verbose;
	int opt_maxusers;
	const char *opt_comment;
	const char *opt_container;
	int opt_flags;
	int opt_timeout;
	const char *opt_target_workgroup;
	int opt_machine_pass;
	int opt_localgroup;
	int opt_domaingroup;
	int do_talloc_report;
	const char *opt_newntname;
	int opt_rid;
	int opt_acls;
	int opt_attrs;
	int opt_timestamps;
	const char *opt_exclude;
	const char *opt_destination;
	int opt_testmode;

	int opt_have_ip;
	struct sockaddr_storage opt_dest_ip;
	bool smb_encrypt;
	struct libnetapi_ctx *netapi_ctx;

	const char *share_type[];
};

/* INCLUDE FILES */

#include "utils/net_proto.h"
#include "utils/net_help_common.h"

/* MACROS & DEFINES */

#define NET_FLAGS_MASTER 			0x00000001
#define NET_FLAGS_DMB 				0x00000002
#define NET_FLAGS_LOCALHOST_DEFAULT_INSANE 	0x00000004 	/* Would it be insane to set 'localhost'
								   as the default remote host for this
								   operation?  For example, localhost
								   is insane for a 'join' operation.  */
#define NET_FLAGS_PDC 				0x00000008	/* PDC only */
#define NET_FLAGS_ANONYMOUS 			0x00000010	/* use an anonymous connection */
#define NET_FLAGS_NO_PIPE 			0x00000020	/* don't open an RPC pipe */

/* net share operation modes */
#define NET_MODE_SHARE_MIGRATE 1

/* Structure for mapping accounts to groups */
/* Array element is the group rid */
typedef struct _groupmap {
	uint32 rid;
	uint32 gidNumber;
	fstring sambaSID;
	fstring group_dn;
} GROUPMAP;

typedef struct _accountmap {
	uint32 rid;
	fstring cn;
} ACCOUNTMAP;