mirror of
https://repo.dec05eba.com/gpu-screen-recorder
synced 2026-05-06 06:50:43 +09:00
kms permission ok if running as root, no pkexec needed
This commit is contained in:
@@ -67,29 +67,30 @@ int gsr_kms_client_init(gsr_kms_client *self, const char *card_path, const char
|
||||
struct sockaddr_un local_addr = {0};
|
||||
struct sockaddr_un remote_addr = {0};
|
||||
|
||||
// TODO: Check if gsr-kms-server is installed
|
||||
// TODO: Check if pkexec is installed
|
||||
|
||||
char server_filepath[PATH_MAX];
|
||||
snprintf(server_filepath, sizeof(server_filepath), "%s/%s", program_dir, "gsr-kms-server");
|
||||
|
||||
int has_perm = 0;
|
||||
cap_t kms_server_cap = cap_get_file(server_filepath);
|
||||
if(kms_server_cap) {
|
||||
cap_flag_value_t res = 0;
|
||||
cap_get_flag(kms_server_cap, CAP_SYS_ADMIN, CAP_PERMITTED, &res);
|
||||
if(res == CAP_SET) {
|
||||
//fprintf(stderr, "has permission!\n");
|
||||
has_perm = 1;
|
||||
} else {
|
||||
//fprintf(stderr, "No permission:(\n");
|
||||
}
|
||||
cap_free(kms_server_cap);
|
||||
if(geteuid() == 0) {
|
||||
has_perm = 1;
|
||||
} else {
|
||||
if(errno == ENODATA)
|
||||
fprintf(stderr, "gsr info: gsr_kms_client_init: gsr-kms-server is missing sys_admin cap and will require root authentication. To bypass this automatically, run: sudo setcap cap_sys_admin+ep '%s'\n", server_filepath);
|
||||
else
|
||||
fprintf(stderr, "failed to get cap\n");
|
||||
cap_t kms_server_cap = cap_get_file(server_filepath);
|
||||
if(kms_server_cap) {
|
||||
cap_flag_value_t res = 0;
|
||||
cap_get_flag(kms_server_cap, CAP_SYS_ADMIN, CAP_PERMITTED, &res);
|
||||
if(res == CAP_SET) {
|
||||
//fprintf(stderr, "has permission!\n");
|
||||
has_perm = 1;
|
||||
} else {
|
||||
//fprintf(stderr, "No permission:(\n");
|
||||
}
|
||||
cap_free(kms_server_cap);
|
||||
} else {
|
||||
if(errno == ENODATA)
|
||||
fprintf(stderr, "gsr info: gsr_kms_client_init: gsr-kms-server is missing sys_admin cap and will require root authentication. To bypass this automatically, run: sudo setcap cap_sys_admin+ep '%s'\n", server_filepath);
|
||||
else
|
||||
fprintf(stderr, "failed to get cap\n");
|
||||
}
|
||||
}
|
||||
|
||||
self->card_path = strdup(card_path);
|
||||
|
||||
Reference in New Issue
Block a user