xref: /plan9/sys/src/cmd/aquarela/smbcomdeletedir.c (revision 3e5d0078acdadead679c94c0daec143041c4b41e)
18ccd4a63SDavid du Colombier #include "headers.h"
28ccd4a63SDavid du Colombier 
38ccd4a63SDavid du Colombier SmbProcessResult
smbcomdeletedirectory(SmbSession * s,SmbHeader * h,uchar *,SmbBuffer * b)48ccd4a63SDavid du Colombier smbcomdeletedirectory(SmbSession *s, SmbHeader *h, uchar *, SmbBuffer *b)
58ccd4a63SDavid du Colombier {
68ccd4a63SDavid du Colombier 	int rv;
78ccd4a63SDavid du Colombier 	char *path;
89b004bddSDavid du Colombier 	char *fullpath = nil;
9*3e5d0078SDavid du Colombier 	SmbTree *t;
108ccd4a63SDavid du Colombier 	uchar fmt;
118ccd4a63SDavid du Colombier 
128ccd4a63SDavid du Colombier 	if (h->wordcount != 0)
138ccd4a63SDavid du Colombier 		return SmbProcessResultFormat;
148ccd4a63SDavid du Colombier 	if (!smbbuffergetb(b, &fmt) || fmt != 0x04 || !smbbuffergetstring(b, h, SMB_STRING_PATH, &path))
158ccd4a63SDavid du Colombier 		return SmbProcessResultFormat;
168ccd4a63SDavid du Colombier 	smblogprint(h->command, "smbcomdeletedirectory: %s\n", path);
17*3e5d0078SDavid du Colombier 	t = smbidmapfind(s->tidmap, h->tid);
18*3e5d0078SDavid du Colombier 	if (t == nil) {
19*3e5d0078SDavid du Colombier 		smbseterror(s, ERRSRV, ERRinvtid);
20*3e5d0078SDavid du Colombier 		return SmbProcessResultError;
21*3e5d0078SDavid du Colombier 	}
22*3e5d0078SDavid du Colombier 	smbstringprint(&fullpath, "%s%s", t->serv->path, path);
239b004bddSDavid du Colombier 	rv = remove(fullpath);
248ccd4a63SDavid du Colombier 	if (rv < 0) {
258ccd4a63SDavid du Colombier 		smblogprint(h->command, "smbcomdeletedirectory failed: %r\n");
268ccd4a63SDavid du Colombier 		smbseterror(s, ERRDOS, ERRnoaccess);
278ccd4a63SDavid du Colombier 		free(path);
289b004bddSDavid du Colombier 		free(fullpath);
298ccd4a63SDavid du Colombier 		return SmbProcessResultError;
308ccd4a63SDavid du Colombier 	}
318ccd4a63SDavid du Colombier 	free(path);
329b004bddSDavid du Colombier 	free(fullpath);
338ccd4a63SDavid du Colombier 	return smbbufferputack(s->response, h, &s->peerinfo);
348ccd4a63SDavid du Colombier }
35