X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=nfs%2Fnfsacl.c;h=e074dceaa7eac55531f0df50127ea2194cf27bd0;hb=HEAD;hp=ba1ca12376fc0656b28df3166113fcbb74df5114;hpb=a8a1b85846aab042cd410bf59caf617a0951380e;p=deb_libnfs.git diff --git a/nfs/nfsacl.c b/nfs/nfsacl.c index ba1ca12..e074dce 100644 --- a/nfs/nfsacl.c +++ b/nfs/nfsacl.c @@ -20,15 +20,10 @@ #include #endif/*WIN32*/ -#if defined(WIN32) -#include -#endif - #include #include #include -#include -#include +#include "libnfs-zdr.h" #include "libnfs.h" #include "libnfs-raw.h" #include "libnfs-private.h" @@ -39,7 +34,7 @@ int rpc_nfsacl_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data { struct rpc_pdu *pdu; - pdu = rpc_allocate_pdu(rpc, NFSACL_PROGRAM, NFSACL_V3, NFSACL3_NULL, cb, private_data, (xdrproc_t)xdr_void, 0); + pdu = rpc_allocate_pdu(rpc, NFSACL_PROGRAM, NFSACL_V3, NFSACL3_NULL, cb, private_data, (zdrproc_t)zdr_void, 0); if (pdu == NULL) { rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfsacl/null call"); return -1; @@ -55,23 +50,18 @@ int rpc_nfsacl_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data } -int rpc_nfsacl_getacl_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 *fh, uint32_t mask, void *private_data) +int rpc_nfsacl_getacl_async(struct rpc_context *rpc, rpc_cb cb, struct GETACL3args *args, void *private_data) { struct rpc_pdu *pdu; - GETACL3args args; - pdu = rpc_allocate_pdu(rpc, NFSACL_PROGRAM, NFSACL_V3, NFSACL3_GETACL, cb, private_data, (xdrproc_t)xdr_GETACL3res, sizeof(GETACL3res)); + pdu = rpc_allocate_pdu(rpc, NFSACL_PROGRAM, NFSACL_V3, NFSACL3_GETACL, cb, private_data, (zdrproc_t)zdr_GETACL3res, sizeof(GETACL3res)); if (pdu == NULL) { rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfsacl/getacl call"); return -1; } - args.dir.data.data_len = fh->data.data_len; - args.dir.data.data_val = fh->data.data_val; - args.mask = mask; - - if (xdr_GETACL3args(&pdu->xdr, &args) == 0) { - rpc_set_error(rpc, "XDR error: Failed to encode GETACL3args"); + if (zdr_GETACL3args(&pdu->zdr, args) == 0) { + rpc_set_error(rpc, "ZDR error: Failed to encode GETACL3args"); rpc_free_pdu(rpc, pdu); return -2; } @@ -84,3 +74,28 @@ int rpc_nfsacl_getacl_async(struct rpc_context *rpc, rpc_cb cb, struct nfs_fh3 * return 0; } + +int rpc_nfsacl_setacl_async(struct rpc_context *rpc, rpc_cb cb, struct SETACL3args *args, void *private_data) +{ + struct rpc_pdu *pdu; + + pdu = rpc_allocate_pdu(rpc, NFSACL_PROGRAM, NFSACL_V3, NFSACL3_SETACL, cb, private_data, (zdrproc_t)zdr_SETACL3res, sizeof(SETACL3res)); + if (pdu == NULL) { + rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for nfsacl/setacl call"); + return -1; + } + + if (zdr_SETACL3args(&pdu->zdr, args) == 0) { + rpc_set_error(rpc, "ZDR error: Failed to encode SETACL3args"); + rpc_free_pdu(rpc, pdu); + return -2; + } + + if (rpc_queue_pdu(rpc, pdu) != 0) { + rpc_set_error(rpc, "Out of memory. Failed to queue pdu for nfsacl/setacl call"); + rpc_free_pdu(rpc, pdu); + return -2; + } + + return 0; +}