Initial commit

This commit is contained in:
Christoph 2018-04-30 02:53:44 +02:00
commit f39b0fbcd8
26 changed files with 1755 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*.log
*.swp
*conf/*.conf

285
snippets/base_script.sh Executable file
View File

@ -0,0 +1,285 @@
#!/usr/bin/env bash
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/${script_name%%.*}.conf"
LOCK_DIR="/tmp/$(basename $0).$$.LOCK"
log_file="${LOCK_DIR}/${script_name%%.*}.log"
backup_date="$(date +%Y-%m-%d-%H%M)"
# ----------
# Base Function(s)
# ----------
usage() {
[[ -n "$1" ]] && error "$1"
[[ $terminal ]] && echo -e "
\033[1mUsage:\033[m
$(basename $0) [OPTION [OPTION ..
\033[1mDescription\033[m
<Some Description>
\033[1mOptions\033[m
<List Options>
\033[1mExample:\033[m
<description example>
$(basename $0) .. <comand example>
<description another example>
$(basename $0) .. <command another example>
"
clean_up 1
}
clean_up() {
# Perform program exit housekeeping
rm -rf "$LOCK_DIR"
blank_line
exit $1
}
echononl(){
if $terminal ; then
echo X\\c > /tmp/shprompt$$
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
echo -e -n " $*\\c" 1>&2
else
echo -e -n " $*" 1>&2
fi
rm /tmp/shprompt$$
fi
}
fatal(){
echo ""
if $terminal ; then
echo -e " [ \033[31m\033[1mFatal\033[m ] $*"
else
echo -e " [ Fatal ] $*"
fi
echo ""
if $terminal ; then
echo -e " \033[1mScript terminated\033[m.."
else
echo -e " Script terminated.."
fi
echo ""
rm -rf $LOCK_DIR
exit 1
}
error (){
echo ""
if $terminal ; then
echo -e " [ \033[31m\033[1mError\033[m ] $*"
else
echo " [ Error ] $*"
fi
echo ""
}
warn (){
if $LOGGING || $terminal ; then
echo ""
if $terminal ; then
echo -e " [ \033[33m\033[1mWarn\033[m ] $*"
else
echo " [ Warn ] $*"
fi
echo ""
fi
}
info (){
if $LOGGING || $terminal ; then
echo ""
if $terminal ; then
echo -e " [ \033[32m\033[1mInfo\033[m ] $*"
else
echo " [ Info ] $*"
fi
echo ""
fi
}
ok (){
if $LOGGING || $terminal ; then
echo ""
if $terminal ; then
echo -e " [ \033[32m\033[1mOk\033[m ] $*"
else
echo " [ Ok ] $*"
fi
echo ""
fi
}
echo_done() {
if $terminal ; then
echo -e "\033[75G[ \033[32mdone\033[m ]"
fi
}
echo_ok() {
if $terminal ; then
echo -e "\033[75G[ \033[32mok\033[m ]"
fi
}
echo_failed(){
if $terminal ; then
echo -e "\033[75G[ \033[1;31mfailed\033[m ]"
fi
}
echo_skipped() {
if $terminal ; then
echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]"
fi
}
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
blank_line() {
if $terminal ; then
echo ""
fi
}
# ----------
# - Jobhandling
# ----------
# - Run 'clean_up' for signals SIGHUP SIGINT SIGTERM
# -
trap clean_up SIGHUP SIGINT SIGTERM
# - Create lock directory '$LOCK_DIR"
#
mkdir "$LOCK_DIR"
# ----------
# - Headline
# ----------
if $terminal ; then
echo ""
echo -e "\033[1m----------\033[m"
echo -e "\033[32m\033[1mRunning script \033[m\033[1m$script_name\033[32m .. \033[m"
echo -e "\033[1m----------\033[m"
fi
# ----------
# - Some checks ..
# ----------
# - Running in a terminal?
# -
if [[ -t 1 ]] ; then
terminal=true
else
terminal=false
fi
# - Print help?
# -
if [[ "$(trim $*)" = "-h" ]] || [[ "$(trim $*)" = "--help" ]] ; then
usage
fi
if [[ -z "$(which basename)" ]]; then
fatal 'It seems "basename" is not installed, but needed!'
fi
if [[ -z "$(which realpath)" ]]; then
fatal 'It seems "realpath" is not installed, but needed!'
fi
# ==========
# - Begin Main Script
# ==========
# ----------
# Read Configurations from $conf_file
# ----------
# - Give your default values here
# -
LOGGING=false
if [[ -f "$conf_file" ]]; then
source "$conf_file"
else
warn "No configuration file '$conf_file' present.\n
Loading default values.."
fi
# ----------
# - Some pre-script tasks ..
# ----------
if $terminal ; then
echo ""
echo ""
echo -e " \033[1mDoing some pre-script tasks ..\033[m"
echo ""
fi
echononl "All is fine"
echo_ok
# ----------
# - Main part of script
# ----------
if $terminal ; then
echo ""
echo ""
echo -e " \033[1mMain part of script ..\033[m"
echo ""
fi
# ----------
# - Some post-script tasks ..
# ----------
if $terminal ; then
echo ""
echo ""
echo -e " \033[1mDoing some post-script tasks ..\033[m"
echo ""
fi
clean_up 0

32
snippets/cidr2mask.sh Executable file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
# - Convert CIDR to netmask
# -
cidr2mask() {
local i mask=""
local full_octets=$(($1/8))
local partial_octet=$(($1%8))
for ((i=0;i<4;i+=1)); do
if [ $i -lt $full_octets ]; then
mask+=255
elif [ $i -eq $full_octets ]; then
mask+=$((256 - 2**(8-$partial_octet)))
else
mask+=0
fi
test $i -lt 3 && mask+=.
done
echo $mask
}
cidr=$1
mask=$(cidr2mask $cidr)
echo ""
echo "cidr: $cidr - mask: $mask"
echo ""
exit 0

View File

@ -0,0 +1,17 @@
# ==========
# - Configuration file for script base_script.sh
# ==========
# - LOGGING
# -
# - Enables/Disables script output. Setting this value to 'true' is
# - only useful if NOT running in a terminal (i.e. as cronjob).
# -
# - If script is running in a terminal, script output is enabled and
# - cannot be disabled.
# -
# - Running this script in a
# -
# - Default value: false
# -
#LOGGING=false

11
snippets/declare_i.sh Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env bash
declare -i num=1
while [ $num -lt 128 ] ; do
ping -c 5 195.135.133.$num > /dev/null 2>&1;
if [ "$?" == 0 ]; then
echo 195.135.133.$num;
fi;
let num=$num+1
done

106
snippets/detect_os.sh Executable file
View File

@ -0,0 +1,106 @@
#!/usr/bin/env bash
detect_os_1 () {
if $(which lsb_release > /dev/null 2>&1) ; then
os_dist="$(lsb_release -i | awk '{print tolower($3)}')"
os_version="$(lsb_release -r | awk '{print tolower($2)}')"
os_codename="$(lsb_release -c | awk '{print tolower($2)}')"
if [[ "$os_dist" = "debian" ]]; then
if $(echo "$os_version" | grep -q '\.') ; then
os_version=$(echo "$os_version" | cut --delimiter='.' -f1)
fi
fi
elif [[ -e "/etc/os-release" ]]; then
. /etc/os-release
os_dist=$ID
os_version=${VERSION_ID}
fi
# remove whitespace from os_dist and os_version
os_dist="${os_dist// /}"
os_version="${os_version// /}"
}
detect_os_2 ()
{
if [[ ( -z "${os}" ) && ( -z "${os_dist}" ) ]]; then
# some systems dont have lsb-release yet have the lsb_release binary and
# vice-versa
if [ -e /etc/lsb-release ]; then
. /etc/lsb-release
if [ "${ID}" = "raspbian" ]; then
os=${ID}
os_dist=`cut --delimiter='.' -f1 /etc/debian_version`
else
os=${DISTRIB_ID}
os_dist=${DISTRIB_CODENAME}
if [ -z "$os_dist" ]; then
os_dist=${DISTRIB_RELEASE}
fi
fi
elif [ `which lsb_release 2>/dev/null` ]; then
os_dist=`lsb_release -c | cut -f2`
os=`lsb_release -i | cut -f2 | awk '{ print tolower($1) }'`
elif [ -e /etc/debian_version ]; then
# some Debians have jessie/sid in their /etc/debian_version
# while others have '6.0.7'
os=`cat /etc/issue | head -1 | awk '{ print tolower($1) }'`
if grep -q '/' /etc/debian_version; then
os_dist=`cut --delimiter='/' -f1 /etc/debian_version`
else
os_dist=`cut --delimiter='.' -f1 /etc/debian_version`
fi
else
unknown_os
fi
fi
if [ -z "$os_dist" ]; then
unknown_os
fi
# remove whitespace from OS and os_dist name
os="${os// /}"
os_dist="${os_dist// /}"
echo "Detected operating system as $os/$os_dist."
}
detect_os_1
echo -e "\nOutput from function 'detect_os_1'"
echo "=================================="
echo "Distribution: ${os_dist}"
echo "Version: ${os_version}"
if [[ -n "$os_codename" ]]; then
echo "Codename: ${os_codename}"
fi
os_dist=""
os_version=""
os_codename=""
echo -e "\nOutput from function 'detect_os_2'"
echo "=================================="
detect_os_2
echo "OS: $os"
echo "Dist: $os_dist"
echo
exit

View File

@ -0,0 +1,22 @@
# - IPv4 addresses listet here will be completly banned by the firewall
# -
# - - Line beginning with '#' will be ignored.
# - - Blank lines will be ignored
# - - Only the first entry (until space sign or end of line) of each line will be considered.
# -
# - Valid values are:
# - complete IPv4 adresses like 1.2.3.4 (will be converted to 1.2.3.0/32)
# - partial IPv4 addresses like 1.2.3 (will be converted to 1.2.3.0/24)
# - network/nn CIDR notation like 1.2.3.0/27
# - network/netmask notaions like 1.2.3.0/255.255.255.0
# - network/partial_netmask like 1.2.3.4/255
# -
# - Note:
# - - wrong addresses like 1.2.3.256 or 1.2.3.4/33 will be ignored
# -
# - Example:
# - 79.171.81.0/24
# - 79.171.81.0/255.255.255.0
# - 79.171.81.0/255.255.255
# - 79.171.81

View File

@ -0,0 +1,463 @@
############################################################
# absent-friends.org #
############################################################
############################################################
# mail36.net #
############################################################
trotzig@mail36.net:wendland1
armin@mail36.net:Me8tallica
silke@mail36.net:24011979
sindikat@mail36.net:passwd314
michel@mail36.net:cikedece
############################################################
# access.so36.net #
############################################################
############################################################
# agora-info.de #
############################################################
############################################################
# alte-socken.de #
############################################################
############################################################
# ansoko.de #
############################################################
############################################################
# antifa.de #
############################################################
############################################################
# antifa-kok.de #
############################################################
############################################################
# antifa-versand.de #
############################################################
############################################################
# anti-hartz-buendnis-nrw.de #
############################################################
############################################################
# antimilitarismustag.de #
############################################################
############################################################
# antimilitaristisch-unterwegs.so36.net #
############################################################
############################################################
# anyplacebeforenow.net #
############################################################
############################################################
# archiv-kiel.de #
############################################################
############################################################
# autoorganisation.org #
############################################################
############################################################
# az-wuppertal.de #
############################################################
uschi-anschlag@az-wuppertal.de:sommer13
############################################################
# bamm.de #
############################################################
gerit@bamm.de:icke01
############################################################
# bdsberlin.org #
############################################################
############################################################
# bds-kampagne.de #
############################################################
############################################################
# beatleprint.de #
############################################################
############################################################
# bildungskritik.de #
############################################################
############################################################
# cilip.de #
############################################################
############################################################
# cinetrain.indyvideo.net #
############################################################
############################################################
# codecoop.org #
############################################################
############################################################
# datarecollective.net #
############################################################
############################################################
# desertoere.de #
############################################################
############################################################
# die-linkspartei.de #
############################################################
############################################################
# dosto.de #
############################################################
ahi@dosto.de:muhkuh2k
############################################################
# einstellung.so36.net #
############################################################
############################################################
# freedom-for-thomas.de #
############################################################
############################################################
# fsi-geschichte.so36.net #
############################################################
############################################################
# funk-the-system.net #
############################################################
############################################################
# g20-doku.org #
############################################################
############################################################
# g8andwar.de #
############################################################
############################################################
# gaypunk.de #
############################################################
############################################################
# geloebnix.de #
############################################################
############################################################
# gemeinsam-gegen-nazis.de #
############################################################
############################################################
# gipfelsoli.org #
############################################################
############################################################
# hamburgerwetter.de #
############################################################
############################################################
# hamburg.geloebnix.de #
############################################################
############################################################
# hh.geloebnix.de #
############################################################
############################################################
# hotmehl.com #
############################################################
oasch@hotmehl.com:oasch
############################################################
# iaadh.de #
############################################################
############################################################
# kamalatta.de #
############################################################
############################################################
# kill-hup.de #
############################################################
############################################################
# koelner-sozialforum.de #
############################################################
############################################################
# kpd-rz.de #
############################################################
############################################################
# krank-feiern.org #
############################################################
############################################################
# kreta-film.net #
############################################################
############################################################
# libertad.so36.net #
############################################################
############################################################
# netzwerk-asyl.de #
############################################################
############################################################
# nolager.de #
############################################################
############################################################
# norden-gegen-g8.info #
############################################################
############################################################
# nsc.so36.net #
############################################################
############################################################
# oh21.de #
############################################################
############################################################
# ohne-uns.de #
############################################################
############################################################
# opferperspektive.de #
############################################################
############################################################
# opfer-rechter-gewalt.de #
############################################################
############################################################
# ostpack.de #
############################################################
############################################################
# palaestina-solidaritaet.de #
############################################################
############################################################
# publicsolidarity.de #
############################################################
redaktion@publicsolidarity.de:prospekt17
############################################################
# redecontraviolencia.org #
############################################################
############################################################
# redfrentetransgenicos.net #
############################################################
############################################################
# rndm.biz #
############################################################
############################################################
# rojava-solidaritaet.net #
############################################################
############################################################
# schoenerfriedrichshain.de #
############################################################
############################################################
# schokoholic.de #
############################################################
############################################################
# s-e-d.org #
############################################################
############################################################
# so36.com #
############################################################
############################################################
# so36.de #
############################################################
fatma@so36.de:gayhanebleibt
crise@so36.de:kiez666
criselend@so36.de:roller36
monique@so36.de:Jule123
monique@so36.de:valentin1
stern89@so36.de:zk24.8r
post@so36.de:wurst42
chris@so36.de:akiraxs
############################################################
# so36.net #
############################################################
ckubu@so36.net:EadGl15E.%
leia@so36.net:f1n4lly
tobi@so36.net:blamblam67
tom@so36.net:THomas10
tom@so36.net:adelskrone
tom@so36.net:tompunk
acab@so36.net:irhab.6
acab@so36.net:zickezacke
schandmaul@so36.net:napalm
svenja@so36.net:fruhansen
svenja@so36.net:kaefer48
peace@so36.net:romuzuxe
peace@so36.net:scheisse
susi@so36.net:R2D2-f
ilker@so36.net:test123
idfx@so36.net:dlgesmsl.01
vitaminepille@so36.net:lecker6
defa-blendr@so36.net:azocomyw
christopher@so36.net:daredevil
altdel@so36.net:Knutson
altdel@so36.net:Knutson-01
altdel@so36.net:spitzwitz
daniel@so36.net:roFl0815
anke@so36.net:0119289011
andi@so36.net:malou
mio@so36.net:blonde redhead
mir@so36.net:somos
sanne@so36.net:xobolude
maria.schulz@so36.net:U120108681
mario@so36.net:holsten_
markus@so36.net:engagierthoch3
joe@so36.net:music
jonas@so36.net:hinzkunz
janmaat@so36.net:bumerang
############################################################
# so36net.de #
############################################################
############################################################
# so36.org #
############################################################
############################################################
# socialforum-berlin.org #
############################################################
############################################################
# sozialforum-berlin.de #
############################################################
############################################################
# speakerinnen.org #
############################################################
############################################################
# stop-torture.de #
############################################################
############################################################
# talk36.net #
############################################################
############################################################
# uffmucken-schoeneweide.de #
############################################################
############################################################
# una-pt.org #
############################################################
############################################################
# verdammtlangquer.org #
############################################################
############################################################
# web.so36.net #
############################################################
############################################################
# womensrightsproject.de #
############################################################
############################################################
# wuppertal-dichtmachen.de #
############################################################

View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
min_uid=1000
declare -i _id=$(expr $min_uid - 1)
while true ; do
((_id++))
$(id $_id > /dev/null 2>&1) && continue
$(cat /etc/group | cut -d ':' -f3 | grep -q $_id 2> /dev/null) && continue
break
done
echo
echo " Next free uid/gid pair:"
echo
echo -e " uid: \033[1m$_id\033[m"
echo -e " gid: \033[1m$_id\033[m"
echo
exit 0

View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
function top_level_parent_pid {
# Look up the parent of the given PID.
pid=${1:-$$}
stat=($(</proc/${pid}/stat))
ppid=${stat[3]}
# /sbin/init always has a PID of 1, so if you reach that, the current PID is
# the top-level parent. Otherwise, keep looking.
if [[ ${ppid} -eq 1 ]] ; then
echo ${pid}
else
top_level_parent_pid ${ppid}
fi
}
echo "Top Level Parent Pid: $(top_level_parent_pid)"
echo "Top Level Command: $(ps -o cmd= $(top_level_parent_pid))"
exit 0

49
snippets/isValidDate.sh Executable file
View File

@ -0,0 +1,49 @@
#!/usr/bin/env bash
isDateInvalid()
{
DATE="${1}"
# Autorized separator char ['space', '/', '.', '_', '-']
SEPAR="([ \/._-])?"
# Date format day[01..31], month[01,03,05,07,08,10,12], year[1900..2099]
DATE_1="((([123][0]|[012][1-9])|3[1])${SEPAR}(0[13578]|1[02])${SEPAR}(19|20)[0-9][0-9])"
# Date format day[01..30], month[04,06,09,11], year[1900..2099]
DATE_2="(([123][0]|[012][1-9])${SEPAR}(0[469]|11)${SEPAR}(19|20)[0-9][0-9])"
# Date format day[01..28], month[02], year[1900..2099]
DATE_3="(([12][0]|[01][1-9]|2[1-8])${SEPAR}02${SEPAR}(19|20)[0-9][0-9])"
# Date format day[29], month[02], year[1904..2096]
DATE_4="(29${SEPAR}02${SEPAR}(19|20(0[48]|[2468][048]|[13579][26])))"
# Date 29.02.2000
DATE_5="(29${SEPAR}02${SEPAR}2000)"
# Match the date in the Regex
#if ! [[ "${DATE}" =~ ^(${DATE_1}|${DATE_2}|${DATE_3}|${DATE_4})$ ]]
#then
# echo -e "ERROR - '${DATE}' invalid!"
#else
# echo "${DATE} is valid"
#fi
if [[ "${DATE}" =~ ^(${DATE_1}|${DATE_2}|${DATE_3}|${DATE_4}|${DATE_5})$ ]] ; then
return 1
else
return 0
fi
}
echo
if isDateInvalid "${1}" ; then
echo "inavalid Date: ${1}"
else
echo "${1} is valid."
fi
echo
exit 0

30
snippets/isValisDate_cal.sh Executable file
View File

@ -0,0 +1,30 @@
#!/usr/bin/env bash
DATE=$1
declare -i day
if [[ ${#DATE} -ne 10 ]] ; then
echo ""
echo "Invalid Date: $DATE"
echo ""
echo -e "Usage: \033[1m$(basename $0) YYYYMMDD\033[m"
echo ""
exit 0
fi
eval $(echo $DATE | sed 's/^\(....\)\(..\)\(..\)/year=\1 month=\2 day=\3/')
cal $month $year 2> /dev/null | grep -w $day > /dev/null
if [[ $? -eq 0 ]] ; then
echo ""
echo "Valid Date: $DATE"
echo ""
else
echo ""
echo "Invalid Date: $DATE"
echo ""
echo "Usage: $(basename $0) YYYYMMDD"
echo ""
fi
exit 0

19
snippets/is_chrooted.sh Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
# - Test if script is running in a chrooted environment
# -
# - !! Script MUST run with root privileges!!
# -
if [ "$(id -u)" != "0" ]; then
echo -e "\n\tThis script must be run as root.\n" 1>&2
exit 1
fi
if [[ "$(stat -c %d:%i /)" = "$(stat -c %d:%i /proc/1/root/.)" ]]; then
echo -e "\n\tRunning NOT in a chrooted environment.\n"
else
echo -e "\n\tRunning in a chrooted environment.\n"
fi

57
snippets/is_number.sh Executable file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env bash
is_number() {
return $(test ! -z "${1##*[!0-9]*}" > /dev/null 2>&1);
# - also possible
# -
#[[ ! -z "${1##*[!0-9]*}" ]] && return 0 || return 1
#return $([[ ! -z "${1##*[!0-9]*}" ]])
}
is_int() {
return $(test "$@" -eq "$@" > /dev/null 2>&1);
}
_int=-5
_number=5
_no_number=5a
echo -e "\nTest of valid number (positiv integer)"
if is_number $_number ; then
echo -e "\t$_number is a number"
else
echo -e "\t$_number is NOT a number"
fi
if is_number $_int ; then
echo -e "\t$_int is a number"
else
echo -e "\t$_int is NOT a number"
fi
if is_number $_no_number ; then
echo -e "\t$_no_number is a number"
else
echo -e "\t$_no_number is NOT a number"
fi
echo -e "\nTest of valid integer"
if is_int $_number ; then
echo -e "\t$_number is a valid integer"
else
echo -e "\t$_number is NOT a valid integer"
fi
if is_int $_int ; then
echo -e "\t$_int is a valid integer"
else
echo -e "\t$_int is NOT a valid integer"
fi
if is_int $_no_number ; then
echo -e "\t$_no_number is a valid integer"
else
echo -e "\t$_no_number is NOT a valid integer"
fi
echo ""
exit 0

37
snippets/is_valid_ipv4.sh Executable file
View File

@ -0,0 +1,37 @@
#!/usr/bin/env bash
## - Test of valid IPv4 Address
## -
## - Returns 0 if valid, > 0 otherwise
## -
is_valid_ipv4() {
local -a octets=( ${1//\./ } )
local RETURNVALUE=0
# return an error if the IP doesn't have exactly 4 octets
[[ ${#octets[@]} -ne 4 ]] && return 1
for octet in ${octets[@]}
do
if [[ ${octet} =~ ^[0-9]{1,3}$ ]]
then # shift number by 8 bits, anything larger than 255 will be > 0
((RETURNVALUE += octet>>8 ))
else # octet wasn't numeric, return error
return 1
fi
done
return ${RETURNVALUE}
}
if [ "X$@" = "X" ]; then
echo -e "\n\t\033[33m\033[1mNo argumnet given!\033[m\n"
exit 1
fi
if is_valid_ipv4 $@ ; then
echo -e "\n\t\033[32m\033[1m$@ is a valid IPv4 Address\033[m\n"
else
echo -e "\n\t\033[31m\033[1m$@ is NOT a valid IPv4 Address\033[m\n"
fi
exit

34
snippets/mask2cidr.sh Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Function calculates number of bit in a netmask
#
mask2cidr() {
nbits=0
IFS=.
for dec in $1 ; do
case $dec in
255) let nbits+=8;;
254) let nbits+=7;;
252) let nbits+=6;;
248) let nbits+=5;;
240) let nbits+=4;;
224) let nbits+=3;;
192) let nbits+=2;;
128) let nbits+=1;;
0);;
*) echo "Error: $dec is not recognised"; exit 1
esac
done
echo "$nbits"
}
mask=$1
cidr=$(mask2cidr $mask)
echo ""
echo "cidr: $cidr - mask: $mask"
echo ""
exit 0

28
snippets/netmask2cidr.sh Executable file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env bash
netmask2cidr() {
case $1 in
0x*)
local hex=${1#0x*} quad=
while [ -n "${hex}" ]; do
local lastbut2=${hex#??*}
quad=${quad}${quad:+.}0x${hex%${lastbut2}*}
hex=${lastbut2}
done
set -- ${quad}
;;
esac
local i= len=
local IFS=.
for i in $1; do
while [ ${i} != "0" ]; do
len=$((${len} + ${i} % 2))
i=$((${i} >> 1))
done
done
echo "${len}"
}
netmask2cidr $1

31
snippets/qsort.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/bash
# quicksorts positional arguments
# return is in array qsort_ret
qsort() {
local pivot i smaller=() larger=()
qsort_ret=()
(($#==0)) && return 0
pivot=$1
shift
for i; do
if [[ $i < $pivot ]]; then
smaller+=( "$i" )
else
larger+=( "$i" )
fi
done
qsort "${smaller[@]}"
smaller=( "${qsort_ret[@]}" )
qsort "${larger[@]}"
larger=( "${qsort_ret[@]}" )
qsort_ret=( "${smaller[@]}" "$pivot" "${larger[@]}" )
}
array=(a c b "f f" 3 5)
qsort "${array[@]}"
declare -p qsort_ret
exit 0

View File

@ -0,0 +1,31 @@
#!/usr/bin/env bash
# - Read first charactor of a file:
# -
# - head -c1 <path-to-file>
deb_major_version=""
is_number() {
return $(test ! -z "${1##*[!0-9]*}" > /dev/null 2>&1);
# - also possible
# -
#[[ ! -z "${1##*[!0-9]*}" ]] && return 0 || return 1
#return $([[ ! -z "${1##*[!0-9]*}" ]])
}
if [[ -f "/etc/debian_version" ]]; then
deb_major_version=$(head -c1 /etc/debian_version)
if is_number $deb_major_version ; then
echo -e "\n\tDebian Major Version: $deb_major_version\n"
else
echo -e "\n\tNo numeric Version given. Debian Version: $(head -1 /etc/debian_version)\n"
fi
else
echo -e "\nFile '/etc/debian_version' not found"
fi
exit 0

158
snippets/read_ipv4_from_file.sh Executable file
View File

@ -0,0 +1,158 @@
#!/usr/bin/env bash
ipv4_list_file="files/ban_ipv4.list"
if [[ ! -f "$ipv4_list_file" ]] ; then
echo ""
echo " File '$ipv4_list_file' not found'"
echo ""
exit 0
fi
declare -a octets
declare -i index
while IFS='' read -r _line || [[ -n $_line ]] ; do
is_valid_ipv4=true
is_valid_mask=true
ipv4=""
mask=""
# Ignore comment lines
#
[[ $_line =~ ^[[:space:]]{0,}# ]] && continue
# Ignore blank lines
#
[[ $_line =~ ^[[:space:]]*$ ]] && continue
# Remove leading whitespace characters
#
_line="${_line#"${_line%%[![:space:]]*}"}"
# Catch IPv4 Address
#
given_ipv4="$(echo $_line | cut -d ' ' -f1)"
# Splitt Ipv4 address from possible given CIDR number
#
IFS='/' read -ra _addr <<< "$given_ipv4"
_ipv4="${_addr[0]}"
if [[ -n "${_addr[1]}" ]] ; then
_mask="${_addr[1]}"
test_netmask=false
# Is 'mask' a valid CIDR number? If not, test agains a valid netmask
#
if $(test -z "${_mask##*[!0-9]*}" > /dev/null 2>&1) ; then
# Its not a vaild mask number, but naybe a valit netmask.
#
test_netmask=true
else
if [[ $_mask -gt 32 ]]; then
# Its not a vaild cidr number, but naybe a valit netmask.
#
test_netmask=true
else
# OK, we have a vaild cidr number between '0' and '32'
#
mask=$_mask
fi
fi
# Test if given '_mask' is a valid netmask.
#
if $test_netmask ; then
octets=( ${_mask//\./ } )
# Complete netmask if necessary
#
while [[ ${#octets[@]} -lt 4 ]]; do
octets+=(0)
done
[[ ${#octets[@]} -gt 4 ]] && is_valid_mask=false
index=0
for octet in ${octets[@]} ; do
if [[ ${octet} =~ ^[0-9]{1,3}$ ]] ; then
if [[ $octet -gt 255 ]] ; then
is_valid_mask=false
fi
if [[ $index -gt 0 ]] ; then
mask="${mask}.${octet}"
else
mask="${octet}"
fi
else
is_valid_mask=false
fi
((index++))
done
fi
adjust_mask=false
else
mask=32
adjust_mask=true
fi
# Splitt given address into their octets
#
octets=( ${_ipv4//\./ } )
# Complete IPv4 address if necessary
#
while [[ ${#octets[@]} -lt 4 ]]; do
octets+=(0)
# Only adjust CIDR number if not given
#
if $adjust_mask ; then
mask="$(expr $mask - 8)"
fi
done
# Pre-check if given IPv4 Address seems to be a valid address
#
[[ ${#octets[@]} -gt 4 ]] && is_valid_ipv4=false
# Check if given IPv4 Address is a valid address
#
if $is_valid_ipv4 ; then
index=0
for octet in ${octets[@]} ; do
if [[ ${octet} =~ ^[0-9]{1,3}$ ]] ; then
if [[ $octet -gt 255 ]] ; then
is_valid_ipv4=false
fi
if [[ $index -gt 0 ]] ; then
ipv4="${ipv4}.${octet}"
else
ipv4="${octet}"
fi
else
is_valid_ipv4=false
fi
((index++))
done
fi
if $is_valid_ipv4 && $is_valid_mask; then
echo " ${ipv4}/${mask}"
else
echo " '$given_ipv4' isn't a valid IPv4 address"
fi
done < ban_ipv4.list

97
snippets/read_yaml.sh Executable file
View File

@ -0,0 +1,97 @@
#!/usr/bin/env bash
# - See: https://gist.github.com/epiloque/8cf512c6d64641bde388
# -
# - Changes from the original (see above url:
# - if the yaml file contains carriage returns, the processing will fail.
# - In this case, I made a fix on this line (currently line 14)
# -
# - fs="$(echo @|tr @ '\034')"
# -
# - so it became
# - fs="$(echo @|tr @ '\034'|tr -d '\015')"
# -
# - NOTE!
# - The indent of the yaml configuration file is "2"
# -
# - If you want your indentation to be 4 spaces instead of 2 change this line:
# - indent = length($1)/2;
# - to be this:
# - indent = length($1)/4;
# -
working_dir="$(dirname $(realpath $0))"
# - This file will be created. (see below..)
# -
example_yaml_config_file="${working_dir}/files/example_yaml_config.yml"
parse_yaml() {
local prefix=$2
local s
local w
local fs
s='[[:space:]]*'
w='[a-zA-Z0-9_]*'
#fs="$(echo @|tr @ '\034')"
fs="$(echo @|tr @ '\034'|tr -d '\015')"
sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" |
awk -F"$fs" '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, $3);
}
}' | sed 's/_=/+=/g'
}
cat <<EOF > "$example_yaml_config_file"
development:
adapter: mysql2
encoding: utf8
database: my_database
username: root
password:
apt:
- somepackage
- anotherpackage
EOF
eval $(parse_yaml "$example_yaml_config_file" "optional_prefix_")
#parse_yaml $example_yaml_config_file "optional_prefix"
echo ""
echo "-------------------"
echo "- Read yaml configuration file"
echo "-------------------"
echo ""
echo "$example_yaml_config_file:"
cat $example_yaml_config_file
echo -e "\nUsing with optional prefix 'optional_prefix_'"
echo "============================================="
echo -e "\t\033[32meval \$(parse_yaml \"$example_yaml_config_file\" "optional_prefix_")\033[m"
echo ""
echo -e "\t\${optional_prefix_development_adapter}: ${optional_prefix_development_adapter}"
echo -e "\t\${optional_prefix_development_apt[@]}: ${optional_prefix_development_apt[@]}"
eval $(parse_yaml "$example_yaml_config_file" )
#parse_yaml $example_yaml_config_file "optional_prefix"
echo ""
echo -e "\nUsing without optional prefix "
echo "=============================="
echo -e "\t\033[32meval \$(parse_yaml \"$example_yaml_config_file\" )\033[m"
echo ""
echo -e "\t\${development_adapter}: ${development_adapter}"
echo -e "\t\${development_apt[@]}: ${development_apt[@]}"
echo ""
rm "$example_yaml_config_file"
exit 0

21
snippets/sort_array.sh Executable file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env bash
array=("a c" b f "Change" "3 5")
IFS=$'\n' sorted=($(sort <<<"${array[*]}"))
echo ""
echo "Print out array elemnts (for loop)"
echo "=================================="
for val in ${sorted[@]} ; do
echo -e "\t$val"
done
echo ""
echo "Print out array elemnts (printf)"
echo "================================"
printf "\t%s\n" "${sorted[@]}"
echo ""
exit

41
snippets/test_mail_paswd.sh Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
script_dir="$(dirname $(realpath $0))"
passwd_file="${script_dir}/files/password.list"
if [[ ! -f "$passwd_file" ]] ; then
echo ""
echo -e " [ \033[31m\033[1mFatal\033[m ] File '$passwd_file' not found!"
echo ""
exit 1
fi
#imap_server="imap.so36.net"
imap_server="localhost"
if [[ $imap_server =~ ^127\.0\.0\.1 ]] || [[ $imap_server =~ ^localhost ]]; then
imap_protocol="imap"
else
imap_protocol="imaps"
fi
echo ""
set +H
while IFS=':' read -r email passwd || [[ -n $email ]] ; do
[[ $email =~ ^\s*$ ]] && continue
[[ $email =~ ^\s*# ]] && continue
echo -en " Test given password for email \033[1m$email\\033[m .."
curl --url "${imap_protocol}://${imap_server}" --user "${email}:${passwd}" > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo -e "\033[1G [ \033[31m\033[1mWarning\033[m ]: Password for \033[1m$email\033[m is unsafe!"
else
echo -e "\033[1G [ \033[32mOk\033[m ]: Password for '$email' does not match password list."
fi
done < "$passwd_file"
set -H
echo ""
exit 0

60
snippets/tolower.sh Executable file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env bash
string="Hallo Welt!"
echo ""
echo "string: $string"
echo ""
# - Bash 4
# -
echo "______"
echo "Bash 4"
echo " \${string,,}"
echo ""
echo "string: ${string,,}"
echo ""
# - tr
# -
echo "______"
echo "tr"
echo " echo \"\$string\" | tr '[:upper:]' '[:lower:]'"
echo ""
echo "string: $(echo "$string" | tr '[:upper:]' '[:lower:]')"
echo ""
# - awk
# -
echo "______"
echo "awk"
echo " echo \"\$string\" | awk '{print tolower(\$0)}'"
echo ""
echo "string: $(echo "$string" | awk '{print tolower($0)}')"
echo ""
# - sed
# -
echo "______"
echo "sed"
echo " echo \"\$string\" | sed -e 's/\(.*\)/\L\1/'"
echo ""
echo " sed -e 's/\(.*\)/\L\1/' <<< \"\$string\""
echo ""
echo "string: $(echo "$string" | sed -e 's/\(.*\)/\L\1/')"
echo "string: $(sed -e 's/\(.*\)/\L\1/' <<< "$string")"
echo ""
# - Perl
# -
echo "______"
echo "Perl"
echo " echo \"\$string\" | perl -ne 'print lc'"
echo ""
echo "string: $(echo "$string" | perl -ne 'print lc')"
echo ""

60
snippets/toupper.sh Executable file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env bash
string="Hallo Welt!"
echo ""
echo "string: $string"
echo ""
# - Bash 4
# -
echo "______"
echo "Bash 4"
echo " \${string^^}"
echo ""
echo "string: ${string^^}"
echo ""
# - tr
# -
echo "______"
echo "tr"
echo " echo \"\$string\" | tr '[:lower:]' '[:upper:]'"
echo ""
echo "string: $(echo "$string" | tr '[:lower:]' '[:upper:]')"
echo ""
# - awk
# -
echo "______"
echo "awk"
echo " echo \"\$string\" | awk '{print toupper(\$0)}'"
echo ""
echo "string: $(echo "$string" | awk '{print toupper($0)}')"
echo ""
# - sed
# -
echo "______"
echo "sed"
echo " echo \"\$string\" | sed -e 's/\(.*\)/\U\1/'"
echo ""
echo " sed -e 's/\(.*\)/\U\1/' <<< \"\$string\""
echo ""
echo "string: $(echo "$string" | sed -e 's/\(.*\)/\U\1/')"
echo "string: $(sed -e 's/\(.*\)/\U\1/' <<< "$string")"
echo ""
# - Perl
# -
echo "______"
echo "Perl"
echo " echo \"\$string\" | perl -ne 'print uc'"
echo ""
echo "string: $(echo "$string" | perl -ne 'print uc')"
echo ""

19
snippets/trim.sh Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
var=" - Hallo Welt - "
echo ""
echo " |${var}|"
var="$(trim $var)"
echo " |${var}|"
echo ""
exit 0