Top |
PolkitSubject * | polkit_unix_process_new () |
PolkitSubject * | polkit_unix_process_new_full () |
PolkitSubject * | polkit_unix_process_new_for_owner () |
void | polkit_unix_process_set_pid () |
gint | polkit_unix_process_get_pid () |
void | polkit_unix_process_set_start_time () |
guint64 | polkit_unix_process_get_start_time () |
void | polkit_unix_process_set_uid () |
gint | polkit_unix_process_get_uid () |
gint | polkit_unix_process_get_owner () |
GArray * | gids | Read / Write / Construct |
int | pid | Read / Write / Construct |
int | pidfd | Read / Write / Construct |
gboolean | pidfd-is-safe | Read |
guint64 | start-time | Read / Write / Construct |
int | uid | Read / Write / Construct |
An object for representing a UNIX process. In order to be reliable and race-free, this requires support for PID File Descriptors in the kernel, dbus-daemon/broker and systemd. With this functionality, we can reliably track processes without risking PID reuse and race conditions, and compare them.
NOTE: If PID FDs are not available, this object will fall back to using
PIDs, and this designed is now known broken; a mechanism to exploit a delay
in start time in the Linux kernel was identified. Avoid
calling polkit_subject_equal()
to compare two processes.
To uniquely identify processes, both the process id and the start time of the process (a monotonic increasing value representing the time since the kernel was started) is used.
NOTE: This object stores, and provides access to, the real UID of the
process. That value can change over time (with set*uid*(2) and exec*(2)).
Checks whether an operation is allowed need to take care to use the UID
value as of the time when the operation was made (or, following the open()
privilege check model, when the connection making the operation possible
was initiated). That is usually done by initializing this with
polkit_unix_process_new_for_owner()
with trusted data.
PolkitSubject *
polkit_unix_process_new (gint pid
);
polkit_unix_process_new
is deprecated and should not be used in newly-written code.
Creates a new PolkitUnixProcess for pid
.
The uid and start time of the process will be looked up in using
e.g. the /proc
filesystem depending on the
platform in use.
PolkitSubject * polkit_unix_process_new_full (gint pid
,guint64 start_time
);
polkit_unix_process_new_full
is deprecated and should not be used in newly-written code.
Creates a new PolkitUnixProcess object for pid
and start_time
.
The uid of the process will be looked up in using e.g. the
/proc
filesystem depending on the platform in
use.
PolkitSubject * polkit_unix_process_new_for_owner (gint pid
,guint64 start_time
,gint uid
);
Creates a new PolkitUnixProcess object for pid
, start_time
and uid
.
void polkit_unix_process_set_pid (PolkitUnixProcess *process
,gint pid
);
Sets pid
for process
.
gint
polkit_unix_process_get_pid (PolkitUnixProcess *process
);
Gets the process id for process
.
void polkit_unix_process_set_start_time (PolkitUnixProcess *process
,guint64 start_time
);
Set the start time of process
.
guint64
polkit_unix_process_get_start_time (PolkitUnixProcess *process
);
Gets the start time of process
.
void polkit_unix_process_set_uid (PolkitUnixProcess *process
,gint uid
);
Sets the (real, not effective) user id for process
.
gint
polkit_unix_process_get_uid (PolkitUnixProcess *process
);
Gets the user id for process
. Note that this is the real user-id,
not the effective user-id.
NOTE: The UID may change over time, so the returned value may not match the
current state of the underlying process; or the UID may have been set by
polkit_unix_process_new_for_owner()
or polkit_unix_process_set_uid()
,
in which case it may not correspond to the actual UID of the referenced
process at all (at any point in time).
gint polkit_unix_process_get_owner (PolkitUnixProcess *process
,GError **error
);
polkit_unix_process_get_owner
is deprecated and should not be used in newly-written code.
(deprecated)
typedef struct _PolkitUnixProcess PolkitUnixProcess;
The PolkitUnixProcess struct should not be accessed directly.
“gids”
property “gids” GArray *
The UNIX group ids of the process.
Owner: PolkitUnixProcess
Flags: Read / Write / Construct
“pid”
property “pid” int
The UNIX process id.
Owner: PolkitUnixProcess
Flags: Read / Write / Construct
Allowed values: >= 0
Default value: 0
“pidfd”
property “pidfd” int
The UNIX process id file descriptor.
Owner: PolkitUnixProcess
Flags: Read / Write / Construct
Allowed values: >= -1
Default value: -1
“pidfd-is-safe”
property “pidfd-is-safe” gboolean
Whether the UNIX process ID file descriptor is safe.
Owner: PolkitUnixProcess
Flags: Read
Default value: FALSE
“start-time”
property “start-time” guint64
The start time of the process.
Owner: PolkitUnixProcess
Flags: Read / Write / Construct
Default value: 0