xref: /plan9/sys/src/cmd/aquarela/smbcomdeletedir.c (revision 3e5d0078acdadead679c94c0daec143041c4b41e)
1 #include "headers.h"
2 
3 SmbProcessResult
smbcomdeletedirectory(SmbSession * s,SmbHeader * h,uchar *,SmbBuffer * b)4 smbcomdeletedirectory(SmbSession *s, SmbHeader *h, uchar *, SmbBuffer *b)
5 {
6 	int rv;
7 	char *path;
8 	char *fullpath = nil;
9 	SmbTree *t;
10 	uchar fmt;
11 
12 	if (h->wordcount != 0)
13 		return SmbProcessResultFormat;
14 	if (!smbbuffergetb(b, &fmt) || fmt != 0x04 || !smbbuffergetstring(b, h, SMB_STRING_PATH, &path))
15 		return SmbProcessResultFormat;
16 	smblogprint(h->command, "smbcomdeletedirectory: %s\n", path);
17 	t = smbidmapfind(s->tidmap, h->tid);
18 	if (t == nil) {
19 		smbseterror(s, ERRSRV, ERRinvtid);
20 		return SmbProcessResultError;
21 	}
22 	smbstringprint(&fullpath, "%s%s", t->serv->path, path);
23 	rv = remove(fullpath);
24 	if (rv < 0) {
25 		smblogprint(h->command, "smbcomdeletedirectory failed: %r\n");
26 		smbseterror(s, ERRDOS, ERRnoaccess);
27 		free(path);
28 		free(fullpath);
29 		return SmbProcessResultError;
30 	}
31 	free(path);
32 	free(fullpath);
33 	return smbbufferputack(s->response, h, &s->peerinfo);
34 }
35