depth--;
}
-static void unlink_recursive(const gchar *pathname)
+static void unlink_recursive_suidsafe(const gchar *pathname)
{
DIR *dir;
struct dirent *dirent;
static gint depth=0;
if (++depth>=1000)
- fatal("Loop count >=%d during unlink_recursive(\"%s\")",depth,pathname);
+ fatal("Loop count >=%d during unlink_recursive_suidsafe(\"%s\")",depth,pathname);
if (!(dir=opendir(pathname))) {
if (errno!=ENOTDIR)
if (!strcmp(dirent->d_name,".") || !strcmp(dirent->d_name,".."))
continue;
dirent_path=g_strdup_printf("%s/%s",pathname,dirent->d_name);
- unlink_recursive(dirent_path);
+ unlink_recursive_suidsafe(dirent_path);
g_free(dirent_path);
}
if (errno)
if (mkdir(dir,0711)) {
if (errno!=EEXIST)
fatal("Failed to create chroot directory \"%s\": %m",dir);
- unlink_recursive(dir);
+ unlink_recursive_suidsafe(dir);
if (mkdir(dir,0711))
fatal("Failed to create chroot directory \"%s\" after attempted unlink: %m",dir);
}