Index: plugin/src/main/java/org/apache/directory/daemon/installers/rpm/RpmTarget.java
===================================================================
--- plugin/src/main/java/org/apache/directory/daemon/installers/rpm/RpmTarget.java	(revision 448553)
+++ plugin/src/main/java/org/apache/directory/daemon/installers/rpm/RpmTarget.java	(working copy)
@@ -34,8 +34,11 @@
 public class RpmTarget extends Target
 {
     private File rpmBuilder = new File( "/usr/bin/rpmbuild" );
+    private File rpmTopDir = new File( "target/images/rpm" );
     private File rpmSpecificationFile;
     private boolean doSudo = false;
+    private String installBase = null;
+    private String daemonUser = "root";
 
 
     public void setRpmBuilder( File rpmBuilder )
@@ -49,7 +52,18 @@
         return rpmBuilder;
     }
 
+    public void setRpmTopDir( File rpmBuildDir )
+    {
+        this.rpmTopDir = rpmTopDir;
+    }
 
+
+    public File getRpmTopDir()
+    {
+        return rpmTopDir;
+    }
+
+
     public void setRpmSpecificationFile( File rpmConfigurationFile )
     {
         this.rpmSpecificationFile = rpmConfigurationFile;
@@ -61,15 +75,23 @@
         return rpmSpecificationFile;
     }
 
+    public void setInstallBase( String installBase ) 
+    {
+	this.installBase = installBase;
+    }
 
-    public void setDoSudo( boolean doSudo )
+    public String getInstallBase()
     {
-        this.doSudo = doSudo;
+	return installBase;
     }
+ 
+    public void setDaemonUser( String daemonUser ) 
+    {
+	this.daemonUser = daemonUser;
+    }
 
-
-    public boolean isDoSudo()
+    public String getDaemonUser()
     {
-        return doSudo;
+	return daemonUser;
     }
 }
Index: plugin/src/main/java/org/apache/directory/daemon/installers/rpm/RpmInstallerCommand.java
===================================================================
--- plugin/src/main/java/org/apache/directory/daemon/installers/rpm/RpmInstallerCommand.java	(revision 448553)
+++ plugin/src/main/java/org/apache/directory/daemon/installers/rpm/RpmInstallerCommand.java	(working copy)
@@ -54,19 +54,21 @@
 {
     private final Properties filterProperties = new Properties( System.getProperties() );
     private final RpmTarget target;
-    private final File rpmConfigurationFile;
     private final Log log;
 
+    private File rpmConfigurationFile = null;
     private File rpmBuilder;
+    private File rpmTopDir;
+    private File rpmBuildDir;
+    private File rpmSourcesDir;
+    private File rpmSpecsDir;
 
-
     public RpmInstallerCommand(ServiceInstallersMojo mymojo, RpmTarget target) throws MojoFailureException
     {
         super( mymojo );
         this.target = target;
         this.log = mymojo.getLog();
         File imagesDir = target.getLayout().getBaseDirectory().getParentFile();
-        rpmConfigurationFile = new File( imagesDir, target.getId() + ".spec" );
         initializeFiltering();
     }
 
@@ -110,15 +112,6 @@
             return;
         }
 
-        if ( !System.getProperties().getProperty( "user.name" ).equals( "root" ) && !target.isDoSudo() )
-        {
-            log.warn( "RPM target " + target.getId() + " can only be built by a super user or regular user "
-                + "with sudo capabilities that bypass the password!" );
-            log.warn( "The target will not be built." );
-            log.warn( "The rest of the build will not fail because of this acceptable situation." );
-            return;
-        }
-
         // @todo this should really be a parameter taken from the user's settings
         // because the compiler may be installed in different places and is specific
         if ( !target.getRpmBuilder().exists() )
@@ -130,6 +123,17 @@
             this.rpmBuilder = target.getRpmBuilder();
         }
 
