NFSACL: Add support for SETACL3
[deb_libnfs.git] / lib / libnfs.c
index 3c150ac8e14b4d006779fe402124d14677c98f01..86ff7c22d8e33a0d1c50a5e2ad057983fb3ec791 100644 (file)
@@ -2420,7 +2420,12 @@ static void nfs_readlink_1_cb(struct rpc_context *rpc _U_, int status, void *com
 
 static int nfs_readlink_continue_internal(struct nfs_context *nfs, struct nfs_cb_data *data)
 {
-       if (rpc_nfs_readlink_async(nfs->rpc, nfs_readlink_1_cb, &data->fh, data) != 0) {
+       READLINK3args args;
+
+       args.symlink.data.data_len = data->fh.data.data_len; 
+       args.symlink.data.data_val = data->fh.data.data_val; 
+
+       if (rpc_nfs_readlink_async(nfs->rpc, nfs_readlink_1_cb, &args, data) != 0) {
                rpc_set_error(nfs->rpc, "RPC error: Failed to send READLINK call for %s", data->path);
                data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
                free_nfs_cb_data(data);
@@ -2941,8 +2946,17 @@ static void nfs_symlink_cb(struct rpc_context *rpc _U_, int status, void *comman
 static int nfs_symlink_continue_internal(struct nfs_context *nfs, struct nfs_cb_data *data)
 {
        struct nfs_symlink_data *symlink_data = data->continue_data;
+       SYMLINK3args sa;
+
+       memset(&sa, 0, sizeof(SYMLINK3args));
+       sa.where.dir.data.data_len = data->fh.data.data_len;
+       sa.where.dir.data.data_val = data->fh.data.data_val;
+       sa.where.name = symlink_data->newpathobject;
+       sa.symlink.symlink_attributes.mode.set_it = 1;
+       sa.symlink.symlink_attributes.mode.set_mode3_u.mode = S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH;
+       sa.symlink.symlink_data = symlink_data->oldpath;
 
-       if (rpc_nfs_symlink_async(nfs->rpc, nfs_symlink_cb, &data->fh, symlink_data->newpathobject, symlink_data->oldpath, data) != 0) {
+       if (rpc_nfs_symlink_async(nfs->rpc, nfs_symlink_cb, &sa, data) != 0) {
                rpc_set_error(nfs->rpc, "RPC error: Failed to send SYMLINK call for %s", data->path);
                data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
                free_nfs_cb_data(data);
@@ -3533,3 +3547,7 @@ const char *nfs_get_export(struct nfs_context *nfs) {
 const struct nfs_fh3 *nfs_get_rootfh(struct nfs_context *nfs) {
       return &nfs->rootfh;
 }
+
+struct nfs_fh3 *nfs_get_fh(struct nfsfh *nfsfh) {
+       return &nfsfh->fh;
+}