xref: /aosp_15_r20/external/ublksrv/utils/ublk_user_id.c (revision 94c4a1e103eb1715230460aab379dff275992c20)
1 // SPDX-License-Identifier: MIT or GPL-2.0-only
2 
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include "ublksrv.h"
6 
print_dev_owner_id(int number)7 static int print_dev_owner_id(int number)
8 {
9 	struct ublksrv_dev_data data = {
10 		.dev_id = number,
11 	};
12 	struct ublksrv_ctrl_dev *dev = ublksrv_ctrl_init(&data);
13 	int ret = ublksrv_ctrl_get_info(dev);
14 
15 	if (ret >= 0) {
16 		const struct ublksrv_ctrl_dev_info *dinfo =
17 			ublksrv_ctrl_get_dev_info(dev);
18 
19 		if (dinfo->flags & UBLK_F_UNPRIVILEGED_DEV)
20 			printf("%d:%d\n", dinfo->owner_uid, dinfo->owner_gid);
21 		else
22 			printf("%d:%d\n", -1, -1);
23 	} else {
24 		printf("%d:%d\n", -1, -1);
25 	}
26 
27 	ublksrv_ctrl_deinit(dev);
28 
29 	return ret;
30 }
31 
main(int argc,char * argv[])32 int main(int argc, char *argv[])
33 {
34 	long number;
35 	char *path;
36 
37 	if (argc != 2)
38 		return -1;
39 
40 	path = argv[1];
41 
42 	/*
43 	 * ublkcN or ublkbN since it is called when
44 	 * udev add event is received
45 	 */
46 	number = strtol(&path[5], NULL, 10);
47 
48 	if (number >= 0)
49 		print_dev_owner_id(number);
50 
51 	return 0;
52 }
53