Version History
------------------------
2002/11/15 -     0.032   -Changed _AdodbExtendedSearch so it used a "paged search", and so that GetVersion would return a result set
                          even if the result set was larger than the allowed maximum (currently default set to 100 in Exchange 5.5).
                         -Changed _AdodbExtendedSearch so that a non-fuzzy search would also be case-insensitive.
                         -Changed new so that if you pass new a server name, and it must perform a GetVersion to determine what to create,
                          it could do so and create the object for return to the perl script.
                         -Modified GetVersion so it would supress the "Class not Found" error if the workstation did not have the E2K
                          tools loaded, as it tries to create a "CDOEXM.ExchangeServer" object (if the tools aren't loaded, the user doesn't
                          need to know that a class was not found, because they aren't worried about a class, just the version).
                         -Changed AddDLMembers and _E55GetMailbox to add:
                                -the ability to search for the "distinguishedname" of the DL and of the mailbox you want to add
                                -the ability to send buth functions either an alias or distinguishedname of the mailbox and/or the DL.
                         -This version is dedicated to:  Mr. Peter Thoenen EPS (e-mail supressed for confidentiality), who came to me with
                          the problems above, and didn't give up on me, even after a week (actually more like a month) of playing e-mail tag
                          and going through endless "check this value" tag.....  But we finally worked through the problems and now you have
                          build 032.
                         -Made a change _E2KCreateMailbox to take heed of:
                              http://support.microsoft.com/default.aspx?scid=kb;EN-US;q321039
                          to correct errors in E2K creation that I did not experience in my testing.
                            - Thanks to Jeremy D. Brinkman (e-mail supressed for confidentiality) for being a guinea pig on this update.
                                I knew about this as a potential issue, but hadn't experienced it in testing.
                         -Added to the docs based on feedback.
                          
2002/10/04 -     0.031   -Changed GetVersion for 5.5 to query the individual Exchange Servers and not AD.
                              -If there is a domain that you query that does not have:
                                  -an AD Connector to an AD domain, or
                                  -a non-AD domain,
                                the old way would fail.
                         -Also changed default behavior of GetVersion if the E2K Tools were isntalled so that it
                           tries using the E2K tools, and on failure tries the E55 Tools.
                         -Added Const.pm for constants instead of declaring them at the top of the module.
2002/09/19 -     0.030   -Removed all the individual Win32::OLE::Warn statements and added one in new
                            and a return to the original value in DESTROY.
                              -hopefully that fixes a reset of Win32::OLE->LastError in the CreateMailbox sub.
                         -Removed dependency on Win32::Exchange::Const for now until I rework it better. 
                             -We're back to staticly assigned local variables.
                                 changing them to use const ADS_SID_WINNT_PATH = 0x1 wouldn't be all that difficult,
                                 but I will wait for another release.
                         -Renamed _ErrorCheck to ErrorCheck.
                         -Removed the check in _E55CreateMailbox where it tested to see if the mailbox existed first.
                         -Removed the check in _E55CreateMailbox where it tested to see if the mailbox existed first.
                             --Doesn't belong in CreateMailbox....  (You should test with GetMailbox first if you want to do that).
                         -Fixed a bless that wasn't reblessing a Win32::Exchange object for later use in CreateMailbox.. Subsequent calls to
                            SetAttributes, SetPerms, SetOwner or other functions would fail.
                         -Added a _DebugComment to SetAttributes for each attribute at debug level 3.
2002/09/12 -     0.029   -Added GetPerms (5.5 and 2K).  --2K untested.
                             -I should probably modify SetPerms so it accepts that same format that GetPerms returns.
                         -I've already built Win32::Exchange::Const, but haven't finished/tested/incorporated it into Win32::Exchange.
2002/09/11 -     0.028   -Added GetOwner (5.5 only).
                         -Updated HTML docs to include reference to GetMailbox being a E2K friendly function.
2002/08/29 -     0.027   -Changed the function of DebugComment, to allow for severity of an impending print statement.
                         -Fixed a couple Exchange 5.5 bugs (they've probably been there about 10 revisions)...
                            -But I just tested the Exchange 5.5 stuff here at work.
                            -One of the fixes was to change fuzzy to allow the search to be performed on either of the 2 columns...
                                -This was breaking GetDistinguishedName because GetDistinguishedName needs to search the second
                                 attribute.
2002/08/27 -     0.026   -Added Distribution Lists for E2K WITH A PASSION!
                         -reworked a lot of the blesses (to wait to bless until returning from "SetPerms","CreateMaibox", etc.)
                         -made minor changes to _Errorcheck..  don't pass Win32::OLE->LastError() anymore.. (it looks at it itself)
2002/08/26 -     0.025   Re-implemented _E2KGetMailbox (for reasons stated in 0.024)
                         Revised versioning scheme to pull out the 0.0 and just go with 0.025
                         Found a need to handle internal error-checking (Win32::Exchange->LastError())
                             -probably will implement as a variable that a subroutine can check.
2002/08/26 - 0.0.0.024   Finally got a working _E2KSetPerms.  MUST HAVE EX2000SP2 (client and server) or greater!
                         Reworked the _E55SetPerms to mimic the foreach loop for the "LetProperty"s in _E2KSetPerms
                         -Fixed Duplicate _E2KSetAttributes
2002/08/23 - 0.0.0.023   Changed new.  If you send a version, you don't need a name.
2002/08/22 - 0.0.0.022a  OOPS.  I didn't roll the CreateMailbox changes.
2002/08/22 - 0.0.0.022   Added minimal testing (mswin32new.t), hopefully excluding me from more nastygrams. :(
                         Changed the behavior of "new" to allow for ->new(...) and ::new(...)
                         fixed some strict errors, and syntactical issues.  OOPS.
                         Changed CreateMailbox to allow for the mailbox_store dn to be sent in place of storage_group name and mb_store name.
                         Updated HTML docs.
                         Still no reply on our namespace.  :(
2002/08/21 - 0.0.0.021   Registered with CPAN,
                           -Requested Win32-Exchange as our namespace, no reply yet.
                         Added "fuzzy" search for $server_name in _AdodbExtendedSearch
                             Allowed for getting Home-MTA and Home-MBD programatically instead of linking strings together
2002/08/18 - 0.0.0.020   Added HTML Documentation, and invited perl-win32-users & admins for a look.
2002/08/18 - 0.0.0.019   Modified SetOwner and SetPerms to only take ("Domain\User"), and not ("PDC","Domain\User")
                             -In SetOwner's case, if the Username was "domain name-prepended", I overrode the pdc value anyway.
                             -In SetPerms' case, I didn't use the pdc value.
                         Added an HTML page chock-full-o' documentation, thank yous, and links to other useful sites.
2002/08/18 - 0.0.0.018   Mostly housekeeping.  I commented _E2kGetMailbox, because the underlying object is
                           a User Account, and there's nothing it can hold on to or allow you to do with it.
                         -P.S. There's no SetPerms for E2K, and that may be a problem, however
                           It's 11 days old, and I don't expect it to be complete.  :(
2002/08/18 - 0.0.0.017   Added AdodbExtendedSearch to accomplish more than AdodbSearch could (Eventually,
                           I think AdodbSearch will be deprecated.)
                         It seems that I broke some Exchange 5.5 (GetLDAPPath) stuff while making
                            the 2K stuff work.  That's fixed again. (And tested on 5.5 and on 2K)
2002/08/18 - 0.0.0.016   Changed Module name again.  Win32::Exchange (no code changes)
2002/08/18 - 0.0.0.015   Worked on GetMailbox for 5.5/E2K.  Samples look good (I need to test both, but haven't).
                               I feel more comfortable with the 5.5 routine, and have doubts about the 2K routine.
2002/08/17 - 0.0.0.014   Worked on SetAttributes for E2K.  Samples look good and work.
                           -A warning again. Be careful with ProxyAddresses/otherMailbox.
                            You are overwriting anything that previously existed (for now).
2002/08/16 - 0.0.0.013   Added 5th optional param to LocateMailboxStore for returning how many sg's and mb's there are
2002/08/16 - 0.0.0.012   Pulled out LocateMailboxStore code to it's own sub and created EnumStorageGroups and _TraverseStorageGroups
                         for use by LocateMailboxStore.
2002/08/16 - 0.0.0.011   Added if ($DEBUG) to all the internal print Statements, and made DEBUG an external settable option.
                          (use Win32::MSExchange qw ('DEBUG' => 1);
2002/08/16 - 0.0.0.010   GetVersion worked, but I reworked it as a CDOEXM.ExchangeServer call, instead of
                           the &AdodbSearch call...  It was a lot less code...
2002/08/16 - 0.0.0.009   Retooled GetVersion and rethought the logic behind it..  I think it will now work again.
2002/08/16 - 0.0.0.008   Changed name of package to Win32::MSExchange (no code modifiactons)
2002/08/15 - 0.0.0.007   get_version seemed to disappear as of v002.  :(
                           --reinstated.  I need to look at backwards compatability, but
                           CDO may have an easier,better method for extracting this info.
                             --It would probably be dependent on the E2K Client tools though... :(
2002/08/15 - 0.0.0.006   The Exchange 2000 Mailbox creates are finally working...
                           I need to work on setting attributes.
2002/08/14 - 0.0.0.005   I found how to enum storage groups instead of manually piecing them together by hand..  whew...
                         I removed one of the adodb_searches with this.
2002/08/13 - 0.0.0.004   Converted GetLDAPPath and and get_distinguished_name calls to surrogate adodb_search
                         Added compliance for the use of the "strict" module.
                         Pulled out a duplicate Create_Mailbox_2K sub...  OOPS....
                         Allowed for CreateMailbox to determine what mailbox you should create
                           by looking at the underlying object that was passed (that was fun) and
                           pass you to the right sub (Create_MBX_55 -or- Create_MBX_2K).
                         Added friendly error messages to help when:
                           -"CDOEXM" methods, or
                           -"ADsSecurity" methods are unavailable.
                           
2002/08/12 - 0.0.0.003   converted GetLDAPPath to use an ADO model instead of a recursive LDAP call.
                           -faster & less code
                         I have code that will pull version info from 2K servers, but it only seems to work within your domain.
                           -I need to test to see if I can give it a domain name to check.....
2002/08/12 - 0.0.0.002   Added get_version so I could start determining which servers were 5.5, so
                         I can conversely determine 2000 servers.
2002/08/09 - First Rev.  I finally got all the way through with the create, set attrs, perms, owner and dl additions
                               -I added a ton of error-checking in the add_members_to_dl.
2002/08/07 - First Rev.  I took the create_mailboxes subroutine from my Users.pl script and started hacking it
                         away into managable/meaningful chunks.
                           -I had fun writing GetLDAPPath...  It finds out what OU a server belongs to.
