Ignore:
Timestamp:
Jul 1, 2011, 4:02:23 PM (14 years ago)
Author:
Herwig Bauernfeind
Message:

Samba 3.5: Update vendor to version 3.5.8

Location:
vendor/current/source3/libsmb
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/source3/libsmb/async_smb.c

    r414 r594  
    706706                TALLOC_FREE(inbuf);
    707707                status = NT_STATUS_ACCESS_DENIED;
     708                close(cli->fd);
     709                cli->fd = -1;
    708710                goto fail;
    709711        }
     
    10701072        return NT_STATUS_OK;
    10711073}
     1074
     1075
     1076struct cli_session_request_state {
     1077        struct tevent_context *ev;
     1078        int sock;
     1079        uint32 len_hdr;
     1080        struct iovec iov[3];
     1081        uint8_t nb_session_response;
     1082};
     1083
     1084static void cli_session_request_sent(struct tevent_req *subreq);
     1085static void cli_session_request_recvd(struct tevent_req *subreq);
     1086
     1087struct tevent_req *cli_session_request_send(TALLOC_CTX *mem_ctx,
     1088                                            struct tevent_context *ev,
     1089                                            int sock,
     1090                                            const struct nmb_name *called,
     1091                                            const struct nmb_name *calling)
     1092{
     1093        struct tevent_req *req, *subreq;
     1094        struct cli_session_request_state *state;
     1095
     1096        req = tevent_req_create(mem_ctx, &state,
     1097                                struct cli_session_request_state);
     1098        if (req == NULL) {
     1099                return NULL;
     1100        }
     1101        state->ev = ev;
     1102        state->sock = sock;
     1103
     1104        state->iov[1].iov_base = name_mangle(
     1105                state, called->name, called->name_type);
     1106        if (tevent_req_nomem(state->iov[1].iov_base, req)) {
     1107                return tevent_req_post(req, ev);
     1108        }
     1109        state->iov[1].iov_len = name_len(
     1110                (unsigned char *)state->iov[1].iov_base,
     1111                talloc_get_size(state->iov[1].iov_base));
     1112
     1113        state->iov[2].iov_base = name_mangle(
     1114                state, calling->name, calling->name_type);
     1115        if (tevent_req_nomem(state->iov[2].iov_base, req)) {
     1116                return tevent_req_post(req, ev);
     1117        }
     1118        state->iov[2].iov_len = name_len(
     1119                (unsigned char *)state->iov[2].iov_base,
     1120                talloc_get_size(state->iov[2].iov_base));
     1121
     1122        _smb_setlen(((char *)&state->len_hdr),
     1123                    state->iov[1].iov_len + state->iov[2].iov_len);
     1124        SCVAL((char *)&state->len_hdr, 0, 0x81);
     1125
     1126        state->iov[0].iov_base = &state->len_hdr;
     1127        state->iov[0].iov_len = sizeof(state->len_hdr);
     1128
     1129        subreq = writev_send(state, ev, NULL, sock, true, state->iov, 3);
     1130        if (tevent_req_nomem(subreq, req)) {
     1131                return tevent_req_post(req, ev);
     1132        }
     1133        tevent_req_set_callback(subreq, cli_session_request_sent, req);
     1134        return req;
     1135}
     1136
     1137static void cli_session_request_sent(struct tevent_req *subreq)
     1138{
     1139        struct tevent_req *req = tevent_req_callback_data(
     1140                subreq, struct tevent_req);
     1141        struct cli_session_request_state *state = tevent_req_data(
     1142                req, struct cli_session_request_state);
     1143        ssize_t ret;
     1144        int err;
     1145
     1146        ret = writev_recv(subreq, &err);
     1147        TALLOC_FREE(subreq);
     1148        if (ret == -1) {
     1149                tevent_req_error(req, err);
     1150                return;
     1151        }
     1152        subreq = read_smb_send(state, state->ev, state->sock);
     1153        if (tevent_req_nomem(subreq, req)) {
     1154                return;
     1155        }
     1156        tevent_req_set_callback(subreq, cli_session_request_recvd, req);
     1157}
     1158
     1159static void cli_session_request_recvd(struct tevent_req *subreq)
     1160{
     1161        struct tevent_req *req = tevent_req_callback_data(
     1162                subreq, struct tevent_req);
     1163        struct cli_session_request_state *state = tevent_req_data(
     1164                req, struct cli_session_request_state);
     1165        uint8_t *buf;
     1166        ssize_t ret;
     1167        int err;
     1168
     1169        ret = read_smb_recv(subreq, talloc_tos(), &buf, &err);
     1170        TALLOC_FREE(subreq);
     1171
     1172        if (ret < 4) {
     1173                ret = -1;
     1174                err = EIO;
     1175        }
     1176        if (ret == -1) {
     1177                tevent_req_error(req, err);
     1178                return;
     1179        }
     1180        /*
     1181         * In case of an error there is more information in the data
     1182         * portion according to RFC1002. We're not subtle enough to
     1183         * respond to the different error conditions, so drop the
     1184         * error info here.
     1185         */
     1186        state->nb_session_response = CVAL(buf, 0);
     1187        tevent_req_done(req);
     1188}
     1189
     1190bool cli_session_request_recv(struct tevent_req *req, int *err, uint8_t *resp)
     1191{
     1192        struct cli_session_request_state *state = tevent_req_data(
     1193                req, struct cli_session_request_state);
     1194
     1195        if (tevent_req_is_unix_error(req, err)) {
     1196                return false;
     1197        }
     1198        *resp = state->nb_session_response;
     1199        return true;
     1200}
  • vendor/current/source3/libsmb/clidgram.c

    r414 r594  
    239239        if (blob.length < 4) {
    240240                DEBUG(0,("invalid length: %d\n", (int)blob.length));
     241                free_packet(packet);
    241242                return false;
    242243        }
     
    244245        if (RIVAL(blob.data,0) != DGRAM_SMB) {
    245246                DEBUG(0,("invalid packet\n"));
     247                free_packet(packet);
    246248                return false;
    247249        }
     
    254256        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
    255257                DEBUG(0,("failed to parse packet\n"));
     258                free_packet(packet);
    256259                return false;
    257260        }
     
    259262        if (p.smb.smb_command != SMB_TRANSACTION) {
    260263                DEBUG(0,("invalid smb_command: %d\n", p.smb.smb_command));
     264                free_packet(packet);
    261265                return false;
    262266        }
     
    272276        status = pull_netlogon_samlogon_response(&blob, mem_ctx, NULL, &r);
    273277        if (!NT_STATUS_IS_OK(status)) {
     278                free_packet(packet);
    274279                return false;
    275280        }
     
    286291                DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
    287292                          domain_name, returned_domain));
     293                free_packet(packet);
    288294                return false;
    289295        }
     
    291297        *dc_name = talloc_strdup(mem_ctx, returned_dc);
    292298        if (!*dc_name) {
     299                free_packet(packet);
    293300                return false;
    294301        }
     
    301308                        mem_ctx, &r, sizeof(struct netlogon_samlogon_response));
    302309                if (!*_r) {
     310                free_packet(packet);
    303311                        return false;
    304312                }
     
    308316                   *dc_name, returned_domain));
    309317
     318        free_packet(packet);
    310319        return True;
    311320}
  • vendor/current/source3/libsmb/clikrb5.c

    r587 r594  
    697697        SIVAL(gss_cksum, 0, GSSAPI_BNDLENGTH);
    698698
    699         /* Precalculated MD5sum of NULL channel bindings (20 bytes) */
    700         /* Channel bindings are: (all ints encoded as little endian)
    701 
    702                 [4 bytes] initiator_addrtype (255 for null bindings)
    703                 [4 bytes] initiator_address length
    704                         [n bytes] .. initiator_address data - not present
    705                                      in null bindings.
    706                 [4 bytes] acceptor_addrtype (255 for null bindings)
    707                 [4 bytes] acceptor_address length
    708                         [n bytes] .. acceptor_address data - not present
    709                                      in null bindings.
    710                 [4 bytes] application_data length
    711                         [n bytes] .. application_ data - not present
    712                                      in null bindings.
    713                 MD5 of this is ""\x14\x8f\x0c\xf7\xb1u\xdey*J\x9a%\xdfV\xc5\x18"
    714         */
    715 
    716         memcpy(&gss_cksum[4],
    717                 "\x14\x8f\x0c\xf7\xb1u\xdey*J\x9a%\xdfV\xc5\x18",
    718                 GSSAPI_BNDLENGTH);
     699        /*
     700         * GSS_C_NO_CHANNEL_BINDINGS means 16 zero bytes.
     701         * This matches the behavior of heimdal and mit.
     702         *
     703         * And it is needed to work against some closed source
     704         * SMB servers.
     705         *
     706         * See bug #7883
     707         */
     708        memset(&gss_cksum[4], 0x00, GSSAPI_BNDLENGTH);
    719709
    720710        SIVAL(gss_cksum, 20, gss_flags);
     
    833823        }
    834824
    835 #if defined(TKT_FLG_OK_AS_DELEGATE ) && defined(HAVE_KRB5_FWD_TGT_CREDS) && defined(HAVE_KRB5_AUTH_CON_SETUSERUSERKEY) && defined(KRB5_AUTH_CONTEXT_USE_SUBKEY)
     825#if defined(TKT_FLG_OK_AS_DELEGATE ) && defined(HAVE_KRB5_FWD_TGT_CREDS) && defined(HAVE_KRB5_AUTH_CON_SETUSERUSERKEY) && defined(KRB5_AUTH_CONTEXT_USE_SUBKEY) && defined(HAVE_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE)
    836826        if( credsp->ticket_flags & TKT_FLG_OK_AS_DELEGATE ) {
    837827                /* Fetch a forwarded TGT from the KDC so that we can hand off a 2nd ticket
     
    895885                }
    896886        }
    897 #endif
    898887
    899888        /* Frees and reallocates in_data into a GSS checksum blob. */
     
    903892        }
    904893
    905 #if defined(HAVE_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE)
    906894        /* We always want GSS-checksum types. */
    907895        retval = krb5_auth_con_set_req_cksumtype(context, *auth_context, GSSAPI_CHECKSUM );
  • vendor/current/source3/libsmb/clireadwrite.c

    r414 r594  
    705705                                uint16 mode,
    706706                                const char *buf,
    707                                 size_t size,
    708                                 int i)
     707                                size_t size)
    709708{
    710709        char *p;
     
    780779        }
    781780
    782         SSVAL(cli->outbuf,smb_mid,cli->mid + i);
    783 
    784781        show_msg(cli->outbuf);
    785782        if (direct_writes) {
     
    830827                                        write_mode,
    831828                                        buf + bsent,
    832                                         size1, issued))
     829                                        size1))
    833830                                return -1;
    834831                        issued++;
  • vendor/current/source3/libsmb/nmblib.c

    r591 r594  
    12941294****************************************************************************/
    12951295
    1296 char *name_mangle(TALLOC_CTX *mem_ctx, char *In, char name_type)
     1296char *name_mangle(TALLOC_CTX *mem_ctx, const char *In, char name_type)
    12971297{
    12981298        int   i;
Note: See TracChangeset for help on using the changeset viewer.