+	rpmTopDir = target.getRpmTopDir().getAbsoluteFile();
+	rpmBuildDir = new File(rpmTopDir, "BUILD");
+	rpmSourcesDir = new File(rpmTopDir, "SOURCES");
+	rpmSpecsDir = new File(rpmTopDir, "SPECS");
+
+        rpmConfigurationFile = new File( rpmSpecsDir, target.getId() + ".spec" );
+
+	rpmBuildDir.mkdirs();
+	rpmSourcesDir.mkdirs();
+	rpmSpecsDir.mkdirs();
+
         // -------------------------------------------------------------------
         // Step 2 & 3: copy rpm spec file and filter 
         // -------------------------------------------------------------------
@@ -216,36 +220,13 @@
 
         buildSourceTarball();
         String[] cmd = new String[]
-            { rpmBuilder.getAbsolutePath(), "-ba", rpmConfigurationFile.getAbsolutePath() };
-        MojoHelperUtils.exec( cmd, target.getLayout().getBaseDirectory().getParentFile(), target.isDoSudo() );
-        String rpmName = target.getApplication().getName() + "-" + version + "-0.i386.rpm";
-        File srcFile = new File( "/usr/src/redhat/RPMS/i386", rpmName );
-        File dstFile = null;
-
-        if ( target.getFinalName() == null )
-        {
-            dstFile = new File( mymojo.getOutputDirectory(), rpmName );
-        }
-        else
-        {
-            String finalName = target.getFinalName();
-            if ( !finalName.endsWith( ".rpm" ) )
-            {
-                finalName = finalName + ".rpm";
-            }
-
-            dstFile = new File( mymojo.getOutputDirectory(), finalName );
-        }
-
-        try
-        {
-            FileUtils.copyFile( srcFile, dstFile );
-        }
-        catch ( IOException e )
-        {
-            // if this happens we don't stop since RPM could be somewhere else
-            e.printStackTrace();
-        }
+            { rpmBuilder.getAbsolutePath(),
+	      "--define", "_topdir " + rpmTopDir,
+	      "--define", "_rpmdir " + mymojo.getOutputDirectory().getAbsolutePath(),
+	      "--define", "_srcrpmdir " + mymojo.getOutputDirectory().getAbsolutePath(),
+	      "--define", "_rpmfilename  %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm",
+	      "-ba", rpmConfigurationFile.getAbsolutePath() };
+        MojoHelperUtils.exec( cmd, target.getLayout().getBaseDirectory().getParentFile(), false );
     }
 
 
@@ -286,17 +267,6 @@
             filterProperties.put( "app.author", target.getApplication().getAuthors().get( 0 ) );
         }
 
-        if ( target.getFinalName() != null )
-        {
-            filterProperties.put( "app.final.name", target.getFinalName() );
-        }
-        else
-        {
-            String finalName = target.getApplication().getName() + "-" + target.getApplication().getVersion()
-                + "-linux-i386.rpm";
-            filterProperties.put( "app.final.name", finalName );
-        }
-
         filterProperties.put( "app.email", target.getApplication().getEmail() );
         filterProperties.put( "app.url", target.getApplication().getUrl() );
         filterProperties.put( "app.java.version", target.getApplication().getMinimumJavaVersion() );
@@ -315,277 +285,23 @@
         filterProperties.put( "app.icon", target.getLayout().getLogoIconFile().getName() );
         filterProperties.put( "app.icon.name", target.getLayout().getLogoIconFile().getName() );
         filterProperties.put( "image.basedir", target.getLayout().getBaseDirectory().getPath() );
-        filterProperties.put( "install.append.libs", getInstallLibraryJars() );
-        filterProperties.put( "verify.append.libs", getVerifyLibraryJars() );
         filterProperties.put( "installer.output.directory", target.getLayout().getBaseDirectory().getParent() );
         filterProperties.put( "server.init", target.getLayout().getInitScript().getName() );
-        filterProperties.put( "app.install.base", "/usr/local/" + target.getApplication().getName() + "-" + version );
+	String installBase = target.getInstallBase();
+	if ( installBase == null ) 
+	{
+	    installBase = "/usr/local/" + target.getApplication().getName() + "-" + target.getApplication().getVersion();
+	}
+        filterProperties.put( "app.install.base", installBase );
 
