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.

254 lines
5.6 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1996 - 1997.
  5. //
  6. // File: IIScopy.cxx
  7. //
  8. // Contents: IIS Object Copy Routines
  9. //
  10. // Functions:
  11. //
  12. // History: 01-Mar-97 SophiaC Created.
  13. //
  14. // Issues: Check null ptrs for AllocADsMem and AllocADsStr
  15. //
  16. //
  17. //----------------------------------------------------------------------------
  18. #include "iis.hxx"
  19. //
  20. // IISType objects copy code
  21. //
  22. HRESULT
  23. IISTypeCopyIISSynIdDWORD(
  24. PIISOBJECT lpIISSrcObject,
  25. PIISOBJECT lpIISDestObject
  26. )
  27. {
  28. HRESULT hr = S_OK;
  29. lpIISDestObject->IISType = lpIISSrcObject->IISType;
  30. lpIISDestObject->IISValue.value_1.dwDWORD =
  31. lpIISSrcObject->IISValue.value_1.dwDWORD;
  32. RRETURN(hr);
  33. }
  34. HRESULT
  35. IISTypeCopyIISSynIdSTRING(
  36. PIISOBJECT lpIISSrcObject,
  37. PIISOBJECT lpIISDestObject
  38. )
  39. {
  40. HRESULT hr = S_OK;
  41. lpIISDestObject->IISType = lpIISSrcObject->IISType;
  42. lpIISDestObject->IISValue.value_2.String =
  43. (LPWSTR)AllocADsStr(
  44. lpIISSrcObject->IISValue.value_2.String
  45. );
  46. RRETURN(hr);
  47. }
  48. HRESULT
  49. IISTypeCopyIISSynIdEXPANDSZ(
  50. PIISOBJECT lpIISSrcObject,
  51. PIISOBJECT lpIISDestObject
  52. )
  53. {
  54. HRESULT hr = S_OK;
  55. lpIISDestObject->IISType = lpIISSrcObject->IISType;
  56. lpIISDestObject->IISValue.value_3.ExpandSz =
  57. (LPWSTR)AllocADsStr(
  58. lpIISSrcObject->IISValue.value_3.ExpandSz
  59. );
  60. RRETURN(hr);
  61. }
  62. HRESULT
  63. IISTypeCopyIISSynIdMULTISZ(
  64. PIISOBJECT lpIISSrcObject,
  65. PIISOBJECT lpIISDestObject
  66. )
  67. {
  68. HRESULT hr = S_OK;
  69. lpIISDestObject->IISType = lpIISSrcObject->IISType;
  70. lpIISDestObject->IISValue.value_4.MultiSz =
  71. (LPWSTR)AllocADsStr(
  72. lpIISSrcObject->IISValue.value_4.MultiSz
  73. );
  74. RRETURN(hr);
  75. }
  76. HRESULT
  77. IISTypeCopyIISSynIdBINARY(
  78. PIISOBJECT lpIISSrcObject,
  79. PIISOBJECT lpIISDestObject
  80. )
  81. {
  82. HRESULT hr = S_OK;
  83. DWORD Length = 0;
  84. LPBYTE pBuffer = NULL;
  85. lpIISDestObject->IISType = lpIISSrcObject->IISType;
  86. Length = lpIISSrcObject->IISValue.value_5.Length;
  87. lpIISDestObject->IISValue.value_5.Length = Length;
  88. if (Length) {
  89. pBuffer = (LPBYTE)AllocADsMem(Length);
  90. if (!pBuffer) {
  91. RRETURN(S_FALSE);
  92. }
  93. memcpy(pBuffer, lpIISSrcObject->IISValue.value_5.Binary, Length);
  94. }
  95. lpIISDestObject->IISValue.value_5.Binary = pBuffer;
  96. RRETURN(hr);
  97. }
  98. HRESULT
  99. IISTypeCopyIISSynIdMIMEMAP(
  100. PIISOBJECT lpIISSrcObject,
  101. PIISOBJECT lpIISDestObject
  102. )
  103. {
  104. HRESULT hr = S_OK;
  105. lpIISDestObject->IISType = lpIISSrcObject->IISType;
  106. lpIISDestObject->IISValue.value_6.MimeMap =
  107. (LPWSTR)AllocADsStr(
  108. lpIISSrcObject->IISValue.value_4.MultiSz
  109. );
  110. RRETURN(hr);
  111. }
  112. HRESULT
  113. IISTypeCopy(
  114. PIISOBJECT lpIISSrcObject,
  115. PIISOBJECT lpIISDestObject
  116. )
  117. {
  118. HRESULT hr = S_OK;
  119. switch (lpIISSrcObject->IISType) {
  120. case IIS_SYNTAX_ID_DWORD:
  121. hr = IISTypeCopyIISSynIdDWORD(
  122. lpIISSrcObject,
  123. lpIISDestObject
  124. );
  125. break;
  126. case IIS_SYNTAX_ID_STRING:
  127. hr = IISTypeCopyIISSynIdSTRING(
  128. lpIISSrcObject,
  129. lpIISDestObject
  130. );
  131. break;
  132. case IIS_SYNTAX_ID_EXPANDSZ:
  133. hr = IISTypeCopyIISSynIdEXPANDSZ(
  134. lpIISSrcObject,
  135. lpIISDestObject
  136. );
  137. break;
  138. case IIS_SYNTAX_ID_MULTISZ:
  139. hr = IISTypeCopyIISSynIdMULTISZ(
  140. lpIISSrcObject,
  141. lpIISDestObject
  142. );
  143. break;
  144. case IIS_SYNTAX_ID_BINARY:
  145. case IIS_SYNTAX_ID_NTACL:
  146. case IIS_SYNTAX_ID_IPSECLIST:
  147. hr = IISTypeCopyIISSynIdBINARY(
  148. lpIISSrcObject,
  149. lpIISDestObject
  150. );
  151. break;
  152. case IIS_SYNTAX_ID_MIMEMAP:
  153. hr = IISTypeCopyIISSynIdMIMEMAP(
  154. lpIISSrcObject,
  155. lpIISDestObject
  156. );
  157. break;
  158. case IIS_SYNTAX_ID_BOOL:
  159. case IIS_SYNTAX_ID_BOOL_BITMASK:
  160. hr = IISTypeCopyIISSynIdDWORD(
  161. lpIISSrcObject,
  162. lpIISDestObject
  163. );
  164. break;
  165. default:
  166. hr = E_FAIL;
  167. break;
  168. }
  169. RRETURN(hr);
  170. }
  171. HRESULT
  172. IISTypeCopyConstruct(
  173. LPIISOBJECT pIISSrcObjects,
  174. DWORD dwNumObjects,
  175. LPIISOBJECT * ppIISDestObjects
  176. )
  177. {
  178. DWORD i = 0;
  179. LPIISOBJECT pIISDestObjects = NULL;
  180. HRESULT hr = S_OK;
  181. DWORD dwNumObj;
  182. if (pIISSrcObjects->IISType == IIS_SYNTAX_ID_BINARY ||
  183. pIISSrcObjects->IISType == IIS_SYNTAX_ID_IPSECLIST ||
  184. pIISSrcObjects->IISType == IIS_SYNTAX_ID_NTACL) {
  185. dwNumObj = 1;
  186. }
  187. else {
  188. dwNumObj = dwNumObjects;
  189. }
  190. pIISDestObjects = (LPIISOBJECT)AllocADsMem(
  191. dwNumObj * sizeof(IISOBJECT)
  192. );
  193. if (!pIISDestObjects) {
  194. RRETURN(E_FAIL);
  195. }
  196. for (i = 0; i < dwNumObj; i++ ) {
  197. hr = IISTypeCopy(pIISSrcObjects + i, pIISDestObjects + i);
  198. }
  199. *ppIISDestObjects = pIISDestObjects;
  200. RRETURN(S_OK);
  201. }