Changeset 745 for trunk/server/source4/smb_server/smb2
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 1 deleted
- 8 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source4/smb_server/smb2/fileinfo.c
r414 r745 151 151 enum ndr_err_code ndr_err; 152 152 153 ndr_err = ndr_push_struct_blob(&op->info->out.blob, op->req, NULL,153 ndr_err = ndr_push_struct_blob(&op->info->out.blob, op->req, 154 154 io->query_secdesc.out.sd, 155 155 (ndr_push_flags_fn_t)ndr_push_security_descriptor); … … 317 317 NT_STATUS_HAVE_NO_MEMORY(io->set_secdesc.in.sd); 318 318 319 ndr_err = ndr_pull_struct_blob(&op->info->in.blob, io, NULL,319 ndr_err = ndr_pull_struct_blob(&op->info->in.blob, io, 320 320 io->set_secdesc.in.sd, 321 321 (ndr_pull_flags_fn_t)ndr_pull_security_descriptor); -
trunk/server/source4/smb_server/smb2/fileio.c
r414 r745 110 110 return; 111 111 } 112 ndr_err = ndr_pull_struct_blob(&io->smb2.in.blobs.blobs[i].data, io, NULL,112 ndr_err = ndr_pull_struct_blob(&io->smb2.in.blobs.blobs[i].data, io, 113 113 io->smb2.in.sec_desc, 114 114 (ndr_pull_flags_fn_t)ndr_pull_security_descriptor); … … 346 346 io->smb2.level = RAW_LOCK_SMB2; 347 347 io->smb2.in.lock_count = SVAL(req->in.body, 0x02); 348 io->smb2.in. reserved= IVAL(req->in.body, 0x04);348 io->smb2.in.lock_sequence = IVAL(req->in.body, 0x04); 349 349 io->smb2.in.file.ntvfs = smb2srv_pull_handle(req, req->in.body, 0x08); 350 350 if (req->in.body_size < 24 + 24*(uint64_t)io->smb2.in.lock_count) { -
trunk/server/source4/smb_server/smb2/find.c
r414 r745 131 131 return ntvfs_search_next(state->req->ntvfs, state->fn, state, smb2srv_find_callback); 132 132 } 133 134 /* should not be reached */135 return NT_STATUS_INTERNAL_ERROR;136 133 } 137 134 -
trunk/server/source4/smb_server/smb2/negprot.c
r414 r745 120 120 121 121 ZERO_STRUCT(io->out); 122 switch (lp _server_signing(req->smb_conn->lp_ctx)) {122 switch (lpcfg_server_signing(req->smb_conn->lp_ctx)) { 123 123 case SMB_SIGNING_OFF: 124 124 io->out.security_mode = 0; … … 136 136 io->out.dialect_revision = dialect; 137 137 io->out.capabilities = 0; 138 io->out.max_transact_size = lp _parm_ulong(req->smb_conn->lp_ctx, NULL,138 io->out.max_transact_size = lpcfg_parm_ulong(req->smb_conn->lp_ctx, NULL, 139 139 "smb2", "max transaction size", 0x10000); 140 io->out.max_read_size = lp _parm_ulong(req->smb_conn->lp_ctx, NULL,140 io->out.max_read_size = lpcfg_parm_ulong(req->smb_conn->lp_ctx, NULL, 141 141 "smb2", "max read size", 0x10000); 142 io->out.max_write_size = lp _parm_ulong(req->smb_conn->lp_ctx, NULL,142 io->out.max_write_size = lpcfg_parm_ulong(req->smb_conn->lp_ctx, NULL, 143 143 "smb2", "max write size", 0x10000); 144 144 io->out.system_time = timeval_to_nttime(¤t_time); … … 154 154 { 155 155 NTSTATUS status; 156 enum ndr_err_code ndr_err;157 156 158 157 if (NT_STATUS_IS_ERR(req->status)) { … … 171 170 SIVAL(req->out.body, 0x04, io->out.dialect_revision); 172 171 SIVAL(req->out.body, 0x06, io->out.reserved); 173 ndr_err= smbcli_push_guid(req->out.body, 0x08, &io->out.server_guid);174 if (!N DR_ERR_CODE_IS_SUCCESS(ndr_err)) {172 status = smbcli_push_guid(req->out.body, 0x08, &io->out.server_guid); 173 if (!NT_STATUS_IS_OK(status)) { 175 174 smbsrv_terminate_connection(req->smb_conn, nt_errstr(status)); 176 175 talloc_free(req); … … 198 197 struct smb2_negprot *io; 199 198 int i; 200 enum ndr_err_code ndr_err;201 199 202 200 if (req->in.body_size < 0x26) { … … 216 214 io->in.reserved = SVAL(req->in.body, 0x06); 217 215 io->in.capabilities = IVAL(req->in.body, 0x08); 218 ndr_err= smbcli_pull_guid(req->in.body, 0xC, &io->in.client_guid);219 if (!N DR_ERR_CODE_IS_SUCCESS(ndr_err)) {216 req->status = smbcli_pull_guid(req->in.body, 0xC, &io->in.client_guid); 217 if (!NT_STATUS_IS_OK(req->status)) { 220 218 smbsrv_terminate_connection(req->smb_conn, "Bad GUID in SMB2 negprot"); 221 219 talloc_free(req); -
trunk/server/source4/smb_server/smb2/receive.c
r414 r745 323 323 flags = IVAL(req->in.hdr, SMB2_HDR_FLAGS); 324 324 325 if (req->smb_conn->highest_smb2_seqnum != 0 && 325 if (opcode != SMB2_OP_CANCEL && 326 req->smb_conn->highest_smb2_seqnum != 0 && 326 327 req->seqnum <= req->smb_conn->highest_smb2_seqnum) { 327 328 smbsrv_terminate_connection(req->smb_conn, "Invalid SMB2 sequence number"); 328 329 return NT_STATUS_INVALID_PARAMETER; 329 330 } 330 req->smb_conn->highest_smb2_seqnum = req->seqnum; 331 331 if (opcode != SMB2_OP_CANCEL) { 332 req->smb_conn->highest_smb2_seqnum = req->seqnum; 333 } 334 332 335 req->session = smbsrv_session_find(req->smb_conn, uid, req->request_time); 333 336 req->tcon = smbsrv_smb2_tcon_find(req->session, tid, req->request_time); … … 657 660 /* this is the size that w2k uses, and it appears to be important for 658 661 good performance */ 659 smb_conn->negotiate.max_recv = lp _max_xmit(smb_conn->lp_ctx);662 smb_conn->negotiate.max_recv = lpcfg_max_xmit(smb_conn->lp_ctx); 660 663 661 664 smb_conn->negotiate.zone_offset = get_time_zone(time(NULL)); -
trunk/server/source4/smb_server/smb2/sesssetup.c
r414 r745 20 20 21 21 #include "includes.h" 22 #include <tevent.h> 22 23 #include "auth/gensec/gensec.h" 23 24 #include "auth/auth.h" … … 27 28 #include "smb_server/smb2/smb2_server.h" 28 29 #include "smbd/service_stream.h" 30 #include "lib/stream/packet.h" 29 31 30 32 static void smb2srv_sesssetup_send(struct smb2srv_request *req, union smb_sesssetup *io) … … 58 60 }; 59 61 60 static void smb2srv_sesssetup_callback(struct gensec_update_request *greq, void *private_data)61 { 62 struct smb2srv_sesssetup_callback_ctx *ctx = t alloc_get_type(private_data,62 static void smb2srv_sesssetup_callback(struct tevent_req *subreq) 63 { 64 struct smb2srv_sesssetup_callback_ctx *ctx = tevent_req_callback_data(subreq, 63 65 struct smb2srv_sesssetup_callback_ctx); 64 66 struct smb2srv_request *req = ctx->req; … … 68 70 NTSTATUS status; 69 71 70 status = gensec_update_recv(greq, req, &io->smb2.out.secblob); 72 packet_recv_enable(req->smb_conn->packet); 73 74 status = gensec_update_recv(subreq, req, &io->smb2.out.secblob); 75 TALLOC_FREE(subreq); 71 76 if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { 72 77 goto done; … … 95 100 io->smb2.out.uid = smb_sess->vuid; 96 101 failed: 97 req->status = auth_nt_status_squash(status);102 req->status = nt_status_squash(status); 98 103 smb2srv_sesssetup_send(req, io); 99 104 if (!NT_STATUS_IS_OK(status) && ! … … 109 114 struct smbsrv_session *smb_sess = NULL; 110 115 uint64_t vuid; 116 struct tevent_req *subreq; 111 117 112 118 io->smb2.out.session_flags = 0; … … 175 181 callback_ctx->smb_sess = smb_sess; 176 182 177 gensec_update_send(smb_sess->gensec_ctx, io->smb2.in.secblob, 178 smb2srv_sesssetup_callback, callback_ctx); 183 subreq = gensec_update_send(callback_ctx, 184 req->smb_conn->connection->event.ctx, 185 smb_sess->gensec_ctx, 186 io->smb2.in.secblob); 187 if (!subreq) goto nomem; 188 tevent_req_set_callback(subreq, smb2srv_sesssetup_callback, callback_ctx); 179 189 180 190 /* note that we ignore SMB2_NEGOTIATE_SIGNING_ENABLED from the client. … … 193 203 } 194 204 205 /* disable receipt of more packets on this socket until we've 206 finished with the session setup. This avoids a problem with 207 crashes if we get EOF on the socket while processing a session 208 setup */ 209 packet_recv_disable(req->smb_conn->packet); 210 195 211 return; 196 212 nomem: … … 198 214 failed: 199 215 talloc_free(smb_sess); 200 req->status = auth_nt_status_squash(status);216 req->status = nt_status_squash(status); 201 217 smb2srv_sesssetup_send(req, io); 202 218 } -
trunk/server/source4/smb_server/smb2/tcon.c
r414 r745 85 85 } 86 86 87 struct ntvfs_handle *smb2srv_pull_handle(struct smb2srv_request *req, const uint8_t *base, u int_t offset)87 struct ntvfs_handle *smb2srv_pull_handle(struct smb2srv_request *req, const uint8_t *base, unsigned int offset) 88 88 { 89 89 struct smbsrv_tcon *tcon; … … 161 161 } 162 162 163 void smb2srv_push_handle(uint8_t *base, u int_t offset, struct ntvfs_handle *ntvfs)163 void smb2srv_push_handle(uint8_t *base, unsigned int offset, struct ntvfs_handle *ntvfs) 164 164 { 165 165 struct smbsrv_handle *handle = talloc_get_type(ntvfs->frontend_data.private_data, … … 305 305 } 306 306 307 status = ntvfs_set_addr_callbacks(tcon->ntvfs, smbsrv_get_my_addr, smbsrv_get_peer_addr, req->smb_conn); 308 if (!NT_STATUS_IS_OK(status)) { 309 DEBUG(0,("smb2srv_tcon_backend: NTVFS failed to set the addr callbacks!\n")); 307 status = ntvfs_set_addresses(tcon->ntvfs, 308 req->smb_conn->connection->local_address, 309 req->smb_conn->connection->remote_address); 310 if (!NT_STATUS_IS_OK(status)) { 311 DEBUG(0,("smb2srv_tcon_backend: NTVFS failed to set the address!\n")); 310 312 goto failed; 311 313 } … … 344 346 status = ntvfs_connect(req->ntvfs, io); 345 347 if (!NT_STATUS_IS_OK(status)) { 346 DEBUG(0,("smb2srv_tcon_backend: NTVFS ntvfs_connect() failed !\n"));348 DEBUG(0,("smb2srv_tcon_backend: NTVFS ntvfs_connect() failed: %s!\n", nt_errstr(status))); 347 349 goto failed; 348 350 }
Note:
See TracChangeset
for help on using the changeset viewer.