-        if ( target.getDocsDirectory() != null )
-        {
-            File docRoot = new File( target.getLayout().getBaseDirectory(), target.getDocsTargetPath() );
-            ArrayList docList = new ArrayList( 200 );
-            listFiles( docList, docRoot );
-            filterProperties.put( "mk.docs.dirs", getMkDocsDirs( docList, target ) );
-            filterProperties.put( "install.docs", getInstallDocs( docList, target ) );
-            filterProperties.put( "verify.docs", getVerifyDocs( docList, target ) );
-        }
-        else
-        {
-            filterProperties.put( "mk.docs.dirs", "" );
-            filterProperties.put( "install.docs", "" );
-            filterProperties.put( "verify.docs", "" );
-        }
+	filterProperties.put( "with.docs", 
+			     target.getDocsDirectory() == null ? "0" : "1" );
 
-        if ( target.getSourcesDirectory() != null )
-        {
-            File srcRoot = new File( target.getLayout().getBaseDirectory(), target.getSourcesTargetPath() );
-            ArrayList srcList = new ArrayList( 200 );
-            listFiles( srcList, srcRoot );
-            filterProperties.put( "mk.sources.dirs", getMkSourcesDirs( srcList, target ) );
-            filterProperties.put( "install.sources", getInstallSources( srcList, target ) );
-            filterProperties.put( "verify.sources", getVerifySources( srcList, target ) );
-        }
-        else
-        {
-            filterProperties.put( "mk.sources.dirs", "" );
-            filterProperties.put( "install.sources", "" );
-            filterProperties.put( "verify.sources", "" );
-        }
-
-        File noticeFile = new File( target.getLayout().getBaseDirectory(), "NOTICE.txt" );
-        if ( noticeFile.exists() )
-        {
-            filterProperties.put( "install.notice.file", "install -m 644 " + target.getLayout().getBaseDirectory()
-                + "/NOTICE.txt $RPM_BUILD_ROOT/usr/local/" + target.getApplication().getName() + "-%{version}" );
-            filterProperties.put( "verify.notice.file", "/usr/local/" + target.getApplication().getName()
-                + "-%{version}/NOTICE.txt" );
-        }
-        else
-        {
-            filterProperties.put( "install.notice.file", "" );
-            filterProperties.put( "verify.notice.file", "" );
-        }
+	filterProperties.put( "with.sources", 
+			     target.getSourcesDirectory() == null ? "0" : "1" );
+	filterProperties.put( "app.user", target.getDaemonUser() ); 
     }
 
