Ejemplo n.º 1
0
 /// <summary>
 /// Set the ACL on a single node in ZooKeeper. This will replace all existing ACL on that node.
 /// </summary>
 /// <param name="path">Path to set ACL on e.g. /solr/conf/solrconfig.xml</param>
 /// <param name="acls">A list of ACLs to be applied</param>
 /// <param name="retryOnConnLoss">True if the command should be retried on connection loss</param>
 /// <returns></returns>
 public async Task <Stat> setACL(string path, List <ACL> acls, bool retryOnConnLoss)
 {
     if (retryOnConnLoss)
     {
         return(await _zkCmdExecutor.RetryOperation(async() => await keeper.setACLAsync(path, acls)));
     }
     else
     {
         return(await keeper.setACLAsync(path, acls));
     }
 }
Ejemplo n.º 2
0
        public async Task testACLs()
        {
            ZooKeeper zk = await createClient();

            try {
                await zk.createAsync("/acltest", new byte[0], ZooDefs.Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);

                Assert.fail("Should have received an invalid acl error");
            }
            catch (KeeperException.InvalidACLException e) {
                LOG.info("Test successful, invalid acl received : " + e.Message);
            }
            try {
                List <ACL> testACL = new List <ACL>();
                testACL.Add(new ACL((int)(ZooDefs.Perms.ALL | ZooDefs.Perms.ADMIN), ZooDefs.Ids.AUTH_IDS));
                testACL.Add(new ACL((int)(ZooDefs.Perms.ALL | ZooDefs.Perms.ADMIN), new Id("ip", "127.0.0.1/8")));
                await zk.createAsync("/acltest", new byte[0], testACL, CreateMode.PERSISTENT);

                Assert.fail("Should have received an invalid acl error");
            }
            catch (KeeperException.InvalidACLException e) {
                LOG.info("Test successful, invalid acl received : " + e.Message);
            }
            zk.addAuthInfo("digest", "ben:passwd".UTF8getBytes());
            await zk.createAsync("/acltest", new byte[0], ZooDefs.Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);

            await zk.closeAsync();

            zk = await createClient();

            zk.addAuthInfo("digest", "ben:passwd2".UTF8getBytes());
            try {
                await zk.getDataAsync("/acltest", false);

                Assert.fail("Should have received a permission error");
            }
            catch (KeeperException e) {
                Assert.assertEquals(KeeperException.Code.NOAUTH, e.getCode());
            }
            zk.addAuthInfo("digest", "ben:passwd".UTF8getBytes());
            await zk.getDataAsync("/acltest", false);

            await zk.setACLAsync("/acltest", ZooDefs.Ids.OPEN_ACL_UNSAFE, -1);

            await zk.closeAsync();

            zk = await createClient();

            await zk.getDataAsync("/acltest", false);

            IList <ACL> acls = (await zk.getACLAsync("/acltest")).Acls;

            Assert.assertEquals(1, acls.Count);
            Assert.assertEquals(ZooDefs.Ids.OPEN_ACL_UNSAFE, acls);

            // The stat parameter should be optional.
            acls = (await zk.getACLAsync("/acltest")).Acls;
            Assert.assertEquals(1, acls.Count);
            Assert.assertEquals(ZooDefs.Ids.OPEN_ACL_UNSAFE, acls);
        }
Ejemplo n.º 3
0
        private async Task ShowNodeInfo()
        {
            var selectedNode = treeViewNodes.SelectedNode;

            if (selectedNode != null)
            {
                try
                {
                    var dataResult = await m_zooKeeperClient.getDataAsync(selectedNode.Name);

                    var aCLResult = await m_zooKeeperClient.getACLAsync(selectedNode.Name);

                    NodeInfoForm nodeInfoForm = new NodeInfoForm();
                    nodeInfoForm.NodeName = selectedNode.Text;
                    nodeInfoForm.Text     = selectedNode.Name;
                    nodeInfoForm.Data     = dataResult.Data ?? (new byte[0]);
                    nodeInfoForm.ACLs     = aCLResult.Acls;
                    nodeInfoForm.Stat     = aCLResult.Stat;
                    nodeInfoForm.ShowDialog();

                    bool dataChanged = true;
                    bool aclsChanged = true;
                    var  data        = nodeInfoForm.Data;
                    if (Convert.ToBase64String(dataResult.Data ?? (new byte[0])) == Convert.ToBase64String(data))
                    {
                        dataChanged = false;
                    }

                    var acls = nodeInfoForm.ACLs;
                    if (aCLResult.Acls.Count == acls.Count && aCLResult.Acls.All(acl => acls.Exists(i => i.getPerms() == acl.getPerms() && i.getId().getScheme() == acl.getId().getScheme() && i.getId().getId() == acl.getId().getId())))
                    {
                        aclsChanged = false;
                    }

                    if (dataChanged || aclsChanged)
                    {
                        if (MessageBox.Show("Do You Want To Update The Modification", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            if (dataChanged)
                            {
                                await m_zooKeeperClient.setDataAsync(selectedNode.Name, data);

                                Log($"Data seted {selectedNode.Name}.");
                            }

                            if (aclsChanged)
                            {
                                await m_zooKeeperClient.setACLAsync(selectedNode.Name, acls);

                                Log($"ACL seted {selectedNode.Name}.");
                            }
                        }
                    }
                }
                catch (KeeperException ex)
                {
                    Log($"{ex.Message} {selectedNode.Name}");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error");
                }
            }
            else
            {
                MessageBox.Show("No Node Selected.", "Info");
            }
        }
Ejemplo n.º 4
0
 public static Stat setACL(this ZooKeeper zk, string path, List <ACL> acl, int version)
 {
     return(zk.setACLAsync(path, acl, version).GetAwaiter().GetResult());
 }
Ejemplo n.º 5
0
 public async Task SetAclAsync([NotNull] string path, [NotNull] List <Acl> acl, int version = -1)
 {
     ValidateState();
     await _zk.setACLAsync(path, ConvertToInnerAcl(acl), version);
 }