#include "libcli/security/secdesc.h"
#include "libcli/security/security.h"
#include "../libcli/smb/smbXcli_base.h"
-#include "libcli/smb/reparse_symlink.h"
+#include "libcli/smb/reparse.h"
struct cli_symlink_state {
struct tevent_context *ev;
{
struct cli_readlink_state *state = tevent_req_data(
req, struct cli_readlink_state);
- struct symlink_reparse_struct symlink = { .flags = 0, };
+ struct reparse_data_buffer buf = {
+ .tag = 0,
+ };
NTSTATUS status;
- int ret;
if (tevent_req_is_nterror(req, &status)) {
return status;
return NT_STATUS_OK;
}
- ret = symlink_reparse_buffer_parse(
- talloc_tos(), &symlink, state->data, state->num_data);
- if (ret != 0) {
+ status = reparse_data_buffer_parse(state,
+ &buf,
+ state->data,
+ state->num_data);
+ if (!NT_STATUS_IS_OK(status)) {
+ return NT_STATUS_INVALID_NETWORK_RESPONSE;
+ }
+ if (buf.tag != IO_REPARSE_TAG_SYMLINK) {
return NT_STATUS_INVALID_NETWORK_RESPONSE;
}
if (psubstitute_name != NULL) {
- *psubstitute_name = talloc_move(
- mem_ctx, &symlink.substitute_name);
+ *psubstitute_name =
+ talloc_move(mem_ctx, &buf.parsed.lnk.substitute_name);
}
if (pprint_name != NULL) {
- *pprint_name = talloc_move(mem_ctx, &symlink.print_name);
+ *pprint_name =
+ talloc_move(mem_ctx, &buf.parsed.lnk.print_name);
}
if (pflags != NULL) {
- *pflags = symlink.flags;
+ *pflags = buf.parsed.lnk.flags;
}
- TALLOC_FREE(symlink.print_name);
- TALLOC_FREE(symlink.substitute_name);
+ tevent_req_received(req);
return NT_STATUS_OK;
}