Issue 8474 - Securely Erase BerElement Buffer After Use
Summary: Securely Erase BerElement Buffer After Use
Status: UNCONFIRMED
Alias: None
Product: OpenLDAP
Classification: Unclassified
Component: slapd (show other issues)
Version: 2.4.44
Hardware: All All
: --- enhancement
Target Milestone: 2.7.0
Assignee: OpenLDAP project
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-08-05 15:53 UTC by alcronin@cisco.com
Modified: 2021-07-13 16:18 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description alcronin@cisco.com 2016-08-05 15:53:48 UTC
Full_Name: Alan Cronin
Version: 2.4.44
OS: Windows 8.1
URL: https://dl.dropboxusercontent.com/u/82343475/SecurelyEraseBuffer.diff
Submission from: (NULL) (2001:420:4041:2003:f942:59a5:545f:b334)


The following patch is a modification to the OpenLDAP BerElement buffer. The
buffer can be used to contain the LDAP request including the password for
authentication. While this is free'd when it is no longer needed, the contents
of the buffer is not overwritten from memory. This can lead to someone reading
the memory of the process and determining what the password is. The change
included in this patch will iterate over the memory and clear it. This will
remove any trace of the password by the time execution is handed back to the
caller.

The attached patch file is derived from OpenLDAP Software. All of the
modifications to OpenLDAP Software represented in the following patch(es) were
developed by Alan Cronin alcronin@cisco.com. I have not assigned rights and/or
interest in this work to any party. 
The attached file is derived from OpenLDAP Software. All of the modifications to
OpenLDAP Software represented in the following patch(es) were developed by Cisco
Systems, Inc.. Cisco Systems, Inc. has not assigned rights and/or interest in
this work to any party. I, Alan Cronin am authorized by Cisco Systems, Inc., my
employer, to release this work under the following terms. 
Cisco Systems, Inc. hereby place the following modifications to OpenLDAP
Software (and only these modifications) into the public domain. Hence, these
modifications may be freely used and/or redistributed for any purpose with or
without attribution and/or other notice. 
Comment 1 Howard Chu 2016-08-05 18:50:05 UTC
alcronin@cisco.com wrote:
> Full_Name: Alan Cronin
> Version: 2.4.44
> OS: Windows 8.1
> URL: https://dl.dropboxusercontent.com/u/82343475/SecurelyEraseBuffer.diff
> Submission from: (NULL) (2001:420:4041:2003:f942:59a5:545f:b334)
>
>
> The following patch is a modification to the OpenLDAP BerElement buffer. The
> buffer can be used to contain the LDAP request including the password for
> authentication. While this is free'd when it is no longer needed, the contents
> of the buffer is not overwritten from memory. This can lead to someone reading
> the memory of the process and determining what the password is. The change
> included in this patch will iterate over the memory and clear it. This will
> remove any trace of the password by the time execution is handed back to the
> caller.

Why would you insert a performance pessimization into every use of the LBER 
library, rather than just erasing the password from a Bind request?

Why would you use an explicitly coded loop setting one character at a time, 
instead of using libc's memset() which has probably been well optimized?

> The attached patch file is derived from OpenLDAP Software. All of the
> modifications to OpenLDAP Software represented in the following patch(es) were
> developed by Alan Cronin alcronin@cisco.com. I have not assigned rights and/or
> interest in this work to any party.
> The attached file is derived from OpenLDAP Software. All of the modifications to
> OpenLDAP Software represented in the following patch(es) were developed by Cisco
> Systems, Inc.. Cisco Systems, Inc. has not assigned rights and/or interest in
> this work to any party. I, Alan Cronin am authorized by Cisco Systems, Inc., my
> employer, to release this work under the following terms.
> Cisco Systems, Inc. hereby place the following modifications to OpenLDAP
> Software (and only these modifications) into the public domain. Hence, these
> modifications may be freely used and/or redistributed for any purpose with or
> without attribution and/or other notice.
>
>


