mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1506 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			1506 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| ################################################################################
 | |
| ## base routines
 | |
| ##
 | |
| 
 | |
| function list_modules() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Show all modules.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         -e|--enabled show enabled modules only
 | |
|         -d|--disabled show disabled modules only
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get additional parameters
 | |
|     local option=
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             -e|--enabled)   option="-e"
 | |
|                             ;;
 | |
|             -d|--disabled)  option="-d"
 | |
|                             ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     _list_modules $option
 | |
| }
 | |
| 
 | |
| function print_module_info() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Show module description.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 module name
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local module=${1-mintleaf}
 | |
| 
 | |
|     if [ $(list_modules | grep $module | wc -l) -eq 1 ]; then
 | |
|         if [ -f $MINTLEAF_HOME/modules/$module/$module.md ]; then
 | |
|             printf "\n"
 | |
|             cat $MINTLEAF_HOME/modules/$module/$module.md 2> /dev/null
 | |
|             printf "\n"
 | |
|         fi
 | |
|     else
 | |
|         echo "Module does not exist"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function list_functions() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Show all available functions for given module.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 module name
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     _list_functions $1
 | |
| }
 | |
| 
 | |
| function create_module() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Create module along with its essential files.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 module name
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local module=$1
 | |
| 
 | |
|     mkdir $MINTLEAF_HOME/modules/$module
 | |
| 
 | |
|     [ ! -f $MINTLEAF_HOME/modules/$module/$module.md ] && cat << EOF >> $MINTLEAF_HOME/modules/$module/$module.md
 | |
| $module
 | |
| =======
 | |
| 
 | |
| TODO
 | |
| EOF
 | |
|     [ ! -f $MINTLEAF_HOME/modules/$module/$module.config ] && cat << EOF >> $MINTLEAF_HOME/modules/$module/$module.config
 | |
| EOF
 | |
|     [ ! -f $MINTLEAF_HOME/modules/$module/$module.install ] && cat << EOF >> $MINTLEAF_HOME/modules/$module/$module.install
 | |
| #!/bin/bash
 | |
| 
 | |
| function install_module() {
 | |
| 
 | |
|     echo "TODO"
 | |
| }
 | |
| EOF
 | |
|     [ ! -f $MINTLEAF_HOME/modules/$module/$module.module ] && cat << EOF >> $MINTLEAF_HOME/modules/$module/$module.module
 | |
| #!/bin/bash
 | |
| EOF
 | |
|     [ ! -f $MINTLEAF_HOME/modules/$module/$module.test ] && cat << EOF >> $MINTLEAF_HOME/modules/$module/$module.test
 | |
| #!/bin/bash
 | |
| 
 | |
| function test_prerequisites() {
 | |
| 
 | |
|     echo "TODO"
 | |
| }
 | |
| 
 | |
| function test_module() {
 | |
| 
 | |
|     assert_prerequisites
 | |
| 
 | |
|     echo "TODO"
 | |
| }
 | |
| EOF
 | |
|     [ ! -f $MINTLEAF_HOME/modules/$module/$module.groovy ] && cat << EOF >> $MINTLEAF_HOME/modules/$module/$module.groovy
 | |
| EOF
 | |
| }
 | |
| 
 | |
| ################################################################################
 | |
| ## general routines
 | |
| ##
 | |
| 
 | |
| function func_exists() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if function exists.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 function name
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local func=$1
 | |
| 
 | |
|     declare -f -F $func > /dev/null
 | |
|     if [ "$?" == "0" ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function usleep() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Sleep in increments of milliseconds.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 milliseconds
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local ms=$1
 | |
|     local sec=$(echo "scale=2; $ms / 1000" | bc)
 | |
| 
 | |
|     perl -e "select(undef,undef,undef,$sec)"
 | |
| }
 | |
| 
 | |
| function h2d() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Convert hexadecimal to decimal number.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 hexadecimal number
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local hex=$1
 | |
| 
 | |
|     hex=$(upper $hex)
 | |
|     local dec=$(echo "ibase=16; $hex" | bc)
 | |
|     echo $dec
 | |
| }
 | |
| 
 | |
