I've ran into several 10.4 machines here recently (intel only) that have the "looping network prefs" where it just keeps saying your settings have been changed and won't let you in. It's caused by an old school uuencoded password for PPP being in the network settings file, and a security update trying to upgrade the passwords and making the prefs panel flip out and not save the change, tossing it into a loop.
Recently though my previous fix wasn't working reliably, and the apparent cause of the problem, the security update, wasn't always on the machine, so I made some changes to my script. Here's the new fixer. AFAIK, nobody else knows how to fix this issue but our group, google for it
I also added the feature to display the passwords (in plaintext) that will be removed, provided they're not too long.
#!/bin/bash
# banner
clear
echo "Running $0"
echo
echo "This program will clear non-hashed password from your network settings"
echo "to fix access to the Network system preferences panel."
echo
# must run as root
if ! [ $EUID == 0 ] ; then
echo
echo -n "This script requires your (non-blank) administrator "
sudo -k
sudo -v
if [ $? != 0 ] ; then
echo "(cancelled)"
exit
fi
sudo "$0"
exit
else
echo "Administrator access verified."
fi
# verify 10.4
vers=$(cat /System/Library/CoreServices/SystemVersion.plist | grep -A 1 "ProductUserVisibleVersion" | tail -n 1 | cut -d ">" -f 2 | cut -d "<" -f 1)
vers=${vers%.*}
if [ "$vers" != "10.4" ] ; then
echo "This script only works on mac os 10.4 (intel)"
read -n 1 -p "Press RETURN to proceed anyway... " x
if [ -n "$x" ] ; then
echo "(cancelled)"
exit
fi
else
echo "Mac OS 10.4 verified."
fi
# verify plist
plist="/Library/Preferences/SystemConfiguration/preferences"
old="${plist}_old"
new="${plist}_new"
plist="${plist}.plist"
new="${new}.plist"
if ! [ -f "$plist" ] ; then
echo "Cannot find plist \"$plist\""
echo
exit
else
echo "Plist \"$plist\" verified."
fi
# modify plist - remove all "DATA" type passwords (passwords stored in the plist, not in the keychain)
echo -n "Removing non-hashed passwords from network preferences... "
# display found passwords
cat "$plist" | tr '\n' '\r' | grep -o '<key>AuthPassword<\/key>[^<]*<data>[^<]*<[^<]*' | tr '\r' '\n' | grep -A 1 "<data>" | grep -v "<data>" | grep -v "-" | while read n ; do echo -n "Will remove password: \"" ; echo "$n" | openssl base64 -d ; echo "\"" ; done
echo
cat "$plist" | tr '\n' '\r' | sed 's/<key>AuthPassword<\/key>[^<]*<data>[^<]*<[^<]*//g' | sed 's/.$//g' | tr '\r' '\n' > "$new"
echo "done."
# verify lines removed
v1=$(($(cat "$plist" | wc -l)))
v2=$(($(cat "$new" | wc -l)))
((v3=v1-v2))
echo
echo "Netowrk plist changes from $v1 to $v2 lines ($v3 lines removed)"
echo "(normally four lines will be removed for each occurrence)"
read -n 1 -p "Press RETURN to replace... " x
if [ -n "$x" ] ; then
echo "(cancelled)"
exit
fi
echo -n "Replacing... "
if [ -f "$old" ] ; then
rm "$old"
fi
mv "$plist" "$old"
mv "$new" "$plist"
echo "done."
echo
echo "Now you should be able to open the Network system preference."
echo
echo