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