-
-    static String getMkSourcesDirs( List srcList, Target target )
-    {
-        StringBuffer buf = new StringBuffer();
-        File srcBase = target.getLayout().getBaseDirectory();
-        srcBase = new File( srcBase, target.getSourcesTargetPath() );
-        // +1 for '/' char 
-        int basePathSize = target.getLayout().getBaseDirectory().getAbsolutePath().length() + 1;
-
-        for ( int ii = 0; ii < srcList.size(); ii++ )
-        {
-            File file = ( File ) srcList.get( ii );
-            if ( file.isFile() )
-            {
-                continue;
-            }
-
-            String path = file.getAbsolutePath().substring( basePathSize );
-            buf.append( "mkdir -p $RPM_BUILD_ROOT/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/" );
-            buf.append( path );
-            buf.append( "\n" );
-        }
-        return buf.toString();
-    }
-
-
-    static String getMkDocsDirs( List docList, Target target )
-    {
-        StringBuffer buf = new StringBuffer();
-        File docsBase = target.getLayout().getBaseDirectory();
-        docsBase = new File( docsBase, target.getDocsTargetPath() );
-        // +1 for '/' char 
-        int basePathSize = target.getLayout().getBaseDirectory().getAbsolutePath().length() + 1;
-
-        for ( int ii = 0; ii < docList.size(); ii++ )
-        {
-            File file = ( File ) docList.get( ii );
-            if ( file.isFile() )
-            {
-                continue;
-            }
-
-            String path = file.getAbsolutePath().substring( basePathSize );
-            buf.append( "mkdir -p $RPM_BUILD_ROOT/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/" );
-            buf.append( path );
-            buf.append( "\n" );
-        }
-        return buf.toString();
-    }
-
-
-    static void listFiles( List fileList, File dir )
-    {
-        if ( dir.isFile() )
-        {
-            return;
-        }
-
-        fileList.add( dir );
-        File[] files = dir.listFiles();
-        for ( int ii = 0; ii < files.length; ii++ )
-        {
-            if ( files[ii].isFile() )
-            {
-                fileList.add( files[ii] );
-            }
-
-            listFiles( fileList, files[ii] );
-        }
-    }
-
-
-    static String getInstallDocs( List docList, Target target )
-    {
-        StringBuffer buf = new StringBuffer();
-        File docsBase = target.getLayout().getBaseDirectory();
-        docsBase = new File( docsBase, target.getDocsTargetPath() );
-        // +1 for '/' char 
-        int basePathSize = target.getLayout().getBaseDirectory().getAbsolutePath().length() + 1;
-
-        for ( int ii = 0; ii < docList.size(); ii++ )
-        {
-            File file = ( File ) docList.get( ii );
-            if ( file.isDirectory() )
-            {
-                continue;
-            }
-
-            String path = file.getAbsolutePath().substring( basePathSize );
-            buf.append( "install -m 644 " );
-            buf.append( target.getLayout().getBaseDirectory() ).append( "/" );
-            buf.append( path );
-            buf.append( " $RPM_BUILD_ROOT/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/" );
-            buf.append( path );
-            buf.append( "\n" );
-        }
-        return buf.toString();
-    }
-
-
-    static String getVerifyDocs( List docList, Target target )
-    {
-        StringBuffer buf = new StringBuffer();
-        File docBase = target.getLayout().getBaseDirectory();
-        docBase = new File( docBase, target.getDocsTargetPath() );
-        // +1 for '/' char 
-        int basePathSize = target.getLayout().getBaseDirectory().getAbsolutePath().length() + 1;
-
-        for ( int ii = 0; ii < docList.size(); ii++ )
-        {
-            File file = ( File ) docList.get( ii );
-            String path = file.getAbsolutePath().substring( basePathSize );
-            buf.append( "/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/" );
-            buf.append( path );
-            buf.append( "\n" );
-        }
-        return buf.toString();
-    }
-
-
-    static String getInstallSources( List sourceList, Target target )
-    {
-        StringBuffer buf = new StringBuffer();
-        File srcBase = target.getLayout().getBaseDirectory();
-        srcBase = new File( srcBase, target.getSourcesTargetPath() );
-        // +1 for '/' char 
-        int basePathSize = target.getLayout().getBaseDirectory().getAbsolutePath().length() + 1;
-
-        for ( int ii = 0; ii < sourceList.size(); ii++ )
-        {
-            File file = ( File ) sourceList.get( ii );
-            if ( file.isDirectory() )
-            {
-                continue;
-            }
-
-            String path = file.getAbsolutePath().substring( basePathSize );
-            buf.append( "install -m 644 " );
-            buf.append( target.getLayout().getBaseDirectory() ).append( "/" );
-            buf.append( path );
-            buf.append( " $RPM_BUILD_ROOT/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/" );
-            buf.append( path );
-            buf.append( "\n" );
-        }
-        return buf.toString();
-    }
-
-
-    static String getVerifySources( List sourceList, Target target )
-    {
-        StringBuffer buf = new StringBuffer();
-        File srcBase = target.getLayout().getBaseDirectory();
-        srcBase = new File( srcBase, target.getSourcesTargetPath() );
-        // +1 for '/' char 
-        int basePathSize = target.getLayout().getBaseDirectory().getAbsolutePath().length() + 1;
-
-        for ( int ii = 0; ii < sourceList.size(); ii++ )
-        {
-            File file = ( File ) sourceList.get( ii );
-            String path = file.getAbsolutePath().substring( basePathSize );
-            buf.append( "/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/" );
-            buf.append( path );
-            buf.append( "\n" );
-        }
-        return buf.toString();
-    }
-
-
-    private Object getVerifyLibraryJars()
-    {
-        StringBuffer buf = new StringBuffer();
-        List artifacts = target.getLibArtifacts();
-        for ( int ii = 0; ii < artifacts.size(); ii++ )
-        {
-            File artifact = ( ( Artifact ) artifacts.get( ii ) ).getFile();
-            buf.append( "/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/lib/" );
-            buf.append( artifact.getName() );
-            buf.append( "\n" );
-        }
-
-        return buf.toString();
-    }
-
-
-    private String getInstallLibraryJars() throws MojoFailureException
-    {
-        StringBuffer buf = new StringBuffer();
-        List artifacts = target.getLibArtifacts();
-        for ( int ii = 0; ii < artifacts.size(); ii++ )
-        {
-            buf.append( "install -m 644 " );
-            File artifact = ( ( Artifact ) artifacts.get( ii ) ).getFile();
-            buf.append( artifact.getAbsoluteFile() );
-            buf.append( " $RPM_BUILD_ROOT/usr/local/" );
-            buf.append( target.getApplication().getName() );
-            buf.append( "-%{version}/lib/" );
-            buf.append( artifact.getName() );
-            buf.append( "\n" );
-        }
-
-        return buf.toString();
-    }
-
-
     static void touchFile( File file )
     {
         Touch touch = new Touch();
@@ -612,9 +328,10 @@
 
         String[] cmd = new String[]
             { "tar", "-zcvf",
-                "/usr/src/redhat/SOURCES/" + target.getApplication().getName() + "-" + version + ".tar.gz",
-                sourcesDir.getAbsolutePath() };
+	      rpmSourcesDir.getAbsolutePath() + "/" + target.getApplication().getName() + "-" + version + ".tar.gz",
+	      "-C", sourcesDir.getParentFile().getAbsolutePath(),
+	      sourcesDir.getName() };
 
