You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Dongjin Lee (Jira)" <ji...@apache.org> on 2021/10/24 08:44:00 UTC

[jira] [Assigned] (KAFKA-13352) Kafka Client does not support passwords starting with number in jaas config

     [ https://issues.apache.org/jira/browse/KAFKA-13352?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dongjin Lee reassigned KAFKA-13352:
-----------------------------------

    Assignee: Dongjin Lee

> Kafka Client does not support passwords starting with number in jaas config
> ---------------------------------------------------------------------------
>
>                 Key: KAFKA-13352
>                 URL: https://issues.apache.org/jira/browse/KAFKA-13352
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients
>    Affects Versions: 2.7.1
>            Reporter: Vyacheslav Boyko
>            Assignee: Dongjin Lee
>            Priority: Trivial
>
> I'm trying to connect to Kafka with Apache Camel's component.
> I have SASL JAAS CONFIG param as:
> {code:java}
> "org.apache.kafka.common.security.plain.PlainLoginModule required username=pf_kafka_card-products password=8GMf0yWkLHrI4cNYYoyHGxclkXCLSCGJ;" {code}
> And I faced an issue during my application starts:
> {code:java}
> Caused by: java.lang.IllegalArgumentException: Value not specified for key 'password' in JAAS config {code}
> I have tried to inspect this issue. I prepared a block of code to reproduce it (Original code is in JaasConfig.java in kafka-clients-...jar). Here it is:
> {code:java}
> public static void main(String[] args) {
>     String test = "org.apache.kafka.common.security.plain.PlainLoginModule required username=pf_kafka_card-products password=8GMf0yWkLHrI4cNYYoyHGxclkXCLSCGJ;";
>     testJaasConfig(test);
>     //SpringApplication.run(CardApplication.class, args);
> }
> private static void testJaasConfig(String config) {
>     StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(config));
>     tokenizer.slashSlashComments(true);
>     tokenizer.slashStarComments(true);
>     tokenizer.wordChars('-', '-');
>     tokenizer.wordChars('_', '_');
>     tokenizer.wordChars('$', '$');
>     tokenizer.wordChars('0', '9');
>     List<AppConfigurationEntry> configEntries;
>     try {
>         configEntries = new ArrayList<>();
>         while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
>             configEntries.add(parseAppConfigurationEntry(tokenizer));
>         }
>         if (configEntries.isEmpty())
>             throw new IllegalArgumentException("Login module not specified in JAAS config");
>     } catch (IOException e) {
>         throw new KafkaException("Unexpected exception while parsing JAAS config");
>     }
> }
> private static AppConfigurationEntry parseAppConfigurationEntry(StreamTokenizer tokenizer) throws IOException {
>     String loginModule = tokenizer.sval;
>     if (tokenizer.nextToken() == StreamTokenizer.TT_EOF)
>         throw new IllegalArgumentException("Login module control flag not specified in JAAS config");
>     AppConfigurationEntry.LoginModuleControlFlag controlFlag = loginModuleControlFlag(tokenizer.sval);
>     Map<String, String> options = new HashMap<>();
>     while (tokenizer.nextToken() != StreamTokenizer.TT_EOF && tokenizer.ttype != ';') {
>         String key = tokenizer.sval;
>         if (tokenizer.nextToken() != '=' || tokenizer.nextToken() == StreamTokenizer.TT_EOF || tokenizer.sval == null)
>             throw new IllegalArgumentException("Value not specified for key '" + key + "' in JAAS config");
>         String value = tokenizer.sval;
>         options.put(key, value);
>     }
>     if (tokenizer.ttype != ';')
>         throw new IllegalArgumentException("JAAS config entry not terminated by semi-colon");
>     return new AppConfigurationEntry(loginModule, controlFlag, options);
> }
> private static AppConfigurationEntry.LoginModuleControlFlag loginModuleControlFlag(String flag) {
>     if (flag == null)
>         throw new IllegalArgumentException("Login module control flag is not available in the JAAS config");
>     AppConfigurationEntry.LoginModuleControlFlag controlFlag;
>     switch (flag.toUpperCase(Locale.ROOT)) {
>         case "REQUIRED":
>             controlFlag = AppConfigurationEntry.LoginModuleControlFlag.REQUIRED;
>             break;
>         case "REQUISITE":
>             controlFlag = AppConfigurationEntry.LoginModuleControlFlag.REQUISITE;
>             break;
>         case "SUFFICIENT":
>             controlFlag = AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT;
>             break;
>         case "OPTIONAL":
>             controlFlag = AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL;
>             break;
>         default:
>             throw new IllegalArgumentException("Invalid login module control flag '" + flag + "' in JAAS config");
>     }
>     return controlFlag;
> }
>  {code}
> I have solved this issue by changing my password from
> {code:java}
> 8GMf0yWkLHrI4cNYYoyHGxclkXCLSCGJ {code}
> to
> {code:java}
> aaa {code}
> This leads me to suggestion that Tokenizer interprets any leading digit as 'bad' symbol and it breaks to parse the whole line.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)