<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<assembly>
  <id>usersync</id>
  <formats>
     <format>tar.gz</format>
	 <format>zip</format>
  </formats>
  <baseDirectory>${project.name}-${project.version}-usersync</baseDirectory>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
	    <directoryMode>755</directoryMode>
	    <fileMode>644</fileMode>
  		<dependencySets>
   			<dependencySet>
     			<outputDirectory>/lib</outputDirectory>
				<includes>
					<include>com.google.code.gson:gson</include>
					<include>com.sun.jersey:jersey-bundle</include>
					<include>log4j:log4j</include>
					<include>commons-cli:commons-cli</include>
					<include>commons-collections:commons-collections</include>
					<include>commons-configuration:commons-configuration</include>
					<include>commons-lang:commons-lang</include>
					<include>commons-logging:commons-logging</include>
					<include>com.google.guava:guava</include>
					<include>org.apache.hadoop:hadoop-auth</include>
					<include>org.slf4j:slf4j-api</include>
					<include>org.apache.hadoop:hadoop-common</include>
					<include>org.apache.commons:commons-csv</include>
					<include>org.apache.ranger:credentialbuilder</include>
					<include>org.apache.ranger:ranger-util</include>
					<include>commons-io:commons-io:jar:${commons.io.version}</include>
					<include>org.apache.htrace:htrace-core</include>
					<include>org.apache.httpcomponents:httpclient:jar:${httpcomponents.httpclient.version}</include>
					<include>commons-codec:commons-codec</include>
					<include>org.apache.ranger:ranger-plugins-common</include>
				</includes>
				<unpack>false</unpack>
  			</dependencySet>
  		</dependencySets>
        <outputDirectory>/dist</outputDirectory>
     </binaries>
     <includes>
	<include>org.apache.ranger:unixauthservice</include>
	<include>org.apache.ranger:unixusersync</include>
     </includes>
    </moduleSet>
    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <outputDirectory>/installer/lib</outputDirectory>
        <unpack>false</unpack>
     </binaries>
     <includes>
	<include>org.apache.ranger:ranger-plugins-installer</include>
     </includes>
    </moduleSet>
  </moduleSets> 	
  <fileSets>
      <fileSet>
          <outputDirectory>/ldaptool/lib</outputDirectory>
          <directory>${project.basedir}/ugsync/ldapconfigchecktool/ldapconfigcheck/target/generated-tool-dependencies/lib</directory>
          <fileMode>644</fileMode>
      </fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
	    	<fileMode>644</fileMode>
		<outputDirectory>/conf.dist</outputDirectory>
		<directory>unixauthservice/conf.dist</directory>
		<excludes>
			<exclude>jaas.conf</exclude>
		</excludes>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
		<fileMode>544</fileMode>
		<outputDirectory>/</outputDirectory>
		<directory>unixauthservice/scripts</directory>
		<excludes>
			<exclude>*.properties</exclude>
			<exclude>initd</exclude>
		</excludes>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
		<fileMode>700</fileMode>
		<outputDirectory>/</outputDirectory>
		<directory>unixauthservice/scripts</directory>
		<includes>
			<include>*.properties</include>
		</includes>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
	    	<fileMode>644</fileMode>
		<outputDirectory>/conf.dist/cert</outputDirectory>
		<directory>unixauthservice/cert</directory>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
	    	<fileMode>755</fileMode>
		<outputDirectory>/native</outputDirectory>
		<directory>unixauthnative/target</directory>
		               <includes>
		                        <include>credValidator.*</include>
		               </includes>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
	    	<fileMode>755</fileMode>
		<outputDirectory>/native</outputDirectory>
		<directory>unixauthpam/target</directory>
		               <includes>
		                        <include>pamCredValidator.*</include>
		               </includes>
	</fileSet>
        <fileSet>
	    	<directoryMode>755</directoryMode>
                <outputDirectory>/</outputDirectory>
                <directory>${project.build.directory}</directory>
                <includes>
                        <include>version</include>
                </includes>
		<fileMode>444</fileMode>
        </fileSet>
        <fileSet>
            <outputDirectory>/</outputDirectory>
            <directory>security-admin/scripts</directory>
            <includes>
                <include>ranger_credential_helper.py</include>
            </includes>
            <fileMode>544</fileMode>
        </fileSet>
        <fileSet>
                <directoryMode>755</directoryMode>
                <fileMode>755</fileMode>
                <outputDirectory>/usersync_tool</outputDirectory>
                <directory>ugsync/filesourceusersynctool</directory>
            <includes>
                <include>run-filesource-usersync.sh</include>
            </includes>
        </fileSet>
	<fileSet>
                <directoryMode>755</directoryMode>
                <fileMode>755</fileMode>
                <outputDirectory>/ldaptool</outputDirectory>
                <directory>ugsync/ldapconfigchecktool/ldapconfigcheck/scripts</directory>
            <includes>
                <include>run.sh</include>
            </includes>
        </fileSet>
	<fileSet>
                <directoryMode>755</directoryMode>
                <fileMode>644</fileMode>
                <outputDirectory>/ldaptool/lib</outputDirectory>
                <directory>ugsync/ldapconfigchecktool/ldapconfigcheck/target</directory>
            <includes>
                <include>ldapconfigcheck-${project.version}.jar</include>
            </includes>
	</fileSet>
	<fileSet>
                <directoryMode>755</directoryMode>
                <fileMode>644</fileMode>
                <outputDirectory>/ldaptool/conf</outputDirectory>
                <directory>ugsync/ldapconfigchecktool/ldapconfigcheck/conf</directory>
            <includes>
                <include>input.properties</include>
            </includes>
        </fileSet>
	<fileSet>
                <directoryMode>755</directoryMode>
                <fileMode>644</fileMode>
                <outputDirectory>/ldaptool/output</outputDirectory>
                <directory>ugsync/ldapconfigchecktool/ldapconfigcheck/conf</directory>
		<excludes>
                <exclude>input.properties</exclude>
            </excludes>
        </fileSet>
  </fileSets>
  <files>
      <file>
		<source>unixauthservice/scripts/initd</source>
		<outputDirectory>/</outputDirectory>
		<destName>ranger-usersync</destName>
		<fileMode>755</fileMode>
      </file>
   </files>
</assembly>
