smbcomcreatedir.c 800 B

12345678910111213141516171819202122232425262728
  1. #include "headers.h"
  2. SmbProcessResult
  3. smbcomcreatedirectory(SmbSession *s, SmbHeader *h, uchar *, SmbBuffer *b)
  4. {
  5. int fd;
  6. char *path;
  7. char *fullpath = nil;
  8. uchar fmt;
  9. if (h->wordcount != 0)
  10. return SmbProcessResultFormat;
  11. if (!smbbuffergetb(b, &fmt) || fmt != 0x04 || !smbbuffergetstring(b, h, SMB_STRING_PATH, &path))
  12. return SmbProcessResultFormat;
  13. smblogprint(h->command, "smbcomcreatedirectory: %s\n", path);
  14. smbstringprint(&fullpath, "%s%s", s->serv->path, path);
  15. fd = create(fullpath, OREAD, DMDIR | 0775);
  16. if (fd < 0) {
  17. smblogprint(h->command, "smbcomcreatedirectory failed: %r\n");
  18. smbseterror(s, ERRDOS, ERRnoaccess);
  19. free(path);
  20. return SmbProcessResultError;
  21. }
  22. close(fd);
  23. free(fullpath);
  24. free(path);
  25. return smbbufferputack(s->response, h, &s->peerinfo);
  26. }