~ubuntu-branches/ubuntu/vivid/samba/vivid

« back to all changes in this revision

Viewing changes to librpc/rpc/rpc_common.h

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2011-12-21 13:18:04 UTC
  • mfrom: (0.39.21 sid)
  • Revision ID: package-import@ubuntu.com-20111221131804-xtlr39wx6njehxxr
Tags: 2:3.6.1-3ubuntu1
* Merge from Debian testing.  Remaining changes:
  + debian/patches/VERSION.patch:
    - set SAMBA_VERSION_SUFFIX to Ubuntu.
  + debian/patches/error-trans.fix-276472:
    - Add the translation of Unix Error code -ENOTSUP to NT Error Code
    - NT_STATUS_NOT_SUPPORTED to prevent the Permission denied error.
  + debian/smb.conf:
    - add "(Samba, Ubuntu)" to server string.
    - comment out the default [homes] share, and add a comment about
      "valid users = %S" to show users how to restrict access to
      \\server\username to only username.
    - Set 'usershare allow guests', so that usershare admins are 
      allowed to create public shares in addition to authenticated
      ones.
    - add map to guest = Bad user, maps bad username to guest access.
  + debian/samba-common.config:
    - Do not change priority to high if dhclient3 is installed.
    - Use priority medium instead of high for the workgroup question.
  + debian/control:
    - Don't build against or suggest ctdb.
    - Add dependency on samba-common-bin to samba.
  + Add ufw integration:
    - Created debian/samba.ufw.profile
    - debian/rules, debian/samba.dirs, debian/samba.files: install
      profile
    - debian/control: have samba suggest ufw
  + Add apport hook:
    - Created debian/source_samba.py.
    - debian/rules, debian/samba.dirs, debian/samba-common-bin.files: install
  + Switch to upstart:
    - Add debian/samba.{nmbd,smbd}.upstart.
  + debian/samba.logrotate, debian/samba-common.dhcp, debian/samba.if-up:
    - Make them upstart compatible
  + debian/samba.postinst: 
    - Avoid scary pdbedit warnings on first import.
  + debian/samba-common.postinst: Add more informative error message for
    the case where smb.conf was manually deleted
  + debian/patches/fix-debuglevel-name-conflict.patch: don't use 'debug_level'
    as a global variable name in an NSS module 
  + Dropped:
    - debian/patches/error-trans.fix-276472
    - debian/patches/fix-debuglevel-name-conflict.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
   Unix SMB/CIFS implementation.
 
3
 
 
4
   Copyright (C) Stefan Metzmacher 2010-2011
 
5
   Copyright (C) Andrew Tridgell 2010-2011
 
6
   Copyright (C) Simo Sorce 2010
 
7
 
 
8
   This program is free software; you can redistribute it and/or modify
 
9
   it under the terms of the GNU General Public License as published by
 
10
   the Free Software Foundation; either version 3 of the License, or
 
11
   (at your option) any later version.
 
12
 
 
13
   This program is distributed in the hope that it will be useful,
 
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
   GNU General Public License for more details.
 
17
 
 
18
   You should have received a copy of the GNU General Public License
 
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
20
*/
 
21
 
 
22
#ifndef __DEFAULT_LIBRPC_RPCCOMMON_H__
 
23
#define __DEFAULT_LIBRPC_RPCCOMMON_H__
 
24
 
 
25
struct dcerpc_binding_handle;
 
26
struct GUID;
 
27
struct ndr_interface_table;
 
28
struct ndr_interface_call;
 
29
struct ndr_push;
 
30
struct ndr_pull;
 
31
struct ncacn_packet;
 
32
struct epm_floor;
 
33
struct epm_tower;
 
34
struct tevent_context;
 
35
struct tstream_context;
 
36
 
 
37
enum dcerpc_transport_t {
 
38
        NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, 
 
39
        NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, 
 
40
        NCADG_UNIX_DGRAM, NCACN_HTTP, NCADG_IPX, NCACN_SPX, NCACN_INTERNAL };
 
41
 
 
42
/** this describes a binding to a particular transport/pipe */
 
43
struct dcerpc_binding {
 
44
        enum dcerpc_transport_t transport;
 
45
        struct ndr_syntax_id object;
 
46
        const char *host;
 
47
        const char *target_hostname;
 
48
        const char *target_principal;
 
49
        const char *endpoint;
 
50
        const char **options;
 
51
        const char *localaddress;
 
52
        uint32_t flags;
 
53
        uint32_t assoc_group_id;
 
54
};
 
55
 
 
56
/* dcerpc pipe flags */
 
57
#define DCERPC_DEBUG_PRINT_IN          (1<<0)
 
