It looks like you'll have undefined references when you goto cleanup. In general you should free the memory when you are done with it rather than moving the frees to a cleanup.
Part of getting this code (or any important C/C++ code) correct requires testing and running in valgrind. Run both the unit tests and manual tests with valgrind, in particular looking at the failure cases and fixing all of the undefined memory references and unfreed memory.
Use stdbool.h instead of defining your own.
You have tabs instead of all spaces.
I think it would be clearer to replace the code that traverses the link with code that does:
foreach dir: goodir
The reinitialization code needs to delete old user logs that are no longer pointed to by a symlink. This is easier given the change above.
You should create a new method createLogDir in TaskController rather than testing the type in an if statement.
You need to update the unit tests to test the new functionality.