<!--
    
    FTP configuration schema.
    
    ** Please DO NOT edit this file yourself. **
    
    If you want to add configuration sections to the schema, you may place 
    them in .xml files similar to this one, in this directory. They will be 
    picked up automatically on startup.

-->

<configSchema>
  <sectionSchema name="system.applicationHost/sites">
    <collection addElement="site" defaultElement="siteDefaults">
      <element name="ftpServer">
        <attribute name="allowUTF8" type="bool" defaultValue="true"/>
        <attribute name="serverAutoStart" type="bool" defaultValue="true"/>

        <element name="connections">
          <attribute name="unauthenticatedTimeout" type="int" defaultValue="30" />
          <attribute name="controlChannelTimeout" type="int" defaultValue="120" />
          <attribute name="dataChannelTimeout" type="int" defaultValue="30" />
          <attribute name="disableSocketPooling" type="bool" defaultValue="false" />
          <attribute name="serverListenBacklog" type="int" defaultValue="60" />
          <attribute name="minBytesPerSecond" type="int" defaultValue="240" />
          <attribute name="maxConnections" type="uint" defaultValue="4294967295" />
          <attribute name="resetOnMaxConnections" type="bool" defaultValue="false" />
          <attribute name="maxBandwidth" type="uint" validationType="integerRange" validationParameter="0,4294967294,exclude" defaultValue="4294967295" />
        </element>

        <element name="security">
          <element name="dataChannelSecurity">
            <attribute name="matchClientAddressForPort" type="bool" defaultValue="true" />
            <attribute name="matchClientAddressForPasv" type="bool" defaultValue="true" />
          </element>
          
          <element name="commandFiltering">
            <attribute name="maxCommandLine" type="uint" defaultValue="4096" />
            <attribute name="allowUnlisted" type="bool" defaultValue="true" />
            <collection addElement="add" clearElement="clear" removeElement="remove" >
              <attribute name="command" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
              <attribute name="allowed" type="bool" required="true" />
            </collection>
          </element>
          
          <element name="ssl">
            <attribute name="serverCertHash" type="string"/>
            <attribute name="serverCertStoreName" type="string" defaultValue="MY" />
            <attribute name="ssl128" type="bool" defaultValue="false" />
            <attribute name="controlChannelPolicy" type="enum" defaultValue="SslRequire">
              <enum name="SslAllow" value="0" /> 
              <enum name="SslRequire" value="1" /> 
              <enum name="SslRequireCredentialsOnly" value="2" /> 
            </attribute>
            <attribute name="dataChannelPolicy" type="enum" defaultValue="SslRequire">
              <enum name="SslAllow" value="0" /> 
              <enum name="SslRequire" value="1" /> 
              <enum name="SslDeny" value="2" /> 
            </attribute>
          </element>

          <element name="sslClientCertificates">
          <attribute name="clientCertificatePolicy" type="enum" defaultValue="CertIgnore">
            <enum name="CertIgnore" value="0" />
            <enum name="CertAllow" value="1" />
            <enum name="CertRequire" value="2" />
          </attribute>
            <attribute name="useActiveDirectoryMapping" type="bool" defaultValue="false"/>
            <attribute name="validationFlags" type="flags" defaultValue="">
              <flag name="NoRevocationCheck" value="1" />
              <flag name="CertChainRevocationCheckCacheOnly" value="2" />
              <flag name="CertChainCacheOnlyUrlRetrieval" value="4" />
              <flag name="CertNoUsageCheck" value="8" />
            </attribute>
            <attribute name="revocationFreshnessTime" type="timeSpan" defaultValue="00:00:00" />
            <attribute name="revocationUrlRetrievalTimeout" type="timeSpan" defaultValue="00:01:00" />
          </element>

          <element name="authentication">
            <element name="anonymousAuthentication">
              <attribute name="enabled" type="bool" defaultValue="false" />
              <attribute name="userName" type="string" defaultValue="IUSR" />
              <attribute name="password" type="string" encrypted="true" defaultValue="[enc:AesProvider::enc]" />
              <attribute name="defaultLogonDomain" type="string" defaultValue="NT AUTHORITY" />
              <attribute name="logonMethod" type="enum" defaultValue="ClearText">
                <enum name="Interactive" value="0" />
                <enum name="Batch" value="1" />
                <enum name="Network" value="2" />
                <enum name="ClearText" value="3" />
              </attribute>
            </element>
            
            <element name="basicAuthentication">
              <attribute name="enabled" type="bool" defaultValue="false" />
              <attribute name="defaultLogonDomain" type="string" />
              <attribute name="logonMethod" type="enum" defaultValue="ClearText">
                <enum name="Interactive" value="0" />
                <enum name="Batch" value="1" />
                <enum name="Network" value="2" />
                <enum name="ClearText" value="3" />
              </attribute>
            </element>
            
            <element name="clientCertAuthentication">
              <attribute name="enabled" type="bool" defaultValue="false" />
            </element>
    
            <element name="customAuthentication">
              <element name="providers">
                <collection addElement="add" clearElement="clear" removeElement="remove">
                  <attribute name="name" type="string" required="true" isUniqueKey="true"/>
                  <attribute name="enabled" type="bool" defaultValue="true" />
                  </collection>
              </element>   
          </element>      
          </element>
        </element>

        <element name="customFeatures">
          <element name="providers">
            <collection addElement="add" clearElement="clear" removeElement="remove">
              <attribute name="name" type="string" required="true" isUniqueKey="true"/>
              <attribute name="enabled" type="bool" defaultValue="true" />
            </collection>
          </element>   
        </element>
        
        <element name="messages">
          <attribute name="exitMessage" type="string"/>
          <attribute name="greetingMessage" type="string"/>
          <attribute name="bannerMessage" type="string" />
          <attribute name="maxClientsMessage" type="string" />
          <attribute name="suppressDefaultBanner" type="bool" defaultValue="false"/>
          <attribute name="allowLocalDetailedErrors" type="bool" defaultValue="true"/>
          <attribute name="expandVariables" type="bool" defaultValue="false" />
        </element>
        
        <element name="fileHandling">  
          <attribute name="keepPartialUploads" type="bool" defaultValue="false"/>       
          <attribute name="allowReplaceOnRename" type="bool" defaultValue="false"/>
          <attribute name="allowReadUploadsInProgress" type="bool" defaultValue="false"/>
        </element>

        <element name="firewallSupport">
          <attribute name="externalIp4Address" type="string" />
        </element>
      
        <element name="userIsolation">
          <attribute name="mode" type="enum" defaultValue="None">
            <enum name="StartInUsersDirectory" value="0"/>
            <enum name="IsolateRootDirectoryOnly" value="1"/>
            <enum name="ActiveDirectory" value="2"/>
            <enum name="IsolateAllDirectories" value="3"/>
            <enum name="None" value="4"/>
            <enum name="Custom" value="5"/>
          </attribute>
          <element name="activeDirectory">
            <attribute name="adUserName" type="string" />
            <attribute name="adPassword" type="string" encrypted="true" defaultValue="[enc:AesProvider::enc]"/>
            <attribute name="adCacheRefresh" type="timeSpan" defaultValue="00:01:00" />
          </element>
        </element>

        <element name="directoryBrowse">
          <attribute name="showFlags" type="flags" >
            <flag name="LongDate" value="2" />
            <flag name="StyleUnix" value="4" />
            <flag name="DisplayAvailableBytes" value="16" />
            <flag name="DisplayVirtualDirectories" value="32" />
            <flag name="UseGmtTime" value="64" />            
          </attribute>
          <attribute name="virtualDirectoryTimeout" type="int" defaultValue="5" />
        </element>

        <element name="logFile">
          <attribute name="logExtFileFlags" type="flags" defaultValue="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, FtpSubStatus, ServerPort, Session, FullPath">
            <flag name="Date" value="1"/>
            <flag name="Time" value="2"/>
            <flag name="ClientIP" value="4"/>
            <flag name="UserName" value="8"/>
            <flag name="SiteName" value="16"/>
            <flag name="ComputerName" value="32"/>
            <flag name="ServerIP" value="64"/>
            <flag name="Method" value="128"/>
            <flag name="UriStem" value="256"/>
            <flag name="FtpStatus" value="1024"/>
            <flag name="Win32Status" value="2048"/>
            <flag name="BytesSent" value="4096"/>
            <flag name="BytesRecv" value="8192"/>
            <flag name="TimeTaken" value="16384"/>
            <flag name="ServerPort" value="32768"/>
            <flag name="Host" value="1048576"/>
            <flag name="FtpSubStatus" value="2097152"/>
            <flag name="Session" value="4194304"/>
            <flag name="FullPath" value="8388608"/>
            <flag name="Info" value="16777216"/>
            <flag name="ClientPort" value="33554432"/>
          </attribute>
          <attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\logs\LogFiles" validationType="nonEmptyString" />
          <attribute name="period" type="enum" defaultValue="Daily">
            <enum name="MaxSize" value="0"/>
            <enum name="Daily" value="1"/>
            <enum name="Weekly" value="2"/>
            <enum name="Monthly" value="3"/>
            <enum name="Hourly" value="4"/>
          </attribute>
          <attribute name="truncateSize" type="int64" defaultValue="20971520" validationType="integerRange" validationParameter="1048576,4294967295" />
          <attribute name="localTimeRollover" type="bool" defaultValue="false"/>
          <attribute name="enabled" type="bool" defaultValue="true" />
          <attribute name="selectiveLogging" type="flags" defaultValue="LogSuccessful,LogError,LogInfrastructure">
            <flag name="LogSuccessful" value="1" /> 
            <flag name="LogError" value="2" /> 
            <flag name="LogInfrastructure" value="4" /> 
          </attribute>
        </element>

        <attribute name="state" type="enum" extension="Microsoft.ApplicationHostFtpConfigExtension">
            <enum name="Starting" value="0" />
            <enum name="Started" value="1" />
            <enum name="Stopping" value="2" />
            <enum name="Stopped" value="3" />        
            <enum name="Unknown" value="4" />
        </attribute>
        
        <attribute name="lastStartupStatus" type="uint" extension="Microsoft.ApplicationHostFtpConfigExtension"/>
        
        <element name="sessions" extension="Microsoft.ApplicationHostFtpConfigExtension">
            <collection addElement="session">
              <attribute name="clientIp" type="string" />
              <attribute name="sessionId" type="string" />
              <attribute name="sessionStartTime" type="string" />
              <attribute name="userName" type="string" />
               <attribute name="currentCommand" type="string" />
                 <attribute name="previousCommand" type="string" />
               <attribute name="commandStartTime" type="string" />
               <attribute name="bytesSent" type="int64" />
                <attribute name="bytesReceived" type="int64" />
                 <attribute name="lastErrorStatus" type="uint" />
              <method name="Terminate" extension="Microsoft.ApplicationHostFtpConfigExtension"/>
            </collection>
        </element>
        <method name="Start" extension="Microsoft.ApplicationHostFtpConfigExtension" />
        <method name="Stop" extension="Microsoft.ApplicationHostFtpConfigExtension" />
        <method name="FlushLog" extension="Microsoft.ApplicationHostFtpConfigExtension" />
      </element>

    </collection>

    <!-- siteDefaults specific to FTP  -->
    
    <element name="siteDefaults" isCollectionDefault="true">   
      <element name="ftpServer">
        <attribute name="allowUTF8" type="bool" defaultValue="true"/>
        <attribute name="serverAutoStart" type="bool" defaultValue="true"/>

        <element name="connections">
          <attribute name="unauthenticatedTimeout" type="int" defaultValue="30" />
          <attribute name="controlChannelTimeout" type="int" defaultValue="120" />
          <attribute name="dataChannelTimeout" type="int" defaultValue="30" />
          <attribute name="disableSocketPooling" type="bool" defaultValue="false" />
          <attribute name="serverListenBacklog" type="int" defaultValue="60" />
          <attribute name="minBytesPerSecond" type="int" defaultValue="240" />
          <attribute name="maxConnections" type="uint" defaultValue="4294967295" />
          <attribute name="resetOnMaxConnections" type="bool" defaultValue="false" />
          <attribute name="maxBandwidth" type="uint" validationType="integerRange" validationParameter="0,4294967294,exclude" defaultValue="4294967295" />
        </element>

        <element name="security">
          <element name="dataChannelSecurity">
            <attribute name="matchClientAddressForPort" type="bool" defaultValue="true" />
            <attribute name="matchClientAddressForPasv" type="bool" defaultValue="true" />
          </element>
        
          <element name="commandFiltering">
            <attribute name="maxCommandLine" type="uint" defaultValue="4096" />
            <attribute name="allowUnlisted" type="bool" defaultValue="true" />
              <collection addElement="add" clearElement="clear" removeElement="remove" >
              <attribute name="command" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
              <attribute name="allowed" type="bool" required="true" />
            </collection>
          </element>
          
          <element name="ssl">
            <attribute name="serverCertHash" type="string"/>
            <attribute name="serverCertStoreName" type="string" defaultValue="MY" />
            <attribute name="ssl128" type="bool" defaultValue="false" />
            <attribute name="controlChannelPolicy" type="enum" defaultValue="SslRequire">
              <enum name="SslAllow" value="0" /> 
              <enum name="SslRequire" value="1" /> 
              <enum name="SslRequireCredentialsOnly" value="2" /> 
            </attribute>
            <attribute name="dataChannelPolicy" type="enum" defaultValue="SslRequire">
              <enum name="SslAllow" value="0" /> 
              <enum name="SslRequire" value="1" /> 
              <enum name="SslDeny" value="2" /> 
            </attribute>
          </element>

          <element name="sslClientCertificates">
          <attribute name="clientCertificatePolicy" type="enum" defaultValue="CertIgnore">
            <enum name="CertIgnore" value="0" />
            <enum name="CertAllow" value="1" />
            <enum name="CertRequire" value="2" />
          </attribute>
            <attribute name="useActiveDirectoryMapping" type="bool" defaultValue="false"/>
            <attribute name="validationFlags" type="flags" defaultValue="">
              <flag name="NoRevocationCheck" value="1" />
              <flag name="CertChainRevocationCheckCacheOnly" value="2" />
              <flag name="CertChainCacheOnlyUrlRetrieval" value="4" />
              <flag name="CertNoUsageCheck" value="8" />
            </attribute>
            <attribute name="revocationFreshnessTime" type="timeSpan" defaultValue="00:00:00" />
            <attribute name="revocationUrlRetrievalTimeout" type="timeSpan" defaultValue="00:01:00" />
          </element>
        
          <element name="authentication">
            <element name="anonymousAuthentication">
              <attribute name="enabled" type="bool" defaultValue="false" />
              <attribute name="userName" type="string" defaultValue="IUSR" />
              <attribute name="password" type="string" encrypted="true" defaultValue="[enc:AesProvider::enc]"/>
              <attribute name="defaultLogonDomain" type="string" defaultValue="NT AUTHORITY" />
              <attribute name="logonMethod" type="enum" defaultValue="ClearText">
                <enum name="Interactive" value="0" />
                <enum name="Batch" value="1" />
                <enum name="Network" value="2" />
                <enum name="ClearText" value="3" />
              </attribute>
            </element>
            
            <element name="basicAuthentication">
              <attribute name="enabled" type="bool" defaultValue="false" />
              <attribute name="defaultLogonDomain" type="string" />
              <attribute name="logonMethod" type="enum" defaultValue="ClearText">
                <enum name="Interactive" value="0" />
                <enum name="Batch" value="1" />
                <enum name="Network" value="2" />
                <enum name="ClearText" value="3" />
              </attribute>
            </element>

            <element name="clientCertAuthentication">
              <attribute name="enabled" type="bool" defaultValue="false" />
            </element>
    
            <element name="customAuthentication">
              <element name="providers">
                <collection addElement="add" clearElement="clear" removeElement="remove">
                  <attribute name="name" type="string" required="true" isUniqueKey="true"/>
                  <attribute name="enabled" type="bool" defaultValue="true" />
                </collection>
              </element>   
            </element>
          </element>
        </element>
        
        <element name="customFeatures">
          <attribute name="impersonationLevel" type="enum" defaultValue="Identify">
             <enum name="Anonymous" value="0"/>
             <enum name="Identify" value="1"/>
             <enum name="Impersonate"  value="2"/>
             <enum name="Delegate" value="3"/>
          </attribute>
          <element name="providers">
            <collection addElement="add" clearElement="clear" removeElement="remove">
              <attribute name="name" type="string" required="true" isUniqueKey="true"/>
              <attribute name="enabled" type="bool" defaultValue="true" />
            </collection>
          </element>   
        </element>

        <element name="messages">
          <attribute name="exitMessage" type="string"/>
          <attribute name="greetingMessage" type="string"/>
          <attribute name="bannerMessage" type="string" />
          <attribute name="maxClientsMessage" type="string" />
          <attribute name="suppressDefaultBanner" type="bool" defaultValue="false"/>
          <attribute name="allowLocalDetailedErrors" type="bool" defaultValue="true"/>
          <attribute name="expandVariables" type="bool" defaultValue="false" />
        </element>

        <element name="fileHandling">  
          <attribute name="keepPartialUploads" type="bool" defaultValue="false"/>       
          <attribute name="allowReplaceOnRename" type="bool" defaultValue="false"/>
          <attribute name="allowReadUploadsInProgress" type="bool" defaultValue="false"/>
        </element>

        <element name="firewallSupport">
          <attribute name="externalIp4Address" type="string" />
        </element>
      
        <element name="userIsolation">
          <attribute name="mode" type="enum" defaultValue="None">
            <enum name="StartInUsersDirectory" value="0"/>
            <enum name="IsolateRootDirectoryOnly" value="1"/>
            <enum name="ActiveDirectory" value="2"/>
            <enum name="IsolateAllDirectories" value="3"/>
            <enum name="None" value="4"/>
            <enum name="Custom" value="5"/>            
          </attribute>
          <element name="activeDirectory">
            <attribute name="adUserName" type="string" />
            <attribute name="adPassword" type="string" encrypted="true" defaultValue="[enc:AesProvider::enc]"/>
            <attribute name="adCacheRefresh" type="timeSpan" defaultValue="00:01:00" />
          </element>
        </element>

        <element name="directoryBrowse">
          <attribute name="showFlags" type="flags" >
            <flag name="LongDate" value="2" />
            <flag name="StyleUnix" value="4" />
            <flag name="DisplayAvailableBytes" value="16" />
            <flag name="DisplayVirtualDirectories" value="32" />
            <flag name="UseGmtTime" value="64" />
          </attribute>
          <attribute name="virtualDirectoryTimeout" type="int" defaultValue="5" />
        </element>
        
        <element name="logFile">
          <attribute name="logExtFileFlags" type="flags" defaultValue="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, FtpSubStatus, ServerPort, Session, FullPath">
            <flag name="Date" value="1"/>
            <flag name="Time" value="2"/>
            <flag name="ClientIP" value="4"/>
            <flag name="UserName" value="8"/>
            <flag name="SiteName" value="16"/>
            <flag name="ComputerName" value="32"/>
            <flag name="ServerIP" value="64"/>
            <flag name="Method" value="128"/>
            <flag name="UriStem" value="256"/>
            <flag name="FtpStatus" value="1024"/>
            <flag name="Win32Status" value="2048"/>
            <flag name="BytesSent" value="4096"/>
            <flag name="BytesRecv" value="8192"/>
            <flag name="TimeTaken" value="16384"/>
            <flag name="ServerPort" value="32768"/>
            <flag name="Host" value="1048576"/>
            <flag name="FtpSubStatus" value="2097152"/>
            <flag name="Session" value="4194304"/>
            <flag name="FullPath" value="8388608"/>
            <flag name="Info" value="16777216"/>
            <flag name="ClientPort" value="33554432"/>
          </attribute>
          <attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\logs\LogFiles" validationType="nonEmptyString" />
          <attribute name="period" type="enum" defaultValue="Daily">
            <enum name="MaxSize" value="0"/>
            <enum name="Daily" value="1"/>
            <enum name="Weekly" value="2"/>
            <enum name="Monthly" value="3"/>
            <enum name="Hourly" value="4"/>
          </attribute>
          <attribute name="truncateSize" type="int64" defaultValue="20971520" validationType="integerRange" validationParameter="1048576,4294967295" />
          <attribute name="localTimeRollover" type="bool" defaultValue="false"/>
          <attribute name="enabled" type="bool" defaultValue="true" />
          <attribute name="selectiveLogging" type="flags" defaultValue="LogSuccessful,LogError,LogInfrastructure">
            <flag name="LogSuccessful" value="1" /> 
            <flag name="LogError" value="2" /> 
            <flag name="LogInfrastructure" value="4" /> 
          </attribute>
        </element>
      </element>
    </element>
  </sectionSchema>

  <sectionSchema name="system.ftpServer/log">    
    <attribute name="centralLogFileMode"  type="enum" defaultValue="Site" >
      <enum name="Site" value="0"/>
      <enum name="Central" value="1"/>
    </attribute>
    
    <attribute name="logInUTF8" type="bool" defaultValue="true" />
    
    <element name="centralLogFile">
      <attribute name="logExtFileFlags" type="flags" defaultValue="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, FtpSubStatus, ServerPort, Session, FullPath">
        <flag name="Date" value="1"/>
        <flag name="Time" value="2"/>
        <flag name="ClientIP" value="4"/>
        <flag name="UserName" value="8"/>
        <flag name="SiteName" value="16"/>
        <flag name="ComputerName" value="32"/>
        <flag name="ServerIP"  value="64"/>
        <flag name="Method" value="128"/>
        <flag name="UriStem" value="256"/>
        <flag name="FtpStatus" value="1024"/>
        <flag name="Win32Status" value="2048"/>
        <flag name="BytesSent" value="4096"/>
        <flag name="BytesRecv" value="8192"/>
        <flag name="TimeTaken" value="16384"/>
        <flag name="ServerPort" value="32768"/>
        <flag name="Host" value="1048576"/>
        <flag name="FtpSubStatus"  value="2097152"/>
        <flag name="Session"  value="4194304"/>
        <flag name="FullPath" value="8388608"/>
        <flag name="Info" value="16777216"/>
        <flag name="ClientPort" value="33554432"/>
      </attribute>
      <attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\logs\LogFiles" validationType="nonEmptyString" />
      <attribute name="period" type="enum" defaultValue="Daily">
        <enum name="MaxSize" value="0"/>
        <enum name="Daily" value="1"/>
        <enum name="Weekly"  value="2"/>
        <enum name="Monthly" value="3"/>
        <enum name="Hourly" value="4"/>
      </attribute>
      <attribute name="truncateSize" type="int64" defaultValue="20971520" validationType="integerRange"  validationParameter="1048576,4294967295" />
      <attribute name="localTimeRollover" type="bool" defaultValue="false"/>
      <attribute name="enabled" type="bool" defaultValue="true" />
      <attribute name="selectiveLogging" type="flags" defaultValue="LogSuccessful,LogError,LogInfrastructure">
        <flag name="LogSuccessful" value="1" /> 
        <flag name="LogError" value="2" /> 
        <flag name="LogInfrastructure" value="4" /> 
      </attribute>
    </element>
  </sectionSchema>

  <sectionSchema name="system.ftpServer/firewallSupport">
    <attribute name="lowDataChannelPort" type="int" validationType="integerRange" validationParameter="0,65535"  defaultValue="0" />
    <attribute name="highDataChannelPort" type="int" validationType="integerRange" validationParameter="0,65535" defaultValue="0" />
  </sectionSchema>

  <sectionSchema name="system.ftpServer/providerDefinitions">
    <collection addElement="add">
      <attribute name="name" type="string" required="true" isUniqueKey="true"/>
      <attribute name="type" type="string" />
      <attribute name="clsid" type="string" />
    </collection>
    <element name="activation">
      <collection addElement="providerData">
        <attribute name="name" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
        <collection addElement="add" clearElement="clear" removeElement="remove">
          <attribute name="key" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
          <attribute name="value" type="string" />
          <attribute name="encryptedValue" type="string" encrypted="true" defaultValue="[enc:AesProvider::enc]" />
        </collection>
      </collection>
    </element>
  </sectionSchema>

  <sectionSchema name="system.ftpServer/security/authorization">
    <collection addElement="add" clearElement="clear" removeElement="remove">
      <attribute name="accessType" type="enum" required="true">
        <enum name="Allow" value="0" />
        <enum name="Deny" value="1" />
      </attribute>
      <attribute name="users" type="string" isCombinedKey="true" />
      <attribute name="roles" type="string" isCombinedKey="true" />
      <attribute name="permissions" type="flags" isCombinedKey="true">
        <flag name="Read" value="1" />
        <flag name="Write" value="2" />
      </attribute>
    </collection>
  </sectionSchema>
    
  <sectionSchema name="system.ftpServer/security/ipSecurity">
    <attribute name="enableReverseDns" type="bool" defaultValue="false" />
    <attribute name="allowUnlisted" type="bool" defaultValue="true" />
    <collection addElement="add" clearElement="clear"  removeElement="remove">
      <attribute name="ipAddress" type="string" isCombinedKey="true" />
      <attribute name="subnetMask" type="string" isCombinedKey="true" defaultValue="255.255.255.255" />
      <attribute name="domainName" type="string" isCombinedKey="true" />
      <attribute name="allowed" type="bool" defaultValue="false" />
    </collection>
  </sectionSchema>

  <sectionSchema name="system.ftpServer/security/requestFiltering">
    <attribute name="allowHighBitCharacters" type="bool" defaultValue="true" />
    <element name="fileExtensions">
      <attribute name="allowUnlisted" type="bool" defaultValue="true" />
      <collection addElement="add" clearElement="clear" removeElement="remove" >
        <attribute name="fileExtension" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
        <attribute name="allowed" type="bool" required="true" defaultValue="true" />
      </collection>
    </element>
    <element name="requestLimits">
      <attribute name="maxAllowedContentLength" type="int64" defaultValue="0" />
      <attribute name="maxUrl" type="uint" defaultValue="4096" validationType="integerRange" validationParameter="32,32768"/>
    </element>
    <element name="hiddenSegments">
      <collection addElement="add" clearElement="clear" removeElement="remove" >
        <attribute name="segment" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
      </collection>
    </element>
    <element name="denyUrlSequences">
      <collection addElement="add" clearElement="clear" removeElement="remove" >
        <attribute name="sequence" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
      </collection>
    </element>
  </sectionSchema>

  <sectionSchema name="system.ftpServer/caching">
      <element name="credentialsCache">
          <attribute name="enabled" type="bool" defaultValue="true" />
          <attribute name="flushInterval" type="uint" defaultValue="900" validationType="integerRange"  validationParameter="5,604800"/>
          <method name="Flush" extension="Microsoft.ApplicationHostFtpConfigExtension"/>
      </element>
  </sectionSchema>

  <sectionSchema name="system.ftpServer/serverRuntime">
    <element name="hostNameSupport">
      <attribute name="useDomainNameAsHostName" type="bool" defaultValue="false" />
    </element>      
  </sectionSchema>        
  
</configSchema>
