Changeset 594 for vendor/current/source3/libsmb
- Timestamp:
- Jul 1, 2011, 4:02:23 PM (14 years ago)
- Location:
- vendor/current/source3/libsmb
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/source3/libsmb/async_smb.c
r414 r594 706 706 TALLOC_FREE(inbuf); 707 707 status = NT_STATUS_ACCESS_DENIED; 708 close(cli->fd); 709 cli->fd = -1; 708 710 goto fail; 709 711 } … … 1070 1072 return NT_STATUS_OK; 1071 1073 } 1074 1075 1076 struct 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 1084 static void cli_session_request_sent(struct tevent_req *subreq); 1085 static void cli_session_request_recvd(struct tevent_req *subreq); 1086 1087 struct 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 1137 static 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 1159 static 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 1190 bool 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 239 239 if (blob.length < 4) { 240 240 DEBUG(0,("invalid length: %d\n", (int)blob.length)); 241 free_packet(packet); 241 242 return false; 242 243 } … … 244 245 if (RIVAL(blob.data,0) != DGRAM_SMB) { 245 246 DEBUG(0,("invalid packet\n")); 247 free_packet(packet); 246 248 return false; 247 249 } … … 254 256 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { 255 257 DEBUG(0,("failed to parse packet\n")); 258 free_packet(packet); 256 259 return false; 257 260 } … … 259 262 if (p.smb.smb_command != SMB_TRANSACTION) { 260 263 DEBUG(0,("invalid smb_command: %d\n", p.smb.smb_command)); 264 free_packet(packet); 261 265 return false; 262 266 } … … 272 276 status = pull_netlogon_samlogon_response(&blob, mem_ctx, NULL, &r); 273 277 if (!NT_STATUS_IS_OK(status)) { 278 free_packet(packet); 274 279 return false; 275 280 } … … 286 291 DEBUG(3, ("GetDC: Expected domain %s, got %s\n", 287 292 domain_name, returned_domain)); 293 free_packet(packet); 288 294 return false; 289 295 } … … 291 297 *dc_name = talloc_strdup(mem_ctx, returned_dc); 292 298 if (!*dc_name) { 299 free_packet(packet); 293 300 return false; 294 301 } … … 301 308 mem_ctx, &r, sizeof(struct netlogon_samlogon_response)); 302 309 if (!*_r) { 310 free_packet(packet); 303 311 return false; 304 312 } … … 308 316 *dc_name, returned_domain)); 309 317 318 free_packet(packet); 310 319 return True; 311 320 } -
vendor/current/source3/libsmb/clikrb5.c
r587 r594 697 697 SIVAL(gss_cksum, 0, GSSAPI_BNDLENGTH); 698 698 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); 719 709 720 710 SIVAL(gss_cksum, 20, gss_flags); … … 833 823 } 834 824 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) 836 826 if( credsp->ticket_flags & TKT_FLG_OK_AS_DELEGATE ) { 837 827 /* Fetch a forwarded TGT from the KDC so that we can hand off a 2nd ticket … … 895 885 } 896 886 } 897 #endif898 887 899 888 /* Frees and reallocates in_data into a GSS checksum blob. */ … … 903 892 } 904 893 905 #if defined(HAVE_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE)906 894 /* We always want GSS-checksum types. */ 907 895 retval = krb5_auth_con_set_req_cksumtype(context, *auth_context, GSSAPI_CHECKSUM ); -
vendor/current/source3/libsmb/clireadwrite.c
r414 r594 705 705 uint16 mode, 706 706 const char *buf, 707 size_t size, 708 int i) 707 size_t size) 709 708 { 710 709 char *p; … … 780 779 } 781 780 782 SSVAL(cli->outbuf,smb_mid,cli->mid + i);783 784 781 show_msg(cli->outbuf); 785 782 if (direct_writes) { … … 830 827 write_mode, 831 828 buf + bsent, 832 size1 , issued))829 size1)) 833 830 return -1; 834 831 issued++; -
vendor/current/source3/libsmb/nmblib.c
r591 r594 1294 1294 ****************************************************************************/ 1295 1295 1296 char *name_mangle(TALLOC_CTX *mem_ctx, c har *In, char name_type)1296 char *name_mangle(TALLOC_CTX *mem_ctx, const char *In, char name_type) 1297 1297 { 1298 1298 int i;
Note:
See TracChangeset
for help on using the changeset viewer.