From cf97980f3129b9a3eb7bdf3ae95f4fd99a597259 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 3 Apr 2005 21:37:13 +0000 Subject: r6187: 1. Make sure that we don't try to delete . and .. in a more portable way. 2. Also, don't try to delete directories. I am not entirely happy with this patch, and the fact that there is a define for HAVE_SYS_STAT_H suggests that there are some systems for which stat will not be defined, which means that the patch is not entirely portable. (This used to be commit fe7ddad7d44a49b2efe81cb3d0a5b2d09d1892ab) --- source4/smbd/server.c | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'source4/smbd') diff --git a/source4/smbd/server.c b/source4/smbd/server.c index c5dee5f7ad..1357541cea 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -55,17 +55,41 @@ static void cleanup_tmp_files(void) } for (de=readdir(dir);de;de=readdir(dir)) { - char *fname = talloc_asprintf(mem_ctx, "%s/%s", path, de->d_name); - int ret = unlink(fname); - if (ret == -1 && - errno != ENOENT && - errno != EISDIR && - errno != EISDIR) { - DEBUG(0,("Unabled to delete '%s' - %s\n", - fname, strerror(errno))); - smb_panic("unable to cleanup tmp files"); + /* + * Don't try to delete . and .. + */ + if (strcmp(de->d_name, ".") != 0 && + strcmp(de->d_name, "..")) { + char *fname = talloc_asprintf(mem_ctx, "%s/%s", path, de->d_name); + int ret = unlink(fname); + if (ret == -1 && + errno != ENOENT && + errno != EPERM && + errno != EISDIR) { + DEBUG(0,("Unabled to delete '%s' - %s\n", + fname, strerror(errno))); + smb_panic("unable to cleanup tmp files"); + } + if (ret == -1 && + errno == EPERM) { + /* + * If it is a dir, don't complain + * NOTE! The test will only happen if we have + * sys/stat.h, otherwise we will always error out + */ +#ifdef HAVE_SYS_STAT_H + struct stat sb; + if (stat(fname, &sb) != -1 && + !S_ISDIR(sb.st_mode)) +#endif + { + DEBUG(0,("Unable to delete '%s' - %s\n", + fname, strerror(errno))); + smb_panic("unable to cleanup tmp files"); + } + } + talloc_free(fname); } - talloc_free(fname); } closedir(dir); -- cgit