diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0d9a1618..0af54535 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -740,6 +740,7 @@ Steffen Barszus or Makefile.config as defaults for helping to debug a crash when using the --terminal option without having access to the given terminal + for fixing following symbolic links in RemoveFileOrDir() Peter Seyringer for reporting a bug in saving the polarization parameter of channels that have a diff --git a/HISTORY b/HISTORY index a4f700e3..8dc1738e 100644 --- a/HISTORY +++ b/HISTORY @@ -6484,3 +6484,5 @@ Video Disk Recorder Revision History 2010-10-24: Version 1.7.17 - Updated the Estonian OSD texts (thanks to Arthur Konovalov). +- Fixed following symbolic links in RemoveFileOrDir() (cont'd) (thanks to + Steffen Barszus). diff --git a/tools.c b/tools.c index 3ce12ec5..09053301 100644 --- a/tools.c +++ b/tools.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 2.8 2010/08/29 15:03:08 kls Exp $ + * $Id: tools.c 2.9 2010/10/24 11:32:27 kls Exp $ */ #include "tools.h" @@ -368,7 +368,7 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks) cString buffer = AddDirectory(FileName, e->d_name); if (FollowSymlinks) { struct stat st2; - if (stat(buffer, &st2) == 0) { + if (lstat(buffer, &st2) == 0) { if (S_ISLNK(st2.st_mode)) { int size = st2.st_size + 1; char *l = MALLOC(char, size); @@ -377,14 +377,12 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks) if (errno != EINVAL) LOG_ERROR_STR(*buffer); } - else if (n < size) { + else { l[n] = 0; dsyslog("removing %s", l); if (remove(l) < 0) LOG_ERROR_STR(l); } - else - esyslog("ERROR: symlink name length (%d) exceeded anticipated buffer size (%d)", n, size); free(l); } }