| function d2h() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Convert decimal to hexadecimal number.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 decimal number
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local dec=$1
 | |
| 
 | |
|     local hex=$(echo "ibase=10; obase=16; $dec" | bc)
 | |
|     hex=$(lower $hex)
 | |
|     echo $hex
 | |
| }
 | |
| 
 | |
| function random() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Return random string (A-Za-z0-9) with the given length.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 length
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local len=$1
 | |
| 
 | |
|     local str=
 | |
|     str=</dev/urandom tr -dc A-Za-z0-9 | (head -c $ > /dev/null 2>&1 || head -c $len)
 | |
|     echo $str
 | |
| }
 | |
| 
 | |
| function trim() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Remove whitespaces from the beginning and the end of a string.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str="$1"
 | |
| 
 | |
|     str=$(sed -e 's/^[[:space:]]*//' <<<"$str")
 | |
|     str=$(sed -e 's/[[:space:]]*$//' <<<"$str")
 | |
|     echo "$str"
 | |
| }
 | |
| 
 | |
| function lower() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Convert string to lower case.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str="$1"
 | |
| 
 | |
|     str=$(echo $str | tr '[:upper:]' '[:lower:]')
 | |
|     echo "$str"
 | |
| }
 | |
| 
 | |
| function upper() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Convert string to upper case.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str="$1"
 | |
| 
 | |
|     str=$(echo $str | tr '[:lower:]' '[:upper:]')
 | |
|     echo "$str"
 | |
| }
 | |
| 
 | |
| function str_sanitise() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Sanitise string to meet certain criteria.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 character to be used as a replacement
 | |
|         --allowed-characters <characters>
 | |
|         --max-length <length>
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local char=$2
 | |
| 
 | |
|     # get optional parameters
 | |
|     local allowed_characters=
 | |
|     local max_length=255
 | |
|     if [ "$3" != "" ] && [ "$3" != "--allowed-characters" ]; then
 | |
|         len=$3
 | |
|     fi
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --allowed-characters)   shift; allowed_characters=$1
 | |
|                                     ;;
 | |
|             --max-length)           shift; max_length=$1
 | |
|                                     ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     # remove unwanted characters
 | |
|     local sanitised=$(echo $str | sed "s/[^A-Za-z0-9$allowed_characters]/$char/g")
 | |
|     # remove multiple instances of the replacement character
 | |
|     sanitised=$(echo $sanitised | sed -r "s/($char)+/$char/g")
 | |
|     # limit the length
 | |
|     sanitised=$(echo $sanitised | cut -c1-${max_length})
 | |
|     # make it lower case
 | |
|     echo $sanitised | tr '[:upper:]' '[:lower:]'
 | |
| }
 | |
| 
 | |
| function str_substring() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Return substring by removing its prefix and suffix.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 prefix
 | |
|         \$3 suffix
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 3 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local pre=$2
 | |
|     local suf=$3
 | |
| 
 | |
|     local str="${str#${str%${pre}*}${pre}}"
 | |
|     echo "${str%${suf}*}"
 | |
| }
 | |
| 
 | |
| function str_contains() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if string contains another string.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 search string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local search=$2
 | |
| 
 | |
|     local count=$(echo "$str" | grep "$search" | wc -l)
 | |
