On Wed, 2021-01-27 at 15:42 -0500, Andrew Dunstan wrote: > I'm not sure where we want to go with the present patch. Do we want to > go with what we have and document the limitations more, or try to do > something more elaborate? If so, exactly what?
After sleeping on it: I think that if you expect the 99% use case to be in the vein of what you originally proposed: dn /^C=US,ST=North.Carolina,O=test,OU=eng,CN=andrew$ andrew where the *entire* DN is pinned, there are no characters outside the ASCII subset, and no subgroup matching is required to find the mapped username (i.e. there's one line for every user of the system), then this approach would work. (I'd still recommend switching to use the RFC flag to OpenSSL, to ease future improvements.) There should be a bunch of warning documentation saying not to do anything more complex unless you're an expert, and that the exact regular expression needed may change depending on the TLS backend. If you want to add UTF-8 support to the above, so that things outside ASCII can be matched nicely, then the ASN1_STRFLGS_ESC_MSB flag should be removed from the _print_ex() call per OpenSSL documentation, and we should investigate how it plays with other non-UTF-8 database encodings. That seems like work but not a huge amount of it. But if you think users are going to try to match more complex regular expressions, for example to be able to peel out a portion of the DN to use as a mapped username, or match just a few specific RDNs for authorization, then I think a more elaborate approach is needed to avoid handing people a dangerous tool. Most of the DN-matching regex examples I've seen on self-help sites have been wrong, in that they match too much. Unfortunately I don't really know what that solution should look like. A DSL for filtering on RDNs would be a lot of work, but it could potentially allow LDAP to be mapped through pg_ident as well? --Jacob