On Fri, 2009-04-03 at 11:16 +0100, Sam Liddicott wrote:
> In control-panel/Mail when I get the failure, it replaces the mapi-proxy
> name I inserted and replaces it with NOVA, the real mail server. [How
> did it know to do this?]
> 
> BUT, if I tell mapiproxy that the next-hop binding should be star
> (returned by RfrGetNewDSA from nova) instead of nova (the real mail
> server) then I don't get the kerberos error and everything works
> absolutely fine!
> 
> 
> So I think one conclusion is that mapiproxy could perhaps follow the
> RfrGetNewDSA result for the binding?
> My network seemed to get this way because I moved the domain exchange
> server from one DC to another DC.

Sam,

The RfrGetNewDSA  function is part of the NSPIReferral API and is used
to locate the NSPI server. Following unconditionally this binding string
for any other services but NSPI one would be wrong.

However I think you pointed an interesting issue. How bad does mapiproxy
work within a clustered Exchange environment? That is obviously one
configuration I didn't have the opportunity to test extensively/at all
so far.

Mapiproxy uses a unique binding string for all exchange services and for
all auth mechanisms it supplies (specified/delegated/machine account) -
or should supply properly. That is obviously technically wrong when we
deal with clustered Exchange environments.

Let's take a real clustered Exchange use case:
        - Server A: main Exchange server
        - Server B: second Exchange server where a mailbox has been
        moved
        - Server C: third Exchange server with a replication of NSPI
        server
        - mapiproxy points on server A


RFR/NSPI case:
==============
        When Outlook sends the RFRGetNewDSA call to mapiproxy:
        1. mapiproxy relays the call to the real Exchange server A. 
        2. Server A replies and fill the network name of server C 
        3. mapiproxy receives the reply, then replace the real server
        with its own FQDN name.
        4. It forwards the reply to the client.
        
        == Outlook think the real NSPI server IS mapiproxy ==
        
        Case 1:
        ======= 
                If Outlook initiates a NEW connection, then the hack
                needs to be much deeper. We would need to associate
                accounts/usernames with the different servers
                (NSPI/EMSMDB) we need to contact in order to serve users
                requests.

        Case 2:
        =======
                If Outlook alters the dcerpc context, then maybe
                replacing the binding string within dcesrv_auth
                structure samba is providing mapiproxy could do the
                trick. I'm however yet unsure about potential side
                effects when Outlook tries to alter the context once
                again from NSPI session to open an EMSMDB connection.
        
                From past experience - single remote server - Exchange
                just fails to alter the context for different services
                and Outlook needs to open a new connection (epmapper,
                auth3, bind).

        I can probably test case 2 pretty quickly to get sure whether it
        works or not. However I'd be tempted to focus right now - maybe
        I'm wrong - on case 1.

        
EMSMDB case:
============
        
        I'm currently not 100% sure of what I states below. It is just
        based on strong assumptions.
        
        Now, let's say we have implemented case 1 and we have a database
        linking the username to the servers its account and mailbox are
        associated to. We could imagine something like:

        User A:
                NSPI location:    Server C
                Mailbox location: Server B
        
        mapiproxy would still initially points to Server A in smb.conf

        Knowing where the user's mailbox is physically located can -
        afaik - only be known from Outlook once it has opened the
        message store (Logon IDL call). The exchange server would reply
        the server is not here and fill a "Redirect Response Buffer".
        This IDL is not yet handled in exchange.idl, mostly because it
        requires to hack ndr_mapi.c to write manual OpenMsgStore NDR
        pull code for mapi_response. Furthermore I didn't have any test
        case I could play with so far.
        
        So Server A returns this redirect response buffer to Outlook and
        tells its mailbox is located on Server B.
        
        mapiproxy changes the server address in the reply so it points
        to mapiproxy, then update its local database and associate
        Server B to the mailbox location.
        
        So far - and if all the above statements are correct -
        everything is perfect ;-)
        
        Two questions - which I couldn't find the answer for within MS
        specs:
                1. Does Outlook automatically connects Server B for any
                further connections or does it contact Server A and wait
                for the redirect response buffer?
                
                2. If it directly contacts Server B, what would happen
                if you move the mailbox once again and how mapiproxy
                should behave?
        

> 
> The other question is how did Control-panel/Mail know to fallback to
> Nova (and why not star?) when the krb bind was failing?

I'd need a pcap capture for this, but it may be related to mapiproxy not
handling properly what is detailed in the first part of the email.

---
Julien Kerihuel
j.kerih...@openchange.org
OpenChange Project Manager

GPG Fingerprint: 0B55 783D A781 6329 108A  B609 7EF6 FE11 A35F 1F79


Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
devel mailing list
devel@lists.openchange.org
http://mailman.openchange.org/listinfo/devel

Reply via email to