Cool. I will upload a patch for this. Thanks,
Mayuresh On Fri, May 27, 2016 at 12:35 AM, Harsha <ka...@harsha.io> wrote: > Mayuresh & Ismael, > Agree on not breaking interfaces on public API. > +1 on option 2. > Thanks, > Harsha > > On Mon, May 23, 2016, at 10:30 AM, Mayuresh Gharat wrote: > > Hi Harsha and Ismael, > > > > Option 2 sounds like a good idea if we want to make this quick fix I > > think. > > Option 4 might require a KIP as its public interface change. I can > > resubmit > > a patch for option 2 or create a KIP if necessary for option 4. > > > > From the previous conversation here, I think Ismael prefers option 2. > > I don't have a strong opinion here since I understand its not easy to > > make > > public API changes but IMO, would go with option 4. > > > > Harsha what do you think on this? > > > > > > Thanks, > > > > Mayuresh > > > > On Mon, May 23, 2016 at 5:45 AM, Ismael Juma <ism...@juma.me.uk> wrote: > > > > > Hi Mayuresh and Harsha, > > > > > > If we were doing this from scratch, I would prefer option 4 too. > However, > > > users have their own custom principal builders now and option 2 with a > > > suitably updated javadoc is the way to go in my opinion. > > > > > > Ismael > > > > > > On Sat, May 21, 2016 at 2:28 AM, Harsha <ka...@harsha.io> wrote: > > > > > > > Mayuresh, > > > > Thanks for the write up. With principal builder, > > > > the idea is to reuse a single principal builder > > > > across all the security protocols where its > > > > applicable and given that principal builder has > > > > access to transportLayer and authenticator it > > > > should be able to figure out what type of > > > > transportLayer it is and it should be able > > > > construct the principal based on that and it > should > > > > handle all the security protocols that we > support. > > > > In your options 1,2 & 4 seems to be doing the > same > > > > thing i.e checking what security protocol that a > > > > given transportLayer is and building a principal > , > > > > correct me if I am wrong here. I like going > with 4 > > > > as others stated on PR . As passing > > > > security_protocol makes it more specific to the > > > > method that its need to be handled . In the > interest > > > > of having less config I think option 4 seems to > be > > > > better even though it breaks the interface. > > > > > > > > Thanks, > > > > Harsha > > > > On Fri, May 20, 2016, at 05:00 PM, Mayuresh Gharat wrote: > > > > > Hi All, > > > > > > > > > > I came across an issue with plugging in a custom PrincipalBuilder > class > > > > > using the config "principal.builder.class" along with a custom > > > Authorizer > > > > > class using the config "authorizer.class.name". > > > > > > > > > > Consider the following scenario : > > > > > > > > > > For PlainText we don't supply any PrincipalBuilder. For SSL we > want to > > > > > supply a PrincipalBuilder using the property > "principal.builder.class". > > > > > > > > > > a) Now consider we have a broker running on these 2 ports and > supply > > > that > > > > > custom principalBuilder class using that config. > > > > > > > > > > b) The interbroker communication is using PlainText. I am using a > > > single > > > > > broker cluster for testing. > > > > > > > > > > c) Now we issue a produce request on the SSL port of the broker. > > > > > > > > > > d) The controller tries to build a channel for plaintext with this > > > broker > > > > > for the new topic instructions. > > > > > > > > > > e) PlainText tries to use the principal builder specified in the > > > > > "principal.builder.class" config which was meant only for SSL port > > > since > > > > > the code path is same > > > "ChannelBuilders.createPrincipalBuilder(configs)". > > > > > > > > > > f) In the custom principal Builder if we are trying to do some cert > > > > > checks > > > > > or down conversion of transportLayer to SSLTransportLayer so that > we > > > can > > > > > use its functionality we get error/exception at runtime. > > > > > > > > > > The basic idea is the PlainText channel should not be using the > > > > > PrincipalBuilder meant for other types of channels. > > > > > > > > > > Now there are few options/workarounds to avoid this : > > > > > > > > > > 1) Do instanceOf check in Authorizer.authorize() on TransportLayer > > > > > instance > > > > > passed in and do the correct handling. This is not intuitive and > > > imposes > > > > > a > > > > > strict coding rule on the programmer. > > > > > > > > > > 2) TransportLayer should expose an API for telling the security > > > protocol > > > > > type. This is not too intuitive either. > > > > > > > > > > 3) Add extra configs for Authorizer and PrincipalBuilder for each > > > channel > > > > > type. This gives us a flexibility for the PrincipalBuilder and > > > Authorizer > > > > > handle requests on different types of ports in a different way. > > > > > > > > > > 4) PrincipalBuilder.buildPrincipal() should take in extra > parameter for > > > > > the > > > > > type of protocol and we should document this in javadoc to use it > to > > > > > handle > > > > > the type of request. This is little better than 1) and 2) but again > > > > > imposes > > > > > a strict coding rule on the programmer. > > > > > > > > > > Just wanted to know what the community thinks about this and get > any > > > > > suggestions/feedback . There's some discussion about this here : > > > > > https://github.com/apache/kafka/pull/1403 > > > > > > > > > > Thanks, > > > > > > > > > > Mayuresh > > > > > > > > > > > > > > > -- > > -Regards, > > Mayuresh R. Gharat > > (862) 250-7125 > -- -Regards, Mayuresh R. Gharat (862) 250-7125