/// <summary> /// Deserializes a base64-encoded binary representation of a block access /// token. /// </summary> /// <param name="str">String to deserialize</param> /// <returns>BlockTokenIdentifier deserialized from str</returns> /// <exception cref="System.IO.IOException">if there is any I/O error</exception> private BlockTokenIdentifier DeserializeIdentifier(string str) { BlockTokenIdentifier identifier = new BlockTokenIdentifier(); identifier.ReadFields(new DataInputStream(new ByteArrayInputStream(Base64.DecodeBase64 (str)))); return(identifier); }
/// <summary> /// Calculates the expected correct password on the server side for the /// general-purpose handshake. /// </summary> /// <remarks> /// Calculates the expected correct password on the server side for the /// general-purpose handshake. The password consists of the block access /// token's password (known to the DataNode via its secret manager). This /// expects that the client has supplied a user name consisting of its /// serialized block access token identifier. /// </remarks> /// <param name="userName"> /// SASL user name containing serialized block access token /// identifier /// </param> /// <returns>expected correct SASL password</returns> /// <exception cref="System.IO.IOException">for any error</exception> private char[] BuildServerPassword(string userName) { BlockTokenIdentifier identifier = DeserializeIdentifier(userName); byte[] tokenPassword = blockPoolTokenSecretManager.RetrievePassword(identifier); return((new string(Base64.EncodeBase64(tokenPassword, false), Charsets.Utf8)).ToCharArray ()); }
/// <exception cref="System.Exception"/> public LocatedBlocks Answer(InvocationOnMock arg0) { LocatedBlocks locatedBlocks = (LocatedBlocks)arg0.CallRealMethod(); foreach (LocatedBlock lb in locatedBlocks.GetLocatedBlocks()) { Org.Apache.Hadoop.Security.Token.Token <BlockTokenIdentifier> token = lb.GetBlockToken (); BlockTokenIdentifier id = lb.GetBlockToken().DecodeIdentifier(); id.SetExpiryDate(Time.Now() + 10); Org.Apache.Hadoop.Security.Token.Token <BlockTokenIdentifier> newToken = new Org.Apache.Hadoop.Security.Token.Token <BlockTokenIdentifier>(id.GetBytes(), token.GetPassword(), token.GetKind(), token .GetService()); lb.SetBlockToken(newToken); } return(locatedBlocks); }