hash_password accepts stdin now (#17608)
`hash_password` now actually accepts password from stdin. The `getpass` reads from TTY, and does NOT accept stdin in any way. The manpage has been updated to reflect that.
This commit is contained in:
parent
d9cc0faf4b
commit
8da16e55fe
|
@ -0,0 +1 @@
|
||||||
|
Make `hash_password` accept password input from stdin.
|
|
@ -1,10 +1,13 @@
|
||||||
.\" generated with Ronn-NG/v0.8.0
|
.\" generated with Ronn-NG/v0.10.1
|
||||||
.\" http://github.com/apjanke/ronn-ng/tree/0.8.0
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
||||||
.TH "HASH_PASSWORD" "1" "July 2021" "" ""
|
.TH "HASH_PASSWORD" "1" "August 2024" ""
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBhash_password\fR \- Calculate the hash of a new password, so that passwords can be reset
|
\fBhash_password\fR \- Calculate the hash of a new password, so that passwords can be reset
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
\fBhash_password\fR [\fB\-p\fR|\fB\-\-password\fR [password]] [\fB\-c\fR|\fB\-\-config\fR \fIfile\fR]
|
.TS
|
||||||
|
allbox;
|
||||||
|
\fBhash_password\fR [\fB\-p\fR \fB\-\-password\fR [password]] [\fB\-c\fR \fB\-\-config\fR \fIfile\fR]
|
||||||
|
.TE
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
\fBhash_password\fR calculates the hash of a supplied password using bcrypt\.
|
\fBhash_password\fR calculates the hash of a supplied password using bcrypt\.
|
||||||
.P
|
.P
|
||||||
|
@ -20,7 +23,7 @@ bcrypt_rounds: 17 password_config: pepper: "random hashing pepper"
|
||||||
.SH "OPTIONS"
|
.SH "OPTIONS"
|
||||||
.TP
|
.TP
|
||||||
\fB\-p\fR, \fB\-\-password\fR
|
\fB\-p\fR, \fB\-\-password\fR
|
||||||
Read the password form the command line if [password] is supplied\. If not, prompt the user and read the password form the \fBSTDIN\fR\. It is not recommended to type the password on the command line directly\. Use the STDIN instead\.
|
Read the password form the command line if [password] is supplied, or from \fBSTDIN\fR\. If not, prompt the user and read the password from the tty prompt\. It is not recommended to type the password on the command line directly\. Use the STDIN instead\.
|
||||||
.TP
|
.TP
|
||||||
\fB\-c\fR, \fB\-\-config\fR
|
\fB\-c\fR, \fB\-\-config\fR
|
||||||
Read the supplied YAML \fIfile\fR containing the options \fBbcrypt_rounds\fR and the \fBpassword_config\fR section containing the \fBpepper\fR value\.
|
Read the supplied YAML \fIfile\fR containing the options \fBbcrypt_rounds\fR and the \fBpassword_config\fR section containing the \fBpepper\fR value\.
|
||||||
|
@ -33,7 +36,17 @@ $2b$12$VJNqWQYfsWTEwcELfoSi4Oa8eA17movHqqi8\.X8fWFpum7SxZ9MFe
|
||||||
.fi
|
.fi
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
.P
|
.P
|
||||||
Hash from the STDIN:
|
Hash from the stdin:
|
||||||
|
.IP "" 4
|
||||||
|
.nf
|
||||||
|
$ cat password_file | hash_password
|
||||||
|
Password:
|
||||||
|
Confirm password:
|
||||||
|
$2b$12$AszlvfmJl2esnyhmn8m/kuR2tdXgROWtWxnX\.rcuAbM8ErLoUhybG
|
||||||
|
.fi
|
||||||
|
.IP "" 0
|
||||||
|
.P
|
||||||
|
Hash from the prompt:
|
||||||
.IP "" 4
|
.IP "" 4
|
||||||
.nf
|
.nf
|
||||||
$ hash_password
|
$ hash_password
|
||||||
|
@ -53,6 +66,6 @@ $2b$12$CwI\.wBNr\.w3kmiUlV3T5s\.GT2wH7uebDCovDrCOh18dFedlANK99O
|
||||||
.fi
|
.fi
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
.SH "COPYRIGHT"
|
.SH "COPYRIGHT"
|
||||||
This man page was written by Rahul De <\fI\%mailto:rahulde@swecha\.net\fR> for Debian GNU/Linux distribution\.
|
This man page was written by Rahul De «rahulde@swecha\.net» for Debian GNU/Linux distribution\.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
synctl(1), synapse_port_db(1), register_new_matrix_user(1), synapse_review_recent_signups(1)
|
synctl(1), synapse_port_db(1), register_new_matrix_user(1), synapse_review_recent_signups(1)
|
||||||
|
|
|
@ -0,0 +1,182 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv='content-type' content='text/html;charset=utf-8'>
|
||||||
|
<meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>
|
||||||
|
<title>hash_password(1) - Calculate the hash of a new password, so that passwords can be reset</title>
|
||||||
|
<style type='text/css' media='all'>
|
||||||
|
/* style: man */
|
||||||
|
body#manpage {margin:0}
|
||||||
|
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
||||||
|
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
||||||
|
.mp h2 {margin:10px 0 0 0}
|
||||||
|
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
||||||
|
.mp h3 {margin:0 0 0 4ex}
|
||||||
|
.mp dt {margin:0;clear:left}
|
||||||
|
.mp dt.flush {float:left;width:8ex}
|
||||||
|
.mp dd {margin:0 0 0 9ex}
|
||||||
|
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
||||||
|
.mp pre {margin-bottom:20px}
|
||||||
|
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
||||||
|
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
||||||
|
.mp img {display:block;margin:auto}
|
||||||
|
.mp h1.man-title {display:none}
|
||||||
|
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
||||||
|
.mp h2 {font-size:16px;line-height:1.25}
|
||||||
|
.mp h1 {font-size:20px;line-height:2}
|
||||||
|
.mp {text-align:justify;background:#fff}
|
||||||
|
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
||||||
|
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
||||||
|
.mp u {text-decoration:underline}
|
||||||
|
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
||||||
|
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
||||||
|
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
||||||
|
.mp b.man-ref {font-weight:normal;color:#434241}
|
||||||
|
.mp pre {padding:0 4ex}
|
||||||
|
.mp pre code {font-weight:normal;color:#434241}
|
||||||
|
.mp h2+pre,h3+pre {padding-left:0}
|
||||||
|
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
||||||
|
ol.man-decor {width:100%}
|
||||||
|
ol.man-decor li.tl {text-align:left}
|
||||||
|
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
||||||
|
ol.man-decor li.tr {text-align:right;float:right}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<!--
|
||||||
|
The following styles are deprecated and will be removed at some point:
|
||||||
|
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
||||||
|
|
||||||
|
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
||||||
|
.man-navigation should be used instead.
|
||||||
|
-->
|
||||||
|
<body id='manpage'>
|
||||||
|
<div class='mp' id='man'>
|
||||||
|
|
||||||
|
<div class='man-navigation' style='display:none'>
|
||||||
|
<a href="#NAME">NAME</a>
|
||||||
|
<a href="#SYNOPSIS">SYNOPSIS</a>
|
||||||
|
<a href="#DESCRIPTION">DESCRIPTION</a>
|
||||||
|
<a href="#FILES">FILES</a>
|
||||||
|
<a href="#OPTIONS">OPTIONS</a>
|
||||||
|
<a href="#EXAMPLES">EXAMPLES</a>
|
||||||
|
<a href="#COPYRIGHT">COPYRIGHT</a>
|
||||||
|
<a href="#SEE-ALSO">SEE ALSO</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ol class='man-decor man-head man head'>
|
||||||
|
<li class='tl'>hash_password(1)</li>
|
||||||
|
<li class='tc'></li>
|
||||||
|
<li class='tr'>hash_password(1)</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h2 id="NAME">NAME</h2>
|
||||||
|
<p class="man-name">
|
||||||
|
<code>hash_password</code> - <span class="man-whatis">Calculate the hash of a new password, so that passwords can be reset</span>
|
||||||
|
</p>
|
||||||
|
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>hash_password</code> [<code>-p</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>--password</code> [password]] [<code>-c</code>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<code>--config</code> <var>file</var>]</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||||
|
|
||||||
|
<p><strong>hash_password</strong> calculates the hash of a supplied password using bcrypt.</p>
|
||||||
|
|
||||||
|
<p><code>hash_password</code> takes a password as an parameter either on the command line
|
||||||
|
or the <code>STDIN</code> if not supplied.</p>
|
||||||
|
|
||||||
|
<p>It accepts an YAML file which can be used to specify parameters like the
|
||||||
|
number of rounds for bcrypt and password_config section having the pepper
|
||||||
|
value used for the hashing. By default <code>bcrypt_rounds</code> is set to <strong>12</strong>.</p>
|
||||||
|
|
||||||
|
<p>The hashed password is written on the <code>STDOUT</code>.</p>
|
||||||
|
|
||||||
|
<h2 id="FILES">FILES</h2>
|
||||||
|
|
||||||
|
<p>A sample YAML file accepted by <code>hash_password</code> is described below:</p>
|
||||||
|
|
||||||
|
<p>bcrypt_rounds: 17
|
||||||
|
password_config:
|
||||||
|
pepper: "random hashing pepper"</p>
|
||||||
|
|
||||||
|
<h2 id="OPTIONS">OPTIONS</h2>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<code>-p</code>, <code>--password</code>
|
||||||
|
</dt>
|
||||||
|
<dd>Read the password form the command line if [password] is supplied, or from <code>STDIN</code>.
|
||||||
|
If not, prompt the user and read the password from the tty prompt.
|
||||||
|
It is not recommended to type the password on the command line
|
||||||
|
directly. Use the STDIN instead.</dd>
|
||||||
|
<dt>
|
||||||
|
<code>-c</code>, <code>--config</code>
|
||||||
|
</dt>
|
||||||
|
<dd>Read the supplied YAML <var>file</var> containing the options <code>bcrypt_rounds</code>
|
||||||
|
and the <code>password_config</code> section containing the <code>pepper</code> value.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||||
|
|
||||||
|
<p>Hash from the command line:</p>
|
||||||
|
|
||||||
|
<pre><code>$ hash_password -p "p@ssw0rd"
|
||||||
|
$2b$12$VJNqWQYfsWTEwcELfoSi4Oa8eA17movHqqi8.X8fWFpum7SxZ9MFe
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<p>Hash from the stdin:</p>
|
||||||
|
|
||||||
|
<pre><code>$ cat password_file | hash_password
|
||||||
|
Password:
|
||||||
|
Confirm password:
|
||||||
|
$2b$12$AszlvfmJl2esnyhmn8m/kuR2tdXgROWtWxnX.rcuAbM8ErLoUhybG
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<p>Hash from the prompt:</p>
|
||||||
|
|
||||||
|
<pre><code>$ hash_password
|
||||||
|
Password:
|
||||||
|
Confirm password:
|
||||||
|
$2b$12$AszlvfmJl2esnyhmn8m/kuR2tdXgROWtWxnX.rcuAbM8ErLoUhybG
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<p>Using a config file:</p>
|
||||||
|
|
||||||
|
<pre><code>$ hash_password -c config.yml
|
||||||
|
Password:
|
||||||
|
Confirm password:
|
||||||
|
$2b$12$CwI.wBNr.w3kmiUlV3T5s.GT2wH7uebDCovDrCOh18dFedlANK99O
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<h2 id="COPYRIGHT">COPYRIGHT</h2>
|
||||||
|
|
||||||
|
<p>This man page was written by Rahul De «rahulde@swecha.net»
|
||||||
|
for Debian GNU/Linux distribution.</p>
|
||||||
|
|
||||||
|
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||||
|
|
||||||
|
<p><span class="man-ref">synctl<span class="s">(1)</span></span>, <span class="man-ref">synapse_port_db<span class="s">(1)</span></span>, <span class="man-ref">register_new_matrix_user<span class="s">(1)</span></span>, <span class="man-ref">synapse_review_recent_signups<span class="s">(1)</span></span></p>
|
||||||
|
|
||||||
|
<ol class='man-decor man-foot man foot'>
|
||||||
|
<li class='tl'></li>
|
||||||
|
<li class='tc'>August 2024</li>
|
||||||
|
<li class='tr'>hash_password(1)</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -29,8 +29,8 @@ A sample YAML file accepted by `hash_password` is described below:
|
||||||
## OPTIONS
|
## OPTIONS
|
||||||
|
|
||||||
* `-p`, `--password`:
|
* `-p`, `--password`:
|
||||||
Read the password form the command line if [password] is supplied.
|
Read the password form the command line if [password] is supplied, or from `STDIN`.
|
||||||
If not, prompt the user and read the password form the `STDIN`.
|
If not, prompt the user and read the password from the tty prompt.
|
||||||
It is not recommended to type the password on the command line
|
It is not recommended to type the password on the command line
|
||||||
directly. Use the STDIN instead.
|
directly. Use the STDIN instead.
|
||||||
|
|
||||||
|
@ -45,7 +45,14 @@ Hash from the command line:
|
||||||
$ hash_password -p "p@ssw0rd"
|
$ hash_password -p "p@ssw0rd"
|
||||||
$2b$12$VJNqWQYfsWTEwcELfoSi4Oa8eA17movHqqi8.X8fWFpum7SxZ9MFe
|
$2b$12$VJNqWQYfsWTEwcELfoSi4Oa8eA17movHqqi8.X8fWFpum7SxZ9MFe
|
||||||
|
|
||||||
Hash from the STDIN:
|
Hash from the stdin:
|
||||||
|
|
||||||
|
$ cat password_file | hash_password
|
||||||
|
Password:
|
||||||
|
Confirm password:
|
||||||
|
$2b$12$AszlvfmJl2esnyhmn8m/kuR2tdXgROWtWxnX.rcuAbM8ErLoUhybG
|
||||||
|
|
||||||
|
Hash from the prompt:
|
||||||
|
|
||||||
$ hash_password
|
$ hash_password
|
||||||
Password:
|
Password:
|
||||||
|
|
|
@ -56,7 +56,9 @@ def main() -> None:
|
||||||
password_pepper = password_config.get("pepper", password_pepper)
|
password_pepper = password_config.get("pepper", password_pepper)
|
||||||
password = args.password
|
password = args.password
|
||||||
|
|
||||||
if not password:
|
if not password and not sys.stdin.isatty():
|
||||||
|
password = sys.stdin.readline().strip()
|
||||||
|
elif not password:
|
||||||
password = prompt_for_pass()
|
password = prompt_for_pass()
|
||||||
|
|
||||||
# On Python 2, make sure we decode it to Unicode before we normalise it
|
# On Python 2, make sure we decode it to Unicode before we normalise it
|
||||||
|
|
Loading…
Reference in New Issue