Ignore:
Timestamp:
Jul 1, 2011, 8:40:10 AM (14 years ago)
Author:
Herwig Bauernfeind
Message:

Samba 3.5: Update trunk to 3.5.6

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/server/source3/smbd/reply.c

    r454 r590  
    496496****************************************************************************/
    497497
    498 void reply_special(char *inbuf)
     498void reply_special(char *inbuf, size_t inbuf_size)
    499499{
    500500        int msg_type = CVAL(inbuf,0);
    501501        int msg_flags = CVAL(inbuf,1);
    502         fstring name1,name2;
    503         char name_type1, name_type2;
    504502        struct smbd_server_connection *sconn = smbd_server_conn;
    505 
    506503        /*
    507504         * We only really use 4 bytes of the outbuf, but for the smb_setlen
     
    511508        char outbuf[smb_size];
    512509
    513         *name1 = *name2 = 0;
    514 
    515510        memset(outbuf, '\0', sizeof(outbuf));
    516511
     
    519514        switch (msg_type) {
    520515        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;
    521523
    522524                if (sconn->nbt.got_session) {
     
    526528                SCVAL(outbuf,0,0x82);
    527529                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) {
    530534                        DEBUG(0,("Invalid name length in session request\n"));
    531535                        return;
    532536                }
    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
    535553                DEBUG(2,("netbios connect: name1=%s0x%x name2=%s0x%x\n",
    536554                         name1, name_type1, name2, name_type2));
     
    566584                sconn->nbt.got_session = true;
    567585                break;
     586        }
    568587
    569588        case 0x89: /* session keepalive request
     
    58545873                          smb_fname_str_dbg(smb_fname_dst)));
    58555874
    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)))) {
    58585878                        /* We must set the archive bit on the newly
    58595879                           renamed file. */
Note: See TracChangeset for help on using the changeset viewer.