return pdata_end - base;
}
p += 2;
- {
- /* stupid NT bugs. grr */
- int flags = 0;
- if (p[1] == 0 && namelen > 1) flags |= STR_UNICODE;
- clistr_pull(base_ptr, finfo->short_name, p,
- sizeof(finfo->short_name),
- slen, flags);
+ ret = clistr_pull_talloc(ctx,
+ base_ptr,
+ recv_flags2,
+ &finfo->short_name,
+ p,
+ slen,
+ STR_UNICODE);
+ if (ret == (size_t)-1) {
+ return pdata_end - base;
}
p += 24; /* short name? */
if (p + namelen < p || p + namelen > pdata_end) {
finfo->mtime_ts.tv_nsec = finfo->atime_ts.tv_nsec = 0;
finfo->size = IVAL(p,26);
ret = clistr_pull_talloc(ctx,
- cli->inbuf,
- SVAL(cli->inbuf, smb_flg2),
+ NULL,
+ 0,
&finfo->name,
p+30,
12,
}
if (finfo->name) {
- strlcpy(finfo->short_name,
- finfo->name,
- sizeof(finfo->short_name));
+ finfo->short_name = talloc_strdup(ctx, finfo->name);
+ if (finfo->short_name == NULL) {
+ return false;
+ }
}
return true;
}
dirlist_len = talloc_get_size(state->dirlist);
- tmp = TALLOC_REALLOC_ARRAY(
+ tmp = talloc_realloc(
state, state->dirlist, uint8_t,
dirlist_len + received * DIR_STRUCT_SIZE);
if (tevent_req_nomem(tmp, req)) {
num_received = talloc_array_length(state->dirlist) / DIR_STRUCT_SIZE;
- finfo = TALLOC_ARRAY(mem_ctx, struct file_info, num_received);
+ finfo = talloc_array(mem_ctx, struct file_info, num_received);
if (finfo == NULL) {
return NT_STATUS_NO_MEMORY;
}
{
struct tevent_req *req, *subreq;
struct cli_list_trans_state *state;
- size_t nlen, param_len;
- char *p;
+ size_t param_len;
req = tevent_req_create(mem_ctx, &state,
struct cli_list_trans_state);
state->max_matches = 1366; /* Match W2k */
- state->setup[0] = TRANSACT2_FINDFIRST;
+ SSVAL(&state->setup[0], 0, TRANSACT2_FINDFIRST);
- nlen = 2*(strlen(mask)+1);
- state->param = TALLOC_ARRAY(state, uint8_t, 12+nlen+2);
+ state->param = talloc_array(state, uint8_t, 12);
if (tevent_req_nomem(state->param, req)) {
return tevent_req_post(req, ev);
}
SSVAL(state->param, 6, state->info_level);
SIVAL(state->param, 8, 0);
- p = ((char *)state->param)+12;
- p += clistr_push(state->cli, p, state->mask, nlen,
- STR_TERMINATE);
- param_len = PTR_DIFF(p, state->param);
+ state->param = trans2_bytes_push_str(state->param, cli_ucs2(cli),
+ state->mask, strlen(state->mask)+1,
+ NULL);
+ if (tevent_req_nomem(state->param, req)) {
+ return tevent_req_post(req, ev);
+ }
+ param_len = talloc_get_size(state->param);
subreq = cli_trans_send(state, state->ev, state->cli,
SMBtrans2, NULL, -1, 0, 0,
state->setup, 1, 0,
state->param, param_len, 10,
- NULL, 0, cli->max_xmit);
+ NULL, 0, CLI_BUFFER_SIZE);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
int i;
DATA_BLOB last_name_raw;
struct file_info *finfo = NULL;
- size_t nlen, param_len;
+ size_t param_len;
min_param = (state->first ? 6 : 4);
old_num_finfo = talloc_array_length(state->finfo);
- tmp = TALLOC_REALLOC_ARRAY(state, state->finfo, struct file_info,
+ tmp = talloc_realloc(state, state->finfo, struct file_info,
old_num_finfo + ff_searchcount);
if (tevent_req_nomem(tmp, req)) {
return;
/*
* Shrink state->finfo to the real length we received
*/
- tmp = TALLOC_REALLOC_ARRAY(state, state->finfo, struct file_info,
+ tmp = talloc_realloc(state, state->finfo, struct file_info,
old_num_finfo + i);
if (tevent_req_nomem(tmp, req)) {
return;
return;
}
- state->setup[0] = TRANSACT2_FINDNEXT;
+ SSVAL(&state->setup[0], 0, TRANSACT2_FINDNEXT);
- nlen = 2*(strlen(state->mask) + 1);
-
- param = TALLOC_REALLOC_ARRAY(state, state->param, uint8_t,
- 12 + nlen + last_name_raw.length + 2);
+ param = talloc_realloc(state, state->param, uint8_t, 12);
if (tevent_req_nomem(param, req)) {
return;
}
*/
SSVAL(param, 10, (FLAG_TRANS2_FIND_REQUIRE_RESUME
|FLAG_TRANS2_FIND_CLOSE_IF_END));
- p = ((char *)param)+12;
if (last_name_raw.length) {
- memcpy(p, last_name_raw.data, last_name_raw.length);
- p += last_name_raw.length;
+ state->param = trans2_bytes_push_bytes(state->param,
+ last_name_raw.data,
+ last_name_raw.length);
+ if (tevent_req_nomem(state->param, req)) {
+ return;
+ }
data_blob_free(&last_name_raw);
} else {
- p += clistr_push(state->cli, p, state->mask, nlen,
- STR_TERMINATE);
+ state->param = trans2_bytes_push_str(state->param,
+ cli_ucs2(state->cli),
+ state->mask,
+ strlen(state->mask)+1,
+ NULL);
+ if (tevent_req_nomem(state->param, req)) {
+ return;
+ }
}
-
- param_len = PTR_DIFF(p, param);
+ param_len = talloc_get_size(state->param);
subreq = cli_trans_send(state, state->ev, state->cli,
SMBtrans2, NULL, -1, 0, 0,
state->setup, 1, 0,
state->param, param_len, 10,
- NULL, 0, state->cli->max_xmit);
+ NULL, 0, CLI_BUFFER_SIZE);
if (tevent_req_nomem(subreq, req)) {
return;
}
return NULL;
}
- if (cli->protocol <= PROTOCOL_LANMAN1) {
+ if (cli_state_protocol(cli) <= PROTOCOL_LANMAN1) {
subreq = cli_list_old_send(state, ev, cli, mask, attribute);
state->recv_fn = cli_list_old_recv;
} else {
goto fail;
}
- info_level = (cli->capabilities & CAP_NT_SMBS)
+ info_level = (cli_state_capabilities(cli) & CAP_NT_SMBS)
? SMB_FIND_FILE_BOTH_DIRECTORY_INFO : SMB_FIND_INFO_STANDARD;
req = cli_list_send(frame, ev, cli, mask, attribute, info_level);