メーリングリストをwebからメンテ
できるようにしました。
もうかれこれ1週間くらい前ですが。
うちのサーバでは、ezmlmという
メーリングリストサーバが動いています。
そして、それを使って2つのメーリングリストが動いています。
ezmlmのインストール方法は割愛します。
ネットを探せば結構ありますので。
さて。
ezmlmでは、mlname-subscribe@domain に空のメールを送ると、
自動的に返事が返って来て、さらに返信すると
メーリングリストmlnameに自分のアドレスが登録できるようになってます。
削除の時もezmlm-unsubscribe@domain で同様に。
しかし。
こちらから返信するときのアドレスが長い。長過ぎる。
ケータイからは送れない!
というのが、今回アドレス追加削除をwebからやろうとしたきっかけ。
きっかけはここまで。
長いわ。
webからやるにあたり、考えたこと。
・アドレス入力して追加ボタンを押したら、
/usr/local/bin/ezmlm/ezmlm-sub /mldir/mlname address でアドレス追加。
・登録されているアドレスの一覧を
/usr/local/bin/ezmlm/ezmlm-list /mldir/mlname address でとってくる。
・アドレスを選択して削除ボタンを押したら、
/usr/local/bin/ezmlm/ezmlm-unsub /mldir/mlname address でアドレス削除。
って感じ。大枠は。
んで、この通りに作ってみました。
動きまへん。
なぜか。
/mldir/mlname を開く権限がありません。
どうしましょう。
・権限をつける。
・権限を持っているユーザで開く。
前者は相当危険なので、もちろん後者で。
まあ、これも相当危険ですが。
sudoというコマンドを使いました。
suしてdoするコマンドです。
成り代わりで実行できるユーザとコマンドをconfファイルに書くだけです。
動きました。
アドレスの一覧取得、追加、削除。ばっちりです。
はははは。
…。待てよ。
これって、他の人のアドレスも削除できる?
ぽちっ(削除ボタン押した)。消えた。
ダメじゃん。
例えメーリングリスト内の人がみんな面識あっても、
他の人のアドレス消せちゃうのはまずいでしょ。
困った。
削除するアドレスが削除ボタンを押したユーザのものであること。
ユーザ名とアドレスをどう関連付けるか。
・DBにユーザ名、アドレスを持つ。
削除ボタンを押したユーザとアドレスをキーに、
DB検索してレコードがあれば削除できる。同時にレコードも削除。
なければアドレスの削除は出来ない。
・ファイルに同じように持つ。
最近、DBをむやみやたらに使わないことにしたので、後者で。
ただ、DBと同じようには持てないでしょ。
・複数ユーザが同時にアクセスしたら?
・ファイルの真ん中らへんのレコード削除されたら再編集がめんどくさい。
結局、ユーザ名をファイル名にして、中にアドレスを並べて置くことにしました。
これで結構処理的には簡潔になったわけです。
削除ボタンが押されたら、そのユーザ名のファイルを開く。
その中に削除するアドレスがあるか検索。
(ファイル丸ごと読んで、likeで判定)
アドレスがあればezmlmのコマンドをsudoで実行して、
かつファイルからも削除。
(ファイル丸読みしてるので、該当アドレスをNULLで置換して上書き保存)
アドレスがなければ、その人のアドレスではないので削除できない。
だいぶいい感じ。削除はね。
追加は…。まあいいか。
誰が誰のアドレス追加しても、そんな問題ないでしょう。
ただね、自分が他の人のアドレス追加したら、
そのアドレスは一応自分のものになっちゃう。
だから本人には削除できない!
まあそれもいいか。
消してほしけりゃ管理者(自分)に言えばいいだけだし。
ってか、それなら追加の時もそうすればいいじゃん。
元も子もない結論。
もうかれこれ1週間くらい前ですが。
うちのサーバでは、ezmlmという
メーリングリストサーバが動いています。
そして、それを使って2つのメーリングリストが動いています。
ezmlmのインストール方法は割愛します。
ネットを探せば結構ありますので。
さて。
ezmlmでは、mlname-subscribe@domain に空のメールを送ると、
自動的に返事が返って来て、さらに返信すると
メーリングリストmlnameに自分のアドレスが登録できるようになってます。
削除の時もezmlm-unsubscribe@domain で同様に。
しかし。
こちらから返信するときのアドレスが長い。長過ぎる。
ケータイからは送れない!
というのが、今回アドレス追加削除をwebからやろうとしたきっかけ。
きっかけはここまで。
長いわ。
webからやるにあたり、考えたこと。
・アドレス入力して追加ボタンを押したら、
/usr/local/bin/ezmlm/ezmlm-sub /mldir/mlname address でアドレス追加。
・登録されているアドレスの一覧を
/usr/local/bin/ezmlm/ezmlm-list /mldir/mlname address でとってくる。
・アドレスを選択して削除ボタンを押したら、
/usr/local/bin/ezmlm/ezmlm-unsub /mldir/mlname address でアドレス削除。
って感じ。大枠は。
んで、この通りに作ってみました。
動きまへん。
なぜか。
/mldir/mlname を開く権限がありません。
どうしましょう。
・権限をつける。
・権限を持っているユーザで開く。
前者は相当危険なので、もちろん後者で。
まあ、これも相当危険ですが。
sudoというコマンドを使いました。
suしてdoするコマンドです。
成り代わりで実行できるユーザとコマンドをconfファイルに書くだけです。
動きました。
アドレスの一覧取得、追加、削除。ばっちりです。
はははは。
…。待てよ。
これって、他の人のアドレスも削除できる?
ぽちっ(削除ボタン押した)。消えた。
ダメじゃん。
例えメーリングリスト内の人がみんな面識あっても、
他の人のアドレス消せちゃうのはまずいでしょ。
困った。
削除するアドレスが削除ボタンを押したユーザのものであること。
ユーザ名とアドレスをどう関連付けるか。
・DBにユーザ名、アドレスを持つ。
削除ボタンを押したユーザとアドレスをキーに、
DB検索してレコードがあれば削除できる。同時にレコードも削除。
なければアドレスの削除は出来ない。
・ファイルに同じように持つ。
最近、DBをむやみやたらに使わないことにしたので、後者で。
ただ、DBと同じようには持てないでしょ。
・複数ユーザが同時にアクセスしたら?
・ファイルの真ん中らへんのレコード削除されたら再編集がめんどくさい。
結局、ユーザ名をファイル名にして、中にアドレスを並べて置くことにしました。
これで結構処理的には簡潔になったわけです。
削除ボタンが押されたら、そのユーザ名のファイルを開く。
その中に削除するアドレスがあるか検索。
(ファイル丸ごと読んで、likeで判定)
アドレスがあればezmlmのコマンドをsudoで実行して、
かつファイルからも削除。
(ファイル丸読みしてるので、該当アドレスをNULLで置換して上書き保存)
アドレスがなければ、その人のアドレスではないので削除できない。
だいぶいい感じ。削除はね。
追加は…。まあいいか。
誰が誰のアドレス追加しても、そんな問題ないでしょう。
ただね、自分が他の人のアドレス追加したら、
そのアドレスは一応自分のものになっちゃう。
だから本人には削除できない!
まあそれもいいか。
消してほしけりゃ管理者(自分)に言えばいいだけだし。
ってか、それなら追加の時もそうすればいいじゃん。
元も子もない結論。
このネタへのコメント:
コメントはありません。