Ignore:
Timestamp:
Nov 26, 2007, 9:24:27 AM (18 years ago)
Author:
Paul Smedley
Message:

Update source to 3.0.27a

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/source/smbd/trans2.c

    r99 r105  
    11041104                                 int requires_resume_key,
    11051105                                 BOOL dont_descend,char **ppdata,
    1106                                  char *base_data, int space_remaining,
     1106                                 char *base_data, char *end_data, int space_remaining,
    11071107                                 BOOL *out_of_space, BOOL *got_exact_match,
    11081108                                 int *last_entry_off, struct ea_list *name_list, TALLOC_CTX *ea_ctx)
     
    12941294                        nameptr = p;
    12951295                        p += align_string(outbuf, p, 0);
    1296                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE);
     1296                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE);
    12971297                        if (SVAL(outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS) {
    12981298                                if (len > 2) {
     
    13291329                        p += 27;
    13301330                        nameptr = p - 1;
    1331                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE | STR_NOALIGN);
     1331                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE | STR_NOALIGN);
    13321332                        if (SVAL(outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS) {
    13331333                                if (len > 2) {
     
    13831383
    13841384                        /* Push the ea_data followed by the name. */
    1385                         p += fill_ea_buffer(ea_ctx, p, space_remaining, conn, name_list);
     1385                        p += fill_ea_buffer(ea_ctx, p, space_remaining - (p - pdata), conn, name_list);
    13861386                        nameptr = p;
    1387                         len = srvstr_push(outbuf, p + 1, fname, -1, STR_TERMINATE | STR_NOALIGN);
     1387                        len = srvstr_push(outbuf, p + 1, fname, PTR_DIFF(end_data, p+1), STR_TERMINATE | STR_NOALIGN);
    13881388                        if (SVAL(outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS) {
    13891389                                if (len > 2) {
     
    14421442                        }
    14431443                        p += 2 + 24;
    1444                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
     1444                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
    14451445                        SIVAL(q,0,len);
    14461446                        p += len;
     
    14631463                        SOFF_T(p,0,allocation_size); p += 8;
    14641464                        SIVAL(p,0,nt_extmode); p += 4;
    1465                         len = srvstr_push(outbuf, p + 4, fname, -1, STR_TERMINATE_ASCII);
     1465                        len = srvstr_push(outbuf, p + 4, fname, PTR_DIFF(end_data, p+4), STR_TERMINATE_ASCII);
    14661466                        SIVAL(p,0,len);
    14671467                        p += 4 + len;
     
    14901490                                p +=4;
    14911491                        }
    1492                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
     1492                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
    14931493                        SIVAL(q, 0, len);
    14941494                        p += len;
     
    15081508                        /* this must *not* be null terminated or w2k gets in a loop trying to set an
    15091509                           acl on a dir (tridge) */
    1510                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
     1510                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
    15111511                        SIVAL(p, -4, len);
    15121512                        p += len;
     
    15381538                        SIVAL(p,0,sbuf.st_ino); p += 4; /* FileIndexLow */
    15391539                        SIVAL(p,0,sbuf.st_dev); p += 4; /* FileIndexHigh */
    1540                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
     1540                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
    15411541                        SIVAL(q, 0, len);
    15421542                        p += len;
     
    15891589                        SIVAL(p,0,sbuf.st_ino); p += 4; /* FileIndexLow */
    15901590                        SIVAL(p,0,sbuf.st_dev); p += 4; /* FileIndexHigh */
    1591                         len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
     1591                        len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
    15921592                        SIVAL(q,0,len);
    15931593                        p += len;
     
    16121612                                p = store_file_unix_basic(conn, p,
    16131613                                                        NULL, &sbuf);
    1614                                 len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE);
     1614                                len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE);
    16151615                        } else {
    16161616                                DEBUG(10,("get_lanman2_dir_entry: SMB_FIND_FILE_UNIX_INFO2\n"));
     
    16191619                                nameptr = p;
    16201620                                p += 4;
    1621                                 len = srvstr_push(outbuf, p, fname, -1, 0);
     1621                                len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), 0);
    16221622                                SIVAL(nameptr, 0, len);
    16231623                        }
     
    16701670        char *params = *pparams;
    16711671        char *pdata = *ppdata;
     1672        char *data_end;
    16721673        uint32 dirtype;
    16731674        int maxentries;
     
    18151816        }
    18161817        pdata = *ppdata;
     1818        data_end = pdata + max_data_bytes + DIR_ENTRY_SAFETY_MARGIN - 1;
    18171819
    18181820        /* Realloc the params space */
     
    18691871                                        mask,dirtype,info_level,
    18701872                                        requires_resume_key,dont_descend,
    1871                                         &p,pdata,space_remaining, &out_of_space, &got_exact_match,
     1873                                        &p,pdata,data_end,space_remaining, &out_of_space, &got_exact_match,
    18721874                                        &last_entry_off, ea_list, ea_ctx);
    18731875                }
     
    19631965        char *params = *pparams;
    19641966        char *pdata = *ppdata;
     1967        char *data_end;
    19651968        int dptr_num;
    19661969        int maxentries;
     
    20892092
    20902093        pdata = *ppdata;
     2094        data_end = pdata + max_data_bytes + DIR_ENTRY_SAFETY_MARGIN - 1;
    20912095
    20922096        /* Realloc the params space */
     
    21812185                                                mask,dirtype,info_level,
    21822186                                                requires_resume_key,dont_descend,
    2183                                                 &p,pdata,space_remaining, &out_of_space, &got_exact_match,
     2187                                                &p,pdata,data_end,space_remaining, &out_of_space, &got_exact_match,
    21842188                                                &last_entry_off, ea_list, ea_ctx);
    21852189                }
     
    23202324                         * the pushed string. The change here was adding the STR_TERMINATE. JRA.
    23212325                         */
    2322                         len = srvstr_push(outbuf, pdata+l2_vol_szVolLabel, vname, -1, STR_NOALIGN|STR_TERMINATE);
     2326                        len = srvstr_push(outbuf, pdata+l2_vol_szVolLabel, vname, max_data_bytes - l2_vol_szVolLabel, STR_NOALIGN|STR_TERMINATE);
    23232327                        SCVAL(pdata,l2_vol_cch,len);
    23242328                        data_len = l2_vol_szVolLabel + len;
     
    23422346                        /* NOTE! the fstype must *not* be null terminated or win98 won't recognise it
    23432347                                and will think we can't do long filenames */
    2344                         len = srvstr_push(outbuf, pdata+12, fstype, -1, STR_UNICODE);
     2348                        len = srvstr_push(outbuf, pdata+12, fstype, max_data_bytes - 12, STR_UNICODE);
    23452349                        SIVAL(pdata,8,len);
    23462350                        data_len = 12 + len;
     
    23492353                case SMB_QUERY_FS_LABEL_INFO:
    23502354                case SMB_FS_LABEL_INFORMATION:
    2351                         len = srvstr_push(outbuf, pdata+4, vname, -1, 0);
     2355                        len = srvstr_push(outbuf, pdata+4, vname, max_data_bytes - 4, 0);
    23522356                        data_len = 4 + len;
    23532357                        SIVAL(pdata,0,len);
     
    23652369
    23662370                        /* Max label len is 32 characters. */
    2367                         len = srvstr_push(outbuf, pdata+18, vname, -1, STR_UNICODE);
     2371                        len = srvstr_push(outbuf, pdata+18, vname, max_data_bytes - 18, STR_UNICODE);
    23682372                        SIVAL(pdata,12,len);
    23692373                        data_len = 18+len;
     
    36003604                                mangle_map(short_name,True,True,conn->params);
    36013605                        }
    3602                         len = srvstr_push(outbuf, pdata+4, short_name, -1, STR_UNICODE);
     3606                        len = srvstr_push(outbuf, pdata+4, short_name, max_data_bytes - 4, STR_UNICODE);
    36033607                        data_size = 4 + len;
    36043608                        SIVAL(pdata,0,len);
     
    36103614                          this must be *exactly* right for ACLs on mapped drives to work
    36113615                         */
    3612                         len = srvstr_push(outbuf, pdata+4, dos_fname, -1, STR_UNICODE);
     3616                        len = srvstr_push(outbuf, pdata+4, dos_fname, max_data_bytes - 4, STR_UNICODE);
    36133617                        DEBUG(10,("call_trans2qfilepathinfo: SMB_QUERY_FILE_NAME_INFO\n"));
    36143618                        data_size = 4 + len;
     
    36513655                        SIVAL(pdata,0,ea_size);
    36523656                        pdata += 4; /* EA info */
    3653                         len = srvstr_push(outbuf, pdata+4, dos_fname, -1, STR_UNICODE);
     3657                        len = srvstr_push(outbuf, pdata+4, dos_fname, max_data_bytes - (pdata+4 - *ppdata), STR_UNICODE);
    36543658                        SIVAL(pdata,0,len);
    36553659                        pdata += 4 + len;
     
    38133817                                        return(UNIXERROR(ERRDOS,ERRnoaccess));
    38143818                                buffer[len] = 0;
    3815                                 len = srvstr_push(outbuf, pdata, buffer, -1, STR_TERMINATE);
     3819                                len = srvstr_push(outbuf, pdata, buffer, max_data_bytes, STR_TERMINATE);
    38163820                                pdata += len;
    38173821                                data_size = PTR_DIFF(pdata,(*ppdata));
Note: See TracChangeset for help on using the changeset viewer.