Dieter Bocklandt wrote:
> Hey Quanah,
> 
> Thanks for getting back to me!
> 
> So as I understood it, I expected the proxied identity to be the identity 
> that the client successfully authorized as instead of the identity it 
> initially
> started with. The session tracking request is just there to confirm that 
> piece of information is actually present but not used. That initial identity 
> is also
> used for ACL evaluation on the producer side, leading to insufficient access 
> (as expected).
> 
> To give a maybe more clear example, assume the following users (stripped down 
> to just the relevant attributes in play):
> 
> /dn: cn=proxy,ou=System,dc=example,dc=net
> authzTo: dn:*/
> /
> /
> /dn: cn=service,ou=System,dc=example,dc=net /
> /authzTo: dn:uid=user,ou=People,dc=example,dc=net /
> /
> /
> /dn: uid=dieter,ou=People,dc=example,dc=net /
> /
> /
> /and the following idassert config:/
> /olcDbIDAssertBind: mode=self flags=override,prescriptive tls_reqcert=never 
> bindmethod=sasl saslmech=plain authcID=proxy credentials=XXXXX  /
> 
> When I perform an operation like this:
> ldapmodify -H ldaps://ldapserver -Y PLAIN -U service -X 
> dn:uid=dieter,ou=People,dc=example,dc=net -w servicepassword -f 
> modifications.ldif
> 
> I would assume the following takes place:
> - The service user binds to the consumer and assumes dieter's identity, which 
> should be the same net effect as binding with dieter's user in the first 
> place.
> - The proxy user binds to the provider and assumes dieter's identity
> - The provider tries to perform the write, using dieter's identity for ACL 
> evaluation
> 
> What actually happens:
> - The service user binds to the consumer and assumes dieter's identity
> - The proxy user binds to the provider and assumes the service user's identity
> - The provider tries to perform the write, using the service user's  identity 
> for ACL evaluation
> 
> Actually, I spent some more time on this today and I /think/ I might know 
> what's happening here:

Your analysis makes sense. Would have to ask Pierangelo why he wrote it the way 
he
did but it seems that it should use op->o_ndn.
> 
> (from servers/slapd/back-ldap/bind.c in master):
> 
> line 2222 - 2227:
> 
> /if ( !BER_BVISNULL( &op->o_conn->c_ndn ) ) {
> ndn = op->o_conn->c_ndn;
> 
> } else {
> ndn = op->o_ndn;
> }/
> 
> line 2549 - 2557:
> 
> /if ( op->o_tag == LDAP_REQ_BIND ) {
> ndn = op->o_req_ndn;
> 
> } else if ( !BER_BVISNULL( &op->o_conn->c_ndn ) ) {
> ndn = op->o_conn->c_ndn;
> 
> } else {
> ndn = op->o_ndn;
> }/
> 
> It seems it tries to use op->o_conn->c_ndn if it's not null, which is 
> (correct me if I'm wrong) the original authcID. That value however doesn't 
> change when
> performing a proxy authorization, while op->o_ndn does properly reflect that. 
> Shouldn't OpenLDAP always use op->o_ndn? 
> 
> Again, let me know if I can provide more information or tell me if I'm 
> grossly misunderstanding how this is all supposed to work in the first place 
> :) 
> 
> Thanks!
> // Dieter
> 
> On Wed, 4 Mar 2020 at 23:12, Quanah Gibson-Mount <[email protected] 
> <mailto:[email protected]>> wrote:
> 
> 
> 
>     --On Friday, February 28, 2020 11:11 PM +0100 Dieter Bocklandt
>     <[email protected] <mailto:[email protected]>> wrote:
> 
>     > However, we also have a service using SASL proxy authorization, in which
>     > case the authcid is used in the ProxyAuthz instead of the authorized
>     > authzid.
>     >
>     > Feb 28 22:02:38 ldap-master-az2 slapd[1915]: conn=26858 op=2 PROXYAUTHZ
>     > dn="cn=service,ou=system,dc=internal,dc=machines"
>     > Feb 28 22:02:38 ldap-master-az2 slapd[1915]: conn=26858 op=2
>     > [IP=10.243.72.199 USERNAME=cn=enduser,ou=People,dc=example,dc=net] MOD
>     > dn="uid=sys.cp.test,ou=People,dc=internal,dc=machines"
>     >
>     > Am I misunderstanding how this is supposed to work, am I hitting a
>     > certain limitation or maybe a bug? Let me know if you need any more
>     > details!
> 
>     This looks to me like it:
> 
>     a) Logs what the proxied identity is (PROXYAUTHZ
>     dn="cn=service,ou=system,dc=internal,dc=machine")
> 
>     b) Logs what the actual identity making the changes is
>     (USERNAME=cn=enduser,ou=People,dc=example,dc=net) and what IP address it
>     came from (IP=10.243.72.199) so that if questions arise about who made a
>     change, those questions can be answered from the logs.
> 
>     I.e., I see both bits of information provided in the connection operation.
> 
>     What makes you think you are hitting a limitation or a bug?
> 
>     Regards,
>     Quanah
> 
> 
>     --
> 
>     Quanah Gibson-Mount
>     Product Architect
>     Symas Corporation
>     Packaged, certified, and supported LDAP solutions powered by OpenLDAP:
>     <http://www.symas.com>
> 


-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/

Reply via email to