-        MojoHelperUtils.exec( cmd, target.getLayout().getBaseDirectory().getParentFile(), target.isDoSudo() );
+        MojoHelperUtils.exec( cmd, target.getLayout().getBaseDirectory().getParentFile(), false);
     }
 }
Index: plugin/src/main/resources/org/apache/directory/daemon/installers/rpm/spec.template
===================================================================
--- plugin/src/main/resources/org/apache/directory/daemon/installers/rpm/spec.template	(revision 448553)
+++ plugin/src/main/resources/org/apache/directory/daemon/installers/rpm/spec.template	(working copy)
@@ -1,5 +1,6 @@
-# This script has been generated by the daemon installer plugin and was not
-# supplied by the application.
+%define with_docs ${with.docs}
+%define with_sources ${with.sources}
+%define apacheds_user ${app.user}
 
 Summary: ${app.display.name} Server 
 Name: ${app}
@@ -10,79 +11,113 @@
 URL: ${app.url}
 Source0: %{name}-%{version}.tar.gz
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+Requires: java
 
+%define topdir ${app.install.base}
+
 %description
 ${app.description}
 
+%if %{with_sources}
+%package sources
+Summary: sources for %{name}
+Group: System Environment/Daemons
+
+%description sources
+The %{name}-sources package contains the source code for %{name}
+%endif
+
+%if %{with_docs}
+%package docs
+Summary: documentation for %{name}
+Group: System Environment/Daemons
+
+%description docs
+The %{name}-docs package contains the maven generated documentation for %{name}
+%endif
+
 %prep
-echo $RPM_BUILD_ROOT
-rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT
-cp -rf ${image.basedir} $RPM_BUILD_ROOT/%{name}-%{version}
-cd $RPM_BUILD_ROOT
-tar -zcvf /usr/src/redhat/SOURCES/%{name}-%{version}.tar.gz %{name}-%{version}
-
 %setup -q
 
 %build
-cd $RPM_BUILD_ROOT/%{name}-%{version}
 
 %install
 rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT/usr/local/${app}-%{version}/bin
