Skip to content

Commit 0a332e5

Browse files
committed
fix
1 parent 42710c9 commit 0a332e5

File tree

3 files changed

+55
-13
lines changed

3 files changed

+55
-13
lines changed

Cargo.lock

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ tracing-subscriber = "0.3"
3434
[target.'cfg(not(any(target_os="windows", target_os="ios", target_os="android")))'.dependencies]
3535
clap = { version = "2.33", default-features = false, features = ["suggestions"], optional = true }
3636
daemonize = { version = "0.4.1", optional = true }
37+
nix = "0.23.1"
3738

3839
[target.'cfg(target_os="android")'.dependencies]
3940
jni = "0.19.0"

src/device/drop_privileges.rs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,35 @@ use crate::device::errno_str;
55
use crate::device::Error;
66
use libc::*;
77

8+
#[cfg(target_os = "macos")]
9+
use nix::unistd::User;
10+
811
pub fn get_saved_ids() -> Result<(uid_t, gid_t), Error> {
912
// Get the user name of the sudoer
10-
let uname = unsafe { getlogin() };
11-
if uname.is_null() {
12-
return Err(Error::DropPrivileges("NULL from getlogin".to_owned()));
13+
#[cfg(target_os = "macos")]
14+
{
15+
let uname: &'static str = env!("USER");
16+
let user = User::from_name(uname).unwrap().expect("a user");
17+
return Ok((uid_t::from(user.uid), gid_t::from(user.gid)));
1318
}
14-
let userinfo = unsafe { getpwnam(uname) };
15-
if userinfo.is_null() {
16-
return Err(Error::DropPrivileges("NULL from getpwnam".to_owned()));
19+
#[cfg(not(target_os = "macos"))]
20+
{
21+
let uname = unsafe { getlogin() };
22+
if uname.is_null() {
23+
return Err(Error::DropPrivileges("NULL from getlogin".to_owned()));
24+
}
25+
let userinfo = unsafe { getpwnam(uname) };
26+
if userinfo.is_null() {
27+
return Err(Error::DropPrivileges("NULL from getpwnam".to_owned()));
28+
}
29+
30+
// Saved group ID
31+
let saved_gid = unsafe { (*userinfo).pw_gid };
32+
// Saved user ID
33+
let saved_uid = unsafe { (*userinfo).pw_uid };
34+
35+
return Ok((saved_uid, saved_gid))
1736
}
18-
19-
// Saved group ID
20-
let saved_gid = unsafe { (*userinfo).pw_gid };
21-
// Saved user ID
22-
let saved_uid = unsafe { (*userinfo).pw_uid };
23-
24-
Ok((saved_uid, saved_gid))
2537
}
2638

2739
pub fn drop_privileges() -> Result<(), Error> {

0 commit comments

Comments
 (0)