重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 初めて投稿します。よろしくお願いしますm(_ _)m
 質問の内容は『PerlでProftpdのユーザファイルを作成するには』です。ブラウザを使って、IDやパスワードなどを登録するつもりなのですが、その際FTPd用のユーザファイルを作成しようと考えています。コマンドライン上から直接実行すれば成功するのですが、ブラウザ上からクライアントの操作で書き込みができません。どうすればよいか、どうかご教授くださいませ。
[環境]
   OS:VineLinux3.2
 FTPD:proftpd-1.2.10 [nobody]
HTTPD:Apache-1.3.3 [nobody]
実行ファイル名:sample.cgi

[手順]
1.ブラウザ上でユーザ名とパスワードを入力してもらう
 →このとき、ユーザ名を[$user]、パスワードを[$passwd]に格納します
2.system関数を使って、ユーザ情報とパスワードをAuthUserFileで指定したファイルに格納する
 →指定したファイルは[/etc/ftp.pass]です

 このときのコマンドは、
$file = "(FTPdのソースディレクトリ)/contrib/ftpasswd";
[system ("$file --passwd --file=/etc/ftp.pass --name=$user \--uid=510 --gid=100 --home=/home/hoge --shell=/bin/bash");]
 です。ftp.passのパーミッションは[744]で、所有ユーザは[nobody]です。
 ブラウザで実行する前にコマンドラインから実行しようとしたのですが、コマンドライン上から[perl sample.cgi]と打ち込むとエラーが出てきました。
[
ftpasswd: using alternate file: /etc/ftppasswd
ftpasswd: --passwd: missing required argument: --home
]
 よろしければ、どうかご教授くださいませ。

A 回答 (1件)

> system ("$file --passwd --file=/etc/ftp.pass --name=$user \--uid=510 --gid=100 --home=/home/hoge --shell=/bin/bash");



$userと--uidの間にバックスラッシュ(円マーク)が入ってますが、これが悪さしてるのでは。
system()で実行する前に、思った通りのコマンド文字列が組み立てできてるかを確認するために、syslog等に出力してみては。

ただsystem()でftpasswdを実行すると、次のパスワード文字列の入力ができないような気が。IPC::OpenとかExpectみたいのを使わないとダメかも。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!