Mailing List Archive

Patch to enable group quotas with postgres
Hi all,

I've written an implementation of group quotas for dbmail-1.2.3

At the moment it works with postgres only, but please take a look and give me feedback now, before I go on to change the mysql version and the admin tools.

I've attached a patch for src/dbmail-1.2.3/pgsql/dbpgsql.c

Implementation is as follows:

Users are grouped by their client_idnr.
To create a limit of 10M for client number 2, insert the following into the config table:

INSERT INTO config (item,value) VALUES ('client_maxmail_2',10485760)

When a mail arrives, following procedure is followed:
First, the user's individual maxmail is checked as normal.
If the message passes that check, then the config table is checked for a limit for his client_idnr.
If no such limit exists, or the limit is 0, the message is allowed.
If a limit does exist, the size of all mailboxes belonging to users with that client_idnr is calculated.
If the message would push the usage over the client's limit, the message is rejected, otherwise the message is allowed.

This gives the flexability to retain a limit on individual accounts in the group, while allowing other members to use up as much of the group quota as they want.
The one thing that cannot be done is to give a user within the group unlimited usage regardless of the group quota. That would defy the point of group quotas, although there is an easy workaround which I could implement should there be demand for it.

I've also changed the logic in the individual test -
it used to first calculate the total usage for that individual, and then retrieve the individual's limit.
It now retrieves the limit first, and if it's 0, it skips calculating the user's usage.

I'll wait until people have had a chance to find problems with the implementation before writing the mysql version.

Also, I'll alter dbmail-adduser to let quotas be set with it.
Any suggestions as to the syntax for this?
I'm thinking of using
dbmail-adduser g clientid -q maxmail

As soon as I have it done for 1.2.x, I'll do it for 2.x, so the sooner I get feedback, the sooner it can get into the tree.

-fr.

--
Feargal Reilly,
Codeshifter,
Chrysalink Systems.
Re: Patch to enable group quotas with postgres [ In reply to ]
This is an interesting use of the config table, and not one that I had
considered; but it also feels more like shell variable hackery than a proper
relational database schema :-\

Perhaps defining a clients table would make more sense? Currently it's sorta
"just there" in the users table, and doesn't really refer to anything or have
and defined relational properties. This is certainly one such property that
should be defined.

OTOH, I'm sure that IC&S and probably others have built management systems
that utilize the client_id field to refer to some other table or even another
database in some way. Can we define a clients table that doesn't interfere,
and/or enhances those existing management systems?

Aaron


Feargal Reilly <feargal@chrysalink.net> said:

