diff options
Diffstat (limited to 'source4/libcli/smb2/request.c')
-rw-r--r-- | source4/libcli/smb2/request.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/source4/libcli/smb2/request.c b/source4/libcli/smb2/request.c index 28e7018ecc..deadd1794f 100644 --- a/source4/libcli/smb2/request.c +++ b/source4/libcli/smb2/request.c @@ -204,3 +204,40 @@ NTSTATUS smb2_push_ofs_blob(struct smb2_request *req, uint8_t *ptr, DATA_BLOB bl memcpy(ptr+4, blob.data, blob.length); return NT_STATUS_OK; } + +/* + pull a string in a ofs/length/blob format +*/ +NTSTATUS smb2_pull_ofs_string(struct smb2_request *req, uint8_t *ptr, + const char **str) +{ + DATA_BLOB blob; + NTSTATUS status; + ssize_t size; + void *vstr; + status = smb2_pull_ofs_blob(req, ptr, &blob); + NT_STATUS_NOT_OK_RETURN(status); + size = convert_string_talloc(req, CH_UTF16, CH_UNIX, + blob.data, blob.length, &vstr); + data_blob_free(&blob); + (*str) = vstr; + if (size == -1) { + return NT_STATUS_ILLEGAL_CHARACTER; + } + return NT_STATUS_OK; +} + +/* + create a UTF16 string in a blob from a char* +*/ +NTSTATUS smb2_string_blob(TALLOC_CTX *mem_ctx, const char *str, DATA_BLOB *blob) +{ + ssize_t size; + size = convert_string_talloc(mem_ctx, CH_UNIX, CH_UTF16, + str, strlen(str), (void **)&blob->data); + if (size == -1) { + return NT_STATUS_ILLEGAL_CHARACTER; + } + blob->length = size; + return NT_STATUS_OK; +} |