58
#define DCERPC_DEBUG_PRINT_OUT         (1<<1)
 
59
#define DCERPC_DEBUG_PRINT_BOTH (DCERPC_DEBUG_PRINT_IN | DCERPC_DEBUG_PRINT_OUT)
 
60
 
 
61
#define DCERPC_DEBUG_VALIDATE_IN       (1<<2)
 
62
#define DCERPC_DEBUG_VALIDATE_OUT      (1<<3)
 
63
#define DCERPC_DEBUG_VALIDATE_BOTH (DCERPC_DEBUG_VALIDATE_IN | DCERPC_DEBUG_VALIDATE_OUT)
 
64
 
 
65
#define DCERPC_CONNECT                 (1<<4)
 
66
#define DCERPC_SIGN                    (1<<5)
 
67
#define DCERPC_SEAL                    (1<<6)
 
68
 
 
69
#define DCERPC_PUSH_BIGENDIAN          (1<<7)
 
70
#define DCERPC_PULL_BIGENDIAN          (1<<8)
 
71
 
 
72
#define DCERPC_SCHANNEL                (1<<9)
 
73
 
 
74
#define DCERPC_ANON_FALLBACK           (1<<10)
 
75
 
 
76
/* use a 128 bit session key */
 
77
#define DCERPC_SCHANNEL_128            (1<<12)
 
78
 
 
79
/* check incoming pad bytes */
 
80
#define DCERPC_DEBUG_PAD_CHECK         (1<<13)
 
81
 
 
82
/* set LIBNDR_FLAG_REF_ALLOC flag when decoding NDR */
 
83
#define DCERPC_NDR_REF_ALLOC           (1<<14)
 
84
 
 
85
#define DCERPC_AUTH_OPTIONS    (DCERPC_SEAL|DCERPC_SIGN|DCERPC_SCHANNEL|DCERPC_AUTH_SPNEGO|DCERPC_AUTH_KRB5|DCERPC_AUTH_NTLM)
 
86
 
 
87
/* select spnego auth */
 
88
#define DCERPC_AUTH_SPNEGO             (1<<15)
 
89
 
 
90
/* select krb5 auth */
 
91
#define DCERPC_AUTH_KRB5               (1<<16)
 
92
 
 
93
#define DCERPC_SMB2                    (1<<17)
 
94
 
 
95
/* select NTLM auth */
 
96
#define DCERPC_AUTH_NTLM               (1<<18)
 
97
 
 
98
/* this triggers the DCERPC_PFC_FLAG_CONC_MPX flag in the bind request */
 
99
#define DCERPC_CONCURRENT_MULTIPLEX     (1<<19)
 
100
 
 
101
/* this triggers the DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN flag in the bind request */
 
102
#define DCERPC_HEADER_SIGNING          (1<<20)
 
103
 
 
104
/* use NDR64 transport */
 
105
#define DCERPC_NDR64                   (1<<21)
 
106
 
 
107
/* specify binding interface */
 
108
#define DCERPC_LOCALADDRESS            (1<<22)
 
109
 
 
110
/* The following definitions come from ../librpc/rpc/dcerpc_error.c  */
 
111
 
 
112
const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code);
 
113
NTSTATUS dcerpc_fault_to_nt_status(uint32_t fault_code);
 
114
 
 
115
/* The following definitions come from ../librpc/rpc/binding.c  */
 
116
 
 
117
const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor);
 
118
const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor);
 
119
enum dcerpc_transport_t dcerpc_transport_by_endpoint_protocol(int prot);
 
120
struct dcerpc_binding *dcerpc_binding_dup(TALLOC_CTX *mem_ctx,
 
121
                                          const struct dcerpc_binding *b);
 
122
NTSTATUS dcerpc_binding_build_tower(TALLOC_CTX *mem_ctx,
 
123
                                    const struct dcerpc_binding *binding,
 
124
                                    struct epm_tower *tower);
 
125
NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx,
 
126
                                   struct epm_tower *tower,
 
127
                                   struct dcerpc_binding **b_out);
 
128
NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_binding **b_out);
 
129
char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b);
 
130
NTSTATUS dcerpc_floor_get_lhs_data(const struct epm_floor *epm_floor, struct ndr_syntax_id *syntax);
 
131
const char *derpc_transport_string_by_transport(enum dcerpc_transport_t t);
 
132
enum dcerpc_transport_t dcerpc_transport_by_tower(const struct epm_tower *tower);
 
133
 
 
134
/* The following definitions come from ../librpc/rpc/dcerpc_util.c  */
 
135
 
 
136
void dcerpc_set_frag_length(DATA_BLOB *blob, uint16_t v);
 