-- 
   -- Howard Chu
   CTO, Symas Corp.           http://www.symas.com
   Director, Highland Sun     http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP  http://www.openldap.org/project/

Comment 2 alcronin@cisco.com 2016-08-08 10:37:56 UTC
Hi Howard,

I can change the code so that it overwrites the memory from ldap_free_request_int() instead. This will cover the execution using a bind (both synchronous and asynchronous). Is there any other places where the password would be in the buffer that needs to be cleared? The reason for inserting it into ber_free_buf() was that it would clear all places.

Some compilers will optimize calls to memset() so that only the first character will be changed. Leaving the rest of the string intact. This is why the iteration is in place.

Thanks for looking into this patch.

Alan

On 05/08/2016, 19:50, "Howard Chu" <hyc@symas.com> wrote:

    alcronin@cisco.com wrote:
    > Full_Name: Alan Cronin
    > Version: 2.4.44
    > OS: Windows 8.1
    > URL: https://dl.dropboxusercontent.com/u/82343475/SecurelyEraseBuffer.diff
    > Submission from: (NULL) (2001:420:4041:2003:f942:59a5:545f:b334)
    >
    >
    > The following patch is a modification to the OpenLDAP BerElement buffer. The
    > buffer can be used to contain the LDAP request including the password for
    > authentication. While this is free'd when it is no longer needed, the contents
    > of the buffer is not overwritten from memory. This can lead to someone reading
    > the memory of the process and determining what the password is. The change
    > included in this patch will iterate over the memory and clear it. This will
    > remove any trace of the password by the time execution is handed back to the
    > caller.
    
    Why would you insert a performance pessimization into every use of the LBER 
    library, rather than just erasing the password from a Bind request?
    
    Why would you use an explicitly coded loop setting one character at a time, 
    instead of using libc's memset() which has probably been well optimized?
    
    > The attached patch file is derived from OpenLDAP Software. All of the
    > modifications to OpenLDAP Software represented in the following patch(es) were
    > developed by Alan Cronin alcronin@cisco.com. I have not assigned rights and/or
    > interest in this work to any party.
    > The attached file is derived from OpenLDAP Software. All of the modifications to
    > OpenLDAP Software represented in the following patch(es) were developed by Cisco
    > Systems, Inc.. Cisco Systems, Inc. has not assigned rights and/or interest in
    > this work to any party. I, Alan Cronin am authorized by Cisco Systems, Inc., my
    > employer, to release this work under the following terms.
    > Cisco Systems, Inc. hereby place the following modifications to OpenLDAP
    > Software (and only these modifications) into the public domain. Hence, these
    > modifications may be freely used and/or redistributed for any purpose with or
    > without attribution and/or other notice.
    >
    >
    
    
    -- 
       -- Howard Chu
       CTO, Symas Corp.           http://www.symas.com
       Director, Highland Sun     http://highlandsun.com/hyc/
       Chief Architect, OpenLDAP  http://www.openldap.org/project/
    

Comment 3 Howard Chu 2016-08-08 20:37:21 UTC
Alan Cronin (alcronin) wrote:
> Hi Howard,
>
> I can change the code so that it overwrites the memory from
ldap_free_request_int() instead. This will cover the execution using a bind
(both synchronous and asynchronous). Is there any other places where the
password would be in the buffer that needs to be cleared? The reason for
inserting it into ber_free_buf() was that it would clear all places.

I see, you're looking at the client side. What about the slapd side?

There are 2 main places where passwords occur - Bind, and PasswordModify exop. 
They might also occur in Add and Modify requests. Add is not so unusual, 
Modify should not happen since clients should use PasswordModify instead.

> Some compilers will optimize calls to memset() so that only the first
character will be changed. Leaving the rest of the string intact.

That's clearly a compiler bug then. If you have examples of such situations 
you should report that to the respective compiler maintainers.

