Subject: bug#35969: 26.2, Excorporate

From: "tenspd137 ." <[email-masked]>
Date: Wed, 29 May 2019 10:17:05 -0600

Hi - thanks for the reply.  Here are the steps I took (I had to
configure the proxy as well....):

M-: (setq url-proxy-services '(("http" . "web-proxy:8080") ("https" .
"web-proxy:8080")))
M-: (setq url-debug t)
M-: (url-retrieve-synchronously "https://server/EWS/Exchange.asmx")

-Asks for name and password-, I fill them in.....

The buffer contents are:
" *http server:443*"
HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/10.0
request-id: 12d85c25-a5f7-49d5-a794-ef282ec5e6af
X-WSSecurity-Enabled: True
X-WSSecurity-For: Logon
X-FederationTrustTokenIssuerUri: urn:federation:MicrosoftOnline
X-WSSecurity-SymmetricKey-Enabled: True
X-WSSecurity-X509Cert-Enabled: True
X-OAuth-Enabled: True
X-Powered-By: ASP.NET
X-FEServer: SN6PR16CA0070
WWW-Authenticate: Basic Realm=""
Date: Wed, 29 May 2019 16:00:44 GMT
Connection: close
Content-Length: 0

and "*URL-DEBUG*"
http -> Contacting host: outlook.office365.com:443
http -> Marking connection as busy: outlook.office365.com:443
#<process outlook.office365.com>
retrieval -> Spinning in url-retrieve-synchronously: nil (#<buffer
*http outlook.office365.com:443*>)
http -> Calling after change function
`url-https-proxy-after-change-function' for `#<process
outlook.office365.com>'
http -> url-http-parse-response called in ( *http outlook.office365.com:443*)
http -> Request is:
GET https://outlook.office365.com/EWS/Exchange.asmx HTTP/1.1
MIME-Version: 1.0
Connection: close
Extension: Security/Digest Security/SSL
Host: outlook.office365.com
Accept-encoding: gzip
Accept: */*
User-Agent: URL/Emacs Emacs/26.2 (X11; x86_64-pc-linux-gnu)
Cookie: ClientId=8998C5691CD143E784857A0D01537963; OIDC=1

retrieval -> Spinning in url-retrieve-synchronously: nil (#<buffer
*http outlook.office365.com:443*>)
http -> Calling after change function
`url-http-wait-for-headers-change-function' for `#<process
outlook.office365.com>'
http -> url-http-wait-for-headers-change-function ( *http
outlook.office365.com:443*)
http -> Saw end of headers... ( *http outlook.office365.com:443*)
http -> url-http-parse-response called in ( *http outlook.office365.com:443*)
http -> Got a content-length, being smart about document end.
http -> Got 0-length content-length, activating callback immediately.
http -> Marking connection as free: outlook.office365.com:443
#<process outlook.office365.com>
http -> url-http-parse-headers called in ( *http outlook.office365.com:443*)
http -> url-http-parse-response called in ( *http outlook.office365.com:443*)
http -> Parsed HTTP headers: class=4 status=401
http -> Handling normal authentication
http -> Contacting host: outlook.office365.com:443
http -> Marking connection as busy: outlook.office365.com:443
#<process outlook.office365.com>
http -> Finished parsing HTTP headers: nil
http -> Spinning waiting for headers...
retrieval -> Spinning in url-retrieve-synchronously: nil (#<buffer
*http outlook.office365.com:443*>)
http -> Calling after change function
`url-https-proxy-after-change-function' for `#<process
outlook.office365.com>'
http -> url-http-parse-response called in ( *http
outlook.office365.com:443*-229815)
http -> Request is:
GET https://outlook.office365.com/EWS/Exchange.asmx HTTP/1.1
MIME-Version: 1.0
Connection: close
Extension: Security/Digest Security/SSL
Host: outlook.office365.com
Accept-encoding: gzip
Accept: */*
User-Agent: URL/Emacs Emacs/26.2 (X11; x86_64-pc-linux-gnu)
Cookie: ClientId=8998C5691CD143E784857A0D01537963; OIDC=1
Authorization: Basic ZGF2aWQuYy5kYXlAaHAuY29tOmwxaTNuN2VTa3kxMzcwJSU=