137
uint16_t dcerpc_get_frag_length(const DATA_BLOB *blob);
 
138
void dcerpc_set_auth_length(DATA_BLOB *blob, uint16_t v);
 
139
uint8_t dcerpc_get_endian_flag(DATA_BLOB *blob);
 
140
 
 
141
/**
 
142
* @brief        Pull a dcerpc_auth structure, taking account of any auth
 
143
*               padding in the blob. For request/response packets we pass
 
144
*               the whole data blob, so auth_data_only must be set to false
 
145
*               as the blob contains data+pad+auth and no just pad+auth.
 
146
*
 
147
* @param pkt            - The ncacn_packet strcuture
 
148
* @param mem_ctx        - The mem_ctx used to allocate dcerpc_auth elements
 
149
* @param pkt_trailer    - The packet trailer data, usually the trailing
 
150
*                         auth_info blob, but in the request/response case
 
151
*                         this is the stub_and_verifier blob.
 
152
* @param auth           - A preallocated dcerpc_auth *empty* structure
 
153
* @param auth_length    - The length of the auth trail, sum of auth header
 
154
*                         lenght and pkt->auth_length
 
155
* @param auth_data_only - Whether the pkt_trailer includes only the auth_blob
 
156
*                         (+ padding) or also other data.
 
157
*
 
158
* @return               - A NTSTATUS error code.
 
159
*/
 
160
NTSTATUS dcerpc_pull_auth_trailer(struct ncacn_packet *pkt,
 
161
                                  TALLOC_CTX *mem_ctx,
 
162
                                  DATA_BLOB *pkt_trailer,
 
163
                                  struct dcerpc_auth *auth,
 
164
                                  uint32_t *auth_length,
 
165
                                  bool auth_data_only);
 
166
struct tevent_req *dcerpc_read_ncacn_packet_send(TALLOC_CTX *mem_ctx,
 
167
                                                 struct tevent_context *ev,
 
168
                                                 struct tstream_context *stream);
 
169
NTSTATUS dcerpc_read_ncacn_packet_recv(struct tevent_req *req,
 
170
                                       TALLOC_CTX *mem_ctx,
 
171
                                       struct ncacn_packet **pkt,
 
172
                                       DATA_BLOB *buffer);
 
173
 
 
174
/* The following definitions come from ../librpc/rpc/binding_handle.c  */
 
175
 
 
176
struct dcerpc_binding_handle_ops {
 
177
        const char *name;
 
178
 
 
179
        bool (*is_connected)(struct dcerpc_binding_handle *h);
 
180
        uint32_t (*set_timeout)(struct dcerpc_binding_handle *h,
 
181
                                uint32_t timeout);
 
182
 
 
183
        struct tevent_req *(*raw_call_send)(TALLOC_CTX *mem_ctx,
 
184
                                            struct tevent_context *ev,
 
185
                                            struct dcerpc_binding_handle *h,
 
186
                                            const struct GUID *object,
 
187
                                            uint32_t opnum,
 
188
                                            uint32_t in_flags,
 
189
                                            const uint8_t *in_data,
 
190
                                            size_t in_length);
 
191
        NTSTATUS (*raw_call_recv)(struct tevent_req *req,
 
192
                                  TALLOC_CTX *mem_ctx,
 
193
                                  uint8_t **out_data,
 
194
                                  size_t *out_length,
 
195
                                  uint32_t *out_flags);
 
196
 
 
197
        struct tevent_req *(*disconnect_send)(TALLOC_CTX *mem_ctx,
 
198
                                              struct tevent_context *ev,
 
199
                                              struct dcerpc_binding_handle *h);
 
200
        NTSTATUS (*disconnect_recv)(struct tevent_req *req);
 
201
 
 
202
        /* TODO: remove the following functions */
 
203
        bool (*push_bigendian)(struct dcerpc_binding_handle *h);
 
204
        bool (*ref_alloc)(struct dcerpc_binding_handle *h);
 
205
        bool (*use_ndr64)(struct dcerpc_binding_handle *h);
 
206
        void (*do_ndr_print)(struct dcerpc_binding_handle *h,
 
207
                             int ndr_flags,
 
208
                             const void *struct_ptr,
 
209
                             const struct ndr_interface_call *call);
 
210
        void (*ndr_push_failed)(struct dcerpc_binding_handle *h,
 
211
                                NTSTATUS error,
 
212
                                const void *struct_ptr,
 
213
                                const struct ndr_interface_call *call);
 
214
        void (*ndr_pull_failed)(struct dcerpc_binding_handle *h,
 
215
                                NTSTATUS error,
 
216
                                const DATA_BLOB *blob,
 
217
                                const struct ndr_interface_call *call);
 
218
        NTSTATUS (*ndr_validate_in)(struct dcerpc_binding_handle *h,
 
219
                                    TALLOC_CTX *mem_ctx,
 
220
                                    const DATA_BLOB *blob,
 
221
                                    const struct ndr_interface_call *call);
 
222
        NTSTATUS (*ndr_validate_out)(struct dcerpc_binding_handle *h,
 
223
                                     struct ndr_pull *pull_in,
 
224
                                     const void *struct_ptr,
 
225
                                     const struct ndr_interface_call *call);
 
226
};
 
