diff options
author | Jeremy Allison <jra@samba.org> | 2004-11-12 23:42:12 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:53:16 -0500 |
commit | 1bd3f133442a472b4718b94a636f2fec89a2e0dc (patch) | |
tree | e68ce9375af898e9984f89b6a7d8dffb52a67d9a /source/libsmb/clifile.c | |
parent | 3906c1623fb3823612347a0533ad49d7dfbe1b99 (diff) | |
download | samba-1bd3f133442a472b4718b94a636f2fec89a2e0dc.tar.gz samba-1bd3f133442a472b4718b94a636f2fec89a2e0dc.tar.xz samba-1bd3f133442a472b4718b94a636f2fec89a2e0dc.zip |
r3713: Implementation of get posix acls in UNIX extensions. Passes valgrind.
Need to add printout functions in client and set posix acl in server.
SteveF - take a look at this for the cifsfs client !
Once this is working and tested the next step is to write this up for
the UNIX extensions spec. documents.
Jeremy.
Diffstat (limited to 'source/libsmb/clifile.c')
-rw-r--r-- | source/libsmb/clifile.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/source/libsmb/clifile.c b/source/libsmb/clifile.c index 144fc4a0c85..b616abd4d2d 100644 --- a/source/libsmb/clifile.c +++ b/source/libsmb/clifile.c @@ -168,6 +168,54 @@ static mode_t unix_filetype_from_wire(uint32 wire_type) } /**************************************************************************** + Do a POSIX getfacl (UNIX extensions). +****************************************************************************/ + +BOOL cli_unix_getfacl(struct cli_state *cli, const char *name, char **retbuf) +{ + unsigned int param_len = 0; + unsigned int data_len = 0; + uint16 setup = TRANSACT2_QPATHINFO; + char param[sizeof(pstring)+6]; + char *rparam=NULL, *rdata=NULL; + char *p; + + p = param; + memset(p, 0, 6); + SSVAL(p, 0, SMB_QUERY_POSIX_ACL); + p += 6; + p += clistr_push(cli, p, name, sizeof(pstring)-6, STR_TERMINATE); + param_len = PTR_DIFF(p, param); + + if (!cli_send_trans(cli, SMBtrans2, + NULL, /* name */ + -1, 0, /* fid, flags */ + &setup, 1, 0, /* setup, length, max */ + param, param_len, 2, /* param, length, max */ + NULL, 0, cli->max_xmit /* data, length, max */ + )) { + return False; + } + + if (!cli_receive_trans(cli, SMBtrans2, + &rparam, ¶m_len, + &rdata, &data_len)) { + return False; + } + + if (data_len < 6) { + SAFE_FREE(rdata); + SAFE_FREE(rparam); + return False; + } + + SAFE_FREE(rparam); + *retbuf = rdata; + + return True; +} + +/**************************************************************************** Stat a file (UNIX extensions). ****************************************************************************/ |