title: TeamCity, KotlinDSL: how to pass FTP password
body: <p>Recently I bumped into a situation where our TeamCity build config(s) should be composed by the given business logic, not by hand. Kotlin DSL does match our needs perfectly well so I did a .KTS script quite quickly. The only issue I have so far is FTP uploader step, namely the password parameter. All my attempts to put a password a ended with FTP 503 error. </p>
  
  <p>Like this:</p>
  
  <pre><code>param("jetbrains.buildServer.deployer.username", "abc")
  param("jetbrains.buildServer.deployer.password", "secret-password")
  </code></pre>
  
  <p>or like that (as I googled out that non-secure password parameter is obsolete):</p>
  
  <pre><code>param("jetbrains.buildServer.deployer.username", "abc")
  param("secure:jetbrains.buildServer.deployer.password", "secret-password")
  </code></pre>
  
  <p>If I put the password manually in TeamCity and examine generated DSL then, I see the password is somehow secured:</p>
  
  <pre><code>param("secure:jetbrains.buildServer.deployer.password", "zxx5a3133fc69ef3252") &lt;- "abc" password
  param("secure:jetbrains.buildServer.deployer.password", "zxx4469c7c25073dd9f") &lt;- "123" password
  </code></pre>
  
  <p>What is the encoding/encryption used here? Any clue how to pass an arbitrary password (ideally, via %parameter%) in Kotlin DSL scripts?</p>