[SCM] Samba Shared Repository - branch v3-0-test updated -
release-3-0-32-17-g5e73ddb
Jeremy Allison
jra at samba.org
Fri Sep 12 18:17:21 GMT 2008
The branch, v3-0-test has been updated
via 5e73ddba11cbf9ea2d6ca63be098720ff0d5a0d1 (commit)
from d3e790fa70d083a53de221907c951580ce2537a4 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-0-test
- Log -----------------------------------------------------------------
commit 5e73ddba11cbf9ea2d6ca63be098720ff0d5a0d1
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 12 11:16:03 2008 -0700
Backport of bugfix for #5751, smbclient: cannot show ACLs on DFS, done by
SATOH Fumiyasu <fumiyas at osstech.co.jp>.
Jeremy.
-----------------------------------------------------------------------
Summary of changes:
source/libsmb/libsmbclient.c | 47 ++++++++++++++++++++++++++++++-----------
1 files changed, 34 insertions(+), 13 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/libsmb/libsmbclient.c b/source/libsmb/libsmbclient.c
index a9cf023..49f3d1f 100644
--- a/source/libsmb/libsmbclient.c
+++ b/source/libsmb/libsmbclient.c
@@ -4526,20 +4526,30 @@ cacl_get(SMBCCTX *context,
* attributes have been requested...
*/
if (ipc_cli && (all || some_nt || all_nt_acls)) {
+ pstring targetpath;
+ struct cli_state *targetcli;
+
/* Point to the portion after "system.nt_sec_desc." */
name += 19; /* if (all) this will be invalid but unused */
+ if (!cli_resolve_path("", cli, filename,
+ &targetcli, targetpath))
+ {
+ d_printf("Could not resolve %s\n", filename);
+ return -1;
+ }
+
/* ... then obtain any NT attributes which were requested */
- fnum = cli_nt_create(cli, filename, CREATE_ACCESS_READ);
+ fnum = cli_nt_create(targetcli, targetpath, CREATE_ACCESS_READ);
if (fnum == -1) {
DEBUG(5, ("cacl_get failed to open %s: %s\n",
- filename, cli_errstr(cli)));
+ targetpath, cli_errstr(targetcli)));
errno = 0;
return -1;
}
- sd = cli_query_secdesc(cli, fnum, ctx);
+ sd = cli_query_secdesc(targetcli, fnum, ctx);
if (!sd) {
DEBUG(5,
@@ -4548,7 +4558,7 @@ cacl_get(SMBCCTX *context,
return -1;
}
- cli_close(cli, fnum);
+ cli_close(targetcli, fnum);
if (! exclude_nt_revision) {
if (all || all_nt) {
@@ -5148,6 +5158,9 @@ cacl_set(TALLOC_CTX *ctx,
char *p;
BOOL numeric = True;
+ pstring targetpath;
+ struct cli_state *targetcli;
+
/* the_acl will be null for REMOVE_ALL operations */
if (the_acl) {
numeric = ((p = strchr(the_acl, ':')) != NULL &&
@@ -5177,19 +5190,27 @@ cacl_set(TALLOC_CTX *ctx,
return -1;
}
+ if (!cli_resolve_path("", cli, filename,
+ &targetcli, targetpath))
+ {
+ d_printf("Could not resolve %s\n", filename);
+ errno = ENOENT;
+ return -1;
+ }
+
/* The desired access below is the only one I could find that works
with NT4, W2KP and Samba */
- fnum = cli_nt_create(cli, filename, CREATE_ACCESS_READ);
+ fnum = cli_nt_create(targetcli, targetpath, CREATE_ACCESS_READ);
if (fnum == -1) {
DEBUG(5, ("cacl_set failed to open %s: %s\n",
- filename, cli_errstr(cli)));
+ targetpath, cli_errstr(targetcli)));
errno = 0;
return -1;
}
- old = cli_query_secdesc(cli, fnum, ctx);
+ old = cli_query_secdesc(targetcli, fnum, ctx);
if (!old) {
DEBUG(5, ("cacl_set Failed to query old descriptor\n"));
@@ -5197,7 +5218,7 @@ cacl_set(TALLOC_CTX *ctx,
return -1;
}
- cli_close(cli, fnum);
+ cli_close(targetcli, fnum);
switch (mode) {
case SMBC_XATTR_MODE_REMOVE_ALL:
@@ -5286,25 +5307,25 @@ cacl_set(TALLOC_CTX *ctx,
sd = make_sec_desc(ctx, old->revision, SEC_DESC_SELF_RELATIVE,
owner_sid, group_sid, NULL, dacl, &sd_size);
- fnum = cli_nt_create(cli, filename,
+ fnum = cli_nt_create(targetcli, targetpath,
WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS);
if (fnum == -1) {
DEBUG(5, ("cacl_set failed to open %s: %s\n",
- filename, cli_errstr(cli)));
+ targetpath, cli_errstr(targetcli)));
errno = 0;
return -1;
}
- if (!cli_set_secdesc(cli, fnum, sd)) {
- DEBUG(5, ("ERROR: secdesc set failed: %s\n", cli_errstr(cli)));
+ if (!cli_set_secdesc(targetcli, fnum, sd)) {
+ DEBUG(5, ("ERROR: secdesc set failed: %s\n", cli_errstr(targetcli)));
ret = -1;
}
/* Clean up */
failed:
- cli_close(cli, fnum);
+ cli_close(targetcli, fnum);
if (err != 0) {
errno = err;
--
Samba Shared Repository
More information about the samba-cvs
mailing list