1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/net/imap.rb: added document.

* lib/net/imap.rb (getquotaroot): new method.
* lib/net/imap.rb (setacl): remove the rights if the rights
parameter is nil.
* lib/net/imap.rb (getacl): return a MailboxACLItem object.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2002-03-01 02:27:37 +00:00
parent 7806b0ae28
commit 4a58b0fd7c
2 changed files with 176 additions and 9 deletions

View file

@ -1,3 +1,14 @@
Fri Mar 1 11:22:51 2002 Amos Gouaux <amos+ruby@utdallas.edu>
* lib/net/imap.rb: added document.
* lib/net/imap.rb (getquotaroot): new method.
* lib/net/imap.rb (setacl): remove the rights if the rights
parameter is nil.
* lib/net/imap.rb (getacl): return a MailboxACLItem object.
Fri Mar 1 06:25:49 2002 Tanaka Akira <akr@m17n.org> Fri Mar 1 06:25:49 2002 Tanaka Akira <akr@m17n.org>
* ext/socket/extconf.rb (have_struct_member): new method. * ext/socket/extconf.rb (have_struct_member): new method.

View file

@ -30,9 +30,14 @@ Object
=== Class Methods === Class Methods
: new(host, port = 143) : new(host, port = 143, usessl = false, certs = nil, verify = false)
Creates a new Net::IMAP object and connects it to the specified Creates a new Net::IMAP object and connects it to the specified
port on the named host. port on the named host. If usessl is true, then an attempt will
be made to use SSL (now TLS) to connect to the server. For this
to work OpenSSL((<[OSSL]>)) and the Ruby OpenSSL((<[RSSL]>))
extension need to be installed. The certs parameter indicates
the path or file containing the CA cert of the server, and the
verify parameter is for the OpenSSL verification callback.
: debug : debug
Returns the debug mode. Returns the debug mode.
@ -228,6 +233,36 @@ Object
p imap.sort(["DATE"], ["SUBJECT", "hello"], "US-ASCII") p imap.sort(["DATE"], ["SUBJECT", "hello"], "US-ASCII")
#=> [6, 7, 8, 1] #=> [6, 7, 8, 1]
: setquota(mailbox, quota)
Sends a SETQUOTA command along with the specified mailbox and
quota. If quota is nil, then quota will be unset for that
mailbox. Typically one needs to be logged in as server admin
for this to work. The IMAP quota commands are described in
((<[RFC-2087]>)).
: getquota(mailbox)
Sends the GETQUOTA command along with specified mailbox.
If this mailbox exists, then an array containing a
((<Net::IMAP::MailboxQuota>)) object is returned. This
command generally is only available to server admin.
: getquotaroot(mailbox)
Sends the GETQUOTAROOT command along with specified mailbox.
This command is generally available to both admin and user.
If mailbox exists, returns an array containing objects of
((<Net::IMAP::MailboxQuotaRoot>)) and ((<Net::IMAP::MailboxQuota>)).
: setacl(mailbox, user, rights)
Sends the SETACL command along with mailbox, user and the
rights that user is to have on that mailbox. If rights is nil,
then that user will be stripped of any rights to that mailbox.
The IMAP ACL commands are described in ((<[RFC-2086]>)).
: getacl(mailbox)
Send the GETACL command along with specified mailbox.
If this mailbox exists, an array containing objects of
((<Net::IMAP::MailboxACLItem>)) will be returned.
: add_response_handler(handler = Proc.new) : add_response_handler(handler = Proc.new)
Adds a response handler. Adds a response handler.
@ -391,6 +426,80 @@ Struct
: name : name
Returns the mailbox name. Returns the mailbox name.
== Net::IMAP::MailboxQuota
Net::IMAP::MailboxQuota represents contents of GETQUOTA response.
This object can also be a response to GETQUOTAROOT. In the syntax
specification below, the delimiter used with the "#" construct is a
single space (SPACE).
quota_list ::= "(" #quota_resource ")"
quota_resource ::= atom SPACE number SPACE number
quota_response ::= "QUOTA" SPACE astring SPACE quota_list
=== Super Class
Struct
=== Methods
: mailbox
The mailbox with the associated quota.
: usage
Current storage usage of mailbox.
: quota
Quota limit imposed on mailbox.
== Net::IMAP::MailboxQuotaRoot
Net::IMAP::MailboxQuotaRoot represents part of the GETQUOTAROOT
response. (GETQUOTAROOT can also return Net::IMAP::MailboxQuota.)
quotaroot_response
::= "QUOTAROOT" SPACE astring *(SPACE astring)
=== Super Class
Struct
=== Methods
: mailbox
The mailbox with the associated quota.
: quotaroots
Zero or more quotaroots that effect the quota on the
specified mailbox.
== Net::IMAP::MailboxACLItem
Net::IMAP::MailboxACLItem represents response from GETACL.
acl_data ::= "ACL" SPACE mailbox *(SPACE identifier SPACE
rights)
identifier ::= astring
rights ::= astring
=== Super Class
Struct
=== Methods
: user
Login name that has certain rights to the mailbox
that was specified with the getacl command.
: rights
The access rights the indicated user has to the
mailbox.
== Net::IMAP::StatusData == Net::IMAP::StatusData
Net::IMAP::StatusData represents contents of the STATUS response. Net::IMAP::StatusData represents contents of the STATUS response.
@ -679,6 +788,18 @@ Struct
Crocker, D., "Standard for the Format of ARPA Internet Text Crocker, D., "Standard for the Format of ARPA Internet Text
Messages", STD 11, RFC 822, University of Delaware, August 1982. Messages", STD 11, RFC 822, University of Delaware, August 1982.
: [RFC-2087]
Myers, J., "IMAP4 QUOTA extension", RFC 2087, January 1997.
: [RFC-2086]
Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997.
: [OSSL]
http://www.openssl.org
: [RSSL]
http://savannah.gnu.org/projects/rubypki
=end =end
require "socket" require "socket"
@ -804,6 +925,16 @@ module Net
end end
end end
def getquotaroot(mailbox)
synchronize do
send_command("GETQUOTAROOT", mailbox)
result = []
result.concat(@responses.delete("QUOTAROOT"))
result.concat(@responses.delete("QUOTA"))
return result
end
end
def getquota(mailbox) def getquota(mailbox)
synchronize do synchronize do
send_command("GETQUOTA", mailbox) send_command("GETQUOTA", mailbox)
@ -821,8 +952,13 @@ module Net
send_command("SETQUOTA", mailbox, RawData.new(data)) send_command("SETQUOTA", mailbox, RawData.new(data))
end end
def setacl(mailbox, user, acl) # setacl(mailbox, user, nil) will remove rights.
send_command("SETACL", mailbox, user, acl) def setacl(mailbox, user, rights)
if rights.nil?
send_command("SETACL", mailbox, user, "")
else
send_command("SETACL", mailbox, user, rights)
end
end end
def getacl(mailbox) def getacl(mailbox)
@ -1291,6 +1427,8 @@ module Net
ResponseCode = Struct.new(:name, :data) ResponseCode = Struct.new(:name, :data)
MailboxList = Struct.new(:attr, :delim, :name) MailboxList = Struct.new(:attr, :delim, :name)
MailboxQuota = Struct.new(:mailbox, :usage, :quota) MailboxQuota = Struct.new(:mailbox, :usage, :quota)
MailboxQuotaRoot = Struct.new(:mailbox, :quotaroots)
MailboxACLItem = Struct.new(:user, :rights)
StatusData = Struct.new(:mailbox, :attr) StatusData = Struct.new(:mailbox, :attr)
FetchData = Struct.new(:seqno, :attr) FetchData = Struct.new(:seqno, :attr)
Envelope = Struct.new(:date, :subject, :from, :sender, :reply_to, Envelope = Struct.new(:date, :subject, :from, :sender, :reply_to,
@ -1474,6 +1612,8 @@ module Net
return list_response return list_response
when /\A(?:QUOTA)\z/ni when /\A(?:QUOTA)\z/ni
return getquota_response return getquota_response
when /\A(?:QUOTAROOT)\z/ni
return getquotaroot_response
when /\A(?:ACL)\z/ni when /\A(?:ACL)\z/ni
return getacl_response return getacl_response
when /\A(?:SEARCH|SORT)\z/ni when /\A(?:SEARCH|SORT)\z/ni
@ -2037,15 +2177,32 @@ module Net
end end
end end
def getquotaroot_response
# Similar to getquota, but only admin can use getquota.
token = match(T_ATOM)
name = token.value.upcase
match(T_SPACE)
mailbox = astring
quotaroots = []
while true
token = lookahead
break unless token.symbol == T_SPACE
shift_token
quotaroots.push(astring)
end
data = MailboxQuotaRoot.new(mailbox, quotaroots)
return UntaggedResponse.new(name, data, @str)
end
def getacl_response def getacl_response
token = match(T_ATOM) token = match(T_ATOM)
name = token.value.upcase name = token.value.upcase
match(T_SPACE) match(T_SPACE)
mailbox = astring mailbox = astring
data = []
token = lookahead token = lookahead
if token.symbol == T_SPACE if token.symbol == T_SPACE
shift_token shift_token
data = []
while true while true
token = lookahead token = lookahead
case token.symbol case token.symbol
@ -2056,11 +2213,10 @@ module Net
end end
user = astring user = astring
match(T_SPACE) match(T_SPACE)
acl = astring rights = astring
data.push([user, acl]) ##XXX data.push([user, rights])
data.push(MailboxACLItem.new(user, rights))
end end
else
data = []
end end
return UntaggedResponse.new(name, data, @str) return UntaggedResponse.new(name, data, @str)
end end