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:
parent
7806b0ae28
commit
4a58b0fd7c
2 changed files with 176 additions and 9 deletions
11
ChangeLog
11
ChangeLog
|
@ -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.
|
||||||
|
|
174
lib/net/imap.rb
174
lib/net/imap.rb
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue