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 |
|
}
|
|
|