/*****************************************************************************\ * MODULE: iecon.cxx * * The module contains class for connections using IE's default configuration * * Copyright (C) 1997-1998 Microsoft Corporation * * History: * 07/31/98 Weihaic Created * \*****************************************************************************/ #include "precomp.h" #ifdef WINNT32 #include "priv.h" const DWORD cdwDialogTimeout = 4000000; COtherConnection::COtherConnection ( BOOL bSecure, INTERNET_PORT nServerPort, LPCTSTR lpszUserName, LPCTSTR lpszPassword, BOOL bIgnoreSecurityDlg): CAnyConnection (bSecure, nServerPort, bIgnoreSecurityDlg, AUTH_OTHER) { m_bValid = AssignString (m_lpszUserName, lpszUserName) && AssignString (m_lpszPassword, lpszPassword); } COtherConnection::~COtherConnection () { } HINTERNET COtherConnection::OpenRequest ( LPTSTR lpszUrl) { return CAnyConnection::OpenRequest (lpszUrl); #if 0 // This is not necessary since we have force auth. For those IPP servers that do not support // force authentication. Although it is possible to submit a job with anonymous user even if the // connection is established with a credential, it does not prevent the user from // performing any actions that requires the credential since any denied access will be resolved // in SendRequest() using the correct credential. // HINTERNET hReq = CAnyConnection::OpenRequest (lpszUrl); if (hReq && _FindAndSetPassword (hReq, FALSE)) { return hReq; } return NULL; #endif } BOOL COtherConnection::SendRequest( HINTERNET hReq, LPCTSTR lpszHdr, DWORD cbHdr, LPBYTE pidi) { static const DWORD dwMaxRetry = 2; BOOL bRet = FALSE; DWORD i; HANDLE hToken; // // We have to revert to the local system account to prevent wininet from sending // the logon user credential automatically to the remote machine. // if (hToken = RevertToPrinterSelf()) { for (i = 0; i < dwMaxRetry; i++ ) { if (SetPassword (hReq, m_lpszUserName, m_lpszPassword)) { bRet = CAnyConnection:: SendRequest (hReq, lpszHdr, cbHdr, pidi); if (bRet || GetLastError () != ERROR_ACCESS_DENIED) { break; } } } if (!ImpersonatePrinterClient(hToken)) { bRet = FALSE; } } return bRet; } BOOL COtherConnection::SendRequest( HINTERNET hReq, LPCTSTR lpszHdr, CStream *pStream) { static const DWORD dwMaxRetry = 2; BOOL bRet = FALSE; DWORD i; HANDLE hToken; // // We have to revert to the local system account to prevent wininet from sending // the logon user credential automatically to the remote machine. // if (hToken = RevertToPrinterSelf()) { for (i = 0; i < dwMaxRetry; i++ ) { if (SetPassword (hReq, m_lpszUserName, m_lpszPassword)) { bRet = CAnyConnection:: SendRequest (hReq, lpszHdr, pStream); if (bRet || GetLastError () != ERROR_ACCESS_DENIED) { break; } } } if (!ImpersonatePrinterClient(hToken)) { bRet = FALSE; } } return bRet; } BOOL COtherConnection::ReadFile ( HINTERNET hReq, LPVOID lpvBuffer, DWORD cbBuffer, LPDWORD lpcbRd) { BOOL bRet = FALSE; HANDLE hToken; if (hToken = RevertToPrinterSelf()) { bRet = CAnyConnection::ReadFile (hReq, lpvBuffer, cbBuffer, lpcbRd); if (!ImpersonatePrinterClient(hToken)) { bRet = FALSE; } } return bRet; } #endif