|     if [ $count -gt 0 ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function str_begins() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if string begins with another string.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 search string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local search=$2
 | |
| 
 | |
|     local count=$(echo "$str" | grep "^$search" | wc -l)
 | |
|     if [ $count -eq 1 ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function str_ends() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if string ends with another string.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 search string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local search=$2
 | |
| 
 | |
|     local count=$(echo "$str" | grep "$search$" | wc -l)
 | |
|     if [ $count -eq 1 ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function str_split_part() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Split string and return part given by the third argument.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 separator
 | |
|         \$3 part (index starts from 1)
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 3 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local separator=$2
 | |
|     local part=$3
 | |
| 
 | |
|     echo $(echo $str | awk '{ split($str,a,v1); print a[v2]; }' v1=$separator v2=$part)
 | |
| }
 | |
| 
 | |
| function str_compare_ver() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Compare two version strings.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 version
 | |
|         \$2 version
 | |
| 
 | |
|     RETURN: -1, 0 or 1 as the first argument is less than, equal to or greater than the second.
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     if [[ $1 == $2 ]]; then
 | |
|         echo 0
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     local ver1a=$(echo $1 | grep -oEi '[0-9\.]*' | head -1)
 | |
|     local ver1b=$(str_substring $1 $ver1a "")
 | |
|     local ver2a=$(echo $2 | grep -oEi '[0-9\.]*' | head -1)
 | |
|     local ver2b=$(str_substring $2 $ver2a "")
 | |
| 
 | |
|     local IFS=.
 | |
|     local i ver1=($ver1a) ver2=($ver2a)
 | |
| 
 | |
|     # test the 1st part
 | |
|     for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do
 | |
|         ver1[i]=0
 | |
|     done
 | |
|     for ((i=0; i<${#ver1[@]}; i++)); do
 | |
|         if [[ -z ${ver2[i]} ]]; then
 | |
|             ver2[i]=0
 | |
|         fi
 | |
|         if ((10#${ver1[i]} > 10#${ver2[i]})); then
 | |
|             echo 1
 | |
|             return
 | |
|         fi
 | |
|         if ((10#${ver1[i]} < 10#${ver2[i]})); then
 | |
|             echo -1
 | |
|             return
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     # test the 2nd part
 | |
|     if [ "$ver1b" \< "$ver2b" ]; then
 | |
|         echo -1
 | |
|         return
 | |
|     elif [ "$ver1b" \> "$ver2b" ]; then
 | |
|         echo 1
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     echo 0
 | |
| }
 | |
| 
 | |
| ################################################################################
 | |
| ## file routines
 | |
| ##
 | |
| 
 | |
| function file_escape_name() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Escape file name using the same way bash does it.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
| 
 | |
|     echo $(printf '%q' "$str" | sed s/=/\\\\=/g)
 | |
| }
 | |
| 
 | |
| function file_contains() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if file contains given string.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string to search for (regular expression matching multiple lines)
 | |
|         \$2 file name
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local file=$2
 | |
| 
 | |
|     local count=$(cat $file | pcregrep -M "$str" | wc -l)
 | |
|     if [ $count -gt 0 ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function file_replace_str() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Replace string in given file.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string to search for
 | |
|         \$2 new string
 | |
|         \$3 file name
 | |
|         -m|--multiline
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 3 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str1=$1
 | |
|     local str2=$2
 | |
|     local file=$3
 | |
| 
 | |
|     # get optional parameters
 | |
|     local multiline="n"
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             -m|--multiline) shift; multiline="y"
 | |
|                             ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     local tmp_file=~/file_replace_str.$$
 | |
|     if [ $multiline == "y" ]; then
 | |
|         cat $file | perl -0777 -pe "s/$str1/$str2/igs" > $tmp_file
 | |
|     else
 | |
|         sed "s/$str1/$str2/g" $file > $tmp_file
 | |
|     fi
 | |
|     mv $tmp_file $file
 | |
| }
 | |
| 
 | |
| function file_remove_str() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Remove string from given file.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string to remove
 | |
|         \$2 file name
 | |
|         -m|--multiline
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local file=$2
 | |
| 
 | |
|     # get optional parameters
 | |
|     local multiline="n"
 | |
|     if [ "$3" == "-m" ] || [ "$3" == "--multiline" ]; then
 | |
|         multiline="y"
 | |
|     fi
 | |
| 
 | |
|     local tmp_file=~/file_remove_str.$$
 | |
|     if [ $multiline == "y" ]; then
 | |
|         cat $file | perl -0777 -pe "s/$str//igs" > $tmp_file
 | |
|     else
 | |
|         str='1h;1!H;${;g;s/'
 | |
|         sed -n "$str$1//g;p;}" $file > $tmp_file
 | |
|     fi
 | |
|     mv $tmp_file $file
 | |
| }
 | |
| 
 | |
| function file_download() {
 | |
| 
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Download file from given URL address.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         --url <url>                         URL address of file to download (required).
 | |
|         --file <name>                       Name of output file.
 | |
|         --cache-dir <dir>                   Cache directory; file name in that directory
 | |
|                                             must match the file name given as the parameter.
 | |
|         --donwload-directory <directory>    Destination directory where file
 | |
|                                             should be placed after download.
 | |
|         --size <size>                       Check file size after download.
 | |
|         --hash <hash>                       Check file hash after download.
 | |
|         --hash-algorithm <algorithm>        Hash algorithm used to check file.
 | |
|         --do-not-cache                      Do not cache file locally.
 | |
|         --force                             Force to download from given URL address not
 | |
|                                             using cached file or an alternative location.
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 4 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # variables
 | |
|     local url=
 | |
|     local file=
 | |
|     local cache_dir=$mintleaf_tmp_dir
 | |
|     local download_dir=./
 | |
|     local expected_size=0
 | |
|     local expected_hash=
 | |
|     local hash_algorithm="md5"
 | |
|     local do_not_cache=$result_neg
 | |
|     local force=$result_neg
 | |
|     local current_dir=$(pwd)
 | |
| 
 | |
|     # get parameters
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --url)                  shift; url=$1
 | |
|                                     ;;
 | |
|             --file)                 shift; file=$1
 | |
|                                     ;;
 | |
|             --cache-dir)            shift; cache_dir=$1
 | |
|                                     ;;
 | |
|             --download-directory)   shift; download_dir=$1
 | |
|                                     ;;
 | |
|             --size)                 shift; expected_size=$1
 | |
|                                     ;;
 | |
|             --hash)                 shift; expected_hash=$1
 | |
