自社用のメールサーバを運営しています。
アカウントを追加する際に、メールボックスのACLを追加して、事業所内でメールを共有できるようにしているのですが、その設定が面倒くさい・・
そこで、expectというツールを使って、ACL追加を自動化してみることを試みました。
これはその覚書です。
これまでACLを追加するために、サーバにSSHでログインして、telnetでlocalhostのimapサーバに接続していたのですが、他の仕事が立て込んできている時には面倒くさく感じるものです。
ゴール
目的は次の通り。
- ユーザーのアドレスは user@mydomain.com
- 事業所のアドレスは belongto@mydomain.com
- 事業所の所長のアドレスは manager@mydomain.com
- 事業所のアドレスに、user@mydomain.com の INBOX を読み取り専用で共有させる。
- 所長のアドレスには、INBOX と Sent の2つのメールボックスを読み取り専用で共有させる。
色々あれこれ調べてみた結果、次のようなスクリプトで今のところいけています。
#!/usr/bin/expect -f
set timeout 10
set server localhost
set port 143
set user {user@mydomain.com}
set pass {p@ssw0rd}
set group {belongto@mydomain.com}
set manager {manager@mydomain.com}
spawn telnet $server $port
expect {
timeout {puts stdout "timeout while connecting to $server"; exit 1}
"* OK"
}
send "1 login $user $pass\r"
expect {
timeout {puts stdout "timed out after login"; exit 1}
"1 NO" {puts stdout "bad login"; exit 1}
"1 OK"
}
send "2 create Sent\r"
expect {
timeout {puts stdout "timed out"; exit 1}
"2 NO" {puts stdout "already exists"}
"2 OK"
}
send "3 setacl INBOX ${group} lr\r"
expect {
timeout {puts stdout "timed out"; exit 1}
"3 NO" {puts stdout "setacl failed.."}
"3 OK"
}
send "4 setacl INBOX ${manager} lr\r"
expect {
timeout {puts stdout "timed out"; exit 1}
"4 NO" {puts stdout "setacl failed.."}
"4 OK"
}
send "5 setacl Sent ${manager} lr\r"
expect {
timeout {puts stdout "timed out"; exit 1}
"5 NO" {puts stdout "setacl failed.."}
"5 OK"
}
send "6 logout\r"
expect {
timeout {puts stdout "timed out"; exit 1}
"6 OK"
}
exit
もちろんユーザにはINBOXやSentが共有されていることは教えています。
0件のコメント