# This file contains a list of files and directories with known permissions.
# It is used by the packaging class to ensure that the permissions, owners and
# group of listed files and directories are in sync across the system.
#
# The format of this file 
#
#<path>	<mode>	<uid>	<gid>	<walk>	<fmode>	<fuid>	<fgid>
#
# or
#
#<path> link <target>
#
# <path>: directory path
# <mode>: mode for directory
# <uid>:  uid for directory
# <gid>:  gid for directory
# <walk>: recursively walk the directory?  true or false
# <fmode>: if walking, new mode for files
# <fuid>:  if walking, new uid for files
# <fgid>:  if walking, new gid for files
# <target>: turn the directory into a symlink point to target
#
# in mode, uid or gid, a "-" means don't change any existing values
#
# /usr/src		0755	root	root	false	-	-	-
# /usr/share/man	0755	root	root	true	0644	root	root

# Note: all standard config directories are automatically assigned "0755 root root false - - -"

# Documentation should always be corrected
${mandir}		0755	root	root	true	0644	root	root
${infodir}		0755	root	root	true	0644	root	root
${docdir}		0755	root	root	true	0644	root	root
${datadir}/gtk-doc	0755	root	root	true	0644	root	root

# Fixup locales
${datadir}/locale	0755	root	root	true	0644	root	root

# Cleanup headers
${includedir}		0755	root	root	true	0644	root	root
${oldincludedir}	0755	root	root	true	0644	root	root

# Cleanup debug src
/usr/src/debug		0755	root	root	true	-	root	root

# Items from base-files
# Links
${localstatedir}/run	link	/run
${localstatedir}/log	link	volatile/log
${localstatedir}/lock	link	/run/lock
${localstatedir}/tmp	link	volatile/tmp

/home				0755	root	root	false - - -
/srv				0755	root	root	false - - -
${prefix}/src			0755	root	root	false - - -
${localstatedir}/local		0755	root	root	false - - -

# Special permissions from base-files
# Set 1777
/tmp				01777	root	root	false - - -
${localstatedir}/volatile/tmp	01777	root	root	false - - -

# Set 0700
${ROOT_HOME}			0700	root	root	false - - -

# Set 755-lsb
/srv				0755	root	root	false - - -

# Set 2775-lsb
/var/mail			02775	root	mail	false - - -
