From 84134b537fc76c3228ef8622c9cc852fa2b03fba Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 29 Nov 2017 13:10:25 -0800 Subject: [PATCH 1/2] s3: client: Rename to in cmd_symlink() and cli_posix_symlink(). Stops us from mixing up the old and new names. Only behavior change is correcting the names printed in the error messages. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13172 Signed-off-by: Jeremy Allison Reviewed-by: Volker Lendecke (cherry picked from commit 8448dcaa8da78bcb84fca6a000c75e256bce1e77) --- source3/client/client.c | 15 ++++++++------- source3/libsmb/clifile.c | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/source3/client/client.c b/source3/client/client.c index 0900df1dd21..4fefc9966f4 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -3331,7 +3331,7 @@ static int cmd_readlink(void) static int cmd_symlink(void) { TALLOC_CTX *ctx = talloc_tos(); - char *oldname = NULL; + char *link_target = NULL; char *newname = NULL; char *buf = NULL; char *buf2 = NULL; @@ -3340,11 +3340,11 @@ static int cmd_symlink(void) if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) || !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL)) { - d_printf("symlink \n"); + d_printf("symlink \n"); return 1; } /* Oldname (link target) must be an untouched blob. */ - oldname = buf; + link_target = buf; if (SERVER_HAS_UNIX_CIFS(cli)) { newname = talloc_asprintf(ctx, "%s%s", client_get_cur_dir(), @@ -3360,19 +3360,20 @@ static int cmd_symlink(void) status = cli_resolve_path(ctx, "", auth_info, cli, newname, &newcli, &newname); if (!NT_STATUS_IS_OK(status)) { - d_printf("link %s: %s\n", oldname, nt_errstr(status)); + d_printf("link %s: %s\n", newname, + nt_errstr(status)); return 1; } - status = cli_posix_symlink(newcli, oldname, newname); + status = cli_posix_symlink(newcli, link_target, newname); } else { status = cli_symlink( - cli, oldname, buf2, + cli, link_target, buf2, buf2[0] == '\\' ? 0 : SYMLINK_FLAG_RELATIVE); } if (!NT_STATUS_IS_OK(status)) { d_printf("%s symlinking files (%s -> %s)\n", - nt_errstr(status), oldname, newname); + nt_errstr(status), newname, link_target); return 1; } diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index 03dd6407f60..a10701b3a00 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -151,7 +151,7 @@ NTSTATUS cli_setpathinfo(struct cli_state *cli, /**************************************************************************** Hard/Symlink a file (UNIX extensions). - Creates new name (sym)linked to oldname. + Creates new name (sym)linked to link_target. ****************************************************************************/ struct cli_posix_link_internal_state { @@ -164,7 +164,7 @@ static struct tevent_req *cli_posix_link_internal_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct cli_state *cli, uint16_t level, - const char *oldname, + const char *link_target, const char *newname) { struct tevent_req *req = NULL, *subreq = NULL; @@ -182,7 +182,8 @@ static struct tevent_req *cli_posix_link_internal_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } state->data = trans2_bytes_push_str( - state->data, smbXcli_conn_use_unicode(cli->conn), oldname, strlen(oldname)+1, NULL); + state->data, smbXcli_conn_use_unicode(cli->conn), + link_target, strlen(link_target)+1, NULL); subreq = cli_setpathinfo_send( state, ev, cli, level, newname, @@ -207,11 +208,11 @@ static void cli_posix_link_internal_done(struct tevent_req *subreq) struct tevent_req *cli_posix_symlink_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct cli_state *cli, - const char *oldname, + const char *link_target, const char *newname) { return cli_posix_link_internal_send( - mem_ctx, ev, cli, SMB_SET_FILE_UNIX_LINK, oldname, newname); + mem_ctx, ev, cli, SMB_SET_FILE_UNIX_LINK, link_target, newname); } NTSTATUS cli_posix_symlink_recv(struct tevent_req *req) @@ -220,7 +221,7 @@ NTSTATUS cli_posix_symlink_recv(struct tevent_req *req) } NTSTATUS cli_posix_symlink(struct cli_state *cli, - const char *oldname, + const char *link_target, const char *newname) { TALLOC_CTX *frame = talloc_stackframe(); @@ -245,7 +246,7 @@ NTSTATUS cli_posix_symlink(struct cli_state *cli, req = cli_posix_symlink_send(frame, ev, cli, - oldname, + link_target, newname); if (req == NULL) { status = NT_STATUS_NO_MEMORY; -- 2.15.0.531.g2ccb3012c9-goog From 5ab4d00d1a497404b1abf9a69be439137aec4f2e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 29 Nov 2017 13:16:43 -0800 Subject: [PATCH 2/2] s3: libsmb: Fix reversing of oldname/newname paths when creating a reparse point symlink on Windows from smbclient. This happened as smbd doesn't support reparse points so we couldn't test. This was the reverse of the (tested) symlink parameters in the unix extensions symlink command. Rename parameters to link_target instead of oldname so this is clearer. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13172 Signed-off-by: Jeremy Allison Reviewed-by: Volker Lendecke (cherry picked from commit abbc9b9ab793d22bca6a37828f4375ef38c56dd3) --- source3/libsmb/clisymlink.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source3/libsmb/clisymlink.c b/source3/libsmb/clisymlink.c index 496e3e1d953..a52f6ff7f6d 100644 --- a/source3/libsmb/clisymlink.c +++ b/source3/libsmb/clisymlink.c @@ -31,7 +31,7 @@ struct cli_symlink_state { struct tevent_context *ev; struct cli_state *cli; - const char *oldpath; + const char *link_target; const char *newpath; uint32_t flags; @@ -49,7 +49,7 @@ static void cli_symlink_close_done(struct tevent_req *subreq); struct tevent_req *cli_symlink_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct cli_state *cli, - const char *oldpath, + const char *link_target, const char *newpath, uint32_t flags) { @@ -62,12 +62,12 @@ struct tevent_req *cli_symlink_send(TALLOC_CTX *mem_ctx, } state->ev = ev; state->cli = cli; - state->oldpath = oldpath; + state->link_target = link_target; state->newpath = newpath; state->flags = flags; subreq = cli_ntcreate_send( - state, ev, cli, state->oldpath, 0, + state, ev, cli, state->newpath, 0, SYNCHRONIZE_ACCESS|DELETE_ACCESS| FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_NONE, FILE_CREATE, @@ -102,7 +102,7 @@ static void cli_symlink_create_done(struct tevent_req *subreq) SCVAL(state->setup, 7, 0); /* IsFlags */ if (!symlink_reparse_buffer_marshall( - state->newpath, NULL, state->flags, state, + state->link_target, NULL, state->flags, state, &data, &data_len)) { tevent_req_oom(req); return; @@ -197,7 +197,7 @@ NTSTATUS cli_symlink_recv(struct tevent_req *req) return tevent_req_simple_recv_ntstatus(req); } -NTSTATUS cli_symlink(struct cli_state *cli, const char *oldname, +NTSTATUS cli_symlink(struct cli_state *cli, const char *link_target, const char *newname, uint32_t flags) { TALLOC_CTX *frame = talloc_stackframe(); @@ -213,7 +213,7 @@ NTSTATUS cli_symlink(struct cli_state *cli, const char *oldname, if (ev == NULL) { goto fail; } - req = cli_symlink_send(frame, ev, cli, oldname, newname, flags); + req = cli_symlink_send(frame, ev, cli, link_target, newname, flags); if (req == NULL) { goto fail; } -- 2.15.0.531.g2ccb3012c9-goog