Check files symlink support#398
Open
inqrphl wants to merge 15 commits into
Open
Conversation
added 2 commits
June 30, 2026 10:09
add new argument followSymlinks and new attribute is_symlink add a new file walker, it can resolve file links, and keeps track of visited directories to prevent infinite recursion
Add default value to the followSymlinks argument definition Change is_symlink behavior: it is only toggled on if the file/directory itself is a symlink change the unit of is_symlink to UBool, its filters can now parse bool values
Contributor
|
symbolic links for linux and windows work, but junctions are not recognized yet |
…the resolved paths for tracking visited files/directories. add a new test function for check_files, windows specific for now. uses script to generate symlinks, hardlinks and junctions
… detect hard links and skip over them add bash script to generate filesystem links, and write linux/darwin test for them
… detection is toggleable this argument is off by default. it is mean to prevent some problems when follow symlinks is true. searched path might have two links pointing to the same file, or a case with infinite recursion. with the argument, these files are not added again if the follow-symlinks is true, and add-files-only-once is false, adjust the max-depth := max(max-depth, 50) . this prevents infinite recursion, but allows limited recursion which might be needed. write a test for this case, windows only for now - checks if the infinite recursion is happenning according to add-files-only-once being true or false
in the default invocation, follow-symlinks is true, add-files-only-once is false, and max-depth is -1 . due to first two, max-depth was being set adjusted to prevent infinite loops, without checking if it was manually specified to another value max-depth now check if max-depth != -1 as well, meaning it was left default. only then we adjust it also define the default value of max-depth into a variable, makes the code more understandable
sni
reviewed
Jul 10, 2026
…link. fix the docs
sni
reviewed
Jul 10, 2026
sni
reviewed
Jul 10, 2026
Contributor
|
looks good besides the thing with the default recursion. |
… recursion default max-depth is now '-2' , and the max-depth enables unchecked recursion is -1 use it to check if max-depth is set or not. if its not set, follow symlinks is enabled, and files are not added only once, set the max depth to CheckFilesFollowSymlinkMaxDepth
CheckFilesDefaultMaxDepth is the default value for max-depth CheckFilesMaxDepthUnlimited means max-depth is unlimited i.e depth is unhecked. both constants are -1, meaning by default max-depth checks are off. But the code uses the correct constant depending on the context. need to clamp max depth if -> symlinks are followed , files can be added multiple times, and max-depth is unspecified. check if max-depth is unspecified using hasArgsSupplied function.
these were only added to windows before. the script is adjusted from pkg/snclient/t/scripts/check_files_filesystem_links_2.ps1 using ai to convert it from powershell to bash the tests see if the files are accessible over multiple links including recursive links add test for max-depth adjustment for infinite recursion. if symlinks are followed, files are not added only once, and max-depth is unspecified, it is clamped with a ceiling value to prevent unlimited recursion
differences between gnu and freebsd find
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
default golang filepath.Walk did not traverse into the recursive directories. need to check if a filesystem item is a link using fs.readLink
add a new file walker, it can resolve file links, and keeps track of visited files, directories and inodes
this prevents infinite recursion and adding the same file twice due to hard links
add new argument followSymlinks and new attribute is_symlink.
This attribute is toggled on for symlinks and junctions under windows.
On windows, file walker sees hardlinks like another files, but cannot determine if they are hardlinks or not. So they are added without setting is_symlink on.
On windows, it can detect junctions by checking if FILE_ATTRIBUTE_REPARSE_POINT bit is set in the Win32 file attribute struct. This is on for symlinks and junctions.
On linux, it can detect hardlinks by checking visited inodes array. They are not added on linux.
added a new argument to the check called follow-symlinks, it is true by default.
added a new argument to check called add-files-only-once, this can be used to ensure that each file, determined by its absolute path, is added once. useful for the cases where there might be a recursion under the check path due to symlinks. it is false by default
if arguments are not specified, follow symlinks is on , add files only once is off , and max-depth is unlimited. this can lead to infinite recursion. If max-depth is not specifically set, follow symlinks is on, and add files only once is off, clamp the max-depth to a ceiling value, defaulted to 50
added a powershell/bash script to dynamically generate some files / links and check related functionality during testing.