Có, điều này là có thể trên Linux, nhưng nó sẽ không thể di chuyển được. Nó đạt được bằng cách sử dụng những gì được gọi là "dữ liệu phụ trợ" với sendmsg
/recvmsg
.
- Sử dụng
SO_PASSCRED
với setsockopt
- Sử dụng
SCM_CREDENTIALS
và struct ucred
cấu trúc
Cấu trúc này được định nghĩa trong Linux:
struct ucred {
pid_t pid; /* process ID of the sending process */
uid_t uid; /* user ID of the sending process */
gid_t gid; /* group ID of the sending process */
};
Lưu ý bạn phải điền những trong msghdr.control
của bạn, và hạt nhân sẽ kiểm tra xem chúng có đúng không.
Các tính di động trở ngại chính là cấu trúc này khác với trên Unixes khác - ví dụ trên FreeBSD đó là:
struct cmsgcred {
pid_t cmcred_pid; /* PID of sending process */
uid_t cmcred_uid; /* real UID of sending process */
uid_t cmcred_euid; /* effective UID of sending process */
gid_t cmcred_gid; /* real GID of sending process */
short cmcred_ngroups; /* number or groups */
gid_t cmcred_groups[CMGROUP_MAX]; /* groups */
};
Cảm ơn bạn rất nhiều. Chính xác những gì tôi đang tìm kiếm. Tính di động không phải là vấn đề. Mã sẽ chỉ chạy trên Android dưới dạng mã gốc. –