|                                     ;;
 | |
|             --hash-algorithm)       shift; hash_algorithm=$1
 | |
|                                     ;;
 | |
|             --do-not-cache)         do_not_cache=$result_pos
 | |
|                                     ;;
 | |
|             --force)                force=$result_pos
 | |
|                                     ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     # file may have already been downloaded
 | |
|     if [ $force == $result_neg ] && [ -s $cache_dir/$file ] && [ ! -s $download_dir/$file ]; then
 | |
| 
 | |
|         cp -f $cache_dir/$file $download_dir
 | |
| 
 | |
|     else
 | |
| 
 | |
|         # download from local network
 | |
|         # TODO
 | |
| 
 | |
|         # download from custom location
 | |
|         # TODO
 | |
| 
 | |
|         # download from given url address
 | |
|         if ([ -n $url ] && ([ ! -s $cache_dir/$file ] || [ $force == $result_pos ])); then
 | |
|             # try to download
 | |
|             wget --tries=1 --connect-timeout=10 $url -O $file
 | |
|             # cache file
 | |
|             if [ -s $file ]; then
 | |
|                 mv -f $file $cache_dir
 | |
|             fi
 | |
|         fi
 | |
| 
 | |
|         # copy file to the download directory
 | |
|         if [ -s $cache_dir/$file ] && [ $cache_dir != $download_dir ]; then
 | |
|             cp -f $cache_dir/$file $download_dir
 | |
|         fi
 | |
| 
 | |
|         # do not cache
 | |
|         if [ $do_not_cache == $result_pos ]; then
 | |
|             rm -f $cache_dir/$file
 | |
|         fi
 | |
| 
 | |
|     fi
 | |
| 
 | |
|     # check file size
 | |
|     if [ $expected_size -ne 0 ] && [ -s $download_dir/$file ]; then
 | |
|         local size=$(ls -l $download_dir/$file | awk '{ print $5 }')
 | |
|         if [ $expected_size -gt $size ]; then
 | |
|             rm -f $download_dir/$file
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     # return value
 | |
|     if [ -s $download_dir/$file ]; then
 | |
|         # check file hash
 | |
|         if [ -n "$expected_hash" ]; then
 | |
|             file_valid_hash $download_dir/$file $expected_hash $hash_algorithm
 | |
|         else
 | |
|             echo $result_pos
 | |
|         fi
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| 
 | |
|     cd $current_dir
 | |
| }
 | |
| 
 | |
| function file_valid_hash() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Validate hash sum of given file.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 file name
 | |
|         \$2 hash sum
 | |