> Hi all,
>
> I've written an implementation of group quotas for dbmail-1.2.3
>
> At the moment it works with postgres only, but please take a look and give
me feedback now, before I go on to change the mysql version and the admin tools.
>
> I've attached a patch for src/dbmail-1.2.3/pgsql/dbpgsql.c
>
> Implementation is as follows:
>
> Users are grouped by their client_idnr.
> To create a limit of 10M for client number 2, insert the following into the
config table:
>
> INSERT INTO config (item,value) VALUES ('client_maxmail_2',10485760)
>
> When a mail arrives, following procedure is followed:
> First, the user's individual maxmail is checked as normal.
> If the message passes that check, then the config table is checked for a
limit for his client_idnr.
> If no such limit exists, or the limit is 0, the message is allowed.
> If a limit does exist, the size of all mailboxes belonging to users with
that client_idnr is calculated.
> If the message would push the usage over the client's limit, the message is
rejected, otherwise the message is allowed.
>
> This gives the flexability to retain a limit on individual accounts in the
group, while allowing other members to use up as much of the group quota as
they want.
> The one thing that cannot be done is to give a user within the group
unlimited usage regardless of the group quota. That would defy the point of
group quotas, although there is an easy workaround which I could implement
should there be demand for it.
>
> I've also changed the logic in the individual test -
> it used to first calculate the total usage for that individual, and then
retrieve the individual's limit.
> It now retrieves the limit first, and if it's 0, it skips calculating the
user's usage.
>
> I'll wait until people have had a chance to find problems with the
implementation before writing the mysql version.
>
> Also, I'll alter dbmail-adduser to let quotas be set with it.
> Any suggestions as to the syntax for this?
> I'm thinking of using
> dbmail-adduser g clientid -q maxmail
>
> As soon as I have it done for 1.2.x, I'll do it for 2.x, so the sooner I get
feedback, the sooner it can get into the tree.
>
> -fr.
>
> --
> Feargal Reilly,
> Codeshifter,
> Chrysalink Systems.
>
>
> --Multipart_Tue__3_Feb_2004_21:18:33_+0000_082e9c00
> Content-Type: application/octet-stream;
> name="dbpgsql.c.patch"
> Content-Disposition: attachment;
> filename="dbpgsql.c.patch"
> Content-Transfer-Encoding: base64
>
> LS0tIGRicGdzcWwuYy5vcmlnCVdlZCBKYW4gMTQgMTY6MjA6NTMgMjAwNAorKysgZGJwZ3NxbC5j
> CVR1ZSBGZWIgIDMgMTk6MDY6NTUgMjAwNApAQCAtMTIxOSwzMiArMTIxOSwxNTcgQEAKICAgICog
> cmV0dXJucyAwIHdoZW4gc2l0dWF0aW9uIGlzIG9rIAogICAgKi8KIAotICB1NjRfdCBjdXJybWFp
> bF9zaXplID0gMCwgbWF4bWFpbF9zaXplID0gMCwgaiwgbjsKKyAgdTY0X3QgY3Vycm1haWxfc2l6
> ZSA9IDAsIG1heG1haWxfc2l6ZSA9IDAsIGosIG4sIGNsaWVudF9pZG5yLCBjbGllbnRfbWF4bWFp
> bDsKIAogICAqdXNlcmlkbnIgPSBkYl9nZXRfdXNlcmlkbnIgKG1lc3NhZ2VpZG5yKTsKIAorICAv
> KiBnZXQgdGhlIHVzZXIncyBpbmRpdmlkdWFsIGxpbWl0ICovCisgIG1heG1haWxfc2l6ZSA9IGF1
> dGhfZ2V0bWF4bWFpbHNpemUoKnVzZXJpZG5yKTsKKyAgLyogaWYgbm8gbGltaXRzIGFyZSBzZXQg
> Zm9yIHRoZSBib3RoIHVzZXIgYW5kIGNsaWVudCwgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1bm5l
> Y2Nlc3NhcnkgKi8KKyAgaWYgKG1heG1haWxfc2l6ZSA+IDApCisgICAgewogICAgIC8qIGNoZWNr
> aW5nIGN1cnJlbnQgc2l6ZSAqLwotICBzbnByaW50ZiAocXVlcnksIERFRl9RVUVSWVNJWkUsIlNF
> TEVDVCBtYWlsYm94X2lkbnIgRlJPTSBtYWlsYm94ZXMgV0hFUkUgb3duZXJfaWRuciA9ICVsbHU6
> OmJpZ2ludCIsCisgICAgc25wcmludGYgKHF1ZXJ5LCBERUZfUVVFUllTSVpFLCJTRUxFQ1QgbWFp
> bGJveF9pZG5yIEZST00gbWFpbGJveGVzIFdIRVJFIG93bmVyX2lkbnIgPSAlbGx1OjpiaWdpbnQi
> LAogICAgICAgICAgICAgKnVzZXJpZG5yKTsKKyAgCisgICAgaWYgKGRiX3F1ZXJ5KHF1ZXJ5KSAh
> PSAwKQorICAgICAgeworICAgICAgICB0cmFjZSAoVFJBQ0VfRVJST1IsImRiX2NoZWNrX3NpemVs
> aW1pdCgpOiBjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeSBbJXNdXG4iLAorCSAgICAgICBxdWVyeSk7
> CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgCisgICAgaWYgKFBRbnR1cGxlcyhyZXMp
> PDEpCisgICAgICB7CisgICAgICAgIHRyYWNlIChUUkFDRV9FUlJPUiwiZGJfY2hlY2tfc2l6ZWxp
> bWl0KCk6IHVzZXIgaGFzIE5PIG1haWxib3hlc1xuIik7CisgICAgICAgIFBRY2xlYXIocmVzKTsK
> KyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgIAorICAgIGZvciAoUFFjb3VudGVyID0gMDsg
> UFFjb3VudGVyIDwgUFFudHVwbGVzIChyZXMpOyBQUWNvdW50ZXIrKykKKyAgICAgIHsKKyAgICAg
> ICAgdHJhY2UgKFRSQUNFX0RFQlVHLCJkYl9jaGVja19zaXplbGltaXQoKTogY2hlY2tpbmcgbWFp
> bGJveCBbJXNdXG4iLHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBQUWdldHZhbHVlIChyZXMsIFBR
> Y291bnRlciwgMCk7CisgIAorICAgICAgICBuID0gdmFsdWUgPyBzdHJ0b3VsbCh2YWx1ZSwgTlVM
> TCwgMTApIDogMDsKKyAgICAgICAgaiA9IGRiX2NoZWNrX21haWxib3hzaXplKG4pOworICAKKyAg
> ICAgICAgaWYgKGogPT0gKHU2NF90KS0xKQorICAgICAgICAgIHsKKwkgICAgdHJhY2UoVFJBQ0Vf
> RVJST1IsImRiX2NoZWNrX3NpemVsaW1pdCgpOiBjb3VsZCBub3QgdmVyaWZ5IG1haWxib3hzaXpl
> XG4iKTsKKyAgCisJICAgIFBRY2xlYXIocmVzKTsKKwkgICAgcmV0dXJuIC0xOworICAgICAgICAg
> IH0KKyAgCisgICAgICAgIGN1cnJtYWlsX3NpemUgKz0gajsKKyAgICAgIH0KKyAgCisgICAgUFFj
> bGVhcihyZXMpOworICAKKyAgICB0cmFjZSAoVFJBQ0VfREVCVUcsICJkYl9jaGVja19zaXplbGlt
> aXQoKTogY29tcGFyaW5nIGN1cnJzaXplICsgYmxvY2tzaXplICBbJWxsdV0sIG1heHNpemUgWyVs
> bHVdXG4iLAorCSAgIGN1cnJtYWlsX3NpemUsIG1heG1haWxfc2l6ZSk7CisgIAorICAgIGlmICgo
> Y3Vycm1haWxfc2l6ZSA+IG1heG1haWxfc2l6ZSkgJiYgKG1heG1haWxfc2l6ZSAhPSAwKSkKKyAg
> ICAgIHsKKyAgICAgICAgdHJhY2UgKFRSQUNFX0lORk8sImRiX2NoZWNrX3NpemVsaW1pdCgpOiBt
> YWlsYm94c2l6ZSBvZiB1c2VyaWRuciAlbGx1IGV4Y2VlZCB3aXRoICVsbHUgYnl0ZXNcbiIsIAor
> CSAgICAgICAqdXNlcmlkbnIsIChjdXJybWFpbF9zaXplKS1tYXhtYWlsX3NpemUpOworICAKKyAg
> ICAgICAgLyogdXNlciBpcyBleGNlZWRpbmcsIHdlJ3JlIGdvaW5nIHRvIGV4ZWN1dGUgYSByb2xs
> YmFjayBub3cgKi8KKyAgICAgICAgLyogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGEgdHJhbnNhY3Rp
> b24gYmFzZWQgcm9sbCBiYWNrIGluIFBvc3RncmVTUUwgKi8KKyAgCisgICAgICAgIHNucHJpbnRm
> IChxdWVyeSxERUZfUVVFUllTSVpFLCJERUxFVEUgRlJPTSBtZXNzYWdlYmxrcyBXSEVSRSBtZXNz
> YWdlX2lkbnIgPSAlbGx1OjpiaWdpbnQiLCAKKyAgICAgICAgICAgICAgICBtZXNzYWdlaWRucik7
> CisKKyAgICAgICAgaWYgKGRiX3F1ZXJ5KHF1ZXJ5KSAhPSAwKQorICAgICAgICAgIHsKKwkgICAg
> dHJhY2UgKFRSQUNFX0VSUk9SLCJkYl9jaGVja19zaXplbGltaXQoKTogcm9sbGJhY2sgb2YgbWFp
> bGJveCBhZGQgZmFpbGVkXG4iKTsKKwkgICAgcmV0dXJuIC0yOworICAgICAgICAgIH0KKyAgCisg
> ICAgICAgIHNucHJpbnRmIChxdWVyeSxERUZfUVVFUllTSVpFLCJERUxFVEUgRlJPTSBtZXNzYWdl
> cyBXSEVSRSBtZXNzYWdlX2lkbnIgPSAlbGx1OjpiaWdpbnQiLAorICAgICAgICAgICAgICAgICAg
> bWVzc2FnZWlkbnIpOworICAKKyAgICAgICAgaWYgKGRiX3F1ZXJ5KHF1ZXJ5KSAhPSAwKQorICAg
> ICAgICAgIHsKKwkgICAgdHJhY2UgKFRSQUNFX0VSUk9SLCJkYl9jaGVja19zaXplbGltaXQoKTog
> cm9sbGJsb2NrIG9mIG1haWxib3ggYWRkIGZhaWxlZC4iCisJCSAgICIgREIgbWlnaHQgYmUgaW5j
> b25zaXN0ZW50LiIKKwkJICAgIiBydW4gZGJtYWlsLW1haW50ZW5hbmNlXG4iKTsKKwkgICAgcmV0
> dXJuIC0yOworICAgICAgICAgIH0KKyAgCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQor
> ICBlbHNlIAorICAgIHsKKyAgICAgICB0cmFjZSAoVFJBQ0VfREVCVUcsInVzZXIgaGFzIG5vIGlu
> ZGl2aWR1YWwgcXVvdGFcbiIpOworICAgIH0KKworICAvKiBzZWUgd2hhdCBjbGllbnQgZ3JvdXAg
> dGhlIHVzZXIgaXMgaW4gKi8KKyAgc25wcmludGYgKHF1ZXJ5LCBERUZfUVVFUllTSVpFLCJTRUxF
> Q1QgY2xpZW50X2lkbnIgRlJPTSB1c2VycyBXSEVSRSB1c2VyX2lkbnIgPSAlbGx1OjpiaWdpbnQi
> LCp1c2VyaWRucik7CisgIGlmIChkYl9xdWVyeShxdWVyeSkgPT0gLTEpCisgICAgeworICAgICAg
> dHJhY2UoVFJBQ0VfRVJST1IsImRiX2NoZWNrX3NpemVsaW1pdCgpOiBjb3VsZCBub3QgcmV0cmll
> dmUgY2xpZW50X2lkbnIgZnJvbSB1c2VyczogJXMiLCBxdWVyeSk7CisgICAgICByZXR1cm4gLTE7
> CisgICAgfQorICBpZiAoUFFudHVwbGVzKHJlcykgPT0gMCkKKyAgICB7CisgICAgICB0cmFjZShU
> UkFDRV9XQVJOSU5HLCAiZGJfY2hlY2tfc2l6ZWxpbWl0KCk6IHVzZXIgWyVsbHVdIGRvZXMgbm90
> IGhhdmUgYW55IGNsaWVudF9pZG5yIHNldCIsICp1c2VyaWRucik7CisgICAgICBQUWNsZWFyKHJl
> cyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UgCisgICAgY2xpZW50X2lkbnIgPSBz
> dHJ0b3VsbChQUWdldHZhbHVlIChyZXMsIDAsIDApLCBOVUxMLCAxMCk7CisgIFBRY2xlYXIocmVz
> KTsKKworICAvKiBub3cgbG9vayBmb3IgYSBjbGllbnQgZ3JvdXAgbWF4bWFpbCAqLworICBzbnBy
> aW50ZiAocXVlcnksIERFRl9RVUVSWVNJWkUsIlNFTEVDVCB2YWx1ZSBGUk9NIGNvbmZpZyBXSEVS
> RSBpdGVtID0gJ2NsaWVudF9tYXhtYWlsXyVsbHUnIixjbGllbnRfaWRucik7CisgIGlmIChkYl9x
> dWVyeShxdWVyeSkgPT0gLTEpCisgICAgeworICAgICAgdHJhY2UoVFJBQ0VfRVJST1IsImRiX2No
> ZWNrX3NpemVsaW1pdCgpOiBjb3VsZCBub3QgcmV0cmlldmUgY2xpZW50IG1heG1haWwgZnJvbSBj
> b25maWc6ICVzIiwgcXVlcnkpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgaWYgKFBRbnR1
> cGxlcyhyZXMpID09IDApCisgICAgeworICAgICAgUFFjbGVhcihyZXMpOworICAgICAgcmV0dXJu
> IDA7CisgICAgfQorICBlbHNlIAorICAgIHsKKyAgICAvKiBhcyB0aGVyZSBhcmUgbm8gdW5pcXVl
> IGNvbnN0YWludHMgb24gY29uZmlnIHRhYmxlLCAKKyAgICAgICBpZiB0aGVyZSB3ZXJlIG11bHRp
> cGxlIHJvd3MgcmV0dXJuZWQsIHdlJ3JlIGp1c3QgZ29pbmcgdG8gdXNlIHRoZSBmaXJzdCByb3cg
> Zm91bmQgKi8KKyAgICBjbGllbnRfbWF4bWFpbCA9IHN0cnRvdWxsKFBRZ2V0dmFsdWUgKHJlcywg
> MCwgMCksIE5VTEwsIDEwKTsKKyAgICB9CiAKKyAgUFFjbGVhcihyZXMpOwogCisgIHRyYWNlIChU
> UkFDRV9ERUJVRywgImRiX2NoZWNrX3NpemVsaW1pdCgpOiBtYXhtYWlsIGZvciBjbGllbnRfaWRu
> ciBbJWxsdV0gaXMgWyVsbHVdXG4iLGNsaWVudF9pZG5yLGNsaWVudF9tYXhtYWlsKTsKKyAgaWYg
> KGNsaWVudF9tYXhtYWlsID09IDApIAorICAgIHJldHVybiAwOworCisgIC8qIHJldHJpZXZlIGxp
> c3Qgb2YgYWxsIG1haWxib3hlcyBiZWxvbmdpbmcgdG8gdXNlcnMgaW4gdGhlIGdyb3VwIAorICAg
> ICBpZiB3ZSBhbHJlYWR5IGNoZWNrZWQgdGhlIHVzZXIncyBpbmRpdmlkdWFsIHVzYWdlLCB3ZSBj
> YW4gZXhjbHVkZSBoaXMgbWFpbGJveGVzIGZyb20gdGhlIGxpc3QgKi8KKyAgaWYgKG1heG1haWxf
> c2l6ZT09MCkgCisgICAgICBzbnByaW50ZiAocXVlcnksIERFRl9RVUVSWVNJWkUsIlNFTEVDVCBt
> Lm1haWxib3hfaWRuciBGUk9NIG1haWxib3hlcyBtLHVzZXJzIHUgV0hFUkUgbS5vd25lcl9pZG5y
> PXUudXNlcl9pZG5yIEFORCB1LmNsaWVudF9pZG5yID0gJWxsdTo6YmlnaW50IixjbGllbnRfaWRu
> cik7CisgIGVsc2UgCisgICAgICBzbnByaW50ZiAocXVlcnksIERFRl9RVUVSWVNJWkUsIlNFTEVD
> VCBtLm1haWxib3hfaWRuciBGUk9NIG1haWxib3hlcyBtLHVzZXJzIHUgV0hFUkUgbS5vd25lcl9p
> ZG5yPXUudXNlcl9pZG5yIEFORCB1LmNsaWVudF9pZG5yID0gJWxsdTo6YmlnaW50IEFORCB1LnVz
> ZXJfaWRuciAhPSAlbGx1OjpiaWdpbnQiLGNsaWVudF9pZG5yLCp1c2VyaWRucik7CisgICAgICAg
> ICAgICAKICAgaWYgKGRiX3F1ZXJ5KHF1ZXJ5KSAhPSAwKQogICAgIHsKICAgICAgIHRyYWNlIChU
> UkFDRV9FUlJPUiwiZGJfY2hlY2tfc2l6ZWxpbWl0KCk6IGNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5
> IFslc11cbiIsCiAJICAgICBxdWVyeSk7CiAgICAgICByZXR1cm4gLTE7CiAgICAgfQotCiAgIGlm
> IChQUW50dXBsZXMocmVzKTwxKQogICAgIHsKLSAgICAgIHRyYWNlIChUUkFDRV9FUlJPUiwiZGJf
> Y2hlY2tfc2l6ZWxpbWl0KCk6IHVzZXIgaGFzIE5PIG1haWxib3hlc1xuIik7CiAgICAgICBQUWNs
> ZWFyKHJlcyk7CiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgZm9yIChQUWNvdW50ZXIgPSAw
> OyBQUWNvdW50ZXIgPCBQUW50dXBsZXMgKHJlcyk7IFBRY291bnRlcisrKQogICAgIHsKLSAgICAg
> IHRyYWNlIChUUkFDRV9ERUJVRywiZGJfY2hlY2tfc2l6ZWxpbWl0KCk6IGNoZWNraW5nIG1haWxi
> b3ggWyVzXVxuIix2YWx1ZSk7CisgICAgICAvKiBub3cgY2hlY2sgdGhlIHNpemUgb2YgZWFjaCBt
> YWlsYm94ICovCiAgICAgICB2YWx1ZSA9IFBRZ2V0dmFsdWUgKHJlcywgUFFjb3VudGVyLCAwKTsK
> IAogICAgICAgbiA9IHZhbHVlID8gc3RydG91bGwodmFsdWUsIE5VTEwsIDEwKSA6IDA7CkBAIC0x
> MjU3LDI4ICsxMzgyLDIzIEBACiAJICBQUWNsZWFyKHJlcyk7CiAJICByZXR1cm4gLTE7CiAgICAg
> ICAgIH0KLQogICAgICAgY3Vycm1haWxfc2l6ZSArPSBqOwogICAgIH0KIAogICBQUWNsZWFyKHJl
> cyk7CiAKLSAgICAvKiBjdXJyZW50IG1haWxzaXplIGZyb20gSU5CT1ggaXMgbm93IGtub3duLCBu
> b3cgY2hlY2sgdGhlIG1heHNpemUgZm9yIHRoaXMgdXNlciAqLwotICBtYXhtYWlsX3NpemUgPSBh
> dXRoX2dldG1heG1haWxzaXplKCp1c2VyaWRucik7Ci0KLQotICB0cmFjZSAoVFJBQ0VfREVCVUcs
> ICJkYl9jaGVja19zaXplbGltaXQoKTogY29tcGFyaW5nIGN1cnJzaXplICsgYmxvY2tzaXplICBb
> JWxsdV0sIG1heHNpemUgWyVsbHVdXG4iLAotCSBjdXJybWFpbF9zaXplLCBtYXhtYWlsX3NpemUp
> OwotCi0KLSAgLyogY3Vycm1haWwgYWxyZWFkeSByZXByZXNlbnRzIHRoZSBjdXJyZW50IHNpemUg
> b2YgbWVzc2FnZXMgZnJvbSB0aGlzIHVzZXIgKi8KLQotICBpZiAoKChjdXJybWFpbF9zaXplKSA+
> IG1heG1haWxfc2l6ZSkgJiYgKG1heG1haWxfc2l6ZSAhPSAwKSkKKyAgLyogCisgICAgIGZpbmFs
> bHksIGNoZWNrIGlmIHRoZSBjdXJyZW50IG1lc3NhZ2UgcHVzaGVzIHVzIG92ZXIgdGhlIGdyb3Vw
> IGxpbWl0LgorICAqLworCisgIHRyYWNlIChUUkFDRV9ERUJVRywgImRiX2NoZWNrX3NpemVsaW1p
> dCgpOiBjb21wYXJpbmcgY3VycnNpemUgKyBibG9ja3NpemUgIFslbGx1XSwgY2xpZW50X21heG1h
> aWwgWyVsbHVdXG4iLAorCSBjdXJybWFpbF9zaXplLCBjbGllbnRfbWF4bWFpbCk7CisgIGlmIChj
> dXJybWFpbF9zaXplID4gY2xpZW50X21heG1haWwpCiAgICAgewotICAgICAgdHJhY2UgKFRSQUNF
> X0lORk8sImRiX2NoZWNrX3NpemVsaW1pdCgpOiBtYWlsYm94c2l6ZSBvZiB1c2VyaWRuciAlbGx1
> IGV4Y2VlZCB3aXRoICVsbHUgYnl0ZXNcbiIsIAotCSAgICAgKnVzZXJpZG5yLCAoY3Vycm1haWxf
> c2l6ZSktbWF4bWFpbF9zaXplKTsKKyAgICAgIHRyYWNlIChUUkFDRV9JTkZPLCJkYl9jaGVja19z
> aXplbGltaXQoKTogY29tYmluZWQgbWFpbGJveHNpemUgb2YgY2xpZW50aWRuciAlbGx1IGV4Y2Vl
> ZGVkIGJ5ICVsbHUgYnl0ZXNcbiIsIAorCSAgICAgY2xpZW50X2lkbnIsIGN1cnJtYWlsX3NpemUt
> Y2xpZW50X21heG1haWwpOwogCi0gICAgICAvKiB1c2VyIGlzIGV4Y2VlZGluZywgd2UncmUgZ29p
> bmcgdG8gZXhlY3V0ZSBhIHJvbGxiYWNrIG5vdyAqLworICAgICAgLyogY2xpZW50IGlzIGV4Y2Vl
> ZGluZywgd2UncmUgZ29pbmcgdG8gZXhlY3V0ZSBhIHJvbGxiYWNrIG5vdyAqLwogICAgICAgLyog
> RklYTUU6IHRoaXMgc2hvdWxkIGJlIGEgdHJhbnNhY3Rpb24gYmFzZWQgcm9sbCBiYWNrIGluIFBv
> c3RncmVTUUwgKi8KIAogICAgICAgc25wcmludGYgKHF1ZXJ5LERFRl9RVUVSWVNJWkUsIkRFTEVU
> RSBGUk9NIG1lc3NhZ2VibGtzIFdIRVJFIG1lc3NhZ2VfaWRuciA9ICVsbHU6OmJpZ2ludCIsIApA
> QCAtMTMwMyw3ICsxNDIzLDYgQEAKIAogICAgICAgcmV0dXJuIDE7CiAgICAgfQotCiAgIHJldHVy
> biAwOwogfQogCg==
>
> --Multipart_Tue__3_Feb_2004_21:18:33_+0000_082e9c00--
>
> --=.YY23l:++ACyxFS



--