Mangling the IFS introduces a whole class of bugs into shell scripts that can and should be easily avoided...
In your case:
#wrong, even with IFS hacks...
for file in `ls /some/dir`; do ...
#right, bug free, no IFS hacks needed...
for file in /some/dir/*; do ...
Also note the quotation marks. At first glance in the following you may think that read is eating whitespace which is undesirable. But it's actually caused by the lack of quotes with the echo statement.
#naughty IFS hacks...
for line in `cat 'old_permissions'`; do
#not necessary ...
cat old_permissions | while read line
echo "$line" #note below
$ read line
$ echo $line
$ echo "$line"