|         \$3 algorithm (optional) md5,sha1,sha256,sha384,sha512 (default md5)
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local file=$1
 | |
|     local hash=$2
 | |
|     local algorithm=$3
 | |
| 
 | |
|     [ -z "$algorithm" ] && algorithm="md5"
 | |
|     local current_hash=$(${algorithm}sum $file | awk '{ print $1 }')
 | |
| 
 | |
|     if [ "$(lower $hash)" == "$(lower $current_hash)" ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function dir_find_str() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Search directory for files that contain given string.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string to search for
 | |
|         \$2 directory (optional)
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local dir=$2
 | |
| 
 | |
|     if [ "$dir" == "" ]; then
 | |
|         find . -iname "*" | xargs grep -iR "$str" | \
 | |
|             sort | uniq
 | |
|     else
 | |
|         find $dir -iname "*" | xargs grep -iR "$str" | \
 | |
|             sort | uniq
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function dir_replace_str() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Replace string in files in the given directory.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 new string
 | |
|         \$3 directory (optional)
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str1=$1
 | |
|     local str2=$2
 | |
|     local dir=$3
 | |
|     [ "$dir" == "" ] && dir=.
 | |
| 
 | |
|     for file in $(find $dir -type f -name "*"); do
 | |
|         file_replace_str "$str1" "$str2" $file
 | |
|     done
 | |
| }
 | |
| 
 | |
| function dir_remove_str() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Remove string in files in the given directory.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 string
 | |
|         \$2 directory (optional)
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local str=$1
 | |
|     local dir=$2
 | |
|     [ "$dir" == "" ] && dir=.
 | |
| 
 | |
|     for file in $(find $dir -type f -name "*"); do
 | |
|         file_remove_str $str $file
 | |
|     done
 | |
| }
 | |
| 
 | |
| ################################################################################
 | |
| ## chroot routines
 | |
| ##
 | |
| 
 | |
| function chroot_dependency_list() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: List dependencies of an executable file.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 executable file
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local bin=$1
 | |
| 
 | |
|     (
 | |
|         local output=$(ldd $bin)
 | |
|         for line in $output; do
 | |
|             echo $line
 | |
|         done
 | |
|     ) 2> /dev/null | grep "^/" | sort | uniq
 | |
| }
 | |
| 
 | |
| function chroot_dependency_list_all() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: List dependencies of an executable file recursively.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 executable file
 | |
|         --cur-depth <level> current depth of recursion (1 by default)
 | |
|         --max-depth <level> maximum depth of recursion (3 by default)
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local bin=$1
 | |
| 
 | |
|     # get optional parameters
 | |
|     local cur_depth=1
 | |
|     local max_depth=3
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --cur-depth)    shift; cur_depth=$1
 | |
|                             ;;
 | |
|             --max-depth)    shift; max_depth=$1
 | |
|                             ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     (
 | |
|         local output=$(chroot_dependency_list $bin)
 | |
|         for file in $output; do
 | |
|             echo "$file"
 | |
|             if [ $cur_depth -lt $max_depth ]; then
 | |
|                 chroot_dependency_list_all $file --cur-depth $(expr $cur_depth + 1) --max-depth $max_depth
 | |
|             fi
 | |
|         done
 | |
|     ) 2> /dev/null | grep "^/" | sort | uniq
 | |
| }
 | |
| 
 | |
| function chroot_dependency_copy() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Copy dependencies of an executable file recursively to chroot directory.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 executable file
 | |
|         \$2 chroot directory
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local bin=$1
 | |
|     local dir=$2
 | |
| 
 | |
|     local output=$(chroot_dependency_list_all $bin)
 | |
|     for file in $output; do
 | |
|         echo "$file"
 | |
|         mkdir -p $dir/$(dirname $file)
 | |
|         cp $file $dir/$(dirname $file)
 | |
|     done
 | |
| }
 | |
| 
 | |
| function chroot_mount_dir() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Mount directory in chroot environment.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 directory to mount
 | |
|         \$2 directory within chroot directory environment
 | |
|         --read-only
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local dir=$1
 | |
|     local chdir=$2
 | |