227
 
 
228
struct dcerpc_binding_handle *_dcerpc_binding_handle_create(TALLOC_CTX *mem_ctx,
 
229
                                        const struct dcerpc_binding_handle_ops *ops,
 
230
                                        const struct GUID *object,
 
231
                                        const struct ndr_interface_table *table,
 
232
                                        void *pstate,
 
233
                                        size_t psize,
 
234
                                        const char *type,
 
235
                                        const char *location);
 
236
#define dcerpc_binding_handle_create(mem_ctx, ops, object, table, \
 
237
                                state, type, location) \
 
238
        _dcerpc_binding_handle_create(mem_ctx, ops, object, table, \
 
239
                                state, sizeof(type), #type, location)
 
240
 
 
241
void *_dcerpc_binding_handle_data(struct dcerpc_binding_handle *h);
 
242
#define dcerpc_binding_handle_data(_h, _type) \
 
243
        talloc_get_type_abort(_dcerpc_binding_handle_data(_h), _type)
 
244
 
 
245
_DEPRECATED_ void dcerpc_binding_handle_set_sync_ev(struct dcerpc_binding_handle *h,
 
246
                                                    struct tevent_context *ev);
 
247
 
 
248
bool dcerpc_binding_handle_is_connected(struct dcerpc_binding_handle *h);
 
249
 
 
250
uint32_t dcerpc_binding_handle_set_timeout(struct dcerpc_binding_handle *h,
 
251
                                           uint32_t timeout);
 
252
 
 
253
struct tevent_req *dcerpc_binding_handle_raw_call_send(TALLOC_CTX *mem_ctx,
 
254
                                                struct tevent_context *ev,
 
255
                                                struct dcerpc_binding_handle *h,
 
256
                                                const struct GUID *object,
 
257
                                                uint32_t opnum,
 
258
                                                uint32_t in_flags,
 
259
                                                const uint8_t *in_data,
 
260
                                                size_t in_length);
 
261
NTSTATUS dcerpc_binding_handle_raw_call_recv(struct tevent_req *req,
 
262
                                             TALLOC_CTX *mem_ctx,
 
263
                                             uint8_t **out_data,
 
264
                                             size_t *out_length,
 
265
                                             uint32_t *out_flags);
 
266
NTSTATUS dcerpc_binding_handle_raw_call(struct dcerpc_binding_handle *h,
 
267
                                        const struct GUID *object,
 
268
                                        uint32_t opnum,
 
269
                                        uint32_t in_flags,
 
270
                                        const uint8_t *in_data,
 
271
                                        size_t in_length,
 
272
                                        TALLOC_CTX *mem_ctx,
 
273
                                        uint8_t **out_data,
 
274
                                        size_t *out_length,
 
275
                                        uint32_t *out_flags);
 
276
 
 
277
struct tevent_req *dcerpc_binding_handle_disconnect_send(TALLOC_CTX *mem_ctx,
 
278
                                                struct tevent_context *ev,
 
279
                                                struct dcerpc_binding_handle *h);
 
280
NTSTATUS dcerpc_binding_handle_disconnect_recv(struct tevent_req *req);
 
281
 
 
282
struct tevent_req *dcerpc_binding_handle_call_send(TALLOC_CTX *mem_ctx,
 
283
                                        struct tevent_context *ev,
 
284
                                        struct dcerpc_binding_handle *h,
 
285
                                        const struct GUID *object,
 
286
                                        const struct ndr_interface_table *table,
 
287
                                        uint32_t opnum,
 
288
                                        TALLOC_CTX *r_mem,
 
289
                                        void *r_ptr);
 
290
NTSTATUS dcerpc_binding_handle_call_recv(struct tevent_req *req);
 
291
NTSTATUS dcerpc_binding_handle_call(struct dcerpc_binding_handle *h,
 
292
                                    const struct GUID *object,
 
293
                                    const struct ndr_interface_table *table,
 
294
                                    uint32_t opnum,
 
295
                                    TALLOC_CTX *r_mem,
 
296
                                    void *r_ptr);
 
297
 
 
298
#endif /* __DEFAULT_LIBRPC_RPCCOMMON_H__ */