Regard to "[ruby-list:7447] Re: call for scripts"
by 石塚圭樹
at Tue, 14 Apr 1998 13:28:28 +0900
有馬@FITECです。
>あと, これから投稿されようと思っている方はお早めにお願いします. 非クラ
>ス版は基本的に今週末までとさせていただきます. クラス使用版は今月いっぱ
>いぐらいが〆切になると思います.
ruby の勉強のために、pop user のパスワードを変更する poppassd に
アクセスするスクリプトを書いてみました。
ひとつめは、例外処理とイテレータを使ってみたものです。
ふたつめは、ほぼ同じ内容をクラスにしてみたものです。
ruby 1.1b9(98/02/27) [i386-cygwin32] で試しました。
-----------------------------------------------------------------------
#!/usr/local/bin/ruby
#
# ex.1) ruby passwd1.rb
# ex.2) ruby passwd1.rb hostname
# ex.3) ruby passwd1.rb hostname servicename
#
require "socket"
enter_username = "Enter User Name :"
enter_old = "Enter Old Password :"
enter_new = "Enter New Password :"
reenter_new = "Reenter New Password :"
wrong_password = "New Password is wrong."
success = "Password is changed."
host = if ARGV.length >= 1; ARGV.shift; else "mail"; end
service = if ARGV.length >= 1; ARGV.shift; else 106; end
print "Trying ", host,":", service, " ... ", "\n"
STDOUT.flush
s = TCPsocket.open(host, service)
begin
print enter_username
username = gets
print enter_old
oldpass = gets
print enter_new
newpass = gets
raise(wrong_password) if newpass == oldpass
print reenter_new
raise(wrong_password) if newpass != gets
u = "user " + username
p = "pass " + oldpass
n = "newpass " + newpass
[u, p, n, ""].each do |t|
s.write(t)
st = s.readline
break if not st =~ /.*200.*/
end
print success, "\n"
rescue
print $!, "\n"
ensure
s.close
print "bye."
end
-----------------------------------------------------------------------
#!/usr/local/bin/ruby
#
# ex.1) ruby passwd2.rb
# ex.2) ruby passwd2.rb hostname
# ex.3) ruby passwd2.rb hostname servicename
require "socket"
Enter_username = "Enter User Name :"
Enter_old = "Enter Old Password :"
Enter_new = "Enter New Password :"
ReEnter_new = "Reenter New Password :"
Wrong = "New Password is wrong."
Success = "Password is changed."
Fail = "Could not change."
class TPoppassd
def initialize(host="mail", port=106)
@host = host
@port = port
end
def change(user, pass, newpass)
u = "user " + user
p = "pass " + pass
n = "newpass " + newpass
s = TCPsocket.open(@host, @port)
begin
j = s.readline
[u, p, n].each do |i|
s.write(i)
j = s.readline
raise("Fail:"+j) if not j =~ /.*200.*/
end
t = true
rescue
print $!
t = false
ensure
s.write("\n")
s.close
return t
end
end
def query
begin
print Enter_username
user = gets
print Enter_old
pass = gets
print Enter_new
newpass = gets
raise(Wrong) if newpass == pass
print ReEnter_new
raise(Wrong) if newpass != gets
return user, pass, newpass
rescue
print $!
return nil
end
end
end
Poppassd = TPoppassd.new
user, pass, newpass = Poppassd.query
print Success if Poppassd.change(user, pass, newpass)
-----------------------------------------------------------------------
--
有馬 康弘 <fit0298 / fitec.co.jp>