|     local read_only="n"
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --read-only)    read_only="y"
 | |
|                             ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     if [ -d $dir ]; then
 | |
|         if [ "$(mount -l | grep $chdir | wc -l)" -gt 0 ]; then
 | |
|             umount $chdir
 | |
|         fi
 | |
|         mkdir -p $chdir
 | |
|         mount --bind $dir $chdir
 | |
|         if [ $read_only == "y" ]; then
 | |
|             mount -o remount,ro $chdir 2> /dev/null
 | |
|         fi
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function chroot_create_env() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Create chroot environment.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 chroot directory
 | |
|         --user <user> user name to mount their home directory
 | |
|         --home-read-only whether user home directory should be mounted as read-only
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local dir=$1
 | |
| 
 | |
|     # get additional parameters
 | |
|     local user=
 | |
|     local home_read_only=
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --user)             shift; user=$1
 | |
|                                 ;;
 | |
|             --home-read-only)   home_read_only="--read-only"
 | |
|                                 ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     [ ! -d $dir ] && mkdir $dir
 | |
|     mkdir -p $dir/{bin,dev/pts,etc,home,lib,lib64,proc,root,sbin,tmp,usr/bin,usr/include,usr/lib,usr/lib64,usr/sbin}
 | |
| 
 | |
|     chmod 1777 $dir/tmp
 | |
| 
 | |
|     # /bin
 | |
|     chroot_mount_dir /bin $dir/bin --read-only
 | |
|     # /dev/pts
 | |
|     chroot_mount_dir /dev/pts $dir/dev/pts
 | |
|     # /etc
 | |
|     chroot_mount_dir /etc $dir/etc --read-only
 | |
|     # /lib
 | |
|     chroot_mount_dir /lib $dir/lib --read-only
 | |
|     # /lib64
 | |
|     chroot_mount_dir /lib64 $dir/lib64 --read-only
 | |
|     # /proc
 | |
|     chroot_mount_dir /proc $dir/proc
 | |
|     # /sbin
 | |
|     chroot_mount_dir /sbin $dir/sbin --read-only
 | |
|     # /usr/bin
 | |
|     chroot_mount_dir /usr/bin $dir/usr/bin --read-only
 | |
|     # /usr/include
 | |
|     chroot_mount_dir /usr/include $dir/usr/include --read-only
 | |
|     # /usr/lib
 | |
|     chroot_mount_dir /usr/lib $dir/usr/lib --read-only
 | |
|     # /usr/lib64
 | |
|     chroot_mount_dir /usr/lib64 $dir/usr/lib64 --read-only
 | |
|     # /usr/sbin
 | |
|     chroot_mount_dir /usr/sbin $dir/usr/sbin --read-only
 | |
| 
 | |
|     rm -f $dir/dev/null
 | |
|     mknod -m 666 $dir/dev/null c 1 3
 | |
|     rm -f $dir/dev/zero
 | |
|     mknod -m 666 $dir/dev/zero c 1 5
 | |
|     rm -f $dir/dev/random
 | |
|     mknod -m 444 $dir/dev/random c 1 8
 | |
|     rm -f $dir/dev/urandom
 | |
|     mknod -m 444 $dir/dev/urandom c 1 9
 | |
| 
 | |
|     # user home directory
 | |
|     if [ -n "$user" ]; then
 | |
|         local home_dir=/home/$user
 | |
|         if [ "$user" == "root" ]; then
 | |
|             home_dir=/root
 | |
|         fi
 | |
|         if [ -d $home_dir ]; then
 | |
|             chroot_mount_dir $home_dir ${dir}${home_dir} $home_read_only
 | |
|         fi
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function chroot_remove_env() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Remove chroot environment.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 chroot directory
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local dir=$1
 | |
| 
 | |
|     rm -f $dir/dev/null
 | |
|     rm -f $dir/dev/zero
 | |
|     rm -f $dir/dev/random
 | |
|     rm -f $dir/dev/urandom
 | |
| 
 | |
|     for path in $(mount -l | grep $dir | awk '{ print $3 }'); do
 | |
|         umount $path
 | |
|     done
 | |
| 
 | |
