xref: /aosp_15_r20/external/ublksrv/utils/ublk_chown_docker.sh (revision 94c4a1e103eb1715230460aab379dff275992c20)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4ublk_docker_add()
5{
6	local name=$1
7	local maj=$2
8	local min=$3
9	local uid=$4
10	local container=$5
11
12	#echo "docker add $name" >> /tmp/udev_docker_udev.log
13	if [[ "$name" == *"ublkc"* ]]; then
14		docker exec -u 0 $container mknod /dev/$name c $maj $min
15		docker exec -u 0 $container chown $uid /dev/$name
16		docker exec -u 0 $container chmod 700 /dev/$name
17	elif [[ "$name" == *"ublkb"* ]]; then
18		docker exec -u 0 $container mknod /dev/$name b $maj $min
19		docker exec -u 0 $container chown $uid /dev/$name
20		docker exec -u 0 $container chmod 700 /dev/$name
21	fi
22}
23
24ublk_docker_remove()
25{
26	local name=$1
27	local maj=$2
28	local min=$3
29	local uid=$4
30	local container=$5
31
32	#echo "docker remove $name" >> /tmp/udev_docker_udev.log
33	if [[ "$name" == *"ublkc"* ]]; then
34		docker exec -u 0 $container rm /dev/$name
35	elif [[ "$name" == *"ublkb"* ]]; then
36		docker exec -u 0 $container rm /dev/$name
37	fi
38}
39
40MY_DIR=$(cd "$(dirname "$0")";pwd)
41DEV=$1
42ID=`${MY_DIR}/ublk_user_id $1`
43
44#echo $@ >> /tmp/udev_docker_udev.log
45
46#add ublk devices for interested containers
47if [ "$2" == "add" ]; then
48	if CONTAINERS=`docker ps --format "{{.Names}}"`; then
49		#echo $CONTAINERS >> /tmp/udev_docker_udev.log
50		for C in $CONTAINERS; do
51			if ps -ax | grep docker | grep $ID > /dev/null 2>&1; then
52				ublk_docker_add $DEV $3 $4 $ID $C
53			fi
54		done
55	fi
56elif [ "$2" == "remove" ]; then
57	if CONTAINERS=`docker ps --format "{{.Names}}"`; then
58		#echo $CONTAINERS >> /tmp/udev_docker_udev.log
59		for C in $CONTAINERS; do
60			ublk_docker_remove $DEV $3 $4 $ID $C
61		done
62	fi
63fi
64
65if [ "$2" == "add" ]; then
66	if [ "${ID}" != "-1:-1" ]; then
67		/usr/bin/chown $ID /dev/$1 > /dev/null 2>&1
68	fi
69fi
70