Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

238 lines
7.4 KiB

#ifndef _IMPLDEF_H_
#define _IMPLDEF_H_
// Implementation defined items ----------------------------------------------
//
// The following must be DEFINED by the IMPL for use by the PARSER.
//
// Allow header items --------------------------------------------------------
//
// The impl. needs to define the following set of strings that identify the
// methods supported by the impl. for particular resources.
//
extern const CHAR gc_szHttpBase[];
extern const CHAR gc_szHttpDelete[];
extern const CHAR gc_szHttpPut[];
extern const CHAR gc_szHttpPost[];
extern const CHAR gc_szDavCopy[];
extern const CHAR gc_szDavMove[];
extern const CHAR gc_szDavMkCol[];
extern const CHAR gc_szDavPropfind[];
extern const CHAR gc_szDavProppatch[];
extern const CHAR gc_szDavLocks[];
extern const CHAR gc_szDavSearch[];
extern const CHAR gc_szDavNotif[];
extern const CHAR gc_szDavBatchDelete[];
extern const CHAR gc_szDavBatchCopy[];
extern const CHAR gc_szDavBatchMove[];
extern const CHAR gc_szDavBatchProppatch[];
extern const CHAR gc_szDavBatchPropfind[];
extern const CHAR gc_szDavPublic[];
extern const CHAR gc_szCompliance[];
extern const UINT gc_cbszDavPublic;
// Storage paths and urls ----------------------------------------------------
//
// The storage path for a resource is no-different that the path as translated
// by IIS. This has not always been true, and there is code in the DAV source
// tree that expects the path to have some sort of a prefix.
//
// At the beginning of NT beta3 work, we are removing the idea that a storage
// path in DAV looks any different than a storage path in IIS. This is a very
// important idea. Otherwise, there could be items accessible via DAV that
// are not accessible via IIS -- and visa versa.
//
// Keeping this in mind... There are several places where we have url's that
// are a part of a DAV request that are not pre-handled for us by IIS. Some
// examples are the url's in the destination header of MOVE/COPY, the url's in
// the scope of a SEARCH request, and the url's embedded in "if" headers.
//
// There are also several instances where we may have to generate a url from
// a storage path -- as in the case of location headers and XML response
// references.
//
// The translation of those items uses only common elements. So there is no
// implementation specifc work that needs to be done here.
//
class IMethUtilBase;
class CMethUtil;
typedef CMethUtil IMethUtil;
// The call to be used for proper conversion to unicode
//
SCODE __fastcall
ScConvertToWide(/* [in] */ LPCSTR pszSource,
/* [in/out] */ UINT * pcchDest,
/* [out] */ LPWSTR pwszDest,
/* [in] */ LPCSTR pszAcceptLang,
/* [in] */ BOOL fUrlConversion);
// The call to be used for canonicalization of URL
//
SCODE __fastcall
ScCanonicalizeURL( /* [in] */ LPCWSTR pwszSrc,
/* [in/out] */ LPWSTR pwszDest,
/* [out] */ UINT * pcch );
// The call to be used for canonicalization of URL,
// taking into account if it is fully qualified
//
SCODE __fastcall
ScCanonicalizePrefixedURL( /* [in] */ LPCWSTR pwszSrc,
/* [in/out] */ LPWSTR pwszDest,
/* [out] */ UINT * pcch );
// These are the calls to be used to normalize URL
//
// Normalization consists of 3 steps:
// a) escaping of skinny version
// b) conversion to unicode
// c) canonicalization
//
SCODE __fastcall
ScNormalizeUrl (
/* [in] */ LPCWSTR pwszSourceUrl,
/* [in/out] */ UINT * pcchNormalizedUrl,
/* [out] */ LPWSTR pwszNormalizedUrl,
/* [in] */ LPCSTR pszAcceptLang);
SCODE __fastcall
ScNormalizeUrl (
/* [in] */ LPCSTR pszSourceUrl,
/* [in/out] */ UINT * pcchNormalizedUrl,
/* [out] */ LPWSTR pwszNormalizedUrl,
/* [in] */ LPCSTR pszAcceptLang);
SCODE __fastcall ScStoragePathFromUrl (
/* [in] */ const IEcb& ecb,
/* [in] */ LPCWSTR pwszUrl,
/* [out] */ LPWSTR wszStgID,
/* [in/out] */ UINT* pcch,
/* [out] */ CVRoot** ppcvr = NULL);
SCODE __fastcall ScUrlFromStoragePath (
/* [in] */ const IEcbBase& ecb,
/* [in] */ LPCWSTR pwszPath,
/* [out] */ LPWSTR pwszUrl,
/* [in/out] */ UINT * pcb,
/* [in] */ LPCWSTR pwszServer = NULL);
SCODE __fastcall ScUrlFromSpannedStoragePath (
/* [in] */ LPCWSTR pwszPath,
/* [in] */ CVRoot& vr,
/* [in] */ LPWSTR pwszUrl,
/* [in/out] */ UINT* pcch);
// Wire urls -----------------------------------------------------------------
//
// A note about a wire url. IIS translate all its urls into CP_ACP. So, to
// keep consistant behavior in HTTPEXT, we also keep all local urls in CP_ACP.
// However, for DAVEX, we don't hold to this. We deal exclusively in CP_UTF8
// style URLs.
//
// However, when we spit the url back out over the wire. The url must be in
// UTF8. Anytime a url goes back over the wire from IIS to client, it must be
// sanitized via these calls.
//
SCODE __fastcall ScWireUrlFromWideLocalUrl (
/* [in] */ UINT cchLocal,
/* [in] */ LPCWSTR pwszLocalUrl,
/* [in/out] */ auto_heap_ptr<CHAR>& pszWireUrl);
SCODE __fastcall ScWireUrlFromStoragePath (
/* [in] */ IMethUtilBase* pmu,
/* [in] */ LPCWSTR pwszStoragePath,
/* [in] */ BOOL fCollection,
/* [in] */ CVRoot* pcvrTranslate,
/* [in/out] */ auto_heap_ptr<CHAR>& pszWireUrl);
BOOL __fastcall FIsUTF8Url (/* [in] */ LPCSTR pszUrl);
// Child ISAPI aux. access check ---------------------------------------------
//
// On both HTTPEXT and DAVEX, we have an additional stipulation that needs
// satisfaction before we can hand back the source of an scriptmapped item.
// We want to see if it has NT write access.
// Note that among the parameters, pwszPath is used by HTTPEXT only and
// pbSD is used by DAVEX only
//
SCODE __fastcall ScChildISAPIAccessCheck (
/* [in] */ const IEcb& ecb,
/* [in] */ LPCWSTR pwszPath,
/* [in] */ DWORD dwAccess,
/* [in] */ LPBYTE pbSD);
// Supported lock types ------------------------------------------------------
//
// Return the supported locktype flags for the resource type. HTTPEXT only
// supports documents and collections. DavEX, on the other hand, understands
// structured documents.
//
DWORD __fastcall DwGetSupportedLockType (RESOURCE_TYPE rtResource);
// Access perm hack for DAVEX ------------------------------------------------
//
//$SECURITY
// In DAVEX only, if either a VR_USERNAME or VR_PASSWORD is set then
// to avoid a security problem, shut off all access.
//
VOID ImplHackAccessPerms( LPCWSTR pwszVRUserName,
LPCWSTR pwszVRPassword,
DWORD * pdwAccessPerms );
// DLL instance refcounting --------------------------------------------------
//
VOID AddRefImplInst();
VOID ReleaseImplInst();
// Exception safe DLL instance refcounting -----------------------------------
//
typedef enum {
ADD_REF = 0,
TAKE_OWNERSHIP
} REF_ACTION;
class safeImplInstRef
{
BOOL m_fRelease;
// NOT IMPLEMENTED
//
safeImplInstRef( const safeImplInstRef& );
safeImplInstRef& operator=( const safeImplInstRef& );
public:
// CREATORS
//
safeImplInstRef(REF_ACTION ra) : m_fRelease(TRUE)
{
if (ADD_REF == ra)
AddRefImplInst();
}
// DESTRUCTOR
//
~safeImplInstRef()
{
if (m_fRelease)
ReleaseImplInst();
}
// MANIPULATOR
//
VOID relinquish()
{
m_fRelease = FALSE;
}
};
BOOL FSucceededColonColonCheck(
/* [in] */ LPCWSTR pwszURI);
#endif // _IMPLDEF_H_