> This is why
the iteration is in place.
>
> Thanks for looking into this patch.
>
> Alan
>
> On 05/08/2016, 19:50, "Howard Chu" <hyc@symas.com> wrote:
>
>      alcronin@cisco.com wrote:
>      > Full_Name: Alan Cronin
>      > Version: 2.4.44
>      > OS: Windows 8.1
>      > URL: https://dl.dropboxusercontent.com/u/82343475/SecurelyEraseBuffer.diff
>      > Submission from: (NULL) (2001:420:4041:2003:f942:59a5:545f:b334)
>      >
>      >
>      > The following patch is a modification to the OpenLDAP BerElement buffer. The
>      > buffer can be used to contain the LDAP request including the password for
>      > authentication. While this is free'd when it is no longer needed, the contents
>      > of the buffer is not overwritten from memory. This can lead to someone reading
>      > the memory of the process and determining what the password is. The change
>      > included in this patch will iterate over the memory and clear it. This will
>      > remove any trace of the password by the time execution is handed back to the
>      > caller.
>
>      Why would you insert a performance pessimization into every use of the LBER
>      library, rather than just erasing the password from a Bind request?
>
>      Why would you use an explicitly coded loop setting one character at a time,
>      instead of using libc's memset() which has probably been well optimized?
>
>      > The attached patch file is derived from OpenLDAP Software. All of the
>      > modifications to OpenLDAP Software represented in the following patch(es) were
>      > developed by Alan Cronin alcronin@cisco.com. I have not assigned rights and/or
>      > interest in this work to any party.
>      > The attached file is derived from OpenLDAP Software. All of the modifications to
>      > OpenLDAP Software represented in the following patch(es) were developed by Cisco
>      > Systems, Inc.. Cisco Systems, Inc. has not assigned rights and/or interest in
>      > this work to any party. I, Alan Cronin am authorized by Cisco Systems, Inc., my
>      > employer, to release this work under the following terms.
>      > Cisco Systems, Inc. hereby place the following modifications to OpenLDAP
>      > Software (and only these modifications) into the public domain. Hence, these
>      > modifications may be freely used and/or redistributed for any purpose with or
>      > without attribution and/or other notice.
>      >
>      >
>
>
>      --
>         -- Howard Chu
>         CTO, Symas Corp.           http://www.symas.com
>         Director, Highland Sun     http://highlandsun.com/hyc/
>         Chief Architect, OpenLDAP  http://www.openldap.org/project/
>
>


-- 
   -- Howard Chu
   CTO, Symas Corp.           http://www.symas.com
   Director, Highland Sun     http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP  http://www.openldap.org/project/

Comment 4 alcronin@cisco.com 2016-08-09 16:49:03 UTC
Hi,

I can take a look at the slapd side and those other requests and implement the fix there as well. If there are any other areas let me know and I can address them to. I will update the patch when I have those changes ready.

The compilers will treat that (memset behaviour) as an optimization and would be hesitant to change it. This is mostly seen in GCC and any variants. There are other optimisations such as removing the call to the method entirely if the next operation is a free as this would be seen by the compiler as a no-op. Removing optimisations is not ideal as it can affect more than just the section of the code and is not a cross platform solution.

Thanks,
Alan