-mkdir -p $RPM_BUILD_ROOT/usr/local/${app}-%{version}/conf
-mkdir -p $RPM_BUILD_ROOT/usr/local/${app}-%{version}/lib/ext
-mkdir -p $RPM_BUILD_ROOT/usr/local/${app}-%{version}/var/log
-mkdir -p $RPM_BUILD_ROOT/usr/local/${app}-%{version}/var/run
-mkdir -p $RPM_BUILD_ROOT/usr/local/${app}-%{version}/var/partitions
-touch $RPM_BUILD_ROOT/usr/local/${app}-%{version}/var/log/${app}-stderr.log
-touch $RPM_BUILD_ROOT/usr/local/${app}-%{version}/var/log/${app}-stdout.log
-mkdir -p $RPM_BUILD_ROOT/etc/init.d
-${mk.docs.dirs}
-${mk.sources.dirs}
+install -d $RPM_BUILD_ROOT%{topdir}
+cp -a . $RPM_BUILD_ROOT%{topdir}
+touch $RPM_BUILD_ROOT%{topdir}/var/log/${app}-stderr.log
+touch $RPM_BUILD_ROOT%{topdir}/var/log/${app}-stdout.log
+install -d  $RPM_BUILD_ROOT/etc/init.d
+mv $RPM_BUILD_ROOT%{topdir}/bin/${server.init} $RPM_BUILD_ROOT/etc/init.d/${app}
+cd $RPM_BUILD_ROOT%{topdir}
+rm README.txt LICENSE.txt NOTICE.txt
+install -d $RPM_BUILD_ROOT/etc/sysconfig
+cat << EOF > $RPM_BUILD_ROOT/etc/sysconfig/apacheds
+JAVA_HOME=/usr/lib/jvm/java
+APACHEDS_USER=%{apacheds_user}
+EOF
 
-pwd
-install -m 755 ${image.basedir}/bin/${app} $RPM_BUILD_ROOT/usr/local/${app}-%{version}/bin/${app}
-install -m 644 ${image.basedir}/bin/bootstrapper.jar $RPM_BUILD_ROOT/usr/local/${app}-%{version}/bin/bootstrapper.jar
-install -m 644 ${image.basedir}/bin/logger.jar $RPM_BUILD_ROOT/usr/local/${app}-%{version}/bin/logger.jar
-install -m 644 ${image.basedir}/bin/daemon.jar $RPM_BUILD_ROOT/usr/local/${app}-%{version}/bin/daemon.jar
-install -m 600 ${image.basedir}/conf/server.xml $RPM_BUILD_ROOT/usr/local/${app}-%{version}/conf/server.xml
-install -m 644 ${image.basedir}/conf/bootstrapper.properties $RPM_BUILD_ROOT/usr/local/${app}-%{version}/conf/bootstrapper.properties
-install -m 644 ${image.basedir}/conf/log4j.properties $RPM_BUILD_ROOT/usr/local/${app}-%{version}/conf/log4j.properties
-install -m 744 ${image.basedir}/bin/${server.init} $RPM_BUILD_ROOT/etc/init.d/${app}
-install -m 644 ${image.basedir}/${app.license.name} $RPM_BUILD_ROOT/usr/local/${app}-%{version}
-install -m 644 ${image.basedir}/${app.readme.name} $RPM_BUILD_ROOT/usr/local/${app}-%{version}
-install -m 644 ${image.basedir}/${app.icon} $RPM_BUILD_ROOT/usr/local/${app}-%{version}
-${install.append.libs}
-${install.docs}
-${install.sources}
-${install.notice.file}
-
 %clean
 rm -rf $RPM_BUILD_ROOT
 
