Vault user vadmin password expired?

So we ran into an issue with our Vault server and the tp_Image item type All of the sudden SVG images were not display correctly, better yet not displayed at all. But this occurred only after a approximately 10 minutes, and after uploading a new image to the vault it would display the SVG's correct again. From Chrome's developer tools we could see that after 10 minutes, the vault server started return images with the mimetype octet-stream instead of the appropriate mimetype for the images (svg+xml for SVG). While octet-stream works for PNG/JPEG, it does not work for SVG. Also, if you had an admin logged in with another browser and let admin perform a search for tp_images it would work, and it would subsequently work for the normal user, but again for only 10 minutes. Turning debugging in InnovatorServerConfig.xml showed that when admin searches, the following aml was sent:
<Item type='FileType' action='get' orderBy='priority'>  <OR> <extension condition='eq'><![CDATA[svg]]></extension> <extension condition='like'><![CDATA[svg,%]]></extension> <extension condition='like'><![CDATA[%,svg]]></extension> <extension condition='like'><![CDATA[%,svg,%]]></extension>  </OR> </Item>
But, that aml was never sent when a normal user searched after 10 minutes. Trying to replicate this issue in a clean, newly installed Aras environment was unsuccessful, meaning everything works fine. This let us to believe that something was amiss with the Vault Server, but what was it sending? We installed Burp Proxy and set up a proxy forward for localhost and configured the Vault Server to send its Aras requests to the proxy address instead. These are the request headers for a normal user in our environment that had the issue at hand:
POST /InnovatorServer/Server/InnovatorServer.aspx HTTP/1.1 Content-Type: text/xml SOAPACTION: GetItem AUTHUSER: vadmin AUTHPASSWORD: C264E88F8ED2BAFBBC5EC79197FF2CCB DATABASE: 12.3 LIKEVALIDATEUSER: 1 VAULTTOKEN: B8j09Gbpng0SyruLPbppSq3K5azYsEtFuMiq04PjvAKqAhFYvlnVSA2 Host: localhost:8080 Cookie: ASP.NET_SessionId=tosjxk13jwrwfcrf4h23ytbm Content-Length: 347 Expect: 100-continue Connection: close
and this is the request's payload:
<?xml version='1.0' encoding='utf-8' ?><Item type='FileType' action='get' orderBy='priority'> <OR> <extension condition='eq'><![CDATA[svg]]></extension> <extension condition='like'><![CDATA[svg,%]]></extension> <extension condition='like'><![CDATA[%,svg]]></extension> <extension condition='like'><![CDATA[%,svg,%]]></extension> </OR></Item>
The response we got was:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="">schemas.xmlsoap.org/.../"><SOAP-ENV:Body><SOAP-ENV:Fault xmlns:af="">www.aras.com/.../faultcode><faultstring><![CDATA[Password is expired]]></faultstring><detail><af:legacy_detail><![CDATA[Password is expired]]></af:legacy_detail><af:exception message="Password is expired" type="Aras.Server.Core.PasswordExpiredException" /><message key="password_validation_info" value="&lt;Item type=&quot;Variable&quot; id=&quot;A4EFCB3197604DDAAF0E7CAA2BED9738&quot;&gt;&lt;name&gt;User_pwd_symbols_min_number&lt;/name&gt;&lt;value&gt;-1&lt;/value&gt;&lt;/Item&gt;&lt;Item type=&quot;Variable&quot; id=&quot;188B86F49F8B4D6FB31FBEF8F606BD8E&quot;&gt;&lt;name&gt;User_pwd_digits_min_number&lt;/name&gt;&lt;value&gt;-1&lt;/value&gt;&lt;/Item&gt;&lt;Item type=&quot;Method&quot; id=&quot;71C5E99F04F9413FBB3F89F9C910B640&quot;&gt;&lt;name&gt;User_pwd_checkPolicy&lt;/name&gt;&lt;method_code&gt;//function User_pwd_checkPolicy(plainPwd, variablesXML[optional])&#xD;&#xA;&#xD;&#xA;return standardCheckPlainPwdPolicy(plainPwd, variablesXML);&#xD;&#xA;&#xD;&#xA;function standardCheckPlainPwdPolicy(plainPwd, variablesXML) {&#xD;&#xA;&#x9;var varMinNumberNm = 'User_pwd_symbols_min_number';&#xD;&#xA;&#x9;var varMinDigitsNm = 'User_pwd_digits_min_number';&#xD;&#xA;&#x9;var failedSymbolTests = {};&#xD;&#xA;&#x9;var failedDigitsTests = {};&#xD;&#xA;&#x9;var valuesHash = {};&#xD;&#xA;&#x9;var resXml;&#xD;&#xA;&#x9;var wrongSymbolsVar = false;&#xD;&#xA;&#x9;var wrongDigitsVar = false;&#xD;&#xA;&#xD;&#xA;&#x9;if (variablesXML === undefined) {&#xD;&#xA;&#x9;&#x9;var conditionStr = '\'' + varMinNumberNm + '\',\'' + varMinDigitsNm + '\'';&#xD;&#xA;&#x9;&#x9;var aml = '&amp;lt;Item type=\'Variable\' action=\'get\' select=\'name,value\'&amp;gt;&amp;lt;name condition=\'in\'&amp;gt;' + conditionStr + '&amp;lt;/name&amp;gt;&amp;lt;/Item&amp;gt;';&#xD;&#xA;&#x9;&#x9;var res = aras.soapSend('ApplyItem', aml);&#xD;&#xA;&#x9;&#x9;if (res.getFaultCode() !== 0) {&#xD;&#xA;&#x9;&#x9;&#x9;return res.getFaultString();&#xD;&#xA;&#x9;&#x9;}&#xD;&#xA;&#x9;&#x9;resXml = res.getResultsBody();&#xD;&#xA;&#x9;} else {&#xD;&#xA;&#x9;&#x9;resXml = variablesXML;&#xD;&#xA;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;if (resXml.indexOf('&amp;lt;Result') &amp;lt; 0) {&#xD;&#xA;&#x9;&#x9;resXml = '&amp;lt;Result&amp;gt;' + resXml + '&amp;lt;/Result&amp;gt;';&#xD;&#xA;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;var d = aras.createXMLDocument();&#xD;&#xA;&#x9;d.loadXML(resXml);&#xD;&#xA;&#xD;&#xA;&#x9;var nd = d.selectSingleNode('//Item[name=\'' + varMinNumberNm + '\']/value');&#xD;&#xA;&#x9;var val = (nd) ? parseInt(nd.text) : '';&#xD;&#xA;&#x9;valuesHash[varMinNumberNm] = val;&#xD;&#xA;&#x9;if (val &amp;amp;&amp;amp; (!plainPwd || plainPwd.length &amp;lt; val)) {&#xD;&#xA;&#x9;&#x9;failedSymbolTests[varMinNumberNm] = true;&#xD;&#xA;&#x9;} else {&#xD;&#xA;&#x9;&#x9;wrongSymbolsVar = true;&#xD;&#xA;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;nd = d.selectSingleNode('//Item[name=\'' + varMinDigitsNm + '\']/value');&#xD;&#xA;&#x9;val = (nd) ? parseInt(nd.text) : '';&#xD;&#xA;&#x9;valuesHash[varMinDigitsNm] = val;&#xD;&#xA;&#x9;if (val &amp;amp;&amp;amp; val &amp;gt; 0) {&#xD;&#xA;&#x9;&#x9;failedDigitsTests[varMinDigitsNm] = testStr(plainPwd, /[0-9]{1}/g, val);&#xD;&#xA;&#x9;} else {&#xD;&#xA;&#x9;&#x9;wrongDigitsVar = true;&#xD;&#xA;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;var retVal = '';&#xD;&#xA;&#x9;var k;&#xD;&#xA;&#x9;for (k in failedDigitsTests) {&#xD;&#xA;&#x9;&#x9;if (failedDigitsTests[k]) {&#xD;&#xA;&#x9;&#x9;&#x9;if (!wrongSymbolsVar) {&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;retVal = aras.getResource('', 'imports_core.password_policy_requirements_missed', valuesHash[varMinNumberNm], valuesHash[varMinDigitsNm]);&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;return retVal;&#xD;&#xA;&#x9;&#x9;&#x9;} else {&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;retVal = aras.getResource('', 'imports_core.password_policy_requirements_missed2', valuesHash[varMinDigitsNm]);&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;return retVal;&#xD;&#xA;&#x9;&#x9;&#x9;}&#xD;&#xA;&#x9;&#x9;}&#xD;&#xA;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;for (k in failedSymbolTests) {&#xD;&#xA;&#x9;&#x9;if (failedSymbolTests[k]) {&#xD;&#xA;&#x9;&#x9;&#x9;if (!wrongDigitsVar) {&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;retVal = aras.getResource('', 'imports_core.password_policy_requirements_missed', valuesHash[varMinNumberNm], valuesHash[varMinDigitsNm]);&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;return retVal;&#xD;&#xA;&#x9;&#x9;&#x9;} else {&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;retVal = aras.getResource('', 'imports_core.password_policy_requirements_missed2', valuesHash[varMinNumberNm]);&#xD;&#xA;&#x9;&#x9;&#x9;&#x9;return retVal;&#xD;&#xA;&#x9;&#x9;&#x9;}&#xD;&#xA;&#x9;&#x9;}&#xD;&#xA;&#x9;}&#xD;&#xA;&#x9;return retVal;&#xD;&#xA;&#xD;&#xA;&#x9;function testStr(s, re4s, cnts) {&#xD;&#xA;&#x9;&#x9;var retVal = false;&#xD;&#xA;&#x9;&#x9;var arr = s.match(re4s);&#xD;&#xA;&#x9;&#x9;var i = 0;&#xD;&#xA;&#xD;&#xA;&#x9;&#x9;while (arr &amp;amp;&amp;amp; arr[i] &amp;amp;&amp;amp; cnts &amp;gt; 0) {&#xD;&#xA;&#x9;&#x9;&#x9;i++;&#xD;&#xA;&#x9;&#x9;&#x9;cnts--;&#xD;&#xA;&#x9;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;&#x9;if (cnts &amp;gt; 0) {&#xD;&#xA;&#x9;&#x9;&#x9;retVal = true;&#xD;&#xA;&#x9;&#x9;}&#xD;&#xA;&#xD;&#xA;&#x9;&#x9;return retVal;&#xD;&#xA;&#x9;}&#xD;&#xA;}&#xD;&#xA;&lt;/method_code&gt;&lt;/Item&gt;" /></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
This request never got logged when debugging was on, presumably because it never got past checking the password. So our first question: why was the password expired? We confirmed that everything started working as normal again in our environment after we changed the password for vadmin, but why did we need to change its password? It has no maximum password age, it has no password history length configured, and bot User_pwd_symbols_min_number and User_pwd_digits_min_number are set to -1. The second question we have: We noticed that when admin performs a search on tp_Image, the Vault Server sets/sends a different header:
AUTHUSERTOKEN: XeiVKxP9ywNWqL1SKrtVjD6PgWOSeLs2_3hvl1AfmzmGZqYstlzpqaK4WRA9qHwPcVkgr3COGXpf_1-f6d0GexVDyaZrtgOmO2GdhC5vE9utA0PtBrfBbvWYufTRD9euDt9nUqKbMeC77VIraYCWa0iv_wYPwF7DbErEtlTUAmGf8nm9aEdEx5jD8cJh9D5CN9mCh373BAYGZVP2WcyQ_Tg3w70FFiuiKFwthjDpVIlOGxRm4QJqto2r0GkqdTja0
Instead of the AUTHUSER / AUTHPASSWORD combination, which makes us wonder, have we configured the Vault Server correct?
Parents
  • Hello, I can confirm that this is a standard product bug. I've been able to consistently reproduce this issue both in 11.0 SP10 and in the new version of 11.0 SP12. I've filed this as an issue with our internal team to be fixed in a future release. As a workaround, could you please try to clear the "pwd_is_set_on" property of the vadmin user by using the SQL query below? update innovator.[user] set pwd_is_set_on = null where first_name = 'Vault' AND last_name = 'Admin' I believe this should have the effect of skipping the check to see if the vadmin's password has expired since there is no date to compare against. Chris _______________________________________________ Christopher Gillis Aras Labs Software Engineer
Reply
  • Hello, I can confirm that this is a standard product bug. I've been able to consistently reproduce this issue both in 11.0 SP10 and in the new version of 11.0 SP12. I've filed this as an issue with our internal team to be fixed in a future release. As a workaround, could you please try to clear the "pwd_is_set_on" property of the vadmin user by using the SQL query below? update innovator.[user] set pwd_is_set_on = null where first_name = 'Vault' AND last_name = 'Admin' I believe this should have the effect of skipping the check to see if the vadmin's password has expired since there is no date to compare against. Chris _______________________________________________ Christopher Gillis Aras Labs Software Engineer
Children
No Data