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.
		
		
		
		
		
			
		
			
				
					
					
						
							189 lines
						
					
					
						
							5.7 KiB
						
					
					
				
			
		
		
	
	
							189 lines
						
					
					
						
							5.7 KiB
						
					
					
				| # --- SDE-COPYRIGHT-NOTE-BEGIN --- | |
| # This copyright note is auto-generated by ./scripts/Create-CopyPatch. | |
| # | |
| # Filename: package/.../sysfiles/parse-config | |
| # Copyright (C) 2004 - 2006 The T2 SDE Project | |
| # Copyright (C) 1998 - 2003 Clifford Wolf | |
| # | |
| # More information can be found in the files COPYING and README. | |
| # | |
| # This program is free software; you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation; version 2 of the License. A copy of the | |
| # GNU General Public License can be found in the file COPYING. | |
| # --- SDE-COPYRIGHT-NOTE-END --- | |
|  | |
| # We need to store some bookkeeping for later runs. With this | |
| # information better error messages are possible, but most | |
| # importantly it allows packages to be updated (with possibly | |
| # different mimetypes). | |
| parse_config_data=$root/usr/share/rock-registry/parse-config | |
|  | |
| if [ "$pkg" != "sysfiles" ]; then | |
| 	var_append flistdel "|" "etc/mtab" | |
| fi | |
|  | |
| if atstage native && [ -f $confdir/postsysfiles.in ] ; then | |
| 	var_append flistdel "|" "etc/passwd" | |
| 	var_append flistdel "|" "etc/shadow" | |
| 	var_append flistdel "|" "etc/gshadow" | |
| 	var_append flistdel "|" "etc/mime.types" | |
| 	var_append flistdel "|" "etc/mailcap" | |
| 	var_append flistdel "|" "usr/share/rock-registry/parse-config.*" | |
| 	hook_add preconf 2 ". $confdir/postsysfiles.in" | |
| fi | |
|  | |
| # Usage: safe_useradd name uid gid desc homedir shell pass | |
| # | |
| #	uid and name must be registered in | |
| #	Documentation/Developers/REGISTER | |
| # | |
| #	pass is already encrypted and might be one of: | |
| #	"*" ... system account, wont ever have a password | |
| #	"!" ... real user, admin needs to define a password later | |
| # | |
| safe_useradd() { | |
| 	if grep -q "^$1:" $root/etc/passwd; then | |
| 		echo "Found already existing user '$1'." | |
| 	else | |
| 		if grep -q ":$2:" $root/etc/passwd; then | |
| 			echo "UID $2 exists" | |
| 			exit -1 | |
| 		fi | |
|  | |
| 		echo "Creating user '$1' ..." | |
| 		echo "$1:x:$2:$3:$4:$5:$6" >> $root/etc/passwd | |
| 		echo "$1:$7:::::::" >> $root/etc/shadow | |
| 	fi | |
| } | |
|  | |
| # Usage: safe_groupadd name id | |
| # | |
| #	gid and name must be registered in | |
| #	Documentation/Developers/REGISTER | |
| # | |
| safe_groupadd() { | |
| 	if grep -q "^$1:" $root/etc/group; then | |
| 		echo "Found already existing group '$1'." | |
| 	else | |
| 		if grep -q ":$2:" $root/etc/passwd; then | |
| 			echo "GID $2 exists" | |
| 			exit -1 | |
| 		fi | |
|  | |
| 		echo "Creating group '$1' ..." | |
| 		echo "$1:x:$2:" >> $root/etc/group | |
| 	fi | |
| } | |
|  | |
| # Usage: safe_mimetypeadd mimetype exts cmd | |
| # | |
| #	mimetype is the type to be registered | |
| #	exts is one of more extension to be tied to the mimetype. | |
| #	cmd the command to be tied to the mimetype | |
| # | |
| # Bookkeeping files: | |
| # ----------------- | |
| # mimetypes: <mimetype> <package> | |
| # extensions: <extension> <mimetype> | |
| # | |
| # Configuration files:  (simplified) | |
| # ------------------- | |
| # /etc/mime.types <mimetype> <extensions> | |
| # /etc/mailcap <mimetype>; <command> | |
| # | |
| safe_mimetypeadd() { | |
| 	# Get the arguments. | |
| 	local mimetype=$1 | |
| 	local extensions=$2 | |
| 	local command=$3 | |
|  | |
| 	# If bookkeeping dir does not exist, create it. | |
| 	mkdir -p $parse_config_data | |
|  | |
| 	# Check if the mimetype has been registered before. | |
| 	local add_allowed=yes;		# until we know better. | |
| 	if grep -q "^$mimetype" $root/etc/mime.types; then | |
| 		# The mime type has already been registered. Determine | |
| 		# what package registered the mimetype. | |
| 		local package=$(grep "^$mimetype" $parse_config_data/mimetypes | cut -d' ' -f2) | |
|  | |
| 		# Is it the current package, in other words is the | |
| 		# package being updated? | |
| 		if [ "$package" == "$pkg" ] ; then | |
| 			# Apparently the package needs to be updated. To | |
| 			# smoothen this process we remove any current mimetype | |
| 			# information for the package. | |
| 			remove_mimetype $mimetype | |
| 		else | |
| 			# Some other package has registered the mimetype. | |
| 			# Since we practise first come first served, we are | |
| 			# not allowed to change it. | |
| 			echo "Mime type '$mimetype' already registered by $package" | |
| 			add_allowed=no | |
| 		fi | |
| 		unset package | |
| 	fi | |
|  | |
| 	# Are we allowed to add the mimetype. | |
| 	if [ "$add_allowed" == "yes" ] ; then | |
| 		# Before doing all necessary mimetype binding, we first have | |
| 		# to check if the requested extensions are still free. | |
| 		free_extensions= | |
| 		local mt= | |
| 		# Loop though all extensions and try to bind them to the | |
| 		# given mimetype. However, first check if the extension | |
| 		# is already bound to another mimetype. | |
| 		for extension in $extensions; do | |
| 			mt=$(grep "^$extention" $parse_config_data/extensions | cut -d' ' -f2) | |
| 			if [ -n "$mt" ] ; then | |
| 				# The extension is already bound to another | |
| 				# mimetype. | |
| 				echo "Extension '$extension' already bound to $mt" | |
| 			else | |
| 				# Add this extensions to the list. | |
| 				var_append free_extensions " " "$extension" | |
|  | |
| 				# Register this binding in our bookkeeping. | |
| 				echo "$extension $mimetype" >> $parse_config_data/extensions | |
| 			fi | |
| 		done | |
| 		# Bind all remaining extensions to the mimetype | |
| 		echo "Adding mime type '$mimetype' ..." | |
| 		echo "$mimetype $free_extensions" >> $root/etc/mime.types | |
| 		unset free_extensions | |
| 		unset extension | |
|  | |
| 		# Now the mimetype is set we can set the mailcap as well. | |
| 		echo "$mimetype; $command" >> $root/etc/mailcap | |
|  | |
| 		# Also do the necessary bookkeeping. | |
| 		echo "$mimetype $pkg" >> $parse_config_data/mimetypes | |
| 	fi | |
| } | |
|  | |
| # Usage: remove_mimetype <mimetype> | |
| # | |
| #	safely removes the given mimetype from both mimetype and mailcap | |
| #	configuration files. Also the proprietary T2 information regarding | |
| #	mimetypes is updated. | |
| # | |
| #	<mimetype> The mimetype to be removed. | |
| # | |
| remove_mimetype() { | |
| 	local mimetype=$1 | |
| 	mimetype=${mimetype//\//\\/} | |
|  | |
| 	# Remove the mimetype from /etc/mime.types | |
| 	sed -i "/^$mimetype .*\$/d" $root/etc/mime.types | |
|  | |
| 	# Remove the mimetype from /etc/mailcap | |
| 	# TODO: mailcap entries can be multiline. | |
| 	sed -i "/^$mimetype; .*\$/d" $root/etc/mailcap | |
|  | |
| 	# Remove the mimetype from .../mimetypes | |
| 	sed -i "/^$mimetype .*\$/d" $parse_config_data/mimetypes | |
|  | |
| 	# Remove the extensions binding to the given mimetype. | |
| 	sed -i "/^.* $mimetype\$/d" $parse_config_data/extensions | |
| }
 | |
| 
 |