+%if "%{apacheds_user}" != "root"
+%pre
+# create apacheds user if it does not exist yet
+if ! id %{apacheds_user} > /dev/null 2>&1 ; then
+    echo Adding user %{apacheds_user}
+    useradd -d %{topdir}/var/partitions -r %{apacheds_user}
+fi
+%endif
+
+%post
+if [ "$1" = "1" ] ; then  # first install
+    /usr/lib/lsb/install_initd /etc/init.d/${app}
+fi
+
+%preun
+if [ "$1" = "0" ] ; then # last uninstall
+    /etc/init.d/${app} stop &>/dev/null
+    /usr/lib/lsb/remove_initd /etc/init.d/${app}   
+fi
+
 %files
-%defattr(-,root,root,-)
-%doc ${app.license.name} ${app.readme.name}
+%defattr(755,root,root,-)
+%dir %{topdir}
+%dir %{topdir}/bin
+%dir %{topdir}/conf
+%dir %{topdir}/lib
+%dir %{topdir}/lib/ext
+%dir %{topdir}/var
 
+%defattr(755,%{apacheds_user},%{apacheds_user},-)
+%dir %{topdir}/var/log
+%dir %{topdir}/var/run
+%dir %{topdir}/var/partitions
+
+%defattr(755,root,root,-)
 /etc/init.d/${app}
-/usr/local/${app}-%{version}/bin/${app}
-/usr/local/${app}-%{version}/bin/bootstrapper.jar
-/usr/local/${app}-%{version}/bin/logger.jar
-/usr/local/${app}-%{version}/bin/daemon.jar
-/usr/local/${app}-%{version}/conf/log4j.properties
-/usr/local/${app}-%{version}/conf/bootstrapper.properties
-/usr/local/${app}-%{version}/conf/server.xml
-/usr/local/${app}-%{version}/lib/ext
-/usr/local/${app}-%{version}/var/run
-/usr/local/${app}-%{version}/var/log
-/usr/local/${app}-%{version}/var/partitions
-/usr/local/${app}-%{version}/var/log/${app}-stderr.log
-/usr/local/${app}-%{version}/var/log/${app}-stdout.log
-/usr/local/${app}-%{version}/${app.readme.name}
-/usr/local/${app}-%{version}/${app.license.name}
-/usr/local/${app}-%{version}/${app.icon}
-${verify.append.libs}
-${verify.docs}
-${verify.sources}
-${verify.notice.file}
+%{topdir}/bin/${app}
+%{topdir}/bin/apacheds-tools.sh
+
+%defattr(644,root,root,-)
+%{topdir}/${app.icon}
+%{topdir}/bin/*.jar
+%{topdir}/lib/*.jar
+%attr(644,%{apacheds_user},%{apacheds_user})%{topdir}/var/log/*.log
+
+%config(noreplace) %{topdir}/conf/log4j.properties
+%config(noreplace) %{topdir}/conf/server.xml
+%config(noreplace) /etc/sysconfig/apacheds
+%config %{topdir}/conf/bootstrapper.properties
+
+%doc README.txt LICENSE.txt NOTICE.txt
+
+%if %{with_sources}
+%files sources
+%{topdir}/src
+%endif
+
+%if %{with_docs}
+%files docs
+%{topdir}/docs
+%endif
Index: plugin/src/main/resources/org/apache/directory/daemon/installers/rpm/server.init
===================================================================
--- plugin/src/main/resources/org/apache/directory/daemon/installers/rpm/server.init	(revision 448553)
+++ plugin/src/main/resources/org/apache/directory/daemon/installers/rpm/server.init	(working copy)
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# chkconfig: - 91 35
+# chkconfig: 345 91 35
 # description: Starts and stops ${app} server. 
 #
 # Shell script to start/stop ${app} 
@@ -116,7 +116,9 @@
 DAEMON_HOME=$SERVER_HOME/bin
 CLASSPATH=$CLASSPATH:$DAEMON_HOME/bootstrapper.jar:$DAEMON_HOME/logger.jar:$DAEMON_HOME/daemon.jar
 echo CLASSPATH=$CLASSPATH
-${app.caps}_USER=$USER
+if [ -z "$_${app.caps}_USER" ] ; then
+  ${app.caps}_USER=root
+fi
 
 TMP_DIR=$SERVER_HOME/var/tmp
 PID_FILE=$SERVER_HOME/var/run/server.pid
