Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
1 deleted
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/smb_server/smb2/fileinfo.c

    r414 r745  
    151151        enum ndr_err_code ndr_err;
    152152
    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,
    154154                                       io->query_secdesc.out.sd,
    155155                                       (ndr_push_flags_fn_t)ndr_push_security_descriptor);
     
    317317                NT_STATUS_HAVE_NO_MEMORY(io->set_secdesc.in.sd);
    318318
    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,
    320320                                               io->set_secdesc.in.sd,
    321321                                               (ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
  • trunk/server/source4/smb_server/smb2/fileio.c

    r414 r745  
    110110                                return;
    111111                        }
    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,
    113113                                                       io->smb2.in.sec_desc,
    114114                                                       (ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
     
    346346        io->smb2.level                  = RAW_LOCK_SMB2;
    347347        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);
    349349        io->smb2.in.file.ntvfs          = smb2srv_pull_handle(req, req->in.body, 0x08);
    350350        if (req->in.body_size < 24 + 24*(uint64_t)io->smb2.in.lock_count) {
  • trunk/server/source4/smb_server/smb2/find.c

    r414 r745  
    131131                return ntvfs_search_next(state->req->ntvfs, state->fn, state, smb2srv_find_callback);
    132132        }
    133 
    134         /* should not be reached */
    135         return NT_STATUS_INTERNAL_ERROR;
    136133}
    137134
  • trunk/server/source4/smb_server/smb2/negprot.c

    r414 r745  
    120120
    121121        ZERO_STRUCT(io->out);
    122         switch (lp_server_signing(req->smb_conn->lp_ctx)) {
     122        switch (lpcfg_server_signing(req->smb_conn->lp_ctx)) {
    123123        case SMB_SIGNING_OFF:
    124124                io->out.security_mode = 0;
     
    136136        io->out.dialect_revision   = dialect;
    137137        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,
    139139                                                   "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,
    141141                                                   "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,
    143143                                                   "smb2", "max write size", 0x10000);
    144144        io->out.system_time        = timeval_to_nttime(&current_time);
     
    154154{
    155155        NTSTATUS status;
    156         enum ndr_err_code ndr_err;
    157156
    158157        if (NT_STATUS_IS_ERR(req->status)) {
     
    171170        SIVAL(req->out.body, 0x04, io->out.dialect_revision);
    172171        SIVAL(req->out.body, 0x06, io->out.reserved);
    173         ndr_err = smbcli_push_guid(req->out.body, 0x08, &io->out.server_guid);
    174         if (!NDR_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)) {
    175174                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
    176175                talloc_free(req);
     
    198197        struct smb2_negprot *io;
    199198        int i;
    200         enum ndr_err_code ndr_err;
    201199
    202200        if (req->in.body_size < 0x26) {
     
    216214        io->in.reserved      = SVAL(req->in.body, 0x06);
    217215        io->in.capabilities  = IVAL(req->in.body, 0x08);
    218         ndr_err = smbcli_pull_guid(req->in.body, 0xC, &io->in.client_guid);
    219         if (!NDR_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)) {
    220218                smbsrv_terminate_connection(req->smb_conn, "Bad GUID in SMB2 negprot");
    221219                talloc_free(req);
  • trunk/server/source4/smb_server/smb2/receive.c

    r414 r745  
    323323        flags                   = IVAL(req->in.hdr, SMB2_HDR_FLAGS);
    324324
    325         if (req->smb_conn->highest_smb2_seqnum != 0 &&
     325        if (opcode != SMB2_OP_CANCEL &&
     326            req->smb_conn->highest_smb2_seqnum != 0 &&
    326327            req->seqnum <= req->smb_conn->highest_smb2_seqnum) {
    327328                smbsrv_terminate_connection(req->smb_conn, "Invalid SMB2 sequence number");
    328329                return NT_STATUS_INVALID_PARAMETER;
    329330        }
    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
    332335        req->session    = smbsrv_session_find(req->smb_conn, uid, req->request_time);
    333336        req->tcon       = smbsrv_smb2_tcon_find(req->session, tid, req->request_time);
     
    657660        /* this is the size that w2k uses, and it appears to be important for
    658661           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);
    660663
    661664        smb_conn->negotiate.zone_offset = get_time_zone(time(NULL));
  • trunk/server/source4/smb_server/smb2/sesssetup.c

    r414 r745  
    2020
    2121#include "includes.h"
     22#include <tevent.h>
    2223#include "auth/gensec/gensec.h"
    2324#include "auth/auth.h"
     
    2728#include "smb_server/smb2/smb2_server.h"
    2829#include "smbd/service_stream.h"
     30#include "lib/stream/packet.h"
    2931
    3032static void smb2srv_sesssetup_send(struct smb2srv_request *req, union smb_sesssetup *io)
     
    5860};
    5961
    60 static void smb2srv_sesssetup_callback(struct gensec_update_request *greq, void *private_data)
    61 {
    62         struct smb2srv_sesssetup_callback_ctx *ctx = talloc_get_type(private_data,
     62static void smb2srv_sesssetup_callback(struct tevent_req *subreq)
     63{
     64        struct smb2srv_sesssetup_callback_ctx *ctx = tevent_req_callback_data(subreq,
    6365                                                     struct smb2srv_sesssetup_callback_ctx);
    6466        struct smb2srv_request *req = ctx->req;
     
    6870        NTSTATUS status;
    6971
    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);
    7176        if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
    7277                goto done;
     
    95100        io->smb2.out.uid = smb_sess->vuid;
    96101failed:
    97         req->status = auth_nt_status_squash(status);
     102        req->status = nt_status_squash(status);
    98103        smb2srv_sesssetup_send(req, io);
    99104        if (!NT_STATUS_IS_OK(status) && !
     
    109114        struct smbsrv_session *smb_sess = NULL;
    110115        uint64_t vuid;
     116        struct tevent_req *subreq;
    111117
    112118        io->smb2.out.session_flags = 0;
     
    175181        callback_ctx->smb_sess  = smb_sess;
    176182
    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);
    179189
    180190        /* note that we ignore SMB2_NEGOTIATE_SIGNING_ENABLED from the client.
     
    193203        }
    194204
     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
    195211        return;
    196212nomem:
     
    198214failed:
    199215        talloc_free(smb_sess);
    200         req->status = auth_nt_status_squash(status);
     216        req->status = nt_status_squash(status);
    201217        smb2srv_sesssetup_send(req, io);
    202218}
  • trunk/server/source4/smb_server/smb2/tcon.c

    r414 r745  
    8585}
    8686
    87 struct ntvfs_handle *smb2srv_pull_handle(struct smb2srv_request *req, const uint8_t *base, uint_t offset)
     87struct ntvfs_handle *smb2srv_pull_handle(struct smb2srv_request *req, const uint8_t *base, unsigned int offset)
    8888{
    8989        struct smbsrv_tcon *tcon;
     
    161161}
    162162
    163 void smb2srv_push_handle(uint8_t *base, uint_t offset, struct ntvfs_handle *ntvfs)
     163void smb2srv_push_handle(uint8_t *base, unsigned int offset, struct ntvfs_handle *ntvfs)
    164164{
    165165        struct smbsrv_handle *handle = talloc_get_type(ntvfs->frontend_data.private_data,
     
    305305        }
    306306
    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"));
    310312                goto failed;
    311313        }
     
    344346        status = ntvfs_connect(req->ntvfs, io);
    345347        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)));
    347349                goto failed;
    348350        }
Note: See TracChangeset for help on using the changeset viewer.