From: Pierre Schweitzer Subject: [PATCH 1/2] mpr: Implement local name automatic redirection for disks. Message-Id: <578E8F5F.8000503@reactos.org> Date: Tue, 19 Jul 2016 22:36:47 +0200 -- Pierre Schweitzer System & Network Administrator Senior Kernel Developer ReactOS Deutschland e.V. From 4aa6d618e4900f56f0d024ebd25ae28480831038 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 19 Jul 2016 22:29:40 +0200 Subject: [PATCH 1/2] mpr: Implement local name automatic redirection for disks. Signed-off-by: Pierre Schweitzer --- dlls/mpr/wnet.c | 63 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/dlls/mpr/wnet.c b/dlls/mpr/wnet.c index 0d4209c..b7b0222 100644 --- a/dlls/mpr/wnet.c +++ b/dlls/mpr/wnet.c @@ -1621,6 +1621,8 @@ static DWORD wnet_use_connection( struct use_connection_context *ctxt ) { WNetProvider *provider; DWORD index, ret, caps; + BOOLEAN redirect = FALSE; + WCHAR letter[3] = {'z', ':', 0}; if (!providerTable || providerTable->numProviders == 0) return WN_NO_NETWORK; @@ -1628,42 +1630,75 @@ static DWORD wnet_use_connection( struct use_connection_context *ctxt ) if (!ctxt->resource) return ERROR_INVALID_PARAMETER; - if (!ctxt->resource->lpProvider) + if (!ctxt->resource->lpLocalName && (ctxt->flags & CONNECT_REDIRECT)) { - FIXME("Networking provider selection is not implemented.\n"); - return WN_NO_NETWORK; + if (ctxt->resource->dwType != RESOURCETYPE_DISK && ctxt->resource->dwType != RESOURCETYPE_PRINT) + { + return ERROR_BAD_DEV_TYPE; + } + + if (ctxt->resource->dwType == RESOURCETYPE_PRINT) + { + FIXME("Locale device selection is not implemented for printers.\n"); + return WN_NO_NETWORK; + } + + redirect = TRUE; + ctxt->resource->lpLocalName = letter; } - if (!ctxt->resource->lpLocalName && (ctxt->flags & CONNECT_REDIRECT)) + if (!ctxt->resource->lpProvider) { - FIXME("Locale device selection is not implemented.\n"); - return WN_NO_NETWORK; + FIXME("Networking provider selection is not implemented.\n"); + ret = WN_NO_NETWORK; + goto done; } if (ctxt->flags & CONNECT_INTERACTIVE) - return ERROR_BAD_NET_NAME; + { + ret = ERROR_BAD_NET_NAME; + goto done; + } index = _findProviderIndexW(ctxt->resource->lpProvider); if (index == BAD_PROVIDER_INDEX) - return ERROR_BAD_PROVIDER; + { + ret = ERROR_BAD_PROVIDER; + goto done; + } provider = &providerTable->table[index]; caps = provider->getCaps(WNNC_CONNECTION); if (!(caps & (WNNC_CON_ADDCONNECTION | WNNC_CON_ADDCONNECTION3))) - return ERROR_BAD_PROVIDER; + { + ret = ERROR_BAD_PROVIDER; + goto done; + } if ((ret = ctxt->pre_set_accessname(ctxt))) - return ret; + { + goto done; + } ret = WN_ACCESS_DENIED; - if ((caps & WNNC_CON_ADDCONNECTION3) && provider->addConnection3) - ret = provider->addConnection3(ctxt->hwndOwner, ctxt->resource, ctxt->password, ctxt->userid, ctxt->flags); - else if ((caps & WNNC_CON_ADDCONNECTION) && provider->addConnection) - ret = provider->addConnection(ctxt->resource, ctxt->password, ctxt->userid); + do + { + if ((caps & WNNC_CON_ADDCONNECTION3) && provider->addConnection3) + ret = provider->addConnection3(ctxt->hwndOwner, ctxt->resource, ctxt->password, ctxt->userid, ctxt->flags); + else if ((caps & WNNC_CON_ADDCONNECTION) && provider->addConnection) + ret = provider->addConnection(ctxt->resource, ctxt->password, ctxt->userid); + + if (redirect) + letter[0] -= 1; + } while (redirect && ret == WN_ALREADY_CONNECTED && letter[0] >= 'c'); if (ret == WN_SUCCESS && ctxt->accessname) ctxt->set_accessname(ctxt); +done: + if (redirect) + ctxt->resource->lpLocalName = NULL; + return ret; } -- 2.7.4 0 *H 010  `He0 *H  040 0  *H 0}1 0 UIL10U  StartCom Ltd.1+0)U "Secure Digital Certificate Signing1)0'U StartCom Certification Authority0 071024210255Z 171024210255Z01 0 UIL10U  StartCom Ltd.1+0)U "Secure Digital Certificate Signing1806U/StartCom Class 2 Primary Intermediate Client CA0"0  *H 0 (E,3* U]"gFSݤ>}m w鞆FA7~ |-ql"/Q?Vp`G&viĜ73 {B'87ds Nfz1%TII|2o/mD \t :08VGqǴ3Rp}JTzF;&X}rD Q 600U00U0UUo1ʹk1㬻0U#0N @[i04hCA0f+Z0X0'+0http://ocsp.startssl.com/ca0-+0!http://www.startssl.com/sfsca.crt0[UT0R0'%#!http://www.startssl.com/sfsca.crl0'%#!http://crl.startssl.com/sfsca.crl0U y0w0u +70f0.+"http://www.startssl.com/policy.pdf04+(http://www.startssl.com/intermediate.pdf0  *H :' ӴiiL\};JBG Ƚ1Fa gR~9P1 Rvg}ȜsWr<];sY/Msߟq'ɽNpʧ`&pPz/ў-Eׁ1KeET5ꥊ@v錈{8@t e=ރt92Ow[%[kd+YO!_uyGYqE\pCbM~ @3xnM+RH?o'V=INjWbᑶYOuZk*9Jz)w󫦒jNnZqwZV=t+΄BMkd"ܧfVSąmzLu8¾ņVcoiQ^7|#Bl@ /D;+@8 ~brA+}TLVŜ 2J(Hn}Rt]fiZ U ]+nŚܓqEF$^fsȕP)*6\q)90a0IY 0  *H  01 0 UIL10U  StartCom Ltd.1+0)U "Secure Digital Certificate Signing1806U/StartCom Class 2 Primary Intermediate Client CA0 141124162727Z 161124202226Z0~1 0 UFR10UHaute-Normandie10U Montivilliers10UPierre Schweitzer1!0 *H  pierre@reactos.org0"0  *H 0 Ik9 Pd `V<%v͗9lyu.=\H~6I~䄅#dZ>4oME\'܎D_eQMUkb/}c T;*z?f aڀ8K,`]:E5˩ "` `=F7wnpZHāڒN[(Tk8b:I7+K00 U00 U0U%0++0UfL,U%Zm0U#0Uo1ʹk1㬻0U0pierre@reactos.org0LU C0?0; +70*0.+"http://www.startssl.com/policy.pdf0+00' StartCom Certification Authority0This certificate was issued according to the Class 2 Validation requirements of the StartCom CA policy, reliance only for the intended purpose in compliance of the relying party obligations.06U/0-0+)'%http://crl.startssl.com/crtu2-crl.crl0+009+0-http://ocsp.startssl.com/sub/class2/client/ca0B+06http://aia.startssl.com/certs/sub.class2.client.ca.crt0#U0http://www.startssl.com/0  *H  &ܚɮI]YugIcG3M\@8JVu=qؖ\ ё, a<]r{JKC'뢀pኡ֗ז'!Ewa2*jH=g_~#WRFjsEgo`\0R_ 2䑌LM1Zz־~r&S`ب+xY(5` Pš[810001 0 UIL10U  StartCom Ltd.1+0)U "Secure Digital Certificate Signing1806U/StartCom Class 2 Primary Intermediate Client CAY 0  `He0 *H  1  *H 0 *H  1 160719203647Z0/ *H  1" wli Lzg-:7o$kjf޺OT*cFgR%.^eeSf*^s+pnH,:P:8"  } Vcv