On 08/08/2016, 21:37, "Howard Chu" <hyc@symas.com> wrote:

    Alan Cronin (alcronin) wrote:
    > Hi Howard,
    >
    > I can change the code so that it overwrites the memory from
    ldap_free_request_int() instead. This will cover the execution using a bind
    (both synchronous and asynchronous). Is there any other places where the
    password would be in the buffer that needs to be cleared? The reason for
    inserting it into ber_free_buf() was that it would clear all places.
    
    I see, you're looking at the client side. What about the slapd side?
    
    There are 2 main places where passwords occur - Bind, and PasswordModify exop. 
    They might also occur in Add and Modify requests. Add is not so unusual, 
    Modify should not happen since clients should use PasswordModify instead.
    
    > Some compilers will optimize calls to memset() so that only the first
    character will be changed. Leaving the rest of the string intact.
    
    That's clearly a compiler bug then. If you have examples of such situations 
    you should report that to the respective compiler maintainers.
    
    > This is why
    the iteration is in place.
    >
    > Thanks for looking into this patch.
    >
    > Alan
    >
    > On 05/08/2016, 19:50, "Howard Chu" <hyc@symas.com> wrote:
    >
    >      alcronin@cisco.com wrote:
    >      > Full_Name: Alan Cronin
    >      > Version: 2.4.44
    >      > OS: Windows 8.1
    >      > URL: https://dl.dropboxusercontent.com/u/82343475/SecurelyEraseBuffer.diff
    >      > Submission from: (NULL) (2001:420:4041:2003:f942:59a5:545f:b334)
    >      >
    >      >
    >      > The following patch is a modification to the OpenLDAP BerElement buffer. The
    >      > buffer can be used to contain the LDAP request including the password for
    >      > authentication. While this is free'd when it is no longer needed, the contents
    >      > of the buffer is not overwritten from memory. This can lead to someone reading
    >      > the memory of the process and determining what the password is. The change
    >      > included in this patch will iterate over the memory and clear it. This will
    >      > remove any trace of the password by the time execution is handed back to the
    >      > caller.
    >
    >      Why would you insert a performance pessimization into every use of the LBER
    >      library, rather than just erasing the password from a Bind request?
    >
    >      Why would you use an explicitly coded loop setting one character at a time,
    >      instead of using libc's memset() which has probably been well optimized?
    >
    >      > The attached patch file is derived from OpenLDAP Software. All of the
    >      > modifications to OpenLDAP Software represented in the following patch(es) were
    >      > developed by Alan Cronin alcronin@cisco.com. I have not assigned rights and/or
    >      > interest in this work to any party.
    >      > The attached file is derived from OpenLDAP Software. All of the modifications to
    >      > OpenLDAP Software represented in the following patch(es) were developed by Cisco
    >      > Systems, Inc.. Cisco Systems, Inc. has not assigned rights and/or interest in
    >      > this work to any party. I, Alan Cronin am authorized by Cisco Systems, Inc., my
    >      > employer, to release this work under the following terms.
    >      > Cisco Systems, Inc. hereby place the following modifications to OpenLDAP
    >      > Software (and only these modifications) into the public domain. Hence, these
    >      > modifications may be freely used and/or redistributed for any purpose with or
    >      > without attribution and/or other notice.
    >      >
    >      >
    >
    >
    >      --
    >         -- Howard Chu
    >         CTO, Symas Corp.           http://www.symas.com
    >         Director, Highland Sun     http://highlandsun.com/hyc/
    >         Chief Architect, OpenLDAP  http://www.openldap.org/project/
    >
    >
    
    
    -- 
       -- Howard Chu
       CTO, Symas Corp.           http://www.symas.com
       Director, Highland Sun     http://highlandsun.com/hyc/
       Chief Architect, OpenLDAP  http://www.openldap.org/project/
    

Comment 5 Quanah Gibson-Mount 2017-09-11 16:52:10 UTC
Hi Alan,

Did you get a chance to finish the patch?

Thanks,
Quanah

--On Tuesday, August 09, 2016 5:49 PM +0000 alcronin@cisco.com wrote:

> SGksDQoNCkkgY2FuIHRha2UgYSBsb29rIGF0IHRoZSBzbGFwZCBzaWRlIGFuZCB0aG9zZSBvd
> Ghl
> ciByZXF1ZXN0cyBhbmQgaW1wbGVtZW50IHRoZSBmaXggdGhlcmUgYXMgd2VsbC4gSWYgdGhlc
> mUg
> YXJlIGFueSBvdGhlciBhcmVhcyBsZXQgbWUga25vdyBhbmQgSSBjYW4gYWRkcmVzcyB0aGVtI
> HRv
> LiBJIHdpbGwgdXBkYXRlIHRoZSBwYXRjaCB3aGVuIEkgaGF2ZSB0aG9zZSBjaGFuZ2VzIHJlY
> WR5
> Lg0KDQpUaGUgY29tcGlsZXJzIHdpbGwgdHJlYXQgdGhhdCAobWVtc2V0IGJlaGF2aW91cikgY
> XMg
> YW4gb3B0aW1pemF0aW9uIGFuZCB3b3VsZCBiZSBoZXNpdGFudCB0byBjaGFuZ2UgaXQuIFRoa
> XMg
> aXMgbW9zdGx5IHNlZW4gaW4gR0NDIGFuZCBhbnkgdmFyaWFudHMuIFRoZXJlIGFyZSBvdGhlc
> iBv
> cHRpbWlzYXRpb25zIHN1Y2ggYXMgcmVtb3ZpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZCBlb
> nRp
> cmVseSBpZiB0aGUgbmV4dCBvcGVyYXRpb24gaXMgYSBmcmVlIGFzIHRoaXMgd291bGQgYmUgc
> 2Vl
> biBieSB0aGUgY29tcGlsZXIgYXMgYSBuby1vcC4gUmVtb3Zpbmcgb3B0aW1pc2F0aW9ucyBpc
> yBu
> b3QgaWRlYWwgYXMgaXQgY2FuIGFmZmVjdCBtb3JlIHRoYW4ganVzdCB0aGUgc2VjdGlvbiBvZ
> iB0
> aGUgY29kZSBhbmQgaXMgbm90IGEgY3Jvc3MgcGxhdGZvcm0gc29sdXRpb24uDQoNClRoYW5rc
> ywN
> CkFsYW4NCg0KT24gMDgvMDgvMjAxNiwgMjE6MzcsICJIb3dhcmQgQ2h1IiA8aHljQHN5bWFzL
> mNv
> bT4gd3JvdGU6DQoNCiAgICBBbGFuIENyb25pbiAoYWxjcm9uaW4pIHdyb3RlOg0KICAgID4gS
> Gkg
> SG93YXJkLA0KICAgID4NCiAgICA+IEkgY2FuIGNoYW5nZSB0aGUgY29kZSBzbyB0aGF0IGl0I
> G92
> ZXJ3cml0ZXMgdGhlIG1lbW9yeSBmcm9tDQogICAgbGRhcF9mcmVlX3JlcXVlc3RfaW50KCkga
> W5z
> dGVhZC4gVGhpcyB3aWxsIGNvdmVyIHRoZSBleGVjdXRpb24gdXNpbmcgYSBiaW5kDQogICAgK
> GJv
> dGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cykuIElzIHRoZXJlIGFueSBvdGhlciBwb
> GFj
> ZXMgd2hlcmUgdGhlDQogICAgcGFzc3dvcmQgd291bGQgYmUgaW4gdGhlIGJ1ZmZlciB0aGF0I
> G5l
> ZWRzIHRvIGJlIGNsZWFyZWQ/IFRoZSByZWFzb24gZm9yDQogICAgaW5zZXJ0aW5nIGl0IGlud
> G8g
> YmVyX2ZyZWVfYnVmKCkgd2FzIHRoYXQgaXQgd291bGQgY2xlYXIgYWxsIHBsYWNlcy4NCiAgI
> CAN
> CiAgICBJIHNlZSwgeW91J3JlIGxvb2tpbmcgYXQgdGhlIGNsaWVudCBzaWRlLiBXaGF0IGFib
> 3V0
> IHRoZSBzbGFwZCBzaWRlPw0KICAgIA0KICAgIFRoZXJlIGFyZSAyIG1haW4gcGxhY2VzIHdoZ
> XJl
> IHBhc3N3b3JkcyBvY2N1ciAtIEJpbmQsIGFuZCBQYXNzd29yZE1vZGlmeSBleG9wLiANCiAgI
> CBU
> aGV5IG1pZ2h0IGFsc28gb2NjdXIgaW4gQWRkIGFuZCBNb2RpZnkgcmVxdWVzdHMuIEFkZCBpc
> yBu
> b3Qgc28gdW51c3VhbCwgDQogICAgTW9kaWZ5IHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIGNsa
> WVu
> dHMgc2hvdWxkIHVzZSBQYXNzd29yZE1vZGlmeSBpbnN0ZWFkLg0KICAgIA0KICAgID4gU29tZ
> SBj
> b21waWxlcnMgd2lsbCBvcHRpbWl6ZSBjYWxscyB0byBtZW1zZXQoKSBzbyB0aGF0IG9ubHkgd
> Ghl
> IGZpcnN0DQogICAgY2hhcmFjdGVyIHdpbGwgYmUgY2hhbmdlZC4gTGVhdmluZyB0aGUgcmVzd
> CBv
> ZiB0aGUgc3RyaW5nIGludGFjdC4NCiAgICANCiAgICBUaGF0J3MgY2xlYXJseSBhIGNvbXBpb
> GVy
> IGJ1ZyB0aGVuLiBJZiB5b3UgaGF2ZSBleGFtcGxlcyBvZiBzdWNoIHNpdHVhdGlvbnMgDQogI
> CAg
> eW91IHNob3VsZCByZXBvcnQgdGhhdCB0byB0aGUgcmVzcGVjdGl2ZSBjb21waWxlciBtYWlud
> GFp
> bmVycy4NCiAgICANCiAgICA+IFRoaXMgaXMgd2h5DQogICAgdGhlIGl0ZXJhdGlvbiBpcyBpb
> iBw
> bGFjZS4NCiAgICA+DQogICAgPiBUaGFua3MgZm9yIGxvb2tpbmcgaW50byB0aGlzIHBhdGNoL
> g0K
> ICAgID4NCiAgICA+IEFsYW4NCiAgICA+DQogICAgPiBPbiAwNS8wOC8yMDE2LCAxOTo1MCwgI
> khv
> d2FyZCBDaHUiIDxoeWNAc3ltYXMuY29tPiB3cm90ZToNCiAgICA+DQogICAgPiAgICAgIGFsY
> 3Jv
> bmluQGNpc2NvLmNvbSB3cm90ZToNCiAgICA+ICAgICAgPiBGdWxsX05hbWU6IEFsYW4gQ3Jvb
> mlu
> DQogICAgPiAgICAgID4gVmVyc2lvbjogMi40LjQ0DQogICAgPiAgICAgID4gT1M6IFdpbmRvd
> 3Mg
> OC4xDQogICAgPiAgICAgID4gVVJMOiBodHRwczovL2RsLmRyb3Bib3h1c2VyY29udGVudC5jb
> 20v
> dS84MjM0MzQ3NS9TZWN1cmVseUVyYXNlQnVmZmVyLmRpZmYNCiAgICA+ICAgICAgPiBTdWJta
> XNz
> aW9uIGZyb206IChOVUxMKSAoMjAwMTo0MjA6NDA0MToyMDAzOmY5NDI6NTlhNTo1NDVmOmIzM
> zQp
> DQogICAgPiAgICAgID4NCiAgICA+ICAgICAgPg0KICAgID4gICAgICA+IFRoZSBmb2xsb3dpb
> mcg
> cGF0Y2ggaXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIE9wZW5MREFQIEJlckVsZW1lbnQgYnVmZ
> mVy
> LiBUaGUNCiAgICA+ICAgICAgPiBidWZmZXIgY2FuIGJlIHVzZWQgdG8gY29udGFpbiB0aGUgT
> ERB
> UCByZXF1ZXN0IGluY2x1ZGluZyB0aGUgcGFzc3dvcmQgZm9yDQogICAgPiAgICAgID4gYXV0a
> GVu
> dGljYXRpb24uIFdoaWxlIHRoaXMgaXMgZnJlZSdkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZ
> WRl
> ZCwgdGhlIGNvbnRlbnRzDQogICAgPiAgICAgID4gb2YgdGhlIGJ1ZmZlciBpcyBub3Qgb3Zlc
> ndy
> aXR0ZW4gZnJvbSBtZW1vcnkuIFRoaXMgY2FuIGxlYWQgdG8gc29tZW9uZSByZWFkaW5nDQogI
> CAg
> PiAgICAgID4gdGhlIG1lbW9yeSBvZiB0aGUgcHJvY2VzcyBhbmQgZGV0ZXJtaW5pbmcgd2hhd
> CB0
> aGUgcGFzc3dvcmQgaXMuIFRoZSBjaGFuZ2UNCiAgICA+ICAgICAgPiBpbmNsdWRlZCBpbiB0a
> Glz
> IHBhdGNoIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBtZW1vcnkgYW5kIGNsZWFyIGl0LiBUaGlzI
> Hdp
> bGwNCiAgICA+ICAgICAgPiByZW1vdmUgYW55IHRyYWNlIG9mIHRoZSBwYXNzd29yZCBieSB0a
> GUg
> dGltZSBleGVjdXRpb24gaXMgaGFuZGVkIGJhY2sgdG8gdGhlDQogICAgPiAgICAgID4gY2Fsb
> GVy
> Lg0KICAgID4NCiAgICA+ICAgICAgV2h5IHdvdWxkIHlvdSBpbnNlcnQgYSBwZXJmb3JtYW5jZ
> SBw
> ZXNzaW1pemF0aW9uIGludG8gZXZlcnkgdXNlIG9mIHRoZSBMQkVSDQogICAgPiAgICAgIGxpY
> nJh
> cnksIHJhdGhlciB0aGFuIGp1c3QgZXJhc2luZyB0aGUgcGFzc3dvcmQgZnJvbSBhIEJpbmQgc
> mVx
> dWVzdD8NCiAgICA+DQogICAgPiAgICAgIFdoeSB3b3VsZCB5b3UgdXNlIGFuIGV4cGxpY2l0b
> Hkg
> Y29kZWQgbG9vcCBzZXR0aW5nIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lLA0KICAgID4gICAgI
> CBp
> bnN0ZWFkIG9mIHVzaW5nIGxpYmMncyBtZW1zZXQoKSB3aGljaCBoYXMgcHJvYmFibHkgYmVlb
> iB3
> ZWxsIG9wdGltaXplZD8NCiAgICA+DQogICAgPiAgICAgID4gVGhlIGF0dGFjaGVkIHBhdGNoI
> GZp
> bGUgaXMgZGVyaXZlZCBmcm9tIE9wZW5MREFQIFNvZnR3YXJlLiBBbGwgb2YgdGhlDQogICAgP
> iAg
> ICAgID4gbW9kaWZpY2F0aW9ucyB0byBPcGVuTERBUCBTb2Z0d2FyZSByZXByZXNlbnRlZCBpb
> iB0
> aGUgZm9sbG93aW5nIHBhdGNoKGVzKSB3ZXJlDQogICAgPiAgICAgID4gZGV2ZWxvcGVkIGJ5I
> EFs
> YW4gQ3JvbmluIGFsY3JvbmluQGNpc2NvLmNvbS4gSSBoYXZlIG5vdCBhc3NpZ25lZCByaWdod
> HMg
> YW5kL29yDQogICAgPiAgICAgID4gaW50ZXJlc3QgaW4gdGhpcyB3b3JrIHRvIGFueSBwYXJ0e
> S4N
> CiAgICA+ICAgICAgPiBUaGUgYXR0YWNoZWQgZmlsZSBpcyBkZXJpdmVkIGZyb20gT3BlbkxEQ
> VAg
> U29mdHdhcmUuIEFsbCBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0bw0KICAgID4gICAgICA+IE9wZ
> W5M
> REFQIFNvZnR3YXJlIHJlcHJlc2VudGVkIGluIHRoZSBmb2xsb3dpbmcgcGF0Y2goZXMpIHdlc
> mUg
> ZGV2ZWxvcGVkIGJ5IENpc2NvDQogICAgPiAgICAgID4gU3lzdGVtcywgSW5jLi4gQ2lzY28gU
> 3lz
> dGVtcywgSW5jLiBoYXMgbm90IGFzc2lnbmVkIHJpZ2h0cyBhbmQvb3IgaW50ZXJlc3QgaW4NC
> iAg
> ICA+ICAgICAgPiB0aGlzIHdvcmsgdG8gYW55IHBhcnR5LiBJLCBBbGFuIENyb25pbiBhbSBhd
> XRo
> b3JpemVkIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4sIG15DQogICAgPiAgICAgID4gZW1wbG95Z
> XIs
> IHRvIHJlbGVhc2UgdGhpcyB3b3JrIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXMuDQogICAgP
> iAg
> ICAgID4gQ2lzY28gU3lzdGVtcywgSW5jLiBoZXJlYnkgcGxhY2UgdGhlIGZvbGxvd2luZyBtb
> 2Rp
> ZmljYXRpb25zIHRvIE9wZW5MREFQDQogICAgPiAgICAgID4gU29mdHdhcmUgKGFuZCBvbmx5I
> HRo
> ZXNlIG1vZGlmaWNhdGlvbnMpIGludG8gdGhlIHB1YmxpYyBkb21haW4uIEhlbmNlLCB0aGVzZ
> Q0K
> ICAgID4gICAgICA+IG1vZGlmaWNhdGlvbnMgbWF5IGJlIGZyZWVseSB1c2VkIGFuZC9vciByZ
> WRp
> c3RyaWJ1dGVkIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yDQogICAgPiAgICAgID4gd2l0aG91d
> CBh
> dHRyaWJ1dGlvbiBhbmQvb3Igb3RoZXIgbm90aWNlLg0KICAgID4gICAgICA+DQogICAgPiAgI
> CAg
> ID4NCiAgICA+DQogICAgPg0KICAgID4gICAgICAtLQ0KICAgID4gICAgICAgICAtLSBIb3dhc
> mQg
> Q2h1DQogICAgPiAgICAgICAgIENUTywgU3ltYXMgQ29ycC4gICAgICAgICAgIGh0dHA6Ly93d
> 3cu
> c3ltYXMuY29tDQogICAgPiAgICAgICAgIERpcmVjdG9yLCBIaWdobGFuZCBTdW4gICAgIGh0d
> HA6
> Ly9oaWdobGFuZHN1bi5jb20vaHljLw0KICAgID4gICAgICAgICBDaGllZiBBcmNoaXRlY3QsI
> E9w
> ZW5MREFQICBodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy9wcm9qZWN0Lw0KICAgID4NCiAgICA+D
> Qog
> ICAgDQogICAgDQogICAgLS0gDQogICAgICAgLS0gSG93YXJkIENodQ0KICAgICAgIENUTywgU
> 3lt
> YXMgQ29ycC4gICAgICAgICAgIGh0dHA6Ly93d3cuc3ltYXMuY29tDQogICAgICAgRGlyZWN0b
> 3Is
> IEhpZ2hsYW5kIFN1biAgICAgaHR0cDovL2hpZ2hsYW5kc3VuLmNvbS9oeWMvDQogICAgICAgQ
> 2hp
> ZWYgQXJjaGl0ZWN0LCBPcGVuTERBUCAgaHR0cDovL3d3dy5vcGVubGRhcC5vcmcvcHJvamVjd
> C8N CiAgICANCg0K
>
>
>



--

Quanah Gibson-Mount
Product Architect
Symas Corporation
Packaged, certified, and supported LDAP solutions powered by OpenLDAP:
<http://www.symas.com>