X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=nfs3%2Fnfs3.c;h=aabac2888c674e15bdfc33b7eed44d0512e8a8f9;hb=0a6dbd76f58caad61a494a64e9bd421de61f6aa6;hp=1b8318120f463ae5f58292a1a556742b04ed84af;hpb=d0a45c81bf33bab1297bc4dfae9c25af6e1136c1;p=bluesky.git diff --git a/nfs3/nfs3.c b/nfs3/nfs3.c index 1b83181..aabac28 100644 --- a/nfs3/nfs3.c +++ b/nfs3/nfs3.c @@ -488,7 +488,31 @@ nfsproc3_remove_3_svc(diropargs3 *argp, struct svc_req *rqstp) { static wccstat3 result; - result.status = NFS3ERR_NOTSUPP; + result.wccstat3_u.wcc.before.present = FALSE; + result.wccstat3_u.wcc.after.present = FALSE; + + BlueSkyInode *dir = lookup_fh(&argp->dir); + if (dir == NULL) { + result.status = NFS3ERR_STALE; + return &result; + } + + encode_pre_wcc(&result.wccstat3_u.wcc, dir); + + if (!validate_filename(argp->name) + || strcmp(argp->name, ".") == 0 + || strcmp(argp->name, "..") == 0) + { + result.status = NFS3ERR_NOENT; + return &result; + } + + bluesky_directory_remove(dir, argp->name); + + result.status = NFS3_OK; + result.wccstat3_u.wcc.after.present = TRUE; + encode_fattr3(&result.wccstat3_u.wcc.after.post_op_attr_u.attributes, + dir); return &result; }