I just tested out sftp and noted that I cannot login automatically with my
public rsa key (ssh,scp work fine). Then I found out that it uses protocol
2.
However, I have "Protocol 1,2" in both
~/.ssh/config and /etc/ssh_config. I also tried -o "Protocol 1" but it
seems to ignore it.

This is an interaction between how the sftp and ssh clients parse their
command-line arguments, specifically the 'protocol', 'forwardagent', and
'forwardx11' options. You can see this if you add "-v -v" to the list of
options when starting sftp.
The 2.5.1p1-5 package (coming soon to Raw Hide) will add a patch to fix this.
As a workaround, you can specify "-1" in the list of options to force protocol
1.

with openssh,
xfree: NULL pointer given as argument
almost always signifies openssl version mismatch (usually 0.9.6 vs 0.9.5a) between compiled && installed versions.
Is your openssl good? You could try --rebuild openssh to make sure this is not the case.