Changeset 590 for trunk/server/source3/smbd/reply.c
- Timestamp:
- Jul 1, 2011, 8:40:10 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/server/source3/smbd/reply.c ¶
r454 r590 496 496 ****************************************************************************/ 497 497 498 void reply_special(char *inbuf )498 void reply_special(char *inbuf, size_t inbuf_size) 499 499 { 500 500 int msg_type = CVAL(inbuf,0); 501 501 int msg_flags = CVAL(inbuf,1); 502 fstring name1,name2;503 char name_type1, name_type2;504 502 struct smbd_server_connection *sconn = smbd_server_conn; 505 506 503 /* 507 504 * We only really use 4 bytes of the outbuf, but for the smb_setlen … … 511 508 char outbuf[smb_size]; 512 509 513 *name1 = *name2 = 0;514 515 510 memset(outbuf, '\0', sizeof(outbuf)); 516 511 … … 519 514 switch (msg_type) { 520 515 case 0x81: /* session request */ 516 { 517 /* inbuf_size is guarenteed to be at least 4. */ 518 fstring name1,name2; 519 int name_type1, name_type2; 520 int name_len1, name_len2; 521 522 *name1 = *name2 = 0; 521 523 522 524 if (sconn->nbt.got_session) { … … 526 528 SCVAL(outbuf,0,0x82); 527 529 SCVAL(outbuf,3,0); 528 if (name_len(inbuf+4) > 50 || 529 name_len(inbuf+4 + name_len(inbuf + 4)) > 50) { 530 531 /* inbuf_size is guaranteed to be at least 4. */ 532 name_len1 = name_len((unsigned char *)(inbuf+4),inbuf_size - 4); 533 if (name_len1 <= 0 || name_len1 > inbuf_size - 4) { 530 534 DEBUG(0,("Invalid name length in session request\n")); 531 535 return; 532 536 } 533 name_type1 = name_extract(inbuf,4,name1); 534 name_type2 = name_extract(inbuf,4 + name_len(inbuf + 4),name2); 537 name_len2 = name_len((unsigned char *)(inbuf+4+name_len1),inbuf_size - 4 - name_len1); 538 if (name_len2 <= 0 || name_len2 > inbuf_size - 4 - name_len1) { 539 DEBUG(0,("Invalid name length in session request\n")); 540 return; 541 } 542 543 name_type1 = name_extract((unsigned char *)inbuf, 544 inbuf_size,(unsigned int)4,name1); 545 name_type2 = name_extract((unsigned char *)inbuf, 546 inbuf_size,(unsigned int)(4 + name_len1),name2); 547 548 if (name_type1 == -1 || name_type2 == -1) { 549 DEBUG(0,("Invalid name type in session request\n")); 550 return; 551 } 552 535 553 DEBUG(2,("netbios connect: name1=%s0x%x name2=%s0x%x\n", 536 554 name1, name_type1, name2, name_type2)); … … 566 584 sconn->nbt.got_session = true; 567 585 break; 586 } 568 587 569 588 case 0x89: /* session keepalive request … … 5854 5873 smb_fname_str_dbg(smb_fname_dst))); 5855 5874 5856 if (lp_map_archive(SNUM(conn)) || 5857 lp_store_dos_attributes(SNUM(conn))) { 5875 if (!lp_posix_pathnames() && 5876 (lp_map_archive(SNUM(conn)) || 5877 lp_store_dos_attributes(SNUM(conn)))) { 5858 5878 /* We must set the archive bit on the newly 5859 5879 renamed file. */
Note:
See TracChangeset
for help on using the changeset viewer.