• ベストアンサー

ファイルの書き換え

c言語でunixにおけるパスワード変更のプログラムを作っています。 etc/shadowのパスワードの部分を書き換えたいのですがいまいちファイルの取り扱いがよくわかりません。 ファイルの中のユーザを検索して、ファイルの一部分を書き換えるのには どうしたらよいのでしょうか? よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

演習問題としてですか? もし実用的にそれをしたいというなら、ファイルのロックの問題とかもありま すし、どんなセキュリティホールを作ってしまうかわからないので、独自に作 るのはやめた方が無難だと思います。それよりは、passwd や chpass を外部 プログラムとして呼び出すように設計する方がいいでしょう。 演習問題としてなら、UNIXでは、ファイルのある部分(10byte程度)だけ変更 するというのは、基本的には困難です(というより無理です)。全体をメモリ に読み込んで、必要な部分を変更して、全体を書き出すということになるでしょ う。 メモリに読み込む際には、1行ずつ読み、(動的に確保した)別々の配列に入 れ、先頭が該当するユーザ名なら、パスワード部を適当に変更します。変更す るには、パスワードの暗号化アルゴリズムとして、何を使うかを決めた上で、 暗号化関数を呼びます。通常は crypt でいけるでしょう。 ただし、異常な長さの行があるときとか、異常な行数とか、最後の行に改行が ないとか、フォーマットが変とか、そういうのに完全に対応するには、ちょっ とした経験がいると思います。

yoyomi
質問者

お礼

ありがとうございます。 演習問題としてやります。 後半でおっしゃっていただいているのを 試してみたいと思います。 で、できたら前半のも・・・(無理かも・・・) なにぶん経験が浅いものですから・・・(^-^; がんばってみようとおもいます。 本当にへんとうありがとうございました。

その他の回答 (1)

回答No.2

UNIX処理系によってはPAMという枠組みが用意されていて 「pam_」で始まる名前の関数で統一的に扱えるようになっているものがあります。 (最近の、linux、Solaris、FreeBSDなどで使えるようです。) PAMがない場合は、前の方がおっしゃっている通りだと思います。

yoyomi
質問者

お礼

PAMですか・・・ 初めて聞きました。 調べないとだめですね。調べてみます。 ありがとうございました。

関連するQ&A

専門家に質問してみよう