|     rm -rf $dir/tmp/*
 | |
| }
 | |
| 
 | |
| function is_chroot() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Indicates if current environment is a chroot environment.
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     if [ $(stat -c %i /) != 2 ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| ################################################################################
 | |
| ## user routines
 | |
| ##
 | |
| 
 | |
| function user_exists() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if user exists.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 user
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local user=$1
 | |
| 
 | |
|     if [ $(grep "^$1:" /etc/passwd | wc -l) == "1" ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function group_exists() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Check if group exists.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 group
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local group=$1
 | |
| 
 | |
|     if [ $(grep "^$group:" /etc/group | wc -l) == "1" ]; then
 | |
|         echo $result_pos
 | |
|     else
 | |
|         echo $result_neg
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function user_create() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Create a new system user.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 user
 | |
|         \$2 group
 | |
|         --uid <user id>
 | |
|         --gid <group id>
 | |
|         --groups <list of groups>
 | |
|         --home <home directory>
 | |
|         --shell <shell>
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 2 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local user=$1
 | |
|     local group=$2
 | |
| 
 | |
|     # get optional parameters
 | |
|     local uid="-K UID_MIN=${uid_min} -K UID_MAX=${uid_max}"
 | |
|     local gid="-K GID_MIN=${gid_min} -K GID_MAX=${gid_max}"
 | |
|     local groups=
 | |
|     local home="-d /dev/null"
 | |
|     local shell="-s /usr/sbin/nologin"
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --uid)      shift; uid="-u ${1}"
 | |
|                         ;;
 | |
|             --gid)      shift; gid="-g ${1}"
 | |
|                         ;;
 | |
|             --groups)   shift; groups="-G ${1}"
 | |
|                         ;;
 | |
|             --home)     shift; home="-d ${1}"
 | |
|                         ;;
 | |
|             --shell)    shift; shell="-s ${1}"
 | |
|                         ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     groupadd $group $gid
 | |
|     useradd $user $uid -g $group $groups $home $shell
 | |
| }
 | |
| 
 | |
| function user_delete() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Delete an existing system user.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 user
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -ne 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local user=$1
 | |
| 
 | |
|     userdel -f $user > /dev/null 2>&1
 | |
| }
 | |
| 
 | |
| ################################################################################
 | |
| ## security routines
 | |
| ##
 | |
| 
 | |
| function security_gen_cert() {
 | |
| 
 | |
|     # define help
 | |
|     local help=$(cat <<HEREDOC
 | |
| 
 | |
|     DESCRIPTION: Generates X.509 certificate.
 | |
| 
 | |
|     PARAMETERS:
 | |
|         \$1 certificate name
 | |
|         --size <size> size of certificate (default is 2048)
 | |
|         --days <days> for how many days certificate remains valid (default is 3650)
 | |
|         --dir <dirctory> output dirctory
 | |
| HEREDOC
 | |
| )
 | |
| 
 | |
|     # check parameters
 | |
|     if [ "$1" == "--help" ] || [ $# -lt 1 ]; then
 | |
|         echo -e "${help}\n"
 | |
|         return
 | |
|     fi
 | |
| 
 | |
|     # get parameters
 | |
|     local name=$1
 | |
|     local size=2048
 | |
|     local days=3650
 | |
|     local dir=.
 | |
|     while [ "$1" != "" ]; do
 | |
|         case $1 in
 | |
|             --size) shift; size=$1
 | |
|                     ;;
 | |
|             --days) shift; days=$1
 | |
|                     ;;
 | |
|             --dir)  shift; dir=$1
 | |
|                     ;;
 | |
|         esac
 | |
|         shift
 | |
|     done
 | |
| 
 | |
|     $cmd_openssl req \
 | |
|         -new -x509 -nodes -sha1 -newkey rsa:$size -days $days -subj "/O=unknown/OU=unknown/CN=$name" \
 | |
|         -keyout $dir/$name.key \
 | |
|         -out $dir/$name.crt
 | |
|     cat $dir/$name.crt $dir/$name.key > $dir/$name.pem
 | |
|     chmod 400 $dir/$name.{crt,key,pem}
 | |
| }
 |