[ https://issues.apache.org/jira/browse/ZOOKEEPER-1782?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16050858#comment-16050858 ]
ASF GitHub Bot commented on ZOOKEEPER-1782: ------------------------------------------- Github user hanm commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/282#discussion_r122268144 --- Diff: src/java/test/org/apache/zookeeper/test/SaslSuperUserTest.java --- @@ -0,0 +1,118 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.zookeeper.test; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.TestableZooKeeper; +import org.apache.zookeeper.WatchedEvent; +import org.apache.zookeeper.ZooKeeper; +import org.apache.zookeeper.Watcher.Event.KeeperState; +import org.apache.zookeeper.ZooDefs.Ids; +import org.apache.zookeeper.ZooDefs.Perms; +import org.apache.zookeeper.data.ACL; +import org.apache.zookeeper.data.Id; +import org.apache.zookeeper.server.auth.DigestAuthenticationProvider; +import org.junit.Assert; +import org.junit.Test; + +public class SaslSuperUserTest extends ClientBase { + private static Id otherSaslUser = new Id ("sasl", "joe"); + private static Id otherDigestUser; + + static { + System.setProperty("zookeeper.authProvider.1","org.apache.zookeeper.server.auth.SASLAuthenticationProvider"); + + try { + File tmpDir = createTmpDir(); + File saslConfFile = new File(tmpDir, "jaas.conf"); + FileWriter fwriter = new FileWriter(saslConfFile); + + fwriter.write("" + + "Server {\n" + + " org.apache.zookeeper.server.auth.DigestLoginModule required\n" + + " user_super_duper=\"test\";\n" + + "};\n" + + "Client {\n" + + " org.apache.zookeeper.server.auth.DigestLoginModule required\n" + + " username=\"super_duper\"\n" + + " password=\"test\";\n" + + "};" + "\n"); + fwriter.close(); + System.setProperty("java.security.auth.login.config",saslConfFile.getAbsolutePath()); + System.setProperty("zookeeper.superUser","super_duper"); + otherDigestUser = new Id ("digest", DigestAuthenticationProvider.generateDigest("jack:jack")); + } + catch (IOException e) { + // could not create tmp directory to hold JAAS conf file : test will fail now. + } + catch (Exception e) { + throw new RuntimeException(e); //This should never happen, but if it does we still blow up + } + } + + private AtomicInteger authFailed = new AtomicInteger(0); + + @Override + protected TestableZooKeeper createClient(String hp) + throws IOException, InterruptedException + { + MyWatcher watcher = new MyWatcher(); + return createClient(watcher, hp); + } + + private class MyWatcher extends CountdownWatcher { + @Override + public synchronized void process(WatchedEvent event) { + if (event.getState() == KeeperState.AuthFailed) { + authFailed.incrementAndGet(); + } + else { + super.process(event); + } + } + } + + @Test + public void testSuperIsSuper() throws Exception { --- End diff -- This test does not verify anything. Maybe put an assert in a catch block to indicate no auth error should happen during these operations? > zookeeper.superUser is not as super as superDigest > -------------------------------------------------- > > Key: ZOOKEEPER-1782 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1782 > Project: ZooKeeper > Issue Type: Bug > Affects Versions: 3.4.5 > Reporter: Robert Joseph Evans > Assignee: Robert Joseph Evans > Attachments: zk-1782.patch, zk-1782.patch > > > The zookeeper.superUser system property does not fully grant super user > privileges, like zookeeper.DigestAuthenticationProvider.superDigest does. > zookeeper.superUser only has as many privileges as the sasl ACLs on the znode > being accessed. This means that if a znode only has digest ACLs > zookeeper.superUser is ignored. Or if a znode has a single sasl ACL that > only has read privileges zookeeper.superUser only has read privileges. > The reason for this is that SASLAuthenticationProvider implements the > superUser check in the matches method, instead of having the super user > include a new Id("super","") as Digest does. -- This message was sent by Atlassian JIRA (v6.4.14#64029)