depslister Administration
List dependencies of a User or a binary
This is specially useful for packageuser LFS systems
dependencies: depscollector
Synopsis
depslister [OPTION] [ARG]
DESCRIPTION
-u USER List all binaries owned by USER
-b BIN_NAME List libraries required by binary BIN_NAME
-lu USER List all libraries used by binaries owned by USER
-ldu USER List owners of libraries used by USER's binaries (who USER depends on)
-ldr USER List owners of binaries depending on libraries owned by USER (who depends on USER)
-Rldr USER List owners of binaries depending on libraries owned by USER (who depends on USER) RECURSIVE
-a List all binaries in the database
-h Show this help message
wget https://git.christianimmanuel.de/scripts/raw/Administration/depslister && chmod 740 depslister#!/bin/bash
#################################################
### List dependencies of a User or a binary
### This is specially useful for packageuser LFS systems
###
### dependencies: depscollector
### Synopsis
### depslister [OPTION] [ARG]
### DESCRIPTION
### -u USER List all binaries owned by USER
### -b BIN_NAME List libraries required by binary BIN_NAME
### -lu USER List all libraries used by binaries owned by USER
### -ldu USER List owners of libraries used by USER's binaries (who USER depends on)
### -ldr USER List owners of binaries depending on libraries owned by USER (who depends on USER)
### -Rldr USER List owners of binaries depending on libraries owned by USER (who depends on USER) RECURSIVE
### -a List all binaries in the database
### -h Show this help message
set -euo pipefail
db_path="/var/lib/depscollector/depscollector.db"
usage() {
cat <<EOF
Usage: $0 [option] [argument]
Options:
-u USER List all binaries owned by USER
-b BIN_NAME List libraries required by binary BIN_NAME
-lu USER List all libraries used by binaries owned by USER
-ldu USER List owners of libraries used by USER's binaries (who USER depends on)
-ldr USER List owners of binaries depending on libraries owned by USER (who depends on USER)
-Rldr USER List owners of binaries depending on libraries owned by USER (who depends on USER) RECURSIVE
-a List all binaries in the database
-h Show this help message
Examples:
$0 -u ncurses
$0 -b bash
$0 -lu ncurses
$0 -ldu ncurses
$0 -ldr ncurses
$0 -Rldr ncurses
$0 -a
EOF
exit 1
}
list_binaries_by_user() {
sqlite3 "$db_path" "SELECT name, path FROM binaries WHERE owner_user = '$1';"
}
list_libs_for_binary() {
sqlite3 "$db_path" "
SELECT b.owner_user, l.name, l.path FROM libraries l
JOIN binary_dependencies bd ON bd.library_id = l.id
JOIN binaries b ON b.id = bd.binary_id
WHERE b.name = '$1';
"
}
list_libs_for_user() {
sqlite3 "$db_path" "
SELECT DISTINCT l.name, l.path FROM libraries l
JOIN binary_dependencies bd ON bd.library_id = l.id
JOIN binaries b ON b.id = bd.binary_id
WHERE b.owner_user = '$1';
"
}
list_users_libs_used_by_user() {
sqlite3 "$db_path" "
SELECT DISTINCT l.owner_user FROM libraries l
JOIN binary_dependencies bd ON bd.library_id = l.id
JOIN binaries b ON b.id = bd.binary_id
WHERE b.owner_user = '$1' AND l.owner_user IS NOT NULL;
"
}
list_users_binaries_relying_on_user() {
sqlite3 "$db_path" "
SELECT DISTINCT b.owner_user FROM binaries b
JOIN binary_dependencies bd ON bd.binary_id = b.id
JOIN libraries l ON l.id = bd.library_id
WHERE l.owner_user = '$1' AND b.owner_user IS NOT NULL;
"
}
declare -A visited_users
recursive_list_users_binaries_relying_on_user() {
local user="$1"
local indent="${2:-0}"
local index_space
index_space="$(printf "%*s" "$indent" "")"
[[ "${visited_users[$user]+_}" ]] && return
visited_users["$user"]=1
mapfile -t deps < <(list_users_binaries_relying_on_user "$user")
for dep in "${deps[@]}"; do
[[ "$dep" == "$user" ]] && continue
echo "${index_space}${dep}"
recursive_list_users_binaries_relying_on_user "$dep" $((indent + 1))
done
}
list_all_binaries() {
sqlite3 "$db_path" "SELECT name, path FROM binaries;"
}
if [[ $# -eq 0 ]]; then
usage
fi
case "$1" in
-u) list_binaries_by_user "$2" ;;
-b) list_libs_for_binary "$2" ;;
-lu) list_libs_for_user "$2" ;; # libs used by user's binaries
-ldu) list_users_libs_used_by_user "$2" ;; # users owning libs used by user
-ldr) list_users_binaries_relying_on_user "$2" ;; # users relying on this user
-Rldr) recursive_list_users_binaries_relying_on_user "$2" 0;; # users owning libs used by user recursive
-a) list_all_binaries ;;
*) usage ;;
esac