http -> Calling after change function
`url-http-wait-for-headers-change-function' for `#<process
outlook.office365.com>'
http -> url-http-wait-for-headers-change-function ( *http
outlook.office365.com:443*-229815)
http -> Saw end of headers... ( *http outlook.office365.com:443*-229815)
http -> url-http-parse-response called in ( *http
outlook.office365.com:443*-229815)
http -> Got a content-length, being smart about document end.
http -> Calling initial content-length for extra data at end of headers
http -> Marking connection as free: outlook.office365.com:443
#<process outlook.office365.com>
http -> url-http-parse-headers called in ( *http
outlook.office365.com:443*-229815)
http -> url-http-parse-response called in ( *http
outlook.office365.com:443*-229815)
http -> Parsed HTTP headers: class=4 status=400
http -> Finished parsing HTTP headers: t
http -> Marking connection as free: outlook.office365.com:443
#<process outlook.office365.com>
http -> Activating callback in buffer ( *http
outlook.office365.com:443*-229815): #[128
"\302\303\304p#\210\300\305\240\210\301p\240\207" [(t) (#<buffer
*http outlook.office365.com:443*>) url-debug retrieval "Synchronous
fetching done (%S)" t] 5 "

(fn &rest IGNORED)"] ((:error (error http 400) :peer (:certificate
(:version 3 :serial-number
"04:78:00:ec:6e:d6:46:74:40:83:3c:83:58:2c:0c:eb" :issuer
"C=US,O=DigiCert Inc,CN=DigiCert Cloud Services CA-1" :valid-from
"2018-11-19" :valid-to "2020-11-19" :subject
"C=US,ST=Washington,L=Redmond,O=Microsoft Corporation,CN=outlook.com"
:public-key-algorithm "RSA" :certificate-security-level "Medium"
:signature-algorithm "RSA-SHA256" :public-key-id
"sha1:18:91:f8:bd:ec:41:11:cd:a8:c8:d0:25:00:0d:a5:e4:10:b4:67:dd"
:certificate-id
"sha1:f2:1d:79:fd:e3:61:5c:02:2d:48:62:fd:cd:87:b8:6a:d6:60:b6:06")
:key-exchange "ECDHE-RSA" :protocol "TLS1.2" :cipher "AES-256-GCM"
:mac "AEAD")))
retrieval -> Synchronous fetching done (#<buffer  *http
outlook.office365.com:443*-229815>)
http -> Spinning waiting for headers...

But - just for reference - here is what is in the file I receive when
I use wget:

 wget --user me@work --password xxxxxxxxxxx
https://outlook.office365.com/EWS/Exchange.asmx

<HTML><HEAD><link rel="alternate" type="text/xml"
href="https://tu4pr8401mb1231.namprd84.prod.outlook.com:444/EWS/Exchange.asmx?disco"/><STYLE
type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em;
MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR:
#000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP:
0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY:
Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px;
BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px;
FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid;
PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY:
Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px;
PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px;
MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH:
100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma;
BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT:
-15px}</STYLE><TITLE>Service</TITLE></HEAD><BODY><DIV id="content"><P
class="heading1">Service</P><BR/><P class="intro">You have created a
service.<P class='intro'>To test this service, you will need to create
a client and use it to call the service. You can do this using the
svcutil.exe tool from the command line with the following syntax:</P>
<BR/><PRE>svcutil.exe <A
HREF="https://tu4pr8401mb1231.namprd84.prod.outlook.com:444/EWS/Services.wsdl">https://tu4pr8401mb1231.namprd84.prod.outlook.com:444/EWS/Services.wsdl</A></PRE></P><P
class="intro"/>This will generate a configuration file and a code file
that contains the client class. Add the two files to your client
application and use the generated client class to call the Service.
For example:<BR/><P class='intro'><B>C#</B></P><PRE><font
color="blue">class </font><font color="teal">Test
</font>{
<font color="blue">    static void </font>Main()
    {
        <font color="teal">HelloClient</font> client = <font
color="blue">new </font><font color="teal">HelloClient</font>();

<font color="green">        // Use the 'client' variable to call
operations on the service.

</font><font color="green">        // Always close the client.
</font>        client.Close();
    }
}
</PRE><BR/><P class='intro'><B>Visual Basic</B></P><PRE><font
color="blue">Class </font><font color="teal">Test
</font><font color="blue">    Shared Sub </font>Main()
<font color="blue">        Dim </font>client As <font
color="teal">HelloClient</font> = <font color="blue">New </font><font
color="teal">HelloClient</font>()
<font color="green">        ' Use the 'client' variable to call
operations on the service.

</font><font color="green">        ' Always close the client.
</font>        client.Close()
<font color="blue">    End Sub

Thank you for taking a look and helping me learn some debug tricks.

-C

PS - Sorry for sending to you twice, I should have hit reply to all to
put this in the bug tracker....

On Tue, May 28, 2019 at 7:04 PM Thomas Fitzsimmons <[email-masked]> wrote:
>
> Hi,
>
> "tenspd137 ." <[email-masked]> writes:
>
> > I was trying to use Excorporate through a proxy, and it fails.  I am
> > pretty sure that my configuration is correct because I am able to
> > retrieve *a* file when I use wget and https://server/EWS/Exchange.asmx
> > and I can get a Services.wsdl file with
> > https://server/EWS/Exchange.asmx.
>
> Thanks for reporting.  Is just Emacs (not Excorporate) able to retrieve
> the file through the proxy?  That is, starting from an "emacs -Q"
> session, can you try just:
>
> M-: (setq url-debug t)
> M-: (url-retrieve-synchronously "https://server/EWS/Exchange.asmx")
>
> and see what the *URL-DEBUG* and " *http server:443*" (note leading
> space character) buffers contain afterwards?
>
> Thanks,
> Thomas