/// <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)); } }
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); }
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"); } }
public static Stat setACL(this ZooKeeper zk, string path, List <ACL> acl, int version) { return(zk.setACLAsync(path, acl, version).GetAwaiter().GetResult()); }
public async Task SetAclAsync([NotNull] string path, [NotNull] List <Acl> acl, int version = -1) { ValidateState(); await _zk.setACLAsync(path, ConvertToInnerAcl(acl), version); }