pub struct UCred { /* private fields */ }
Implementations§
Source§impl UCred
impl UCred
Sourcepub fn from_self() -> Result<UCred>
pub fn from_self() -> Result<UCred>
Use ucred_get(3C) with the P_MYID argument to get credentials for the current process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn from_pid(pid: pid_t) -> Result<UCred>
pub fn from_pid(pid: pid_t) -> Result<UCred>
Use ucred_get(3C) with get credentials for the nominated process.
Sourcepub fn from_socket(fd: BorrowedFd<'_>) -> Result<UCred>
pub fn from_socket(fd: BorrowedFd<'_>) -> Result<UCred>
Use getpeerucred(3C) to obtain the credentials of the peer endpoint of a connection-oriented socket (SOCK_STREAM) or stream file descriptor.
Sourcepub fn from_door_call() -> Result<UCred>
pub fn from_door_call() -> Result<UCred>
Use door_ucred(3C) to obtain the credentials of the client responsible for the current door invocation. It only makes sense to call this routine from a door call service procedure that is actively serving a door call.
Sourcepub fn pid(&self) -> Option<pid_t>
pub fn pid(&self) -> Option<pid_t>
Return the process ID, if the credential contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn is_same_process(&self) -> bool
pub fn is_same_process(&self) -> bool
Does this credential come from the current process?
Sourcepub fn project(&self) -> Option<projid_t>
pub fn project(&self) -> Option<projid_t>
Return the project ID of the process, if the credential contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn zoneid(&self) -> Option<zoneid_t>
pub fn zoneid(&self) -> Option<zoneid_t>
Return the zone ID of the zone in which the process resides, if the credential contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn is_same_zone(&self) -> Result<bool>
pub fn is_same_zone(&self) -> Result<bool>
Does this credential come from the same zone as the current process?
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn is_global_zone(&self) -> bool
pub fn is_global_zone(&self) -> bool
Does this credential come from a process in the global zone?
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn euid(&self) -> Option<uid_t>
pub fn euid(&self) -> Option<uid_t>
Return the effective user ID for the user credential, if it contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn euser(&self) -> Result<Option<User>>
pub fn euser(&self) -> Result<Option<User>>
Resolve the effective user ID to a username and return it.
NOTE: Each zone has its own independent passwd(5) database. If this credential represents a user in another zone, it may not be correct to resolve it to a name using the local database unless those databases are synchronised through some operational process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn ruid(&self) -> Option<uid_t>
pub fn ruid(&self) -> Option<uid_t>
Return the real user ID for the user credential, if it contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn ruser(&self) -> Result<Option<User>>
pub fn ruser(&self) -> Result<Option<User>>
Resolve the real user ID to a username and return it.
NOTE: Each zone has its own independent passwd(5) database. If this credential represents a user in another zone, it may not be correct to resolve it to a name using the local database unless those databases are synchronised through some operational process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn suid(&self) -> Option<uid_t>
pub fn suid(&self) -> Option<uid_t>
Return the saved user ID for the user credential, if it contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn suser(&self) -> Result<Option<User>>
pub fn suser(&self) -> Result<Option<User>>
Resolve the saved user ID to a username and return it.
NOTE: Each zone has its own independent passwd(5) database. If this credential represents a user in another zone, it may not be correct to resolve it to a name using the local database unless those databases are synchronised through some operational process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn egid(&self) -> Option<gid_t>
pub fn egid(&self) -> Option<gid_t>
Return the effective user ID for the user credential, if it contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn egroup(&self) -> Result<Option<Group>>
pub fn egroup(&self) -> Result<Option<Group>>
Resolve the effective group ID to a group name and return it.
NOTE: Each zone has its own independent group(5) database. If this credential represents a group in another zone, it may not be correct to resolve it to a name using the local database unless those databases are synchronised through some operational process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn rgid(&self) -> Option<gid_t>
pub fn rgid(&self) -> Option<gid_t>
Return the real user ID for the user credential, if it contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn rgroup(&self) -> Result<Option<Group>>
pub fn rgroup(&self) -> Result<Option<Group>>
Resolve the real group ID to a group name and return it.
NOTE: Each zone has its own independent group(5) database. If this credential represents a group in another zone, it may not be correct to resolve it to a name using the local database unless those databases are synchronised through some operational process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn sgid(&self) -> Option<gid_t>
pub fn sgid(&self) -> Option<gid_t>
Return the saved user ID for the user credential, if it contains one.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn sgroup(&self) -> Result<Option<Group>>
pub fn sgroup(&self) -> Result<Option<Group>>
Resolve the saved group ID to a group name and return it.
NOTE: Each zone has its own independent group(5) database. If this credential represents a group in another zone, it may not be correct to resolve it to a name using the local database unless those databases are synchronised through some operational process.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}
Sourcepub fn groups(&self) -> Option<&[gid_t]>
pub fn groups(&self) -> Option<&[gid_t]>
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 let uc = UCred::from_self()?;
15
16 dbg!(uc.euid());
17 dbg!(uc.euser());
18
19 dbg!(uc.ruid());
20 dbg!(uc.ruser());
21
22 dbg!(uc.suid());
23 dbg!(uc.suser());
24
25 dbg!(uc.egid());
26 dbg!(uc.egroup());
27
28 dbg!(uc.rgid());
29 dbg!(uc.rgroup());
30
31 dbg!(uc.sgid());
32 dbg!(uc.sgroup());
33
34 dbg!(uc.groups());
35
36 dbg!(uc.pid());
37 dbg!(uc.project());
38 dbg!(uc.zoneid());
39
40 dbg!(uc.is_same_zone());
41 dbg!(uc.is_global_zone());
42
43 Ok(())
44}