A simple configuration with Oracle Connection Manager (CMAN) did not work, I constantly received ORA-12529 when trying to connect with sqlplus to a database through CMAN. After checking cman.ora over and over and browsing all the trace files I finaly dived into one and found a problem with host name resolving. Turned out that the host name defined in /etc/hosts on the database server was not known outside the server. The database, I assume, did a lookup on the ip number in local /etc/hosts and sent the host name to CMAN when registering. The fact that I had used ip-numbers in the local listener.ora and tnsnames.ora did not change that behavior. A properly DNS would have saved me this, the solution was to define the database server name in local host file on server where CMAN is running.
This means that receiving ORA-12529 does not necessarily mean that there is something wrong with your rules. 12529 seems to be a kind of ‘catch all error’ when rule filtering fails. Look for nprffilter: entry in the trace file and start reading from there. I found this:
snlinGetAddrInfo: entry snlinGetAddrInfo: Invalid IP address string FOO snlinFreeAddrInfo: entry snlinFreeAddrInfo: exit snlinGetAddrInfo: exit snlinGetAddrInfo: entry snlinGetAddrInfo: Name resolution failed for FOO snlinFreeAddrInfo: entry snlinFreeAddrInfo: exit snlinGetAddrInfo: exit nprffilter: Unable to resolve to IP nprffilter: exit nsglbfok: no rule match or an error from nprffilter nsglbfok: exit
(Real hostname replaced and timestamps removed). Looking for 12529 or whatever code you receive in the trace-file and start reading backwards is also an option.