@@ -37,8 +37,12 @@ def negative_complement(big)
3737 end
3838 big
3939 end
40+
41+ def octal_mode ( mode )
42+ ( ( mode . respond_to? ( :oct ) ? mode . oct : mode . to_i ) & 007777 )
43+ end
4044
41- private :negative_complement
45+ private :negative_complement , :octal_mode
4246
4347 def load_current_resource
4448 @current_resource = Chef ::Resource ::File . new ( @new_resource . name )
@@ -47,7 +51,7 @@ def load_current_resource
4751 cstats = ::File . stat ( @current_resource . path )
4852 @current_resource . owner ( cstats . uid )
4953 @current_resource . group ( cstats . gid )
50- @current_resource . mode ( "%o" % ( cstats . mode & 007777 ) )
54+ @current_resource . mode ( octal_mode ( cstats . mode ) )
5155 @current_resource . checksum ( checksum ( @current_resource . path ) )
5256 end
5357 @current_resource
@@ -104,17 +108,17 @@ def set_group
104108 def compare_mode
105109 case @new_resource . mode
106110 when /^\d +$/ , Integer
107- real_mode = sprintf ( "%o" % ( @new_resource . mode & 007777 ) )
108- real_mode . to_i == @current_resource . mode . to_i
111+ octal_mode ( @new_resource . mode ) == octal_mode ( @current_resource . mode )
109112 else
110113 false
111114 end
112115 end
113116
114117 def set_mode
115118 unless compare_mode && @new_resource . mode != nil
116- Chef ::Log . info ( "Setting mode to #{ sprintf ( "%o" % ( @new_resource . mode & 007777 ) ) } for #{ @new_resource } " )
117- ::File . chmod ( @new_resource . mode . to_i , @new_resource . path )
119+ Chef ::Log . info ( "Setting mode to #{ sprintf ( "%o" % octal_mode ( @new_resource . mode ) ) } for #{ @new_resource } " )
120+ # CHEF-174, bad mojo around treating integers as octal. If a string is passed, we try to do the "right" thing
121+ ::File . chmod ( octal_mode ( @new_resource . mode ) , @new_resource . path )
118122 @new_resource . updated = true
119123 end
120124 end
@@ -125,9 +129,9 @@ def action_create
125129 ::File . open ( @new_resource . path , "w+" ) { |f | }
126130 @new_resource . updated = true
127131 end
128- set_owner if @new_resource . owner != nil
129- set_group if @new_resource . group != nil
130- set_mode if @new_resource . mode != nil
132+ set_owner unless @new_resource . owner . nil?
133+ set_group unless @new_resource . group . nil?
134+ set_mode unless @new_resource . mode . nil?
131135 end
132136
133137 def action_create_if_missing
0 commit comments