%s is all you need for setting up external ldap query.
Here is the filter that is actually used by Zimbra server
(&(|(cn=*%s*)(sn=*%s*)(gn=*%s*)(mail=*%s*)(zimbraM ailDeliveryAddress=*%s*)(zimbraMailAlias=*%s*)(zim braMailAddress=*%s*))(objectclass=zimbraAccount))
I have also tried the simple filter (|(cn=%s)(sn=%s)). It is working for me.
I have also hookup to an external public server
www.openldap.com with base dn dc=OpenLDAP,dc=org and filter (|(cn=*%s*)(sn=*%s*)). It works fine as well
However, setting up ldap gal hookup is always tricky. There are couples of things to watch out for.
1) LDAP search base, this has to fit your external ldap server layout since every installation is a bit different.
2) Bind DN/Password, some ldap installation does not allow anonymous GAL access.
One possible issue may be cn and sn are really set up differently. It is much safer to use (|(cn=*%s*)(sn=*%s*)) instead.