X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=nfs%2Fnfsacl.c;h=e074dceaa7eac55531f0df50127ea2194cf27bd0;hb=HEAD;hp=e48db02fc7f601edf4371347c02026a6a1461cf1;hpb=fcc42bfe8501f9f4c5b69d19f5d196e5348c4c81;p=deb_libnfs.git diff --git a/nfs/nfsacl.c b/nfs/nfsacl.c index e48db02..e074dce 100644 --- a/nfs/nfsacl.c +++ b/nfs/nfsacl.c @@ -23,8 +23,7 @@ #include #include #include -#include -#include +#include "libnfs-zdr.h" #include "libnfs.h" #include "libnfs-raw.h" #include "libnfs-private.h" @@ -35,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; @@ -51,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; } @@ -80,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; +}