@@ -26,7 +26,7 @@ use uucore::error::{FromIo, UError, UResult, USimpleError, set_exit_code};
2626use uucore:: fsext:: { MetadataTimeField , metadata_get_time} ;
2727use uucore:: line_ending:: LineEnding ;
2828#[ cfg( all( unix, not( target_os = "redox" ) ) ) ]
29- use uucore:: safe_traversal:: DirFd ;
29+ use uucore:: safe_traversal:: { DirFd , SymlinkBehavior } ;
3030use uucore:: translate;
3131
3232use uucore:: parser:: parse_glob;
@@ -313,7 +313,7 @@ fn safe_du(
313313 let mut my_stat = if let Some ( parent_fd) = parent_fd {
314314 // We have a parent fd, this is a subdirectory - use openat
315315 let dir_name = path. file_name ( ) . unwrap_or ( path. as_os_str ( ) ) ;
316- match parent_fd. metadata_at ( dir_name, false ) {
316+ match parent_fd. metadata_at ( dir_name, SymlinkBehavior :: NoFollow ) {
317317 Ok ( safe_metadata) => {
318318 // Create Stat from safe metadata
319319 let file_info = safe_metadata. file_info ( ) ;
@@ -368,7 +368,7 @@ fn safe_du(
368368 Ok ( s) => s,
369369 Err ( _e) => {
370370 // Try using our new DirFd method for the root directory
371- match DirFd :: open ( path) {
371+ match DirFd :: open ( path, SymlinkBehavior :: Follow ) {
372372 Ok ( dir_fd) => match Stat :: new_from_dirfd ( & dir_fd, path) {
373373 Ok ( s) => s,
374374 Err ( e) => {
@@ -406,8 +406,11 @@ fn safe_du(
406406
407407 // Open the directory using DirFd
408408 let open_result = match parent_fd {
409- Some ( parent) => parent. open_subdir ( path. file_name ( ) . unwrap_or ( path. as_os_str ( ) ) ) ,
410- None => DirFd :: open ( path) ,
409+ Some ( parent) => parent. open_subdir (
410+ path. file_name ( ) . unwrap_or ( path. as_os_str ( ) ) ,
411+ SymlinkBehavior :: Follow ,
412+ ) ,
413+ None => DirFd :: open ( path, SymlinkBehavior :: Follow ) ,
411414 } ;
412415
413416 let dir_fd = match open_result {
@@ -435,7 +438,7 @@ fn safe_du(
435438 let entry_path = path. join ( & entry_name) ;
436439
437440 // First get the lstat (without following symlinks) to check if it's a symlink
438- let lstat = match dir_fd. stat_at ( & entry_name, false ) {
441+ let lstat = match dir_fd. stat_at ( & entry_name, SymlinkBehavior :: NoFollow ) {
439442 Ok ( stat) => stat,
440443 Err ( e) => {
441444 print_tx. send ( Err ( e. map_err_context (
0 commit comments