passwd
Unix:/etc/passwdに直接書き込むのではなく、passwdコマンドを使うことが望ましい
手動でファイルに書き込むと、構文的に誤った値を書き込んでしまう可能性もあり...t6o_o6t.icon
↓ 注意:全体的に古いバージョンのソースコードを参照していた
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/v2.7.1/login-utils/passwd.c
これがソースコードかなt6o_o6t.icon
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/v2.7.1/login-utils/passwd.c#302
getpwuid関数の戻り値をpeという「passwd」型の変数に代入している
変更対象のユーザのpasswdを表しているだろう
/etc/shadowを参照している様子はgetpwuidのソースコードを見なければ観察できなさそうだ
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/v2.7.1/login-utils/passwd.c#350
Old password: の入力値を検証するときは、crypt.hのcrypt関数に入力値を入れて暗号化したものと、本来のパスワードを比較している
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/v2.7.1/login-utils/passwd.c#356
新しいパスワードを入力させる(コマンドライン引数で渡されている場合を除く)
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/v2.7.1/login-utils/passwd.c#383
新しいパスワードを暗号化する(ソルトを生成)
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/v2.7.1/login-utils/passwd.c#407
setpwnamで暗号化された新しいパスワードを永続化?
setpwnamが中で何をしているのか分からないが...
/icons/hr.icon
https://kernel.googlesource.com/pub/scm/utils/util-linux/util-linux/+/refs/tags/v2.40/login-utils/setpwnam.c#133
setpwnamにおけるpasswd構造体の書き込み
putpwentという関数を呼び出している。
putpwentはglibcの中に実装されているっぽい?
なんかコメントに書いている
https://github.com/lattera/glibc/blob/895ef79e04a953cac1493863bcae29ad85657ee1/shadow/shadow.h#L108
v2.40でpasswdの実装がどこに行ったのか分からなくなってしまった😰
まあだいたい分かったということにしておこう..
https://github.com/shadow-maint/shadow/blob/master/src%2Fpasswd.c
これか?
結構見た目が異なっている..