utsudo/0003-fix-bug-utsudoedit-error.patch
bianguangze 8bd4dc3842 fix utsudoedit error
(cherry picked from commit 17e9af45e25d50278ef4f983985bc00ae751a5df)
2023-12-20 17:50:39 +08:00

6500 lines
185 KiB
Diff

From fd117274e49729d64080ba4af5bb968615a60c94 Mon Sep 17 00:00:00 2001
From: trackers-love <bianguangze@uniontech.com>
Date: Wed, 20 Dec 2023 17:15:49 +0800
Subject: [PATCH] fix utsudoedit error
---
lib/util/src/arc4random.rs | 33 +-
lib/util/src/closefrom.rs | 24 +-
lib/util/src/common.rs | 1631 ++++++++++++++++++++++++++++++
lib/util/src/digest.rs | 51 +-
lib/util/src/event.rs | 258 +----
lib/util/src/event_poll.rs | 163 +--
lib/util/src/fatal.rs | 21 +-
lib/util/src/getgrouplist.rs | 9 +-
lib/util/src/gethostname.rs | 8 +-
lib/util/src/gettime.rs | 36 +-
lib/util/src/gidlist.rs | 22 +-
lib/util/src/key_val.rs | 7 +-
lib/util/src/lbuf.rs | 20 +-
lib/util/src/lib.rs | 5 +-
lib/util/src/locking.rs | 18 +-
lib/util/src/memset_s.rs | 7 +-
lib/util/src/parseln.rs | 70 +-
lib/util/src/progname.rs | 1 +
lib/util/src/pw_dup.rs | 7 +-
lib/util/src/secure_path.rs | 227 +----
lib/util/src/setgroups.rs | 17 +-
lib/util/src/sha2.rs | 22 +-
lib/util/src/sig2str.rs | 40 +-
lib/util/src/str2sig.rs | 17 +-
lib/util/src/strsplit.rs | 7 +-
lib/util/src/strtobool.rs | 11 +-
lib/util/src/strtoid.rs | 44 +-
lib/util/src/strtomode.rs | 21 +-
lib/util/src/strtonum.rs | 16 +-
lib/util/src/sudo_conf.rs | 420 ++------
lib/util/src/sudo_debug.rs | 12 +-
lib/util/src/sudo_debug_macro.rs | 4 +
lib/util/src/sudo_dso.rs | 49 +-
lib/util/src/term.rs | 265 +----
lib/util/src/ttyname_dev.rs | 327 ++----
lib/util/src/ttysize.rs | 44 +-
36 files changed, 2034 insertions(+), 1900 deletions(-)
create mode 100644 lib/util/src/common.rs
diff --git a/lib/util/src/arc4random.rs b/lib/util/src/arc4random.rs
index ef5545c..bc1a40b 100644
--- a/lib/util/src/arc4random.rs
+++ b/lib/util/src/arc4random.rs
@@ -14,26 +14,21 @@
unused_assignments
)]
-//call libc_func
-use libc::abort;
+use crate::common::*;
//define
pub const RSBUFSZ: i32 = 1024;
pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40;
+
+// #define KEYSZ 32
+// #define IVSZ 8
pub const KEYSZ: i32 = 32;
pub const IVSZ: i32 = 8;
//aliase of type
-pub type pid_t = libc::c_int;
-pub type uint32_t = libc::c_uint;
-pub type size_t = libc::c_ulong;
-pub type __off_t = libc::c_long;
pub type __pthread_list_t = __pthread_internal_list;
-pub type sig_atomic_t = __sig_atomic_t;
-pub type __sig_atomic_t = libc::c_int;
-pub type u8 = libc::c_uchar;
-pub type u32 = libc::c_uint;
+//line 75
#[derive(Copy, Clone)]
#[repr(C)]
pub struct _rs {
@@ -116,6 +111,7 @@ static mut arc4random_mtx: pthread_mutex_t = pthread_mutex_t {
},
};
+//line 108-126
#[no_mangle]
unsafe fn _rs_stir() {
let mut rnd: [libc::c_uchar; (KEYSZ + IVSZ) as usize] = [0; (KEYSZ + IVSZ) as usize];
@@ -157,6 +153,7 @@ unsafe fn _rs_stir() {
(*rs).rs_count = 1600000;
}
+//line86 87 90...
extern "C" {
fn mmap(
__addr: *mut libc::c_void,
@@ -180,7 +177,6 @@ extern "C" {
}
//function _getentropy_fail
-use libc::raise;
pub const SIGKILL: libc::c_int = 9;
pub unsafe fn _getentropy_fail() {
raise(SIGKILL);
@@ -188,7 +184,6 @@ pub unsafe fn _getentropy_fail() {
//function _rs_forkdetect
static mut wipeonfork: libc::c_int = 0;
-use libc::getpid;
static mut _rs_forked: __sig_atomic_t = 0;
pub unsafe fn _rs_forkdetect() {
if wipeonfork == 0 {
@@ -212,11 +207,16 @@ pub unsafe fn _rs_forkdetect() {
pub const PROT_READ: libc::c_short = 0x1;
pub const PROT_WRITE: libc::c_short = 0x2;
pub const MAP_ANON: libc::c_short = 0x20;
+
+// /* Return value of `mmap' in case of an error. */
+// #define MAP_FAILED ((void *) -1)
pub const MAP_FAILED: libc::c_int = -1;
+
+//#define MAP_PRIVATE 0x02 /* Changes are private. */
pub const MAP_PRIVATE: libc::c_short = 0x02;
+
+//# define MADV_WIPEONFORK 18 /* Zero memory on fork, child only. */
pub const MADV_WIPEONFORK: libc::c_int = 18;
-use libc::madvise;
-use libc::pthread_atfork;
pub unsafe extern "C" fn _rs_forkhandler() {
_rs_forked = 1;
}
@@ -290,12 +290,10 @@ macro_rules! U8TO32_LITTLE {
<< 24 as libc::c_int
}};
}
-
static mut sigma: [libc::c_char; 16] =
unsafe { *::std::mem::transmute::<&[u8; 16], &[libc::c_char; 16]>(b"expand 32-byte k") };
static mut tau: [libc::c_char; 16] =
unsafe { *::std::mem::transmute::<&[u8; 16], &[libc::c_char; 16]>(b"expand 16-byte k") };
-
#[no_mangle]
pub unsafe fn chacha_keysetup(
mut x: *mut chacha_ctx,
@@ -458,6 +456,7 @@ pub unsafe fn chacha_encrypt_bytes(
x13 = j13;
x14 = j14;
x15 = j15;
+
i = 20;
while i > 0 {
QUARTERROUND!(x0, x4, x8, x12);
@@ -486,6 +485,7 @@ pub unsafe fn chacha_encrypt_bytes(
x13 = PLUS!(x13, j13);
x14 = PLUS!(x14, j14);
x15 = PLUS!(x15, j15);
+
//line 185-187
j12 = PLUS!(j12, 1);
if j12 == 0 {
@@ -508,6 +508,7 @@ pub unsafe fn chacha_encrypt_bytes(
U32TO8_LITTLE!(c, x13, 52);
U32TO8_LITTLE!(c, x14, 56);
U32TO8_LITTLE!(c, x15, 60);
+
if bytes <= 64 {
if bytes < 64 {
i = 0;
diff --git a/lib/util/src/closefrom.rs b/lib/util/src/closefrom.rs
index 948b9a6..b7626a7 100644
--- a/lib/util/src/closefrom.rs
+++ b/lib/util/src/closefrom.rs
@@ -5,12 +5,8 @@
*/
#![allow(unused_variables, unused_assignments, clashing_extern_declarations)]
-use crate::arc4random::__off_t;
-use crate::sudo_conf::__ino_t;
-use crate::INT_MAX;
-use libc::dirfd;
-use libc::DIR;
-pub const _SC_OPEN_MAX: i32 = 4;
+
+use crate::common::*;
extern "C" {
fn sysconf(__name: libc::c_int) -> libc::c_long;
@@ -32,13 +28,6 @@ fn closefrom_fallback(lowfd: libc::c_int) {
let mut _fd: libc::c_long = 0;
let mut maxfd: libc::c_long;
- #[macro_export]
- macro_rules! _POSIX_OPEN_MAX {
- () => {
- 20
- };
- }
-
maxfd = unsafe { sysconf(_SC_OPEN_MAX) };
if maxfd < 0 {
@@ -52,15 +41,6 @@ fn closefrom_fallback(lowfd: libc::c_int) {
}
}
-#[repr(C)]
-pub struct dirent {
- pub d_ino: __ino_t,
- pub d_off: __off_t,
- pub d_reclen: libc::c_short,
- pub d_type: libc::c_char,
- pub d_name: [libc::c_char; 256],
-}
-
#[no_mangle]
fn sudo_closefrom(lowfd: libc::c_int) {
let path: *const libc::c_char;
diff --git a/lib/util/src/common.rs b/lib/util/src/common.rs
new file mode 100644
index 0000000..7756029
--- /dev/null
+++ b/lib/util/src/common.rs
@@ -0,0 +1,1631 @@
+/*
+ * SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+ *
+ * SPDX-License-Identifier: MulanPSL-2.0
+ */
+
+#![allow(
+ non_camel_case_types,
+ non_snake_case,
+ non_upper_case_globals,
+ unused_macros,
+ dead_code
+)]
+
+//////////// 调用其它模块中接口
+pub use crate::sudo_debug::*;
+pub use libc::abort;
+pub use libc::dirfd;
+pub use libc::free;
+pub use libc::getpid;
+pub use libc::madvise;
+pub use libc::malloc;
+pub use libc::pthread_atfork;
+pub use libc::raise;
+pub use libc::DIR;
+pub use std::ffi::CStr;
+pub use std::ffi::CString;
+pub use std::string::String;
+
+//////////// 调用第三方库函数
+
+//////////// 定义类型
+pub type nfds_t = libc::c_ulong;
+pub type pid_t = __pid_t;
+pub type size_t = libc::c_ulong;
+pub type __off_t = libc::c_long;
+pub type __ino_t = libc::c_ulong;
+pub type __uint64_t = libc::c_ulong;
+pub type uint64_t = __uint64_t;
+pub type __uint32_t = libc::c_uint;
+pub type uint32_t = __uint64_t;
+pub type __uint8_t = libc::c_uchar;
+pub type uint8_t = __uint8_t;
+pub type __time_t = libc::c_long;
+pub type __syscall_slong_t = libc::c_long;
+pub type __dev_t = libc::c_ulong;
+pub type dev_t = __dev_t;
+pub type __uid_t = libc::c_uint;
+pub type __gid_t = libc::c_uint;
+pub type __mode_t = libc::c_uint;
+
+#[cfg(target_arch = "x86_64")]
+pub type __nlink_t = libc::c_ulong;
+#[cfg(not(target_arch = "x86_64"))]
+pub type __nlink_t = libc::c_uint;
+
+#[cfg(target_arch = "x86_64")]
+pub type __blksize_t = libc::c_long;
+#[cfg(not(target_arch = "x86_64"))]
+pub type __blksize_t = libc::c_int;
+
+pub type __off64_t = libc::c_long;
+pub type __blkcnt_t = libc::c_long;
+pub type __ssize_t = libc::c_long;
+pub type gid_t = __gid_t;
+pub type uid_t = __uid_t;
+pub type ssize_t = __ssize_t;
+pub type __pid_t = libc::c_int;
+pub type __clock_t = libc::c_long;
+pub type __suseconds_t = libc::c_long;
+pub type __sig_atomic_t = libc::c_int;
+pub type sig_atomic_t = __sig_atomic_t;
+pub type time_t = __time_t;
+pub type __id_t = libc::c_uint;
+pub type id_t = __id_t;
+pub type __clockid_t = libc::c_int;
+pub type clockid_t = __clockid_t;
+pub type off_t = __off_t;
+pub type __int32_t = libc::c_int;
+pub type FILE = _IO_FILE;
+pub type u8 = libc::c_uchar;
+pub type u32 = libc::c_uint;
+pub type mode_t = __mode_t;
+pub type in_addr_t = libc::c_uint;
+pub type _IO_lock_t = ();
+
+pub type sudo_conv_callback_fn_t =
+ Option<unsafe extern "C" fn(libc::c_int, *mut libc::c_void) -> libc::c_int>;
+
+pub type sudo_conv_t = Option<
+ unsafe extern "C" fn(
+ libc::c_int,
+ *const sudo_conv_message,
+ *mut sudo_conv_reply,
+ *mut sudo_conv_callback,
+ ) -> libc::c_int,
+>;
+
+pub type sudo_hook_fn_t = Option<unsafe extern "C" fn() -> libc::c_int>;
+
+pub type sudo_printf_t =
+ Option<unsafe extern "C" fn(libc::c_int, *const libc::c_char, ...) -> libc::c_int>;
+
+pub type sudo_fatal_callback_t = Option<unsafe extern "C" fn()>;
+
+//////////// 定义静态变量值
+pub const EINVAL: libc::c_int = 22;
+pub const SHA512_BLOCK_LENGTH: usize = 128;
+pub const __SIGRTMIN: libc::c_uint = 64;
+pub const NSIG: libc::c_uint = __SIGRTMIN + 1;
+pub const _SC_NGROUPS_MAX: libc::c_uint = 3;
+pub const _SC_OPEN_MAX: i32 = 4;
+pub const SIZE_MAX: libc::c_ulong = 18446744073709551615;
+pub const RSIZE_MAX: libc::c_ulong = SIZE_MAX >> 1;
+pub const NGROUPS_MAX: libc::c_uint = 65536;
+pub const SUDO_PATH_SECURE: libc::c_int = 0;
+pub const SUDO_PATH_MISSING: libc::c_int = -1;
+pub const SUDO_PATH_BAD_TYPE: libc::c_int = -2;
+pub const SUDO_PATH_WRONG_OWNER: libc::c_int = -3;
+pub const SUDO_PATH_WORLD_WRITABLE: libc::c_int = -4;
+pub const SUDO_PATH_GROUP_WRITABLE: libc::c_int = -5;
+pub const ENOENT: libc::c_int = 2;
+pub const _SC_RTSIG_MAX: libc::c_int = 31;
+pub const _ISdigit: libc::c_uint = 2048;
+pub const ERANGE: libc::c_int = 34;
+pub const _ISspace: libc::c_uint = 8192;
+pub const SUDO_DEBUG_CRIT: libc::c_int = 1;
+pub const SUDO_DEBUG_ERROR: libc::c_int = 2;
+pub const SUDO_DEBUG_WARN: libc::c_int = 3;
+pub const SUDO_DEBUG_NOTICE: libc::c_int = 4;
+pub const SUDO_DEBUG_DIAG: libc::c_int = 5;
+pub const SUDO_DEBUG_INFO: libc::c_int = 6;
+pub const SUDO_DEBUG_TRACE: libc::c_int = 7;
+pub const SUDO_DEBUG_DEBUG: libc::c_int = 8;
+pub const SUDO_DEBUG_ERRNO: libc::c_int = 1 << 4;
+pub const SUDO_DEBUG_LINENO: libc::c_int = 1 << 5;
+pub const SUDO_DEBUG_ARGS: libc::c_int = 1 << 6;
+pub const SUDO_DEBUG_CONV: libc::c_int = 2 << 6;
+pub const SUDO_DEBUG_EDIT: libc::c_int = 3 << 6;
+pub const SUDO_DEBUG_EVENT: libc::c_int = 4 << 6;
+pub const SUDO_DEBUG_EXEC: libc::c_int = 5 << 6;
+pub const SUDO_DEBUG_HOOKS: libc::c_int = 6 << 6;
+pub const SUDO_DEBUG_MAIN: libc::c_int = 7 << 6;
+pub const SUDO_DEBUG_NETIF: libc::c_int = 8 << 6;
+pub const SUDO_DEBUG_PCOMM: libc::c_int = 9 << 6;
+pub const SUDO_DEBUG_PLUGIN: libc::c_int = 10 << 6;
+pub const SUDO_DEBUG_PTY: libc::c_int = 11 << 6;
+pub const SUDO_DEBUG_SELINUX: libc::c_int = 12 << 6;
+pub const SUDO_DEBUG_UTIL: libc::c_int = 13 << 6;
+pub const SUDO_DEBUG_UTMP: libc::c_int = 14 << 6;
+pub const SUDO_DEBUG_INSTANCE_ERROR: libc::c_int = -2;
+pub const SUDO_DEBUG_INSTANCE_INITIALIZER: libc::c_int = -1;
+pub const ROOT_UID: libc::c_int = 0 as libc::c_int;
+pub const GROUP_API_VERSION_MAJOR: libc::c_int = 1 as libc::c_int;
+pub const GROUP_API_VERSION_MINOR: libc::c_int = 0 as libc::c_int;
+pub const SUDO_CONV_PROMPT_ECHO_OFF: libc::c_int = 0x0001;
+pub const SUDO_CONV_PROMPT_ECHO_ON: libc::c_int = 0x0002;
+pub const SUDO_CONV_ERROR_MSG: libc::c_int = 0x0003;
+pub const SUDO_CONV_INFO_MSG: libc::c_int = 0x0004;
+pub const SUDO_CONV_PROMPT_MASK: libc::c_int = 0x0005;
+pub const SUDO_CONV_PROMPT_ECHO_OK: libc::c_int = 0x1000;
+pub const SUDO_CONV_PREFER_TTY: libc::c_int = 0x2000;
+pub const EOF: libc::c_int = -1;
+pub const EPROTONOSUPPORT: libc::c_int = 93;
+pub const EAFNOSUPPORT: libc::c_int = 97;
+pub const AUDIT_NOT_CONFIGURED: libc::c_int = -2;
+pub const AUDIT_USER_CMD: libc::c_int = 1123;
+pub const ECONNREFUSED: libc::c_int = 111;
+pub const F_SETFD: libc::c_int = 2;
+pub const FD_CLOEXEC: libc::c_int = 1;
+pub const LC_ALL: libc::c_int = 6;
+
+pub static mut sudo_debug_subsys: libc::c_int = 0 as libc::c_int;
+
+pub const MODE_EDIT: libc::c_int = 0x00000002; // 2
+pub const MODE_LOGIN_SHELL: libc::c_int = 0x00040000;
+pub const MODE_BACKGROUND: libc::c_int = 0x00010000;
+pub const MODE_SHELL: libc::c_int = 0x00020000;
+pub const MODE_IMPLIED_SHELL: libc::c_int = 0x00080000;
+pub const MODE_RESET_HOME: libc::c_int = 0x00100000;
+pub const MODE_PRESERVE_GROUPS: libc::c_int = 0x00200000;
+pub const MODE_PRESERVE_ENV: libc::c_int = 0x00400000;
+pub const MODE_NONINTERACTIVE: libc::c_int = 0x00800000;
+pub const MODE_LONG_LIST: libc::c_int = 0x01000000;
+
+pub const SUDO_HOOK_VERSION_MAJOR: libc::c_uint = 1;
+pub const SUDO_HOOK_VERSION_MINOR: libc::c_uint = 0;
+
+pub const SUDO_HOOK_SETENV: libc::c_uint = 1;
+pub const SUDO_HOOK_UNSETENV: libc::c_uint = 2;
+pub const SUDO_HOOK_PUTENV: libc::c_uint = 3;
+pub const SUDO_HOOK_GETENV: libc::c_uint = 4;
+
+pub const SUDOERS_GRAMMAR_VERSION: libc::c_int = 5;
+// #define SUDOERS_GRAMMAR_VERSION 46
+
+pub const MODE_RUN: libc::c_int = 0x00000001; // 1
+pub const MODE_VALIDATE: libc::c_int = 0x00000004; // 4
+pub const MODE_INVALIDATE: libc::c_int = 0x00000008; // 8
+pub const MODE_KILL: libc::c_int = 0x00000010; // 16
+pub const MODE_VERSION: libc::c_int = 0x00000020; // 32
+pub const MODE_HELP: libc::c_int = 0x00000040; // 64
+pub const MODE_LIST: libc::c_int = 0x00000080; // 128
+pub const MODE_CHECK: libc::c_int = 0x00000100; // 256
+pub const MODE_MASK: libc::c_int = 0x0000ffff; // 65535
+
+pub const MAX_UID_T_LEN: libc::c_int = 10;
+
+pub const SUDO_API_VERSION_MAJOR: libc::c_int = 1;
+pub const SUDO_API_VERSION_MINOR: libc::c_int = 13;
+pub const SUDO_DSO_DEFAULT: *mut libc::c_void = -(2 as libc::c_int) as *mut libc::c_void;
+
+pub const ELOOP: libc::c_int = 40;
+pub const O_RDONLY: libc::c_int = 0o0;
+pub const O_RDWR: libc::c_int = 0o2;
+pub const O_CREAT: libc::c_int = 0o100;
+pub const EAGAIN: libc::c_int = 11;
+pub const EWOULDBLOCK: libc::c_int = 11;
+pub const S_ISVTX: libc::c_int = 0o1000;
+pub const S_ISGID: libc::c_int = 0o2000;
+pub const S_ISUID: libc::c_int = 0o4000;
+
+//#define SEEK_SET 0 /* Seek from beginning of file. */
+//#define SEEK_END 2 /* Seek from end of file. */
+pub const SEEK_SET: libc::c_int = 0;
+pub const SEEK_END: libc::c_int = 2;
+
+pub const __S_IREAD: libc::c_int = 0o400;
+pub const __S_IWRITE: libc::c_int = 0o200;
+pub const __S_IEXEC: libc::c_int = 0o100;
+pub const S_IRWXU: libc::c_int = __S_IREAD | __S_IWRITE | __S_IEXEC;
+pub const S_IXUSR: libc::c_int = 0o100;
+pub const S_IXGRP: libc::c_int = S_IXUSR >> 3;
+pub const S_IXOTH: libc::c_int = S_IXGRP >> 3;
+
+pub const S_IRWXG: libc::c_int = S_IRWXU >> 3;
+pub const S_IRWXO: libc::c_int = S_IRWXG >> 3;
+pub const S_IREAD: libc::c_int = 0o400;
+pub const S_IWRITE: libc::c_int = 0o200;
+
+pub const SIG2STR_MAX: libc::c_int = 32;
+pub const SIGALRM: libc::c_int = 14;
+pub const SIGBUS: libc::c_int = 10;
+pub const SIGCHLD: libc::c_int = 17;
+pub const SIGCONT: libc::c_int = 18;
+pub const SIGCONT_BG: libc::c_int = -3;
+pub const SIGCONT_FG: libc::c_int = -2;
+pub const SIGHUP: libc::c_int = 1;
+pub const SIGINT: libc::c_int = 2;
+pub const SIGKILL: libc::c_int = 9;
+pub const SIGPIPE: libc::c_int = 13;
+pub const SIGQUIT: libc::c_int = 3;
+pub const SIGSTOP: libc::c_int = 19;
+pub const SIGSYS: libc::c_int = 12;
+pub const SIGTERM: libc::c_int = 15;
+pub const SIGTRAP: libc::c_int = 5;
+pub const SIGTSTP: libc::c_int = 18;
+pub const SIGTTIN: libc::c_int = 21;
+pub const SIGTTOU: libc::c_int = 22;
+pub const SIGUSR1: libc::c_int = 10;
+pub const SIGUSR2: libc::c_int = 12;
+pub const SIGWINCH: libc::c_int = 28;
+pub const SIG_BLOCK: libc::c_int = 0;
+pub const SIG_SETMAS: libc::c_int = 2;
+pub const SIG_SETMASK: libc::c_int = 2;
+pub const SIG_UNBLOCK: libc::c_int = 1;
+pub const SA_RESTART: libc::c_int = 0x10000000;
+pub const EINTR: libc::c_int = 4;
+pub const SUDO_CONF_DEBUG: libc::c_int = 0x01;
+pub const SUDO_CONF_PLUGINS: libc::c_int = 0x04;
+
+// # define AT_FDCWD -100
+pub const AT_FDCWD: libc::c_int = -100;
+
+pub const EACCES: libc::c_int = 13;
+pub const ENOTDIR: libc::c_int = 20;
+pub const SUDO_LOCK: libc::c_int = 1;
+pub const SUDO_TLOCK: libc::c_int = 2;
+pub const SUDO_UNLOCK: libc::c_int = 4;
+pub const SUDO_CONV_REPL_MAX: libc::c_int = 255;
+
+//#define __S_IFIFO 0010000 /* FIFO. */
+pub const __S_IFIFO: libc::c_int = 0o010000;
+pub const _ISblank: libc::c_int = 1;
+
+//////////// 定义宏
+#[macro_export]
+macro_rules! SUDO_API_VERSION {
+ () => {
+ SUDO_API_MKVERSION!(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR)
+ };
+}
+
+#[macro_export]
+macro_rules! INT_MAX {
+ () => {
+ 0x7fffffff
+ };
+}
+
+#[macro_export]
+macro_rules! _S_IFMT {
+ () => {
+ 0o170000
+ };
+}
+
+#[macro_export]
+macro_rules! S_IWUSR {
+ () => {
+ 0o200
+ };
+}
+// #define S_IWGRP (S_IWUSR >> 3) /* Write by group. */
+#[macro_export]
+macro_rules! S_IWGRP {
+ () => {
+ S_IWUSR!() >> 3
+ };
+}
+
+// #define S_IWOTH (S_IWGRP >> 3) /* Write by others. */
+#[macro_export]
+macro_rules! S_IWOTH {
+ () => {
+ S_IWGRP!() >> 3
+ };
+}
+
+// #define ISSET(t, f) ((t) & (f))
+#[macro_export]
+macro_rules! ISSET {
+ ($_t:expr, $_f:expr) => {
+ (($_t) & ($_f))
+ };
+}
+
+/* Extract subsystem number and convert to an index. */
+// #define SUDO_DEBUG_SUBSYS(n) (((n) >> 6) - 1)
+#[macro_export]
+macro_rules! SUDO_DEBUG_SUBSYS {
+ ($_n:expr) => {
+ ((($_n) >> 6) - 1)
+ };
+}
+
+/* Extract priority number and convert to an index. */
+// #define SUDO_DEBUG_PRI(n) (((n) & 0x0f) - 1)
+#[macro_export]
+macro_rules! SUDO_DEBUG_PRI {
+ ($_n:expr) => {
+ ((($_n) & 0x0f) - 1)
+ };
+}
+
+// #define TIOCGWINSZ 0x5413
+#[macro_export]
+macro_rules! TIOCGWINSZ {
+ () => {
+ 0x5413
+ };
+}
+
+#[macro_export]
+macro_rules! _POSIX_OPEN_MAX {
+ () => {
+ 20
+ };
+}
+
+// #define __S_IFREG 0100000 /* Regular file. */
+#[macro_export]
+macro_rules! _S_IFREG {
+ () => {
+ 0o100000
+ };
+}
+
+// #define __S_IFDIR 0040000 /* Directory. */
+#[macro_export]
+macro_rules! _S_IFDIR {
+ () => {
+ 0o40000
+ };
+}
+
+// #define INT_MIN (-__INT_MAX__ - 1)
+#[macro_export]
+macro_rules! INT_MIN {
+ () => {
+ (-(INT_MAX!()) - 1)
+ };
+}
+
+// #define UINT_MAX (__INT_MAX__ * 2U + 1U)
+#[macro_export]
+macro_rules! UINT_MAX {
+ () => {
+ ((INT_MAX!()) * (2 as libc::c_uint) + 1 as libc::c_uint)
+ };
+}
+
+// #define isblank(c) __isctype((c), _ISblank)
+#[macro_export]
+macro_rules! isblank {
+ ($c:expr) => {
+ __isctype!($c, _ISblank)
+ };
+}
+
+// # define __isctype(c, type) ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
+#[macro_export]
+macro_rules! __isctype {
+ ($c:expr, $type:expr) => {
+ (*(*__ctype_b_loc()).offset($c as isize) as libc::c_int)
+ & ($type as libc::c_int as libc::c_ushort as libc::c_int)
+ };
+}
+
+// define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
+// _ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
+#[macro_export]
+macro_rules! _ISbit {
+ ($bit:expr) => {
+ if ($bit) < 8 {
+ ((1 << ($bit)) << 8)
+ } else {
+ ((1 << ($bit)) >> 8)
+ }
+ };
+}
+
+#[macro_export]
+macro_rules! _ISblank {
+ () => {
+ _ISbit!(8)
+ };
+}
+
+macro_rules! SUDO_DEBUG_ALL {
+ /* all subsystems */
+ () => {
+ 0xffff0000
+ };
+}
+
+#[macro_export]
+macro_rules! debug_decl_func {
+ ($funcname:expr) => {};
+}
+
+#[macro_export]
+macro_rules! debug_decl_vars {
+ ($subsys:expr) => {
+ sudo_debug_subsys = $subsys
+ };
+}
+
+#[macro_export]
+macro_rules! debug_decl {
+ ($subsys:expr) => {
+ debug_decl_vars!($subsys);
+ sudo_debug_enter_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ );
+ };
+}
+
+#[macro_export]
+macro_rules! debug_return_int {
+ ($ret:expr) => {{
+ let mut tmp_var: libc::c_int = $ret as libc::c_int;
+ sudo_debug_exit_int_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ tmp_var,
+ );
+ return tmp_var;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_id_t {
+ ($ret:expr) => {{
+ sudo_debug_exit_id_t_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret,
+ );
+ return $ret;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_size_t {
+ ($ret:expr) => {
+ sudo_debug_exit_size_t_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret,
+ );
+ return $ret;
+ };
+}
+
+#[macro_export]
+macro_rules! debug_return_ssize_t {
+ ($ret:expr) => {{
+ sudo_debug_exit_ssize_t_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret,
+ );
+ return $ret;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_time_t {
+ ($ret:expr) => {{
+ sudo_debug_exit_time_t_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret,
+ );
+ return $ret;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_long {
+ ($ret:expr) => {
+ sudo_debug_exit_long(
+ get_function_name!(),
+ get_file_name!(),
+ line!(),
+ sudo_debug_subsys,
+ $ret,
+ );
+ return $ret;
+ };
+}
+
+#[macro_export]
+macro_rules! debug_return_bool {
+ ($ret:expr) => {{
+ let mut tmp_var: bool = $ret as bool;
+ sudo_debug_exit_bool_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ tmp_var,
+ );
+ return tmp_var;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_str {
+ ($ret:expr) => {{
+ sudo_debug_exit_str_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret,
+ );
+ return $ret;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_const_str {
+ ($ret:expr) => {{
+ sudo_debug_exit_str_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret as *const libc::c_char,
+ );
+ return $ret as *const libc::c_char;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_str_masked {
+ ($ret:expr) => {{
+ sudo_debug_exit_str_masked_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret,
+ );
+ return $ret;
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return_ptr {
+ ($ret:expr) => {{
+ sudo_debug_exit_ptr_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret as *const libc::c_void,
+ );
+ return $ret;
+ }};
+}
+
+macro_rules! debug_return_const_ptr {
+ ($ret:expr) => {{
+ sudo_debug_exit_ptr_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ $ret as *const libc::c_void,
+ );
+ return $ret;
+ }};
+}
+
+#[macro_export]
+macro_rules! sudo_debug_execve {
+ ($pri:expr, $path:expr, $argv:expr, $envp:expr) => {{
+ sudo_debug_execve2_v1(
+ $pri | sudo_debug_subsys as libc::c_int,
+ $path as *const libc::c_char,
+ $argv as *const *mut libc::c_char,
+ $envp as *const *mut libc::c_char,
+ );
+ }};
+}
+
+// #define sudo_debug_write(fd, str, len, errnum) \
+// sudo_debug_write2(fd, NULL, NULL, 0, (str), (len), (errnum))
+
+macro_rules! sudo_debug_write {
+ ($fd:expr, $str:expr, $len:expr, $errnum:expr) => {{
+ sudo_debug_write2_v1(
+ $fd as libc::c_int,
+ 0 as *const libc::c_char,
+ 0 as *const libc::c_char,
+ 0 as libc::c_int,
+ $str as *const libc::c_char,
+ $len as libc::c_int,
+ $errnum as libc::c_int,
+ );
+ }};
+}
+
+// # define sudo_debug_printf(pri, ...) \
+// sudo_debug_printf2(__func__, __FILE__, __LINE__, (pri)|sudo_debug_subsys, \
+// __VA_ARGS__)
+// #endif
+#[macro_export]
+macro_rules! sudo_debug_printf {
+ ($pri:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ ($pri | sudo_debug_subsys) as libc::c_int,
+ $($arg)*,
+ );
+ }};
+}
+
+#[macro_export]
+macro_rules! debug_return {
+ () => {{
+ sudo_debug_exit_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ sudo_debug_subsys as libc::c_int,
+ );
+ return;
+ }};
+}
+
+// # define sudo_warn(fmt...) do { \
+// sudo_debug_printf2(__func__, __FILE__, __LINE__, \
+// SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO|sudo_debug_subsys, \
+// fmt); \
+// sudo_warn_nodebug_v1(fmt);
+// } while (0)
+#[macro_export]
+macro_rules! sudo_warn {
+ ($fmt:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO|sudo_debug_subsys,
+ $fmt,
+ $($arg)*
+ );
+ sudo_warn_nodebug_v1($fmt, $($arg)*);
+ }};
+}
+
+// sudo_warnx(fmt...) do { \
+// sudo_debug_printf2(__func__, __FILE__, __LINE__, \
+// SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|sudo_debug_subsys, fmt); \
+// sudo_warnx_nodebug_v1(fmt);
+// } while (0)
+#[macro_export]
+macro_rules! sudo_warnx {
+ ($fmt:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|sudo_debug_subsys,
+ $fmt,
+ $($arg)*
+ );
+ sudo_warnx_nodebug_v1(
+ $fmt,
+ $($arg)*
+ );
+ }};
+}
+
+// # define sudo_fatalx(fmt...) do { \
+// sudo_debug_printf2(__func__, __FILE__, __LINE__, \
+// SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|sudo_debug_subsys, fmt); \
+// sudo_fatalx_nodebug_v1(fmt); \
+// } while (0)
+#[macro_export]
+macro_rules! sudo_fatalx {
+ ($fmt:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|sudo_debug_subsys,
+ $fmt,
+ $($arg)*
+ );
+ sudo_fatalx_nodebug_v1(
+ $fmt,
+ $($arg)*
+ );
+ }};
+}
+
+// # define sudo_fatal(fmt...) do { \
+// sudo_debug_printf2(__func__, __FILE__, __LINE__, \
+// SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO|sudo_debug_subsys, \
+// fmt); \
+// sudo_fatal_nodebug_v1(fmt);
+// } while (0)
+#[macro_export]
+macro_rules! sudo_fatal {
+ ($fmt:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO|sudo_debug_subsys,
+ $fmt,
+ $($arg)*
+ );
+ sudo_fatal_nodebug_v1($fmt, $($arg)*);
+ }};
+}
+
+// #define CLR(t, f) ((t) &= ~(f))
+#[macro_export]
+macro_rules! CLR {
+ ($t:expr, $f:expr) => {
+ (($t) &= !($f))
+ };
+}
+
+// #define SET(t, f) ((t) |= (f))
+#[macro_export]
+macro_rules! SET {
+ ($t:expr, $f:expr) => {
+ (($t) |= ($f))
+ };
+}
+
+/* Standard file descriptors. */
+// #define STDERR_FILENO 2 /* Standard error output. */
+#[macro_export]
+macro_rules! STDERR_FILENO {
+ () => {
+ 2
+ };
+}
+
+// #define SIGRTMIN (__libc_current_sigrtmin ())
+#[macro_export]
+macro_rules! SIGRTMIN {
+ () => {
+ (__libc_current_sigrtmin())
+ };
+}
+
+// #define SIGRTMAX (__libc_current_sigrtmax ())
+#[macro_export]
+macro_rules! SIGRTMAX {
+ () => {
+ (__libc_current_sigrtmax())
+ };
+}
+
+/* Values for sudo_dso_load() mode. */
+// #define SUDO_DSO_LAZY 0x1
+// #define SUDO_DSO_NOW 0x2
+// #define SUDO_DSO_GLOBAL 0x4
+// #define SUDO_DSO_LOCAL 0x8
+#[macro_export]
+macro_rules! SUDO_DSO_LAZY {
+ () => {
+ 0x1
+ };
+}
+
+#[macro_export]
+macro_rules! SUDO_DSO_NOW {
+ () => {
+ 0x2
+ };
+}
+
+#[macro_export]
+macro_rules! SUDO_DSO_GLOBAL {
+ () => {
+ 0x4
+ };
+}
+
+#[macro_export]
+macro_rules! SUDO_DSO_LOCAL {
+ () => {
+ 0x8
+ };
+}
+
+/* Getters and setters for plugin API versions */
+// #define SUDO_API_VERSION_GET_MAJOR(v) ((v) >> 16)
+// #define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffffU)
+#[macro_export]
+macro_rules! SUDO_API_VERSION_GET_MAJOR {
+ ($v:expr) => {
+ (($v) >> 16)
+ };
+}
+
+// #define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffffU)
+#[macro_export]
+macro_rules! SUDO_API_VERSION_GET_MINOR {
+ ($v:expr) => {
+ (($v) & 0xffff)
+ };
+}
+
+#[macro_export]
+macro_rules! SUDO_API_MKVERSION {
+ ($x: expr, $y: expr) => {
+ ((($x) << 16) | ($y))
+ };
+}
+
+// #define GROUP_API_VERSION SUDO_API_MKVERSION(GROUP_API_VERSION_MAJOR, GROUP_API_VERSION_MINOR)
+#[macro_export]
+macro_rules! GROUP_API_VERSION {
+ () => {
+ (SUDO_API_MKVERSION!(GROUP_API_VERSION_MAJOR, GROUP_API_VERSION_MINOR))
+ };
+}
+
+// #define _PATH_DEV "/dev/"
+#[macro_export]
+macro_rules! _PATH_DEV {
+ () => {
+ b"/dev/\0" as *const u8 as *const libc::c_char
+ };
+}
+
+#[macro_export]
+macro_rules! SUDO_HOOK_VERSION {
+ () => {
+ SUDO_API_MKVERSION!(SUDO_HOOK_VERSION_MAJOR, SUDO_HOOK_VERSION_MINOR)
+ };
+}
+
+/* Define to the version of this package. */
+// #define PACKAGE_VERSION "0.0.5"
+#[macro_export]
+macro_rules! PACKAGE_VERSION {
+ () => {
+ (b"0.0.5\0" as *const u8 as *const libc::c_char)
+ };
+}
+
+// # define _PATH_NSSWITCH_CONF "/etc/nsswitch.conf"
+#[macro_export]
+macro_rules! _PATH_NSSWITCH_CONF {
+ () => {
+ (b"/etc/nsswitch.conf\0" as *const u8 as *const libc::c_char)
+ };
+}
+
+#[macro_export]
+macro_rules! ACCESSPERMS {
+ () => {
+ (S_IRWXU | S_IRWXG | S_IRWXO)
+ };
+}
+
+#[macro_export]
+macro_rules! ALLPERMS {
+ () => {
+ (S_ISUID as libc::c_int
+ | S_ISGID as libc::c_int
+ | S_ISVTX as libc::c_int
+ | S_IRWXU as libc::c_int
+ | S_IRWXG as libc::c_int
+ | S_IRWXO as libc::c_int)
+ };
+}
+
+#[macro_export]
+macro_rules! USER_SIGNALED {
+ ($_info:expr) => {
+ (!($_info).is_null() && (*($_info)).si_code == SI_USER)
+ };
+}
+#[macro_export]
+macro_rules! WIFSTOPPED {
+ ($status:expr) => {
+ ($status & 0xff == 0x7f)
+ };
+}
+#[macro_export]
+macro_rules! WIFSIGNALED {
+ ($status:expr) => {
+ (((($status & 0x7f) + 1) >> 1) > 0)
+ };
+}
+#[macro_export]
+macro_rules! WEXITSTATUS {
+ ($status:expr) => {
+ ((($status) & 0xff00) >> 8)
+ };
+}
+#[macro_export]
+macro_rules! WSTOPSIG {
+ ($status:expr) => {
+ ((($status) & 0xff00) >> 8)
+ };
+}
+#[macro_export]
+macro_rules! WTERMSIG {
+ ($status:expr) => {
+ ($status & 0x7f)
+ };
+}
+#[macro_export]
+macro_rules! WIFEXITED {
+ ($status: expr) => {
+ (WTERMSIG!($status) == 0)
+ };
+}
+// #define S_IFMT 00170000
+#[macro_export]
+macro_rules! S_IFMT {
+ () => {
+ 0o0170000
+ };
+}
+// #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask))
+#[macro_export]
+macro_rules! __S_ISTYPE {
+ ($mode:expr, $mask:expr) => {
+ ((($mode) & S_IFMT!()) == ($mask))
+ };
+}
+#[macro_export]
+macro_rules! S_ISFIFO {
+ ($mode: expr) => {
+ __S_ISTYPE!(($mode), __S_IFIFO as libc::c_uint)
+ };
+}
+
+#[macro_export]
+macro_rules! S_IRUSR {
+ () => {
+ 0o400
+ };
+}
+
+// # define S_IRGRP (S_IRUSR >> 3) /* Read by group. */
+#[macro_export]
+macro_rules! S_IRGRP {
+ () => {
+ (S_IRUSR!() >> 3)
+ };
+}
+
+// #define _PATH_TTY "/dev/tty"
+#[macro_export]
+macro_rules! _PATH_TTY {
+ () => {
+ b"/dev/tty\0" as *const u8 as *const libc::c_char
+ };
+}
+#[macro_export]
+macro_rules! get_file_name {
+ () => {
+ CString::new(file!()).unwrap().as_bytes_with_nul().as_ptr() as *const libc::c_char
+ };
+}
+
+#[macro_export]
+macro_rules! get_function_name {
+ () => {
+ CString::new(stdext::function_name!())
+ .unwrap()
+ .as_bytes_with_nul()
+ .as_ptr() as *const libc::c_char
+ };
+}
+
+//////////// 定义结构体值
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct pollfd {
+ pub fd: libc::c_int,
+ pub events: libc::c_short,
+ pub revents: libc::c_short,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct timespec {
+ pub tv_sec: __time_t,
+ pub tv_nsec: __syscall_slong_t,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct SHA2_CTX {
+ pub state: state,
+ pub count: [uint64_t; 2],
+ pub buffer: [uint8_t; SHA512_BLOCK_LENGTH],
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub union state {
+ pub st32: [uint32_t; 8],
+ pub st64: [uint64_t; 8],
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_event {
+ pub entries: TAILQ_ENTRY_sudo_event,
+ pub active_entries: TAILQ_ENTRY_active_entries,
+ pub timeouts_entries: TAILQ_ENTRY_timeouts_entries,
+ pub base: *mut sudo_event_base,
+ pub fd: libc::c_int,
+ pub events: libc::c_short,
+ pub revents: libc::c_short,
+ pub flags: libc::c_short,
+ pub pfd_idx: libc::c_short,
+ pub callback: sudo_ev_callback_t,
+ pub timeout: timespec,
+ pub closure: *mut libc::c_void,
+}
+pub type sudo_ev_callback_t =
+ Option<unsafe extern "C" fn(libc::c_int, libc::c_int, *mut libc::c_void) -> ()>;
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct TAILQ_ENTRY_sudo_event {
+ pub tqe_next: *mut sudo_event,
+ pub tqe_prev: *mut *mut sudo_event,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct TAILQ_ENTRY_active_entries {
+ pub tqe_next: *mut sudo_event,
+ pub tqe_prev: *mut *mut sudo_event,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct TAILQ_ENTRY_timeouts_entries {
+ pub tqe_next: *mut sudo_event,
+ pub tqe_prev: *mut *mut sudo_event,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_event_base {
+ pub events: sudo_event_list,
+ pub active: sudo_event_list,
+ pub timeouts: sudo_event_list,
+ pub signal_event: sudo_event,
+ pub signals: [sudo_event_list; NSIG as usize],
+ pub orig_handlers: [*mut sigaction; NSIG as usize],
+ pub siginfo: [*mut siginfo_t; NSIG as usize],
+ pub signal_pending: [sig_atomic_t; NSIG as usize],
+ pub signal_caught: sig_atomic_t,
+ pub num_handlers: libc::c_int,
+ pub signal_pipe: [libc::c_int; 2],
+ pub pfds: *mut pollfd,
+ pub pfd_max: libc::c_int,
+ pub pfd_high: libc::c_int,
+ pub pfd_free: libc::c_int,
+ pub flags: libc::c_uint,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_event_list {
+ pub tqh_first: *mut sudo_event,
+ pub tqh_last: *mut *mut sudo_event,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sigaction {
+ pub __sigaction_handler: Signal_handler,
+ pub sa_mask: __sigset_t,
+ pub sa_flags: libc::c_int,
+ pub sa_restorer: Option<unsafe extern "C" fn() -> ()>,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct __sigset_t {
+ pub __val: [libc::c_ulong; 16],
+}
+pub type sigset_t = __sigset_t;
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub union Signal_handler {
+ pub sa_handler: __sighandler_t,
+ pub sa_sigaction:
+ Option<unsafe extern "C" fn(libc::c_int, *mut siginfo_t, *mut libc::c_void) -> ()>,
+}
+pub type __sighandler_t = Option<unsafe extern "C" fn(libc::c_int) -> ()>;
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct siginfo_t {
+ pub si_signo: libc::c_int,
+ pub si_errno: libc::c_int,
+ pub si_code: libc::c_int,
+ pub __pad0: libc::c_int,
+ pub _sifields: siginfo_t_u,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub union siginfo_t_u {
+ pub _pad: [libc::c_int; 28],
+ pub _kill: _kill_s,
+ pub _timer: _timer_s,
+ pub _rt: _rt_s,
+ pub _sigchld: _sigchld_s,
+ pub _sigfault: _sigfault_s,
+ pub _sigpoll: _sigpoll_s,
+ pub _sigsys: _sigsys_s,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _kill_s {
+ pub si_pid: __pid_t,
+ pub si_uid: __uid_t,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _timer_s {
+ pub si_tid: libc::c_int,
+ pub si_overrun: libc::c_int,
+ pub si_sigval: __sigval_t,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub union sigval {
+ pub sival_int: libc::c_int,
+ pub sival_ptr: *mut libc::c_void,
+}
+pub type __sigval_t = sigval;
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _rt_s {
+ pub si_pid: __pid_t,
+ pub si_uid: __uid_t,
+ pub si_sigval: __sigval_t,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _sigchld_s {
+ pub si_pid: __pid_t,
+ pub si_uid: __uid_t,
+ pub si_status: libc::c_int,
+ pub si_utime: __clock_t,
+ pub si_stime: __clock_t,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _sigfault_s {
+ pub si_addr: *mut libc::c_void,
+ pub si_addr_lsb: libc::c_short,
+ pub _bounds: _bounds_u,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub union _bounds_u {
+ pub _addr_bnd: _addr_bnd_s,
+ pub _pkey: __uint32_t,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _addr_bnd_s {
+ pub _lower: *mut libc::c_void,
+ pub _upper: *mut libc::c_void,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _sigpoll_s {
+ pub si_band: libc::c_long,
+ pub si_fd: libc::c_int,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _sigsys_s {
+ pub _call_addr: *mut libc::c_void,
+ pub _syscall: libc::c_int,
+ pub _arch: libc::c_uint,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct timeval {
+ pub tv_sec: __time_t,
+ pub tv_usec: __suseconds_t,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct _IO_FILE {
+ pub _flags: libc::c_int,
+ pub _IO_read_ptr: *mut libc::c_char,
+ pub _IO_read_end: *mut libc::c_char,
+ pub _IO_read_base: *mut libc::c_char,
+ pub _IO_write_base: *mut libc::c_char,
+ pub _IO_write_ptr: *mut libc::c_char,
+ pub _IO_write_end: *mut libc::c_char,
+ pub _IO_buf_base: *mut libc::c_char,
+ pub _IO_buf_end: *mut libc::c_char,
+ pub _IO_save_base: *mut libc::c_char,
+ pub _IO_backup_base: *mut libc::c_char,
+ pub _IO_save_end: *mut libc::c_char,
+ pub _markers: *mut _IO_marker,
+ pub _chain: *mut _IO_FILE,
+ pub _fileno: libc::c_int,
+ pub _flags2: libc::c_int,
+ pub _old_offset: __off_t,
+ pub _cur_column: libc::c_ushort,
+ pub _vtable_offset: libc::c_schar,
+ pub _shortbuf: [libc::c_char; 1],
+ pub _lock: *mut libc::c_void,
+ pub _offset: __off64_t,
+ pub _codecvt: *mut _IO_codecvt,
+ pub _wide_data: *mut _IO_wide_data,
+ pub _freeres_list: *mut _IO_FILE,
+ pub _freeres_buf: *mut libc::c_void,
+ pub __pad5: size_t,
+ pub _mode: libc::c_int,
+ pub _unused2: [libc::c_char; 20],
+}
+
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct _IO_marker {
+ _unused: [u8; 0],
+}
+
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct _IO_codecvt {
+ _unused: [u8; 0],
+}
+
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct _IO_wide_data {
+ _unused: [u8; 0],
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct stat {
+ pub st_dev: __dev_t,
+ pub st_ino: __ino_t,
+ #[cfg(target_arch = "x86_64")]
+ pub st_nlink: __nlink_t,
+ pub st_mode: __mode_t,
+ #[cfg(not(target_arch = "x86_64"))]
+ pub st_nlink: __nlink_t,
+ pub st_uid: __uid_t,
+ pub st_gid: __gid_t,
+ #[cfg(target_arch = "x86_64")]
+ pub __pad0: libc::c_int,
+ pub st_rdev: __dev_t,
+ #[cfg(not(target_arch = "x86_64"))]
+ pub __pad1: __dev_t,
+ pub st_size: __off_t,
+ pub st_blksize: __blksize_t,
+ #[cfg(not(target_arch = "x86_64"))]
+ pub __pad2: libc::c_int,
+ pub st_blocks: __blkcnt_t,
+ pub st_atim: timespec,
+ pub st_mtim: timespec,
+ pub st_ctim: timespec,
+ #[cfg(target_arch = "x86_64")]
+ pub __glibc_reserved: [__syscall_slong_t; 3],
+ #[cfg(not(target_arch = "x86_64"))]
+ pub __glibc_reserved: [libc::c_int; 2],
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_debug_file {
+ pub entries: sudo_debug_file_list,
+ pub debug_file: *mut libc::c_char,
+ pub debug_flags: *mut libc::c_char,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_debug_file_list {
+ pub tqe_next: *mut sudo_debug_file,
+ pub tqe_prev: *mut *mut sudo_debug_file,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_conf_debug_file_list {
+ pub tqh_first: *mut sudo_debug_file,
+ pub tqh_last: *mut *mut sudo_debug_file,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct winsize {
+ pub ws_row: libc::c_ushort,
+ pub ws_col: libc::c_ushort,
+ pub ws_xpixel: libc::c_ushort,
+ pub ws_ypixel: libc::c_ushort,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct dirent {
+ pub d_ino: __ino_t,
+ pub d_off: __off_t,
+ pub d_reclen: libc::c_ushort,
+ pub d_type: libc::c_uchar,
+ pub d_name: [libc::c_char; 256],
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub union TMP_T {
+ pub __u6_addr8: [libc::c_uchar; 16],
+ pub __u6_addr16: [libc::c_ushort; 8],
+ pub __u6_addr32: [libc::c_uint; 4],
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct in6_addr {
+ pub __in6_u: TMP_T,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct in_addr {
+ pub s_addr: in_addr_t,
+}
+
+//add by bgz
+//orig_c: DPRINTF1("STRING.....",base);
+#[macro_export]
+macro_rules! dprintf1 {
+ ($fmt:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ (5) | sudo_debug_subsys,
+ $fmt,
+ $($arg)*
+ );
+ if ldap_conf.debug >= 1 {
+ sudo_warnx_nodebug_v1(
+ $fmt,
+ $($arg)*
+ );
+ }
+ }};
+}
+
+//orig_c: DPRINTF2("STRING.....",base);
+#[macro_export]
+macro_rules! dprintf2 {
+ ($fmt:expr, $($arg:tt)*) => {{
+ sudo_debug_printf2_v1(
+ get_function_name!(),
+ get_file_name!(),
+ line!() as libc::c_int,
+ (6) | sudo_debug_subsys,
+ $fmt,
+ $($arg)*
+ );
+ if ldap_conf.debug >= 2 {
+ sudo_warnx_nodebug_v1(
+ $fmt,
+ $($arg)*
+ );
+ }
+ }};
+}
+//end of bgz
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct group {
+ pub gr_name: *mut libc::c_char,
+ pub gr_passwd: *mut libc::c_char,
+ pub gr_gid: __gid_t,
+ pub gr_mem: *mut *mut libc::c_char,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_conv_callback {
+ pub version: libc::c_uint,
+ pub closure: *mut libc::c_void,
+ pub on_suspend: sudo_conv_callback_fn_t,
+ pub on_resume: sudo_conv_callback_fn_t,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct policy_plugin {
+ pub type_0: libc::c_uint,
+ pub version: libc::c_uint,
+ pub open: Option<
+ unsafe extern "C" fn(
+ libc::c_uint,
+ sudo_conv_t,
+ sudo_printf_t,
+ *const *mut libc::c_char,
+ *const *mut libc::c_char,
+ *const *mut libc::c_char,
+ *const *mut libc::c_char,
+ ) -> libc::c_int,
+ >,
+ pub close: Option<unsafe extern "C" fn(libc::c_int, libc::c_int) -> ()>,
+ pub show_version: Option<unsafe extern "C" fn(libc::c_int) -> libc::c_int>,
+ pub check_policy: Option<
+ unsafe extern "C" fn(
+ libc::c_int,
+ *const *mut libc::c_char,
+ *mut *mut libc::c_char,
+ *mut *mut *mut libc::c_char,
+ *mut *mut *mut libc::c_char,
+ *mut *mut *mut libc::c_char,
+ ) -> libc::c_int,
+ >,
+ pub list: Option<
+ unsafe extern "C" fn(
+ libc::c_int,
+ *const *mut libc::c_char,
+ libc::c_int,
+ *const libc::c_char,
+ ) -> libc::c_int,
+ >,
+ pub validate: Option<unsafe extern "C" fn() -> libc::c_int>,
+ pub invalidate: Option<unsafe extern "C" fn(libc::c_int) -> ()>,
+ pub init_session:
+ Option<unsafe extern "C" fn(*mut passwd, *mut *mut *mut libc::c_char) -> libc::c_int>,
+ pub register_hooks: Option<
+ unsafe extern "C" fn(
+ libc::c_int,
+ Option<unsafe extern "C" fn(*mut sudo_hook) -> libc::c_int>,
+ ) -> (),
+ >,
+ pub deregister_hooks: Option<
+ unsafe extern "C" fn(
+ libc::c_int,
+ Option<unsafe extern "C" fn(*mut sudo_hook) -> libc::c_int>,
+ ) -> (),
+ >,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_conv_message {
+ pub msg_type: libc::c_int,
+ pub timeout: libc::c_int,
+ pub msg: *const libc::c_char,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_conv_reply {
+ pub reply: *mut libc::c_char,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct sudo_hook {
+ pub hook_version: libc::c_uint,
+ pub hook_type: libc::c_uint,
+ pub hook_fn: sudo_hook_fn_t,
+ pub closure: *mut libc::c_void,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct passwd {
+ pub pw_name: *mut libc::c_char,
+ pub pw_passwd: *mut libc::c_char,
+ pub pw_uid: __uid_t,
+ pub pw_gid: __gid_t,
+ pub pw_gecos: *mut libc::c_char,
+ pub pw_dir: *mut libc::c_char,
+ pub pw_shell: *mut libc::c_char,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct iovec {
+ pub iov_base: *mut libc::c_void,
+ pub iov_len: size_t,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct plugin_info {
+ pub entries: C2RustUnnamed_1,
+ pub path: *mut libc::c_char,
+ pub symbol_name: *mut libc::c_char,
+ pub options: *mut *mut libc::c_char,
+ pub lineno: libc::c_uint,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct C2RustUnnamed_1 {
+ pub tqe_next: *mut plugin_info,
+ pub tqe_prev: *mut *mut plugin_info,
+}
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct plugin_info_list {
+ pub tqh_first: *mut plugin_info,
+ pub tqh_last: *mut *mut plugin_info,
+}
+
+#[derive(Copy, Clone)]
+#[repr(C)]
+pub struct option {
+ pub name: *const libc::c_char,
+ pub has_arg: libc::c_int,
+ pub flag: *mut libc::c_int,
+ pub val: libc::c_int,
+}
+
+//下面的三个值,只用于初始化变量时调用,不会修改值。
+pub const sb_all_arch: stat = stat {
+ st_dev: 0,
+ st_ino: 0,
+ st_nlink: 0,
+ st_mode: 0,
+ st_uid: 0,
+ st_gid: 0,
+ #[cfg(target_arch = "x86_64")]
+ __pad0: 0,
+ st_rdev: 0,
+ #[cfg(not(target_arch = "x86_64"))]
+ __pad1: 0,
+ st_size: 0,
+ st_blksize: 0,
+ #[cfg(not(target_arch = "x86_64"))]
+ __pad2: 0,
+ st_blocks: 0,
+ st_atim: timespec {
+ tv_sec: 0,
+ tv_nsec: 0,
+ },
+ st_mtim: timespec {
+ tv_sec: 0,
+ tv_nsec: 0,
+ },
+ st_ctim: timespec {
+ tv_sec: 0,
+ tv_nsec: 0,
+ },
+ #[cfg(target_arch = "x86_64")]
+ __glibc_reserved: [0; 3],
+ #[cfg(not(target_arch = "x86_64"))]
+ __glibc_reserved: [0; 2],
+};
+
+#[cfg(target_arch = "x86_64")]
+pub const xstat_flag: libc::c_int = 1;
+
+#[cfg(not(target_arch = "x86_64"))]
+pub const xstat_flag: libc::c_int = 0;
diff --git a/lib/util/src/digest.rs b/lib/util/src/digest.rs
index 4c7edf3..762d88b 100644
--- a/lib/util/src/digest.rs
+++ b/lib/util/src/digest.rs
@@ -13,33 +13,14 @@
unused_assignments
)]
-//call other file's func
-use crate::sha2::sudo_SHA224Final;
-use crate::sha2::sudo_SHA224Init;
-use crate::sha2::sudo_SHA224Update;
-use crate::sha2::sudo_SHA256Final;
-use crate::sha2::sudo_SHA256Init;
-use crate::sha2::sudo_SHA256Update;
-use crate::sha2::sudo_SHA384Final;
-use crate::sha2::sudo_SHA384Init;
-use crate::sha2::sudo_SHA384Update;
-use crate::sha2::sudo_SHA512Final;
-use crate::sha2::sudo_SHA512Init;
-use crate::sha2::sudo_SHA512Update;
-use crate::sha2::SHA2_CTX;
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug::sudo_debug_exit_ptr_v1;
-use crate::sudo_debug::sudo_debug_exit_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-use libc::free;
-use libc::malloc;
-
-pub type size_t = libc::c_ulong;
-pub type uint8_t = libc::c_uchar;
+use crate::common::*;
+use crate::sha2::*;
//define
-pub const EINVAL: libc::c_int = 22;
+//#define SHA224_DIGEST_LENGTH 28
+//#define SHA256_DIGEST_LENGTH 32
+//#define SHA384_DIGEST_LENGTH 48
+//#define SHA512_DIGEST_LENGTH 64
pub const SHA224_DIGEST_LENGTH: libc::c_uint = 28;
pub const SHA256_DIGEST_LENGTH: libc::c_uint = 32;
pub const SHA384_DIGEST_LENGTH: libc::c_uint = 48;
@@ -49,13 +30,14 @@ extern "C" {
fn __errno_location() -> *mut libc::c_int;
}
+//line 55
pub struct digest_function {
pub digest_len: libc::c_uint,
pub init: Option<unsafe extern "C" fn(*mut SHA2_CTX) -> ()>,
pub update: Option<unsafe extern "C" fn(*mut SHA2_CTX, *const libc::c_uchar, size_t) -> ()>,
pub final_0: Option<unsafe extern "C" fn(*mut libc::c_uchar, *mut SHA2_CTX) -> ()>,
}
-
+//line 65-89
static mut digest_functions: [digest_function; 5] = {
[
{
@@ -127,6 +109,7 @@ static mut digest_functions: [digest_function; 5] = {
]
};
+//line91
pub struct sudo_digest {
pub func: *mut digest_function,
pub ctx: SHA2_CTX,
@@ -135,7 +118,7 @@ pub struct sudo_digest {
//line 97
#[no_mangle]
unsafe extern "C" fn sudo_digest_alloc_v1(mut digest_type: libc::c_int) -> *mut sudo_digest {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
//line 100
let mut func: *mut digest_function = 0 as *mut digest_function;
@@ -173,27 +156,30 @@ unsafe extern "C" fn sudo_digest_alloc_v1(mut digest_type: libc::c_int) -> *mut
debug_return_ptr!(dig);
}
+//line124-130
#[no_mangle]
unsafe fn sudo_digest_free_v1(mut dig: *mut sudo_digest) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
free(dig as *mut libc::c_void);
debug_return!()
}
+//line134-140
#[no_mangle]
unsafe fn sudo_digest_reset_v1(mut dig: *mut sudo_digest) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
((*(*dig).func).init).expect("is not func pointer")(&mut (*dig).ctx);
debug_return!()
}
+//line 144-155
#[no_mangle]
unsafe fn sudo_digest_getlen_v1(mut digest_type: libc::c_int) -> libc::c_int {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
let mut i: libc::c_int = 0;
@@ -209,13 +195,14 @@ unsafe fn sudo_digest_getlen_v1(mut digest_type: libc::c_int) -> libc::c_int {
debug_return_int!(-1)
}
+//line 158
#[no_mangle]
unsafe fn sudo_digest_update_v1(
mut dig: *mut sudo_digest,
mut data: *const libc::c_void,
mut len: size_t,
) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
//162
((*(*dig).func).update).expect("is not null func point")(
@@ -231,7 +218,7 @@ unsafe fn sudo_digest_update_v1(
//line168
#[no_mangle]
unsafe fn sudo_digest_final_v1(mut dig: *mut sudo_digest, mut md: *mut libc::c_uchar) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
((*(*dig).func).final_0).expect("is not func point")(md, &mut (*dig).ctx);
diff --git a/lib/util/src/event.rs b/lib/util/src/event.rs
index 09b50d5..7777a47 100644
--- a/lib/util/src/event.rs
+++ b/lib/util/src/event.rs
@@ -14,13 +14,7 @@
unused_mut
)]
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct pollfd {
- pub fd: libc::c_int,
- pub events: libc::c_short,
- pub revents: libc::c_short,
-}
+use crate::common::*;
extern "C" {
fn malloc(_: libc::c_ulong) -> *mut libc::c_void;
@@ -93,148 +87,6 @@ extern "C" {
fn sudo_gettime_mono_v1(ts: *mut timespec) -> libc::c_int;
}
-pub type __uint32_t = libc::c_uint;
-pub type __uid_t = libc::c_uint;
-pub type __pid_t = libc::c_int;
-pub type __clock_t = libc::c_long;
-pub type __time_t = libc::c_long;
-pub type __suseconds_t = libc::c_long;
-pub type __ssize_t = libc::c_long;
-pub type __syscall_slong_t = libc::c_long;
-pub type __sig_atomic_t = libc::c_int;
-pub type ssize_t = __ssize_t;
-pub type size_t = libc::c_ulong;
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct __sigset_t {
- pub __val: [libc::c_ulong; 16],
-}
-pub type sigset_t = __sigset_t;
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timeval {
- pub tv_sec: __time_t,
- pub tv_usec: __suseconds_t,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timespec {
- pub tv_sec: __time_t,
- pub tv_nsec: __syscall_slong_t,
-}
-pub type __sigval_t = sigval;
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union sigval {
- pub sival_int: libc::c_int,
- pub sival_ptr: *mut libc::c_void,
-}
-
-pub type sig_atomic_t = __sig_atomic_t;
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct siginfo_t {
- pub si_signo: libc::c_int,
- pub si_errno: libc::c_int,
- pub si_code: libc::c_int,
- pub __pad0: libc::c_int,
- pub _sifields: C2RustUnnamed,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union C2RustUnnamed {
- pub _pad: [libc::c_int; 28],
- pub _kill: C2RustUnnamed_8,
- pub _timer: C2RustUnnamed_7,
- pub _rt: C2RustUnnamed_6,
- pub _sigchld: C2RustUnnamed_5,
- pub _sigfault: C2RustUnnamed_2,
- pub _sigpoll: C2RustUnnamed_1,
- pub _sigsys: C2RustUnnamed_0,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_0 {
- pub _call_addr: *mut libc::c_void,
- pub _syscall: libc::c_int,
- pub _arch: libc::c_uint,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_1 {
- pub si_band: libc::c_long,
- pub si_fd: libc::c_int,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_2 {
- pub si_addr: *mut libc::c_void,
- pub si_addr_lsb: libc::c_short,
- pub _bounds: C2RustUnnamed_3,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union C2RustUnnamed_3 {
- pub _addr_bnd: C2RustUnnamed_4,
- pub _pkey: __uint32_t,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_4 {
- pub _lower: *mut libc::c_void,
- pub _upper: *mut libc::c_void,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_5 {
- pub si_pid: __pid_t,
- pub si_uid: __uid_t,
- pub si_status: libc::c_int,
- pub si_utime: __clock_t,
- pub si_stime: __clock_t,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_6 {
- pub si_pid: __pid_t,
- pub si_uid: __uid_t,
- pub si_sigval: __sigval_t,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_7 {
- pub si_tid: libc::c_int,
- pub si_overrun: libc::c_int,
- pub si_sigval: __sigval_t,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_8 {
- pub si_pid: __pid_t,
- pub si_uid: __uid_t,
-}
-pub type __sighandler_t = Option<unsafe extern "C" fn(libc::c_int) -> ()>;
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigaction {
- pub __sigaction_handler: C2RustUnnamed_9,
- pub sa_mask: __sigset_t,
- pub sa_flags: libc::c_int,
- pub sa_restorer: Option<unsafe extern "C" fn() -> ()>,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union C2RustUnnamed_9 {
- pub sa_handler: __sighandler_t,
- pub sa_sigaction:
- Option<unsafe extern "C" fn(libc::c_int, *mut siginfo_t, *mut libc::c_void) -> ()>,
-}
-pub type sudo_ev_callback_t =
- Option<unsafe extern "C" fn(libc::c_int, libc::c_int, *mut libc::c_void) -> ()>;
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct sudo_ev_siginfo_container {
@@ -242,69 +94,9 @@ pub struct sudo_ev_siginfo_container {
pub siginfo: *mut siginfo_t,
pub si_buf: [libc::c_char; 1],
}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_event {
- pub entries: C2RustUnnamed_12,
- pub active_entries: C2RustUnnamed_11,
- pub timeouts_entries: C2RustUnnamed_10,
- pub base: *mut sudo_event_base,
- pub fd: libc::c_int,
- pub events: libc::c_short,
- pub revents: libc::c_short,
- pub flags: libc::c_short,
- pub pfd_idx: libc::c_short,
- pub callback: sudo_ev_callback_t,
- pub timeout: timespec,
- pub closure: *mut libc::c_void,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_event_base {
- pub events: sudo_event_list,
- pub active: sudo_event_list,
- pub timeouts: sudo_event_list,
- pub signal_event: sudo_event,
- pub signals: [sudo_event_list; 65],
- pub orig_handlers: [*mut sigaction; 65],
- pub siginfo: [*mut siginfo_t; 65],
- pub signal_pending: [sig_atomic_t; 65],
- pub signal_caught: sig_atomic_t,
- pub num_handlers: libc::c_int,
- pub signal_pipe: [libc::c_int; 2],
- pub pfds: *mut pollfd,
- pub pfd_max: libc::c_int,
- pub pfd_high: libc::c_int,
- pub pfd_free: libc::c_int,
- pub flags: libc::c_uint,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_event_list {
- pub tqh_first: *mut sudo_event,
- pub tqh_last: *mut *mut sudo_event,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_10 {
- pub tqe_next: *mut sudo_event,
- pub tqe_prev: *mut *mut sudo_event,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_11 {
- pub tqe_next: *mut sudo_event,
- pub tqe_prev: *mut *mut sudo_event,
-}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_12 {
- pub tqe_next: *mut sudo_event,
- pub tqe_prev: *mut *mut sudo_event,
-}
+
static mut default_base: *mut sudo_event_base = 0 as *const sudo_event_base as *mut sudo_event_base;
static mut signal_base: *mut sudo_event_base = 0 as *const sudo_event_base as *mut sudo_event_base;
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_activate(mut base: *mut sudo_event_base, mut ev: *mut sudo_event) {
(*ev).active_entries.tqe_next = 0 as *mut sudo_event;
@@ -313,7 +105,6 @@ pub unsafe extern "C" fn sudo_ev_activate(mut base: *mut sudo_event_base, mut ev
(*base).active.tqh_last = &mut (*ev).active_entries.tqe_next;
(*ev).flags = ((*ev).flags as libc::c_int | 0x2 as libc::c_int) as libc::c_short;
}
-
#[inline]
unsafe extern "C" fn sudo_ev_deactivate(mut base: *mut sudo_event_base, mut ev: *mut sudo_event) {
(*ev).flags = ((*ev).flags as libc::c_int & !(0x2 as libc::c_int)) as libc::c_short;
@@ -324,10 +115,8 @@ unsafe extern "C" fn sudo_ev_deactivate(mut base: *mut sudo_event_base, mut ev:
}
*(*ev).active_entries.tqe_prev = (*ev).active_entries.tqe_next;
}
-
unsafe extern "C" fn sudo_ev_deactivate_all(mut base: *mut sudo_event_base) {
let mut ev: *mut sudo_event = 0 as *mut sudo_event;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 23], &[libc::c_char; 23]>(b"sudo_ev_deactivate_all\0"))
.as_ptr(),
@@ -335,7 +124,6 @@ unsafe extern "C" fn sudo_ev_deactivate_all(mut base: *mut sudo_event_base) {
89 as libc::c_int,
sudo_debug_subsys,
);
-
loop {
ev = (*base).active.tqh_first;
if ev.is_null() {
@@ -351,13 +139,11 @@ unsafe extern "C" fn sudo_ev_deactivate_all(mut base: *mut sudo_event_base) {
sudo_debug_subsys,
);
}
-
unsafe extern "C" fn sudo_ev_activate_sigevents(mut base: *mut sudo_event_base) {
let mut ev: *mut sudo_event = 0 as *mut sudo_event;
let mut set: sigset_t = sigset_t { __val: [0; 16] };
let mut oset: sigset_t = sigset_t { __val: [0; 16] };
let mut i: libc::c_int = 0;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 27], &[libc::c_char; 27]>(
b"sudo_ev_activate_sigevents\0",
@@ -367,7 +153,6 @@ unsafe extern "C" fn sudo_ev_activate_sigevents(mut base: *mut sudo_event_base)
107 as libc::c_int,
sudo_debug_subsys,
);
-
sigfillset(&mut set);
sigprocmask(0 as libc::c_int, &mut set, &mut oset);
(*base).signal_caught = 0 as libc::c_int;
@@ -415,7 +200,6 @@ unsafe extern "C" fn sudo_ev_activate_sigevents(mut base: *mut sudo_event_base)
sudo_debug_subsys,
);
}
-
unsafe extern "C" fn signal_pipe_cb(
mut fd: libc::c_int,
mut _what: libc::c_int,
@@ -424,14 +208,12 @@ unsafe extern "C" fn signal_pipe_cb(
let mut base: *mut sudo_event_base = v as *mut sudo_event_base;
let mut ch: libc::c_uchar = 0;
let mut nread: ssize_t = 0;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 15], &[libc::c_char; 15]>(b"signal_pipe_cb\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
151 as libc::c_int,
sudo_debug_subsys,
);
-
loop {
nread = read(
fd,
@@ -453,7 +235,6 @@ unsafe extern "C" fn signal_pipe_cb(
ch as libc::c_int,
);
}
-
if nread == -(1 as libc::c_int) as libc::c_long && *__errno_location() != 11 as libc::c_int {
sudo_debug_printf2_v1(
(*::core::mem::transmute::<&[u8; 15], &[libc::c_char; 15]>(b"signal_pipe_cb\0"))
@@ -478,10 +259,8 @@ unsafe extern "C" fn signal_pipe_cb(
sudo_debug_subsys,
);
}
-
unsafe extern "C" fn sudo_ev_base_init(mut base: *mut sudo_event_base) -> libc::c_int {
let mut i: libc::c_int = 0;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 18], &[libc::c_char; 18]>(b"sudo_ev_base_init\0"))
.as_ptr(),
@@ -560,11 +339,9 @@ unsafe extern "C" fn sudo_ev_base_init(mut base: *mut sudo_event_base) -> libc::
);
return sudo_debug_ret_0;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_base_alloc_v1() -> *mut sudo_event_base {
let mut base: *mut sudo_event_base = 0 as *mut sudo_event_base;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 22], &[libc::c_char; 22]>(b"sudo_ev_base_alloc_v1\0"))
.as_ptr(),
@@ -598,7 +375,6 @@ pub unsafe extern "C" fn sudo_ev_base_alloc_v1() -> *mut sudo_event_base {
);
return sudo_debug_ret as *mut sudo_event_base;
}
-
if sudo_ev_base_init(base) != 0 as libc::c_int {
free(base as *mut libc::c_void);
let mut sudo_debug_ret_0: *mut libc::c_void = 0 as *mut libc::c_void;
@@ -623,13 +399,11 @@ pub unsafe extern "C" fn sudo_ev_base_alloc_v1() -> *mut sudo_event_base {
);
return sudo_debug_ret_1 as *mut sudo_event_base;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_base_free_v1(mut base: *mut sudo_event_base) {
let mut ev: *mut sudo_event = 0 as *mut sudo_event;
let mut next: *mut sudo_event = 0 as *mut sudo_event;
let mut i: libc::c_int = 0;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 21], &[libc::c_char; 21]>(b"sudo_ev_base_free_v1\0"))
.as_ptr(),
@@ -684,10 +458,8 @@ pub unsafe extern "C" fn sudo_ev_base_free_v1(mut base: *mut sudo_event_base) {
sudo_debug_subsys,
);
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_base_setdef_v1(mut base: *mut sudo_event_base) {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 23], &[libc::c_char; 23]>(b"sudo_ev_base_setdef_v1\0"))
.as_ptr(),
@@ -704,7 +476,6 @@ pub unsafe extern "C" fn sudo_ev_base_setdef_v1(mut base: *mut sudo_event_base)
sudo_debug_subsys,
);
}
-
unsafe extern "C" fn sudo_ev_init(
mut ev: *mut sudo_event,
mut fd: libc::c_int,
@@ -712,7 +483,6 @@ unsafe extern "C" fn sudo_ev_init(
mut callback: sudo_ev_callback_t,
mut closure: *mut libc::c_void,
) {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 13], &[libc::c_char; 13]>(b"sudo_ev_init\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
@@ -744,7 +514,6 @@ pub unsafe extern "C" fn sudo_ev_alloc_v1(
mut closure: *mut libc::c_void,
) -> *mut sudo_event {
let mut ev: *mut sudo_event = 0 as *mut sudo_event;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"sudo_ev_alloc_v1\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
@@ -820,7 +589,6 @@ pub unsafe extern "C" fn sudo_ev_alloc_v1(
}
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_free_v1(mut ev: *mut sudo_event) {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 16], &[libc::c_char; 16]>(b"sudo_ev_free_v1\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
@@ -886,7 +654,6 @@ unsafe extern "C" fn sudo_ev_add_signal(
mut tohead: bool,
) -> libc::c_int {
let signo: libc::c_int = (*ev).fd;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 19], &[libc::c_char; 19]>(b"sudo_ev_add_signal\0"))
.as_ptr(),
@@ -1029,7 +796,7 @@ unsafe extern "C" fn sudo_ev_add_signal(
}
if ((*base).signals[signo as usize].tqh_first).is_null() {
let mut sa: sigaction = sigaction {
- __sigaction_handler: C2RustUnnamed_9 { sa_handler: None },
+ __sigaction_handler: Signal_handler { sa_handler: None },
sa_mask: sigset_t { __val: [0; 16] },
sa_flags: 0,
sa_restorer: None,
@@ -1117,7 +884,6 @@ unsafe extern "C" fn sudo_ev_add_signal(
);
return sudo_debug_ret_4;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_add_v1(
mut base: *mut sudo_event_base,
@@ -1137,7 +903,6 @@ pub unsafe extern "C" fn sudo_ev_add_v1(
}
return sudo_ev_add_v2(base, ev, ts, tohead);
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_add_v2(
mut base: *mut sudo_event_base,
@@ -1145,7 +910,6 @@ pub unsafe extern "C" fn sudo_ev_add_v2(
mut timo: *mut timespec,
mut tohead: bool,
) -> libc::c_int {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 15], &[libc::c_char; 15]>(b"sudo_ev_add_v2\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
@@ -1317,13 +1081,11 @@ pub unsafe extern "C" fn sudo_ev_add_v2(
);
return sudo_debug_ret_2;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_del_v1(
mut base: *mut sudo_event_base,
mut ev: *mut sudo_event,
) -> libc::c_int {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 15], &[libc::c_char; 15]>(b"sudo_ev_del_v1\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
@@ -1534,12 +1296,10 @@ pub unsafe extern "C" fn sudo_ev_del_v1(
);
return sudo_debug_ret_4;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_dispatch_v1(mut base: *mut sudo_event_base) -> libc::c_int {
return sudo_ev_loop_v1(base, 0 as libc::c_int);
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_loop_v1(
mut base: *mut sudo_event_base,
@@ -1552,7 +1312,6 @@ pub unsafe extern "C" fn sudo_ev_loop_v1(
let mut ev: *mut sudo_event = 0 as *mut sudo_event;
let mut nready: libc::c_int = 0;
let mut rc: libc::c_int = 0 as libc::c_int;
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 16], &[libc::c_char; 16]>(b"sudo_ev_loop_v1\0")).as_ptr(),
b"event.c\0" as *const u8 as *const libc::c_char,
@@ -1680,10 +1439,8 @@ pub unsafe extern "C" fn sudo_ev_loop_v1(
);
return sudo_debug_ret;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_loopexit_v1(mut base: *mut sudo_event_base) {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 20], &[libc::c_char; 20]>(b"sudo_ev_loopexit_v1\0"))
.as_ptr(),
@@ -1718,10 +1475,8 @@ pub unsafe extern "C" fn sudo_ev_loopexit_v1(mut base: *mut sudo_event_base) {
sudo_debug_subsys,
);
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_loopbreak_v1(mut base: *mut sudo_event_base) {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 21], &[libc::c_char; 21]>(b"sudo_ev_loopbreak_v1\0"))
.as_ptr(),
@@ -1755,10 +1510,8 @@ pub unsafe extern "C" fn sudo_ev_loopbreak_v1(mut base: *mut sudo_event_base) {
sudo_debug_subsys,
);
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_loopcontinue_v1(mut base: *mut sudo_event_base) {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 24], &[libc::c_char; 24]>(b"sudo_ev_loopcontinue_v1\0"))
.as_ptr(),
@@ -1792,10 +1545,8 @@ pub unsafe extern "C" fn sudo_ev_loopcontinue_v1(mut base: *mut sudo_event_base)
sudo_debug_subsys,
);
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_got_exit_v1(mut base: *mut sudo_event_base) -> bool {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 20], &[libc::c_char; 20]>(b"sudo_ev_got_exit_v1\0"))
.as_ptr(),
@@ -1831,10 +1582,8 @@ pub unsafe extern "C" fn sudo_ev_got_exit_v1(mut base: *mut sudo_event_base) ->
);
return sudo_debug_ret_0;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_ev_got_break_v1(mut base: *mut sudo_event_base) -> bool {
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 21], &[libc::c_char; 21]>(b"sudo_ev_got_break_v1\0"))
.as_ptr(),
@@ -1894,7 +1643,6 @@ pub unsafe extern "C" fn sudo_ev_get_timeleft_v2(
tv_sec: 0,
tv_nsec: 0,
};
- let sudo_debug_subsys: libc::c_int = (4 as libc::c_int) << 6 as libc::c_int;
sudo_debug_enter_v1(
(*::core::mem::transmute::<&[u8; 24], &[libc::c_char; 24]>(b"sudo_ev_get_timeleft_v2\0"))
.as_ptr(),
diff --git a/lib/util/src/event_poll.rs b/lib/util/src/event_poll.rs
index 8db9300..96b2ed2 100644
--- a/lib/util/src/event_poll.rs
+++ b/lib/util/src/event_poll.rs
@@ -3,6 +3,7 @@
*
* SPDX-License-Identifier: MulanPSL-2.0
*/
+
#![allow(
non_camel_case_types,
dead_code,
@@ -14,43 +15,24 @@
unused_parens
)]
-use crate::event::sudo_ev_callback_t;
-use crate::sudo_debug::sudo_debug_exit_v1;
-// use crate::sudo_debug::sudo_debug_printf2_v1;
-use crate::term::__sighandler_t;
-use crate::term::__sigset_t;
-use crate::term::sig_atomic_t;
-use crate::term::siginfo_t;
-use libc::free;
-
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_DEBUG;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERROR;
-use crate::sudo_debug_macro::SUDO_DEBUG_EVENT;
-use crate::sudo_debug_macro::SUDO_DEBUG_INFO;
-use crate::sudo_debug_macro::SUDO_DEBUG_LINENO;
-
-pub type __time_t = libc::c_long;
-pub type __syscall_slong_t = libc::c_long;
-pub type size_t = libc::c_ulong;
-pub type nfds_t = libc::c_ulong;
-
-pub const __SIGRTMIN: libc::c_uint = 64;
-pub const NSIG: libc::c_uint = __SIGRTMIN + 1;
+use crate::common::*;
+
+//#define SUDO_EV_READ 0x02 /* fire when readable */
+//#define SUDO_EV_WRITE 0x04 /* fire when writable */
pub const SUDO_EV_READ: libc::c_short = 0x02;
-pub const POLLIN: libc::c_short = 0x001;
-pub const POLLHUP: libc::c_short = 0x010;
-pub const POLLNVAL: libc::c_short = 0x020;
-pub const POLLERR: libc::c_short = 0x008;
pub const SUDO_EV_WRITE: libc::c_short = 0x04;
+
+// #define POLLIN 0x001 /* There is data to read. */
+// #define POLLOUT 0x004 /* Writing now will not block. */
+pub const POLLIN: libc::c_short = 0x001;
pub const POLLOUT: libc::c_short = 0x004;
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigset_t {
- pub __val: [libc::c_ulong; 16],
-}
+// #define POLLERR 0x008 /* Error condition. */
+// #define POLLHUP 0x010 /* Hung up. */
+// #define POLLNVAL 0x020 /* Invalid polling request. */
+pub const POLLERR: libc::c_short = 0x008;
+pub const POLLHUP: libc::c_short = 0x010;
+pub const POLLNVAL: libc::c_short = 0x020;
extern "C" {
fn reallocarray(__ptr: *mut libc::c_void, __nmemb: size_t, __size: size_t)
@@ -72,107 +54,11 @@ extern "C" {
_: ...
);
}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct pollfd {
- pub fd: libc::c_int,
- pub events: libc::c_short,
- pub revents: libc::c_short,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timespec {
- pub tv_sec: __time_t,
- pub tv_nsec: __syscall_slong_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct mid_struct_1 {
- pub tqe_next: *mut sudo_event,
- pub tqe_prev: *mut *mut sudo_event,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct mid_struct_2 {
- pub tqe_next: *mut sudo_event,
- pub tqe_prev: *mut *mut sudo_event,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct mid_struct_3 {
- pub tqe_next: *mut sudo_event,
- pub tqe_prev: *mut *mut sudo_event,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_event {
- pub entries: mid_struct_1,
- pub active_entries: mid_struct_2,
- pub timeouts_entries: mid_struct_3,
- pub base: *mut sudo_event_base,
- pub fd: libc::c_int,
- pub events: libc::c_short,
- pub revents: libc::c_short,
- pub flags: libc::c_short,
- pub pfd_idx: libc::c_short,
- pub callback: sudo_ev_callback_t,
- pub timeout: timespec,
- pub closure: *mut libc::c_void,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_event_list {
- pub tqh_first: *mut sudo_event,
- pub tqh_last: *mut *mut sudo_event,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union mid_union_1 {
- pub sa_handler: __sighandler_t,
- pub sa_sigaction: Option<fn(libc::c_int, *mut siginfo_t, *mut libc::c_void)>,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigaction {
- pub __sigaction_handler: mid_union_1,
- pub sa_mask: __sigset_t,
- pub sa_flags: libc::c_int,
- pub sa_restorer: Option<fn()>,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_event_base {
- pub events: sudo_event_list,
- pub active: sudo_event_list,
- pub timeouts: sudo_event_list,
- pub signal_event: sudo_event,
- pub signals: [sudo_event_list; NSIG as usize],
- pub orig_handlers: [*mut sigaction; NSIG as usize],
- pub siginfo: [*mut siginfo_t; NSIG as usize],
- pub signal_pending: [sig_atomic_t; NSIG as usize],
- pub signal_caught: sig_atomic_t,
- pub num_handlers: libc::c_int,
- pub signal_pipe: [libc::c_int; 2],
- pub pfds: *mut pollfd,
- pub pfd_max: libc::c_int,
- pub pfd_high: libc::c_int,
- pub pfd_free: libc::c_int,
- pub flags: libc::c_uint,
-}
#[no_mangle]
unsafe fn sudo_ev_base_alloc_impl(mut base: *mut sudo_event_base) -> libc::c_int {
let mut i: libc::c_int = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_EVENT);
+ debug_decl!(SUDO_DEBUG_EVENT);
(*base).pfd_high = -1;
(*base).pfd_max = 32;
@@ -186,7 +72,7 @@ unsafe fn sudo_ev_base_alloc_impl(mut base: *mut sudo_event_base) -> libc::c_int
sudo_debug_printf!(
SUDO_DEBUG_ERROR | SUDO_DEBUG_LINENO,
b"%s: unable to allocate %d pollfds\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
(*base).pfd_max
);
(*base).pfd_max = 0;
@@ -201,7 +87,7 @@ unsafe fn sudo_ev_base_alloc_impl(mut base: *mut sudo_event_base) -> libc::c_int
#[no_mangle]
unsafe fn sudo_ev_base_free_impl(mut base: *mut sudo_event_base) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_EVENT);
+ debug_decl!(SUDO_DEBUG_EVENT);
free((*base).pfds as *mut libc::c_void);
debug_return!()
@@ -210,7 +96,7 @@ unsafe fn sudo_ev_base_free_impl(mut base: *mut sudo_event_base) {
#[no_mangle]
unsafe fn sudo_ev_add_impl(mut base: *mut sudo_event_base, mut ev: *mut sudo_event) -> libc::c_int {
let mut pfd: *mut pollfd = 0 as *mut pollfd;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_EVENT);
+ debug_decl!(SUDO_DEBUG_EVENT);
/* If out of space in pfds array, realloc. */
if (*base).pfd_free == (*base).pfd_max {
@@ -228,7 +114,7 @@ unsafe fn sudo_ev_add_impl(mut base: *mut sudo_event_base, mut ev: *mut sudo_eve
sudo_debug_printf!(
SUDO_DEBUG_ERROR | SUDO_DEBUG_LINENO,
b"%s: unable to allocate %d pollfds\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
((*base).pfd_max) * 2
);
@@ -274,7 +160,7 @@ unsafe fn sudo_ev_add_impl(mut base: *mut sudo_event_base, mut ev: *mut sudo_eve
#[no_mangle]
unsafe fn sudo_ev_del_impl(mut base: *mut sudo_event_base, mut ev: *mut sudo_event) -> libc::c_int {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_EVENT);
+ debug_decl!(SUDO_DEBUG_EVENT);
/* Mark pfd entry unused, add to free list and adjust high slot. */
(*((*base).pfds).offset((*ev).pfd_idx as isize)).fd = -1;
@@ -310,7 +196,7 @@ unsafe fn sudo_ev_scan_impl(mut base: *mut sudo_event_base, mut flags: libc::c_i
let mut ev: *mut sudo_event = 0 as *mut sudo_event;
let mut nready: libc::c_int;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_EVENT);
+ debug_decl!(SUDO_DEBUG_EVENT);
ev = (*base).timeouts.tqh_first;
if !ev.is_null() {
@@ -335,6 +221,7 @@ unsafe fn sudo_ev_scan_impl(mut base: *mut sudo_event_base, mut flags: libc::c_i
timeout = 0 as *mut timespec;
}
}
+
nready = sudo_ev_poll(
(*base).pfds,
((*base).pfd_high + 1) as libc::c_int as nfds_t,
@@ -344,7 +231,7 @@ unsafe fn sudo_ev_scan_impl(mut base: *mut sudo_event_base, mut flags: libc::c_i
sudo_debug_printf!(
SUDO_DEBUG_INFO,
b"%s: %d fds ready\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
nready
);
@@ -377,7 +264,7 @@ unsafe fn sudo_ev_scan_impl(mut base: *mut sudo_event_base, mut flags: libc::c_i
SUDO_DEBUG_DEBUG,
b"%s: polled fd %d, events %d, activating %p\0" as *const u8
as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
(*ev).fd,
what,
ev
diff --git a/lib/util/src/fatal.rs b/lib/util/src/fatal.rs
index 3e46279..14e0fbb 100644
--- a/lib/util/src/fatal.rs
+++ b/lib/util/src/fatal.rs
@@ -13,7 +13,7 @@
non_upper_case_globals,
dead_code
)]
-use crate::__LC_MESSAGES;
+
use libc::FILE;
#[macro_export]
@@ -39,9 +39,9 @@ extern "C" {
__msgid: *const libc::c_char,
__category: libc::c_int,
) -> *mut libc::c_char;
+ fn do_cleanup();
}
-pub type ssize_t = libc::c_long;
pub type sudo_fatal_callback_t = Option<unsafe extern "C" fn()>;
static mut sudo_warn_conversation: sudo_conv_t = None;
static mut sudo_warn_setlocale: Option<unsafe extern "C" fn(bool, *mut libc::c_int) -> bool> = None;
@@ -74,14 +74,6 @@ static mut callbacks: sudo_fatal_callback_list = {
init
};
-pub const SUDO_CONV_PROMPT_ECHO_OFF: libc::c_int = 1;
-pub const SUDO_CONV_PROMPT_ECHO_ON: libc::c_int = 2;
-pub const SUDO_CONV_ERROR_MSG: libc::c_int = 3;
-pub const SUDO_CONV_INFO_MSG: libc::c_int = 4;
-pub const SUDO_CONV_PROMPT_MASK: libc::c_int = 5;
-pub const SUDO_CONV_PROMPT_ECHO_OK: libc::c_int = 4096;
-pub const SUDO_CONV_PREFER_TTY: libc::c_int = 8192;
-
#[derive(Copy, Clone)]
pub struct sudo_conv_message {
pub msg_type: libc::c_int,
@@ -112,6 +104,7 @@ pub type sudo_conv_t = Option<
) -> libc::c_int,
>;
+/*
#[no_mangle]
pub fn do_cleanup() {
let mut cb: *mut sudo_fatal_callback = 0 as *mut sudo_fatal_callback;
@@ -128,6 +121,7 @@ pub fn do_cleanup() {
};
}
}
+*/
#[no_mangle]
unsafe fn sudo_fatal_callback_register_v1(mut func: sudo_fatal_callback_t) -> libc::c_int {
@@ -145,9 +139,10 @@ unsafe fn sudo_fatal_callback_register_v1(mut func: sudo_fatal_callback_t) -> li
if cb.is_null() {
return -1;
}
- (*cb).func = func;
- (*cb).entries.sle_next = cb;
- callbacks.slh_first = cb;
+ let ref mut fresh6 = (*cb).func;
+ *fresh6 = func;
+ let ref mut fresh7 = (*cb).entries.sle_next;
+ *fresh7 = callbacks.slh_first;
return 0;
}
diff --git a/lib/util/src/getgrouplist.rs b/lib/util/src/getgrouplist.rs
index a4ee40d..8c48df8 100644
--- a/lib/util/src/getgrouplist.rs
+++ b/lib/util/src/getgrouplist.rs
@@ -6,10 +6,7 @@
#![allow(non_camel_case_types, unused_mut, unused_variables, unused_assignments)]
-//line72-2(arg),
-pub type gid_t = libc::c_uint;
-pub type __gid_t = libc::c_uint;
-pub type size_t = libc::c_ulong;
+use crate::common::*;
extern "C" {
fn getgrouplist(
@@ -24,10 +21,6 @@ extern "C" {
-> *mut libc::c_void;
}
-// define
-pub const _SC_NGROUPS_MAX: libc::c_uint = 3;
-pub const NGROUPS_MAX: libc::c_uint = 65536;
-
//line_72
#[no_mangle]
pub unsafe extern "C" fn sudo_getgrouplist2_v1(
diff --git a/lib/util/src/gethostname.rs b/lib/util/src/gethostname.rs
index 258cd21..27aac53 100644
--- a/lib/util/src/gethostname.rs
+++ b/lib/util/src/gethostname.rs
@@ -5,8 +5,8 @@
*/
#![allow(unused_imports, unused_assignments, non_camel_case_types)]
-use std::ffi::CStr;
-use std::string::String;
+
+use crate::common::*;
extern "C" {
fn malloc(_: libc::c_ulong) -> *mut libc::c_void;
@@ -15,9 +15,7 @@ extern "C" {
fn gethostname(__name: *mut libc::c_char, __len: size_t) -> libc::c_int;
}
-pub type size_t = libc::c_ulong;
-pub type C2RustUnnamed = libc::c_uint;
-pub const _SC_HOST_NAME_MAX: C2RustUnnamed = 180;
+pub const _SC_HOST_NAME_MAX: libc::c_uint = 180;
#[no_mangle]
pub unsafe extern "C" fn sudo_gethostname_v1() -> *mut libc::c_char {
diff --git a/lib/util/src/gettime.rs b/lib/util/src/gettime.rs
index 65f1bb1..df474e9 100644
--- a/lib/util/src/gettime.rs
+++ b/lib/util/src/gettime.rs
@@ -14,13 +14,7 @@
unused_mut
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-// use crate::sudo_debug::sudo_debug_printf2_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERRNO;
-use crate::sudo_debug_macro::SUDO_DEBUG_LINENO;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-use crate::sudo_debug_macro::SUDO_DEBUG_WARN;
+use crate::common::*;
extern "C" {
fn clock_gettime(__clock_id: clockid_t, __tp: *mut timespec) -> libc::c_int;
@@ -36,26 +30,6 @@ extern "C" {
);
}
-pub type __time_t = libc::c_long;
-pub type __suseconds_t = libc::c_long;
-pub type __clockid_t = libc::c_int;
-pub type __syscall_slong_t = libc::c_long;
-pub type clockid_t = __clockid_t;
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timespec {
- pub tv_sec: __time_t,
- pub tv_nsec: __syscall_slong_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timeval {
- pub tv_sec: __time_t,
- pub tv_usec: __suseconds_t,
-}
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct timezone {
@@ -65,14 +39,16 @@ pub struct timezone {
pub type __timezone_ptr_t = *mut timezone;
+//#define CLOCK_REALTIME 0
pub const CLOCK_REALTIME: libc::c_int = 0;
+
pub const SUDO_CLOCK_BOOTTIME: libc::c_int = 7;
pub const SUDO_CLOCK_UPTIME: libc::c_int = 1;
pub const _SC_MONOTONIC_CLOCK: libc::c_int = 149;
#[no_mangle]
pub unsafe extern "C" fn sudo_gettime_real_v1(mut ts: *mut timespec) -> libc::c_int {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if clock_gettime(CLOCK_REALTIME, ts) == -1 {
let mut tv: timeval = timeval {
@@ -99,7 +75,7 @@ pub unsafe extern "C" fn sudo_gettime_real_v1(mut ts: *mut timespec) -> libc::c_
pub unsafe extern "C" fn sudo_gettime_mono_v1(ts: *mut timespec) -> i32 {
static mut has_monoclock: libc::c_int = -1;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if has_monoclock == -1 {
has_monoclock = (sysconf(_SC_MONOTONIC_CLOCK) != -1) as libc::c_int;
@@ -125,7 +101,7 @@ pub unsafe extern "C" fn sudo_gettime_mono_v1(ts: *mut timespec) -> i32 {
#[no_mangle]
pub unsafe extern "C" fn sudo_gettime_awake_v1(ts: *mut timespec) -> libc::c_int {
static mut has_monoclock: libc::c_int = -1;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if has_monoclock == -1 {
has_monoclock = (sysconf(_SC_MONOTONIC_CLOCK) != -1) as libc::c_int;
diff --git a/lib/util/src/gidlist.rs b/lib/util/src/gidlist.rs
index 95dfa03..1f06725 100644
--- a/lib/util/src/gidlist.rs
+++ b/lib/util/src/gidlist.rs
@@ -11,11 +11,17 @@
unused_mut
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
extern "C" {
+ fn sudo_debug_printf2_v1(
+ func: *const libc::c_char,
+ file: *const libc::c_char,
+ lineno: libc::c_int,
+ level: libc::c_int,
+ fmt: *const libc::c_char,
+ _: ...
+ );
fn reallocarray(__ptr: *mut libc::c_void, __nmemb: size_t, __size: size_t)
-> *mut libc::c_void;
fn sudo_strtoidx_v1(
@@ -28,11 +34,7 @@ extern "C" {
fn sudo_warnx_nodebug_v1(fmt: *const libc::c_char, _: ...);
}
-pub type __gid_t = libc::c_uint; //typedef __gid_t gid_t;
-pub type gid_t = __gid_t;
pub type GETGROUPS_T = gid_t; //#define GETGROUPS_T gid_t
-pub type size_t = libc::c_ulong;
-pub type id_t = libc::c_uint;
#[no_mangle]
pub unsafe extern "C" fn sudo_parse_gids_v1(
@@ -46,7 +48,7 @@ pub unsafe extern "C" fn sudo_parse_gids_v1(
let mut errstr: *const libc::c_char = 0 as *const libc::c_char;
let mut ep: *mut libc::c_char = 0 as *mut libc::c_char;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if *cp as libc::c_int != '\0' as i32 {
ngids += 1; //ngids++
@@ -56,7 +58,7 @@ pub unsafe extern "C" fn sudo_parse_gids_v1(
}
cp = cp.offset(1);
- if *cp as libc::c_int != '\0' as i32 {
+ if !(*cp as libc::c_int != '\0' as i32) {
break;
}
}
@@ -73,7 +75,7 @@ pub unsafe extern "C" fn sudo_parse_gids_v1(
if gids.is_null() {
sudo_warnx!(
b"%s: %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
b"unable to allocate memor0" as *const u8 as *const libc::c_char
);
debug_return_int!(-1);
diff --git a/lib/util/src/key_val.rs b/lib/util/src/key_val.rs
index a41be2f..5af519b 100644
--- a/lib/util/src/key_val.rs
+++ b/lib/util/src/key_val.rs
@@ -6,16 +6,13 @@
#![allow(unused_assignments, non_camel_case_types)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_str_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
extern "C" {
fn malloc(_: libc::c_ulong) -> *mut libc::c_void;
fn memcpy(_: *mut libc::c_void, _: *const libc::c_void, _: libc::c_ulong) -> *mut libc::c_void;
fn strlen(_: *const libc::c_char) -> libc::c_ulong;
}
-pub type size_t = libc::c_ulong;
#[no_mangle]
pub unsafe extern "C" fn sudo_new_key_val_v1(
@@ -27,7 +24,7 @@ pub unsafe extern "C" fn sudo_new_key_val_v1(
let mut cp: *mut libc::c_char = 0 as *mut libc::c_char;
let mut str: *mut libc::c_char = 0 as *mut libc::c_char;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
str = malloc(
key_len
diff --git a/lib/util/src/lbuf.rs b/lib/util/src/lbuf.rs
index 29d73ca..e09e093 100644
--- a/lib/util/src/lbuf.rs
+++ b/lib/util/src/lbuf.rs
@@ -12,12 +12,7 @@
dead_code
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_bool_v1;
-use crate::sudo_debug::sudo_debug_exit_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERROR;
-use crate::sudo_debug_macro::SUDO_DEBUG_LINENO;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
extern "C" {
fn free(__ptr: *mut libc::c_void);
@@ -48,7 +43,6 @@ pub struct sudo_lbuf {
pub cols: libc::c_short,
pub error: libc::c_short,
}
-
pub type sudo_lbuf_output_t = Option<unsafe extern "C" fn(*const libc::c_char) -> libc::c_int>;
pub type size_t = libc::c_ulong;
@@ -60,7 +54,7 @@ pub unsafe extern "C" fn sudo_lbuf_init_v1(
mut continuation: *const libc::c_char,
mut cols: libc::c_int,
) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
(*lbuf).output = output;
(*lbuf).continuation = continuation;
@@ -76,7 +70,7 @@ pub unsafe extern "C" fn sudo_lbuf_init_v1(
#[no_mangle]
pub unsafe extern "C" fn sudo_lbuf_destroy_v1(mut lbuf: *mut sudo_lbuf) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
free((*lbuf).buf as *mut libc::c_void);
(*lbuf).buf = 0 as *mut libc::c_char;
@@ -86,7 +80,7 @@ pub unsafe extern "C" fn sudo_lbuf_destroy_v1(mut lbuf: *mut sudo_lbuf) {
//static
unsafe extern "C" fn sudo_lbuf_expand(mut lbuf: *mut sudo_lbuf, mut extra: libc::c_int) -> bool {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if (*lbuf).len + extra + 1 >= (*lbuf).size {
let mut new_buf: *mut libc::c_char;
@@ -131,7 +125,7 @@ unsafe extern "C" fn sudo_lbuf_println(
let mut indent: libc::c_int = (*lbuf).indent;
let mut is_comment: bool = false;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if *line.offset(0 as isize) as libc::c_int == '#' as i32
&& *(*__ctype_b_loc())
@@ -143,7 +137,6 @@ unsafe extern "C" fn sudo_lbuf_println(
is_comment = true;
indent = 2;
}
-
if !((*lbuf).continuation).is_null() && !is_comment {
contlen = strlen((*lbuf).continuation) as libc::c_int;
}
@@ -223,7 +216,7 @@ pub unsafe extern "C" fn sudo_lbuf_print_v1(mut lbuf: *mut sudo_lbuf) {
let mut ep: *mut libc::c_char = 0 as *mut libc::c_char;
let mut len: libc::c_int = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if !(((*lbuf).buf).is_null() || (*lbuf).len == 0 as libc::c_int) {
//len = lbuf->continuation ? strlen(lbuf->continuation) : 0;
@@ -289,7 +282,6 @@ pub unsafe extern "C" fn sudo_lbuf_error_v1(mut lbuf: *mut sudo_lbuf) -> bool {
}
return false;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_lbuf_clearerr_v1(mut lbuf: *mut sudo_lbuf) {
if !lbuf.is_null() {
diff --git a/lib/util/src/lib.rs b/lib/util/src/lib.rs
index ff0cdf9..9dd4a4e 100644
--- a/lib/util/src/lib.rs
+++ b/lib/util/src/lib.rs
@@ -4,9 +4,10 @@
* SPDX-License-Identifier: MulanPSL-2.0
*/
+//#![feature(c_variadic)]
#[warn(unused_unsafe)]
#[macro_use]
-mod sudo_debug_macro;
+pub mod common;
mod arc4random;
mod arc4random_uniform;
mod closefrom;
@@ -38,7 +39,7 @@ mod strtoid;
mod strtomode;
mod strtonum;
mod sudo_conf;
-mod sudo_debug;
+pub mod sudo_debug;
mod sudo_dso;
mod term;
mod ttyname_dev;
diff --git a/lib/util/src/locking.rs b/lib/util/src/locking.rs
index 5f99ed8..f367d69 100644
--- a/lib/util/src/locking.rs
+++ b/lib/util/src/locking.rs
@@ -4,11 +4,9 @@
* SPDX-License-Identifier: MulanPSL-2.0
*/
-#![allow(dead_code, non_camel_case_types, unused_mut)]
+#![allow(dead_code, non_camel_case_types, unused_mut, unused_assignments)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_bool_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
extern "C" {
fn lockf(__fd: libc::c_int, __cmd: libc::c_int, __len: off_t) -> libc::c_int;
@@ -16,16 +14,12 @@ extern "C" {
}
-pub type __off_t = libc::c_long;
-pub type off_t = __off_t;
-
-pub const SUDO_LOCK: libc::c_int = 1;
-pub const SUDO_TLOCK: libc::c_int = 2;
-pub const SUDO_UNLOCK: libc::c_int = 4;
+// # define F_ULOCK 0 /* Unlock a previously locked region. */
+// # define F_LOCK 1 /* Lock a region for exclusive use. */
+// # define F_TLOCK 2 /* Test and lock a region for exclusive use. */
pub const F_ULOCK: libc::c_int = 0;
pub const F_LOCK: libc::c_int = 1;
pub const F_TLOCK: libc::c_int = 2;
-pub const EINVAL: libc::c_int = 22;
#[no_mangle]
unsafe extern "C" fn sudo_lock_file_v1(mut fd: libc::c_int, mut type_0: libc::c_int) -> bool {
@@ -39,7 +33,7 @@ unsafe extern "C" fn sudo_lock_region_v1(
mut len: off_t,
) -> bool {
let mut op: libc::c_int = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
match type_0 {
SUDO_LOCK => {
diff --git a/lib/util/src/memset_s.rs b/lib/util/src/memset_s.rs
index f56b10b..62b13b3 100644
--- a/lib/util/src/memset_s.rs
+++ b/lib/util/src/memset_s.rs
@@ -6,15 +6,12 @@
#![allow(dead_code, non_camel_case_types, unused_mut)]
+use crate::common::*;
+
extern "C" {
fn __errno_location() -> *mut libc::c_int;
}
-pub type size_t = libc::c_ulong;
-pub const SIZE_MAX: libc::c_ulong = 18446744073709551615;
-pub const RSIZE_MAX: libc::c_ulong = SIZE_MAX >> 1;
-pub const EINVAL: libc::c_int = 22;
-
#[no_mangle]
pub fn sudo_memset_s(
mut v: *mut libc::c_void,
diff --git a/lib/util/src/parseln.rs b/lib/util/src/parseln.rs
index 05ca7b7..646caa9 100644
--- a/lib/util/src/parseln.rs
+++ b/lib/util/src/parseln.rs
@@ -15,28 +15,7 @@
improper_ctypes
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_ssize_t_v1;
-// use crate::sudo_debug::sudo_debug_printf2_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERROR;
-use crate::sudo_debug_macro::SUDO_DEBUG_LINENO;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _IO_marker {
- _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _IO_codecvt {
- _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _IO_wide_data {
- _unused: [u8; 0],
-}
+use crate::common::*;
extern "C" {
fn getdelim(
@@ -60,49 +39,12 @@ extern "C" {
);
}
-pub type __ssize_t = libc::c_long;
-pub type ssize_t = __ssize_t;
-pub type __SIZE_TYPE__ = libc::c_ulong;
-pub type size_t = __SIZE_TYPE__;
-pub type FILE = _IO_FILE;
-pub type __off_t = libc::c_long;
-pub type __off64_t = libc::c_long;
-
-pub struct _IO_FILE {
- pub _flags: libc::c_int,
- pub _IO_read_ptr: *mut libc::c_char,
- pub _IO_read_end: *mut libc::c_char,
- pub _IO_read_base: *mut libc::c_char,
- pub _IO_write_base: *mut libc::c_char,
- pub _IO_write_ptr: *mut libc::c_char,
- pub _IO_write_end: *mut libc::c_char,
- pub _IO_buf_base: *mut libc::c_char,
- pub _IO_buf_end: *mut libc::c_char,
- pub _IO_save_base: *mut libc::c_char,
- pub _IO_backup_base: *mut libc::c_char,
- pub _IO_save_end: *mut libc::c_char,
- pub _markers: *mut _IO_marker,
- pub _chain: *mut _IO_FILE,
- pub _fileno: libc::c_int,
- pub _flags2: libc::c_int,
- pub _old_offset: __off_t,
- pub _cur_column: libc::c_ushort,
- pub _vtable_offset: libc::c_schar,
-
- pub _shortbuf: [libc::c_char; 1],
- pub _lock: *mut libc::c_void,
- pub _offset: __off64_t,
- pub _codecvt: *mut _IO_codecvt,
- pub _wide_data: *mut _IO_wide_data,
- pub _freeres_list: *mut _IO_FILE,
- pub _freeres_buf: *mut libc::c_void,
- pub __pad5: size_t,
- pub _mode: libc::c_int,
- pub _unused2: [libc::c_char; 20],
-}
-
+/* sudo_parseln() flags */
+// #define PARSELN_COMM_BOL 0x01 /* comments only at begining of line */
+// #define PARSELN_CONT_IGN 0x02 /* ignore line continuation char */
pub const PARSELN_COMM_BOL: libc::c_int = 0x01;
pub const PARSELN_CONT_IGN: libc::c_int = 0x02;
+
pub const _ISblank: libc::c_int = 1;
#[no_mangle]
@@ -121,7 +63,7 @@ pub unsafe extern "C" fn sudo_parseln_v2(
let mut continued: bool = false;
let mut comment: bool = false;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
loop {
comment = false;
diff --git a/lib/util/src/progname.rs b/lib/util/src/progname.rs
index d2d602f..f8f0659 100644
--- a/lib/util/src/progname.rs
+++ b/lib/util/src/progname.rs
@@ -10,6 +10,7 @@ extern "C" {
fn strrchr(_: *const libc::c_char, _: libc::c_int) -> *mut libc::c_char;
static mut __progname: *const libc::c_char;
}
+
static mut progname: *const libc::c_char = b"\0" as *const u8 as *const libc::c_char; //*progname = ""
#[no_mangle]
pub unsafe extern "C" fn initprogname(mut name: *const libc::c_char) {
diff --git a/lib/util/src/pw_dup.rs b/lib/util/src/pw_dup.rs
index 160d201..f6eb5ad 100644
--- a/lib/util/src/pw_dup.rs
+++ b/lib/util/src/pw_dup.rs
@@ -15,16 +15,14 @@
unused_macros
)]
+use crate::common::*;
+
extern "C" {
fn malloc(_: libc::c_ulong) -> *mut libc::c_void;
fn memcpy(_: *mut libc::c_void, _: *const libc::c_void, _: libc::c_ulong) -> *mut libc::c_void;
fn strlen(_: *const libc::c_char) -> libc::c_ulong;
}
-pub type __uid_t = libc::c_uint;
-pub type __gid_t = libc::c_uint;
-pub type size_t = libc::c_ulong;
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct passwd {
@@ -36,7 +34,6 @@ pub struct passwd {
pub pw_dir: *mut libc::c_char,
pub pw_shell: *mut libc::c_char,
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_pw_dup(mut pw: *const passwd) -> *mut passwd {
let mut nsize: size_t = 0 as libc::c_int as size_t;
diff --git a/lib/util/src/secure_path.rs b/lib/util/src/secure_path.rs
index b09b57f..189acb1 100644
--- a/lib/util/src/secure_path.rs
+++ b/lib/util/src/secure_path.rs
@@ -3,6 +3,7 @@
*
* SPDX-License-Identifier: MulanPSL-2.0
*/
+
#![allow(
dead_code,
mutable_transmutes,
@@ -14,6 +15,8 @@
unused_variables
)]
+use crate::common::*;
+
extern "C" {
fn __xstat(
__ver: libc::c_int,
@@ -23,181 +26,12 @@ extern "C" {
fn memcpy(_: *mut libc::c_void, _: *const libc::c_void, _: libc::c_ulong) -> *mut libc::c_void;
}
-pub type __dev_t = libc::c_ulong;
-pub type __uid_t = libc::c_uint;
-pub type __gid_t = libc::c_uint;
-pub type __ino_t = libc::c_ulong;
-pub type __mode_t = libc::c_uint;
-#[cfg(target_arch = "x86_64")]
-pub type __nlink_t = libc::c_ulong;
-#[cfg(not(target_arch = "x86_64"))]
-pub type __nlink_t = libc::c_uint;
-pub type __off_t = libc::c_long;
-pub type __time_t = libc::c_long;
-#[cfg(target_arch = "x86_64")]
-pub type __blksize_t = libc::c_long;
-#[cfg(not(target_arch = "x86_64"))]
-pub type __blksize_t = libc::c_int;
-pub type __blkcnt_t = libc::c_long;
-pub type __syscall_slong_t = libc::c_long;
-pub type gid_t = __gid_t;
-pub type uid_t = __uid_t;
-
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-
-// #define __S_IFREG 0100000 /* Regular file. */
-#[macro_export]
-macro_rules! _S_IFREG {
- () => {
- 0o100000
- };
-}
-
-// #define __S_IFDIR 0040000 /* Directory. */
-#[macro_export]
-macro_rules! _S_IFDIR {
- () => {
- 0o40000
- };
-}
-
-// #define SUDO_PATH_MISSING -1
-#[macro_export]
-macro_rules! SUDO_PATH_MISSING {
- () => {
- -1
- };
-}
-
-// #define __S_IFMT 0170000 /* These bits determine file type. */
-#[macro_export]
-macro_rules! _S_IFMT {
- () => {
- 0o170000
- };
-}
-
-// #define SUDO_PATH_BAD_TYPE -2
-#[macro_export]
-macro_rules! SUDO_PATH_BAD_TYPE {
- () => {
- -2
- };
-}
-
-// #define SUDO_PATH_WRONG_OWNER -3
-#[macro_export]
-macro_rules! SUDO_PATH_WRONG_OWNER {
- () => {
- -3
- };
-}
-
-// #define SUDO_PATH_WORLD_WRITABLE -4
-#[macro_export]
-macro_rules! SUDO_PATH_WORLD_WRITABLE {
- () => {
- -4
- };
-}
-
-// #define SUDO_PATH_GROUP_WRITABLE -5
-#[macro_export]
-macro_rules! SUDO_PATH_GROUP_WRITABLE {
- () => {
- -5
- };
-}
-
-// #define __S_IWRITE 0200 /* Write by owner. */
-// #define S_IWUSR __S_IWRITE /* Write by owner. */
-#[macro_export]
-macro_rules! S_IWUSR {
- () => {
- 0200
- };
-}
-
-// #define S_IWGRP (S_IWUSR >> 3) /* Write by group. */
-#[macro_export]
-macro_rules! S_IWGRP {
- () => {
- S_IWUSR!() >> 3
- };
-}
-
-// #define S_IWOTH (S_IWGRP >> 3) /* Write by others. */
-#[macro_export]
-macro_rules! S_IWOTH {
- () => {
- S_IWGRP!() >> 3
- };
-}
-
-// #define SUDO_PATH_SECURE 0
-macro_rules! SUDO_PATH_SECURE {
- () => {
- 0
- };
-}
-
-// #define ISSET(t, f) ((t) & (f))
-#[macro_export]
-macro_rules! ISSET {
- ($_t:expr, $_f:expr) => {
- (($_t) & ($_f))
- };
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timespec {
- pub tv_sec: __time_t,
- pub tv_nsec: __syscall_slong_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct stat {
- pub st_dev: __dev_t,
- pub st_ino: __ino_t,
- #[cfg(target_arch = "x86_64")]
- pub st_nlink: __nlink_t,
- pub st_mode: __mode_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub st_nlink: __nlink_t,
- pub st_uid: __uid_t,
- pub st_gid: __gid_t,
- #[cfg(target_arch = "x86_64")]
- pub __pad0: libc::c_int,
- pub st_rdev: __dev_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub __pad1: __dev_t,
- pub st_size: __off_t,
- pub st_blksize: __blksize_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub __pad2: libc::c_int,
- pub st_blocks: __blkcnt_t,
- pub st_atim: timespec,
- pub st_mtim: timespec,
- pub st_ctim: timespec,
- #[cfg(target_arch = "x86_64")]
- pub __glibc_reserved: [__syscall_slong_t; 3],
- #[cfg(not(target_arch = "x86_64"))]
- pub __glibc_reserved: [libc::c_int; 2],
-}
-
#[inline]
unsafe extern "C" fn stat(
mut __path: *const libc::c_char,
mut __statbuf: *mut stat,
) -> libc::c_int {
- #[cfg(target_arch = "x86_64")]
- return __xstat(1 as libc::c_int, __path, __statbuf);
- #[cfg(not(target_arch = "x86_64"))]
- return __xstat(0 as libc::c_int, __path, __statbuf);
+ return __xstat(xstat_flag as libc::c_int, __path, __statbuf);
}
/*
@@ -211,60 +45,23 @@ pub unsafe extern "C" fn sudo_secure_path(
mut gid: gid_t,
mut sbp: *mut stat,
) -> libc::c_int {
- let mut sb: stat = stat {
- st_dev: 0,
- st_ino: 0,
- #[cfg(target_arch = "x86_64")]
- st_nlink: 0,
- st_mode: 0,
- #[cfg(not(target_arch = "x86_64"))]
- st_nlink: 0,
- st_uid: 0,
- st_gid: 0,
- #[cfg(target_arch = "x86_64")]
- __pad0: 0,
- st_rdev: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad1: 0,
- st_size: 0,
- st_blksize: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad2: 0,
- st_blocks: 0,
- st_atim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_mtim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_ctim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- #[cfg(target_arch = "x86_64")]
- __glibc_reserved: [0; 3],
- #[cfg(not(target_arch = "x86_64"))]
- __glibc_reserved: [0; 2],
- };
-
- let mut ret: libc::c_int = SUDO_PATH_MISSING!();
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ let mut sb: stat = sb_all_arch;
+ let mut ret: libc::c_int = SUDO_PATH_MISSING;
+ debug_decl!(SUDO_DEBUG_UTIL);
if (!path.is_null()) && (stat(path, &mut sb) == 0) {
if (sb.st_mode & _S_IFMT!()) != c_type {
- ret = SUDO_PATH_BAD_TYPE!();
+ ret = SUDO_PATH_BAD_TYPE;
} else if uid != -(1 as libc::c_int) as uid_t && sb.st_uid != uid {
- ret = SUDO_PATH_WRONG_OWNER!();
+ ret = SUDO_PATH_WRONG_OWNER;
} else if (sb.st_mode & S_IWOTH!()) != 0 {
- ret = SUDO_PATH_WORLD_WRITABLE!();
+ ret = SUDO_PATH_WORLD_WRITABLE;
} else if ISSET!(sb.st_mode, S_IWGRP!()) != 0
&& (gid == -(1 as libc::c_int) as gid_t || sb.st_gid != gid)
{
- ret = SUDO_PATH_GROUP_WRITABLE!();
+ ret = SUDO_PATH_GROUP_WRITABLE;
} else {
- ret = SUDO_PATH_SECURE!();
+ ret = SUDO_PATH_SECURE;
}
if !sbp.is_null() {
memcpy(
diff --git a/lib/util/src/setgroups.rs b/lib/util/src/setgroups.rs
index 3508e2d..4853148 100644
--- a/lib/util/src/setgroups.rs
+++ b/lib/util/src/setgroups.rs
@@ -12,25 +12,14 @@
unused_mut
)]
+use crate::common::*;
+
extern "C" {
fn sysconf(__name: libc::c_int) -> libc::c_long;
fn __errno_location() -> *mut libc::c_int;
fn setgroups(__n: size_t, __groups: *const gid_t) -> libc::c_int;
}
-//func be included
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-
-pub type gid_t = libc::c_uint;
-pub type size_t = libc::c_ulong;
-
-//define
-pub const EINVAL: libc::c_int = 22;
-pub const _SC_NGROUPS_MAX: libc::c_int = 3;
-pub const NGROUPS_MAX: libc::c_int = 65536;
-
//func sudo_setgroups_v1
#[no_mangle]
unsafe extern "C" fn sudo_setgroups_v1(
@@ -40,7 +29,7 @@ unsafe extern "C" fn sudo_setgroups_v1(
let mut maxgids: libc::c_int = 0;
let mut ret: libc::c_int = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
//line43
ret = setgroups(ngids as size_t, gids as *mut gid_t);
diff --git a/lib/util/src/sha2.rs b/lib/util/src/sha2.rs
index 99e54d9..7eb6c51 100644
--- a/lib/util/src/sha2.rs
+++ b/lib/util/src/sha2.rs
@@ -13,30 +13,18 @@
unused_mut,
unused_must_use
)]
+
+use crate::common::*;
+
extern "C" {
fn memset(__dest: *mut libc::c_void, __ch: libc::c_int, __len: size_t) -> *mut libc::c_void;
fn memcpy(_: *mut libc::c_void, _: *const libc::c_void, _: libc::c_ulong) -> *mut libc::c_void;
fn sudo_memset_s(v: *mut libc::c_void, smax: size_t, c: libc::c_int, n: size_t) -> libc::c_int;
}
-pub type __uint64_t = libc::c_ulong;
-pub type uint64_t = __uint64_t;
-pub type __uint32_t = libc::c_uint;
-pub type uint32_t = __uint64_t;
-pub type __uint8_t = libc::c_uchar;
-pub type uint8_t = __uint8_t;
-pub type size_t = libc::c_ulong;
-pub const SHA512_BLOCK_LENGTH: usize = 128;
+//#define SHA256_BLOCK_LENGTH 64
pub const SHA256_BLOCK_LENGTH: libc::c_int = 64;
-pub struct SHA2_CTX {
- pub state: state,
- pub count: [uint64_t; 2],
- pub buffer: [uint8_t; SHA512_BLOCK_LENGTH],
-}
-pub union state {
- pub st32: [uint32_t; 8],
- pub st64: [uint64_t; 8],
-}
+
macro_rules! BE8TO32 {
($x:expr,$y:expr) => {
$x = ((*$y.offset(0 as isize) & 255) as uint32_t) << 24
diff --git a/lib/util/src/sig2str.rs b/lib/util/src/sig2str.rs
index be45208..4249ddf 100644
--- a/lib/util/src/sig2str.rs
+++ b/lib/util/src/sig2str.rs
@@ -14,23 +14,7 @@
unused_mut
)]
-use crate::EINVAL;
-
-// #define SIGRTMIN (__libc_current_sigrtmin ())
-#[macro_export]
-macro_rules! SIGRTMIN {
- () => {
- (__libc_current_sigrtmin())
- };
-}
-
-// #define SIGRTMAX (__libc_current_sigrtmax ())
-#[macro_export]
-macro_rules! SIGRTMAX {
- () => {
- (__libc_current_sigrtmax())
- };
-}
+use crate::common::*;
// # define SIG2STR_MAX 32
#[macro_export]
@@ -39,19 +23,16 @@ macro_rules! SIG2STR_MAX {
32
};
}
-
-/* Biggest signal number + 1 (including real-time signals). */
-// #define _NSIG (__SIGRTMAX + 1)
+/*
+/* sys_sigabbrev is not declared by glibc */
+// # define sudo_sys_signame sys_sigabbrev
#[macro_export]
-macro_rules! NSIG {
+macro_rules! sudo_sys_signame {
() => {
- (SIGRTMAX!() + 1)
+ sys_sigabbrev
};
}
-
-pub type size_t = libc::c_ulong;
-pub const _SC_RTSIG_MAX: libc::c_uint = 31;
-pub type __int32_t = libc::c_int;
+*/
pub const _ISlower: libc::c_uint = 512;
extern "C" {
@@ -66,6 +47,7 @@ extern "C" {
_: ...
) -> libc::c_int;
fn sudo_strlcpy(dst: *mut libc::c_char, src: *const libc::c_char, siz: size_t) -> size_t;
+ //static sys_sigabbrev: [*const libc::c_char; 65];
fn __ctype_toupper_loc() -> *mut *const __int32_t;
fn __ctype_b_loc() -> *mut *const libc::c_ushort;
}
@@ -132,6 +114,8 @@ pub unsafe extern "C" fn sudo_sig2str(
sudo_sys_signame[7 as libc::c_int as usize] =
b"BUS\0" as *const u8 as *const libc::c_char as *mut libc::c_char;
}
+
+
if (sudo_sys_signame[11 as libc::c_int as usize]).is_null() {
sudo_sys_signame[11 as libc::c_int as usize] =
b"SEGV\0" as *const u8 as *const libc::c_char as *mut libc::c_char;
@@ -265,7 +249,7 @@ pub unsafe extern "C" fn sudo_sig2str(
return 0;
}
- if signo > 0 && signo < NSIG!() && !(sudo_sys_signame[signo as usize]).is_null() {
+ if signo > 0 && signo < NSIG as libc::c_int && !(sudo_sys_signame[signo as usize]).is_null() {
sudo_strlcpy(signame, sudo_sys_signame[signo as usize], SIG2STR_MAX!());
/* Make sure we always return an upper case signame. */
@@ -282,6 +266,6 @@ pub unsafe extern "C" fn sudo_sig2str(
}
return 0 as libc::c_int;
}
- *__errno_location() = EINVAL!();
+ *__errno_location() = EINVAL;
return -(1 as libc::c_int);
}
diff --git a/lib/util/src/str2sig.rs b/lib/util/src/str2sig.rs
index 00989e8..575a6d2 100644
--- a/lib/util/src/str2sig.rs
+++ b/lib/util/src/str2sig.rs
@@ -11,9 +11,7 @@
unused_mut
)]
-use crate::EINVAL;
-use crate::SIGRTMAX;
-use crate::SIGRTMIN;
+use crate::common::*;
extern "C" {
fn __ctype_b_loc() -> *mut *const libc::c_ushort;
@@ -33,6 +31,7 @@ extern "C" {
fn strcmp(_: *const libc::c_char, _: *const libc::c_char) -> libc::c_int;
fn sysconf(__name: libc::c_int) -> libc::c_long;
fn strcasecmp(_: *const libc::c_char, _: *const libc::c_char) -> libc::c_int;
+// static sys_sigabbrev: [*const libc::c_char; 65];
fn __errno_location() -> *mut libc::c_int;
}
@@ -85,15 +84,12 @@ static mut sigaliases: [sigalias; 6] = [
},
];
+//#define SIGABRT 6 /* Abnormal termination. */
pub const SIGABRT: libc::c_int = 6;
pub const SIGCLD: libc::c_int = 17;
pub const SIGIO: libc::c_int = 29;
pub const SIGIOT: libc::c_int = 6;
pub const SIGPOLL: libc::c_int = 29;
-pub const _ISdigit: libc::c_uint = 2048;
-pub const __SIGRTMIN: libc::c_uint = 64;
-pub const NSIG: libc::c_uint = __SIGRTMIN + 1;
-pub const _SC_RTSIG_MAX: libc::c_int = 31;
#[no_mangle]
pub unsafe extern "C" fn sudo_str2sig(
@@ -103,7 +99,6 @@ pub unsafe extern "C" fn sudo_str2sig(
let mut alias: *mut sigalias = 0 as *mut sigalias;
let mut errstr: *const libc::c_char = 0 as *const libc::c_char;
let mut signo: libc::c_int = 0;
-
static mut sudo_sys_signame: [*mut libc::c_char; 65] =
[0 as *const libc::c_char as *mut libc::c_char; 65];
let mut i: libc::c_int = 0;
@@ -245,7 +240,6 @@ pub unsafe extern "C" fn sudo_str2sig(
sudo_sys_signame[23 as libc::c_int as usize] =
b"URG\0" as *const u8 as *const libc::c_char as *mut libc::c_char;
}
-
if (*(*__ctype_b_loc()).offset(*signame.offset(0 as isize) as libc::c_uchar as isize)
as libc::c_int
& _ISdigit as libc::c_ushort as libc::c_int)
@@ -263,6 +257,7 @@ pub unsafe extern "C" fn sudo_str2sig(
*result = signo;
return 0;
}
+
if strncmp(
signame,
b"RTMIN\0" as *const u8 as *const libc::c_char,
@@ -290,6 +285,7 @@ pub unsafe extern "C" fn sudo_str2sig(
}
}
}
+
if strncmp(
signame,
b"RTMAX\0" as *const u8 as *const libc::c_char,
@@ -325,7 +321,6 @@ pub unsafe extern "C" fn sudo_str2sig(
}
alias = alias.offset(1);
}
-
signo = 1;
while signo < NSIG as libc::c_int {
if !(sudo_sys_signame[signo as usize]).is_null() {
@@ -336,6 +331,6 @@ pub unsafe extern "C" fn sudo_str2sig(
}
signo += 1;
}
- *__errno_location() = EINVAL!();
+ *__errno_location() = EINVAL;
return -1;
}
diff --git a/lib/util/src/strsplit.rs b/lib/util/src/strsplit.rs
index 63871a0..e6ce346 100644
--- a/lib/util/src/strsplit.rs
+++ b/lib/util/src/strsplit.rs
@@ -6,10 +6,7 @@
#![allow(unused_variables, unused_mut, unused_assignments)]
-//use other file's func
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_ptr_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
//line42
#[no_mangle]
@@ -24,7 +21,7 @@ unsafe fn sudo_strsplit_v1(
let mut s: *const libc::c_char = 0 as *const libc::c_char;
//line45
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
//line 48
if str.is_null() {
diff --git a/lib/util/src/strtobool.rs b/lib/util/src/strtobool.rs
index 30efdf4..53b39bb 100644
--- a/lib/util/src/strtobool.rs
+++ b/lib/util/src/strtobool.rs
@@ -11,12 +11,7 @@
unused_mut
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-// use crate::sudo_debug::sudo_debug_printf2_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERROR;
-use crate::sudo_debug_macro::SUDO_DEBUG_LINENO;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
extern "C" {
fn strcasecmp(__s1: *const libc::c_char, __s2: *const libc::c_char) -> libc::c_int;
@@ -32,7 +27,8 @@ extern "C" {
#[no_mangle]
pub unsafe extern "C" fn sudo_strtobool_v1(mut str: *const libc::c_char) -> libc::c_int {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
+
match *str as u8 as char {
'0' | '1' => {
if *str.offset(1 as isize) as libc::c_int == '\u{0}' as i32 {
@@ -75,5 +71,6 @@ pub unsafe extern "C" fn sudo_strtobool_v1(mut str: *const libc::c_char) -> libc
b"invalid boolean value \"%s\"\0" as *const u8 as *const libc::c_char,
str
);
+
debug_return_int!(-1);
}
diff --git a/lib/util/src/strtoid.rs b/lib/util/src/strtoid.rs
index 02bfbb1..a768b08 100644
--- a/lib/util/src/strtoid.rs
+++ b/lib/util/src/strtoid.rs
@@ -3,6 +3,7 @@
*
* SPDX-License-Identifier: MulanPSL-2.0
*/
+
#![allow(
dead_code,
mutable_transmutes,
@@ -13,35 +14,7 @@
unused_mut
)]
-type id_t = u32;
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_id_t_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-use crate::INT_MAX;
-
-// #define INT_MIN (-__INT_MAX__ - 1)
-#[macro_export]
-macro_rules! INT_MIN {
- () => {
- (-(INT_MAX!()) - 1)
- };
-}
-
-// #define UINT_MAX (__INT_MAX__ * 2U + 1U)
-#[macro_export]
-macro_rules! UINT_MAX {
- () => {
- ((INT_MAX!()) * (2 as libc::c_uint) + 1 as libc::c_uint)
- };
-}
-
-// #define EINVAL 22 /* Invalid argument */
-#[macro_export]
-macro_rules! EINVAL {
- () => {
- 22
- };
-}
+use crate::common::*;
extern "C" {
fn sudo_strtonumx(
@@ -51,6 +24,7 @@ extern "C" {
endp: *mut *mut libc::c_char,
errstrp: *mut *const libc::c_char,
) -> libc::c_longlong;
+
fn __errno_location() -> *mut libc::c_int;
}
@@ -63,6 +37,7 @@ unsafe extern "C" fn valid_separator(
mut sep: *const libc::c_char,
) -> bool {
let mut valid: bool = false;
+
if ep != p {
/* check for valid separator (including '\0') */
if sep.is_null() {
@@ -72,6 +47,7 @@ unsafe extern "C" fn valid_separator(
if *ep == *sep {
valid = true;
}
+
if !(*sep as libc::c_int != '\u{0}' as i32) {
break;
}
@@ -98,7 +74,9 @@ pub unsafe extern "C" fn sudo_strtoidx_v1(
let mut errstr: *const libc::c_char = 0 as *const libc::c_char;
let mut ep: *mut libc::c_char = 0 as *mut libc::c_char;
let mut ret: id_t = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+
+ debug_decl!(SUDO_DEBUG_UTIL);
+
ret = sudo_strtonumx(
p,
INT_MIN!() as libc::c_longlong,
@@ -115,17 +93,21 @@ pub unsafe extern "C" fn sudo_strtoidx_v1(
|| ret == UINT_MAX!() as id_t
|| !valid_separator(p, ep, sep)
{
+ // 暂时不处理国际化问题
errstr = b"invalid value\0" as *const u8 as *const libc::c_char;
- *__errno_location() = EINVAL!() as libc::c_int;
+ *__errno_location() = EINVAL;
ret = 0;
}
}
+
if !errstrp.is_null() {
*errstrp = errstr;
}
+
if !endp.is_null() {
*endp = ep;
}
+
debug_return_id_t!(ret)
}
diff --git a/lib/util/src/strtomode.rs b/lib/util/src/strtomode.rs
index feec9ff..6684faf 100644
--- a/lib/util/src/strtomode.rs
+++ b/lib/util/src/strtomode.rs
@@ -14,21 +14,7 @@
unused_mut
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-
-type mode_t = i64;
-pub const S_IRWXU: mode_t = 448;
-pub const S_IRWXG: mode_t = 56;
-pub const S_IRWXO: mode_t = 7;
-
-// # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
-macro_rules! ACCESSPERMS {
- () => {
- (S_IRWXU | S_IRWXG | S_IRWXO)
- };
-}
+use crate::common::*;
extern "C" {
fn strtol(_: *const libc::c_char, _: *mut *mut libc::c_char, _: libc::c_int) -> libc::c_long;
@@ -42,7 +28,7 @@ pub unsafe extern "C" fn sudo_strtomode_v1(
let mut ep: *mut libc::c_char = 0 as *mut libc::c_char;
let mut lval: libc::c_long = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
*__errno_location() = 0 as libc::c_int;
lval = strtol(cp, &mut ep, 8 as libc::c_int);
@@ -54,7 +40,7 @@ pub unsafe extern "C" fn sudo_strtomode_v1(
debug_return_int!(0);
}
- if lval < 0 || lval > ACCESSPERMS!() {
+ if lval < 0 || lval > (ACCESSPERMS!() as libc::c_long) {
if !errstr.is_null() {
*errstr = if lval < 0 {
b"value too small\0" as *const u8 as *const libc::c_char
@@ -65,6 +51,7 @@ pub unsafe extern "C" fn sudo_strtomode_v1(
*__errno_location() = libc::ERANGE as libc::c_int;
debug_return_int!(0);
}
+
if !errstr.is_null() {
*errstr = 0 as *const libc::c_char;
}
diff --git a/lib/util/src/strtonum.rs b/lib/util/src/strtonum.rs
index f8fc4ff..19b5c48 100644
--- a/lib/util/src/strtonum.rs
+++ b/lib/util/src/strtonum.rs
@@ -12,16 +12,13 @@
unused_mut
)]
+use crate::common::*;
+
extern "C" {
- fn __errno_location() -> *mut libc::c_int;
fn __ctype_b_loc() -> *mut *const libc::c_ushort;
+ fn __errno_location() -> *mut libc::c_int;
}
-pub const _ISspace: libc::c_uint = 8192;
-pub const _ISdigit: libc::c_uint = 2048;
-pub const EINVAL: libc::c_int = 22;
-pub const ERANGE: libc::c_int = 34;
-
#[derive(Eq, PartialEq)]
enum strtonum_err {
STN_INITIAL = 0,
@@ -46,7 +43,6 @@ pub unsafe extern "C" fn sudo_strtonumx(
let mut ch: libc::c_uchar = 0;
let mut remainder: libc::c_int = 0;
let mut sign: libc::c_char = 0;
-
if minval > maxval {
errval = strtonum_err::STN_INVALID;
} else {
@@ -61,7 +57,6 @@ pub unsafe extern "C" fn sudo_strtonumx(
break;
}
}
-
match ch as u8 as char {
'-' => {
sign = '-' as i32 as libc::c_char;
@@ -154,7 +149,6 @@ pub unsafe extern "C" fn sudo_strtonumx(
}
}
}
-
match errval {
strtonum_err::STN_INITIAL | strtonum_err::STN_VALID => {
if !errstrp.is_null() {
@@ -183,7 +177,6 @@ pub unsafe extern "C" fn sudo_strtonumx(
}
}
}
-
if !endp.is_null() {
if errval == strtonum_err::STN_INITIAL || errval == strtonum_err::STN_INVALID {
*endp = str as *mut libc::c_char;
@@ -193,7 +186,6 @@ pub unsafe extern "C" fn sudo_strtonumx(
}
return result;
}
-
#[no_mangle]
pub unsafe extern "C" fn sudo_strtonum(
mut str: *const libc::c_char,
@@ -205,13 +197,11 @@ pub unsafe extern "C" fn sudo_strtonum(
let mut ep: *mut libc::c_char = 0 as *mut libc::c_char;
let mut ret: libc::c_longlong = 0;
ret = sudo_strtonumx(str, minval, maxval, &mut ep, &mut errstr);
-
if str == ep || *ep as libc::c_int != '\u{0}' as i32 {
*__errno_location() = EINVAL;
errstr = b"invalid value\0" as *const u8 as *const libc::c_char;
ret = 0 as libc::c_longlong;
}
-
if !errstrp.is_null() {
*errstrp = errstr;
}
diff --git a/lib/util/src/sudo_conf.rs b/lib/util/src/sudo_conf.rs
index 5fead52..499ea8d 100644
--- a/lib/util/src/sudo_conf.rs
+++ b/lib/util/src/sudo_conf.rs
@@ -14,122 +14,15 @@
unused_mut,
unreachable_code
)]
-use crate::INT_MAX;
-use crate::ISSET;
-
-// use crate::fatal::sudo_warnx_nodebug_v1;
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_bool_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug::sudo_debug_exit_ptr_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERROR;
-use crate::sudo_debug_macro::SUDO_DEBUG_INFO;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-use crate::sudo_debug_macro::SUDO_DEBUG_WARN;
-
-pub type __dev_t = libc::c_ulong;
-pub type __uid_t = libc::c_uint;
-pub type __gid_t = libc::c_uint;
-pub type __ino_t = libc::c_ulong;
-pub type __mode_t = libc::c_uint;
-#[cfg(target_arch = "x86_64")]
-pub type __nlink_t = libc::c_ulong;
-#[cfg(not(target_arch = "x86_64"))]
-pub type __nlink_t = libc::c_uint;
-pub type __off_t = libc::c_long;
-pub type __off64_t = libc::c_long;
-pub type __time_t = libc::c_long;
-#[cfg(target_arch = "x86_64")]
-pub type __blksize_t = libc::c_long;
-#[cfg(not(target_arch = "x86_64"))]
-pub type __blksize_t = libc::c_int;
-pub type __blkcnt_t = libc::c_long;
-pub type __ssize_t = libc::c_long;
-pub type __syscall_slong_t = libc::c_long;
-pub type gid_t = __gid_t;
-pub type uid_t = __uid_t;
-pub type ssize_t = __ssize_t;
-pub type size_t = libc::c_ulong;
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timespec {
- pub tv_sec: __time_t,
- pub tv_nsec: __syscall_slong_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct stat {
- pub st_dev: __dev_t,
- pub st_ino: __ino_t,
- #[cfg(target_arch = "x86_64")]
- pub st_nlink: __nlink_t,
- pub st_mode: __mode_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub st_nlink: __nlink_t,
- pub st_uid: __uid_t,
- pub st_gid: __gid_t,
- #[cfg(target_arch = "x86_64")]
- pub __pad0: libc::c_int,
- pub st_rdev: __dev_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub __pad1: __dev_t,
- pub st_size: __off_t,
- pub st_blksize: __blksize_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub __pad2: libc::c_int,
- pub st_blocks: __blkcnt_t,
- pub st_atim: timespec,
- pub st_mtim: timespec,
- pub st_ctim: timespec,
- #[cfg(target_arch = "x86_64")]
- pub __glibc_reserved: [__syscall_slong_t; 3],
- #[cfg(not(target_arch = "x86_64"))]
- pub __glibc_reserved: [libc::c_int; 2],
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct _IO_FILE {
- pub _flags: libc::c_int,
- pub _IO_read_ptr: *mut libc::c_char,
- pub _IO_read_end: *mut libc::c_char,
- pub _IO_read_base: *mut libc::c_char,
- pub _IO_write_base: *mut libc::c_char,
- pub _IO_write_ptr: *mut libc::c_char,
- pub _IO_write_end: *mut libc::c_char,
- pub _IO_buf_base: *mut libc::c_char,
- pub _IO_buf_end: *mut libc::c_char,
- pub _IO_save_base: *mut libc::c_char,
- pub _IO_backup_base: *mut libc::c_char,
- pub _IO_save_end: *mut libc::c_char,
- pub _markers: *mut _IO_marker,
- pub _chain: *mut _IO_FILE,
- pub _fileno: libc::c_int,
- pub _flags2: libc::c_int,
- pub _old_offset: __off_t,
- pub _cur_column: libc::c_ushort,
- pub _vtable_offset: libc::c_schar,
- pub _shortbuf: [libc::c_char; 1],
- pub _lock: *mut libc::c_void,
- pub _offset: __off64_t,
- pub _codecvt: *mut _IO_codecvt,
- pub _wide_data: *mut _IO_wide_data,
- pub _freeres_list: *mut _IO_FILE,
- pub _freeres_buf: *mut libc::c_void,
- pub __pad5: size_t,
- pub _mode: libc::c_int,
- pub _unused2: [libc::c_char; 20],
-}
-pub type FILE = _IO_FILE;
+use crate::common::*;
/* Indexes into path_table[] below (order is important). */
// #define SUDO_CONF_PATH_ASKPASS 0
// #define SUDO_CONF_PATH_SESH 1
// #define SUDO_CONF_PATH_NOEXEC 2
// #define SUDO_CONF_PATH_PLUGIN_DIR 3
-// #define SUDO_CONF_PATH_DEVSEARCH 4
+// #define SUDO_CONF_PATH_DEVSEARCH 4
pub const SUDO_CONF_PATH_ASKPASS: libc::c_int = 0;
pub const SUDO_CONF_PATH_SESH: libc::c_int = 1;
pub const SUDO_CONF_PATH_NOEXEC: libc::c_int = 2;
@@ -138,52 +31,15 @@ pub const SUDO_CONF_PATH_DEVSEARCH: libc::c_int = 4;
pub const __LC_ALL: libc::c_int = 6;
pub const LC_ALL: libc::c_int = __LC_ALL;
-// # define ROOT_UID 0
-pub const ROOT_UID: libc::c_int = 0 as libc::c_int;
-
-/* secure_path.c */
-// #define SUDO_PATH_SECURE 0
-// #define SUDO_PATH_MISSING -1
-// #define SUDO_PATH_BAD_TYPE -2
-// #define SUDO_PATH_WRONG_OWNER -3
-// #define SUDO_PATH_WORLD_WRITABLE -4
-// #define SUDO_PATH_GROUP_WRITABLE -5
-pub const SUDO_PATH_SECURE: libc::c_int = 0;
-pub const SUDO_PATH_MISSING: libc::c_int = -1;
-pub const SUDO_PATH_BAD_TYPE: libc::c_int = -2;
-pub const SUDO_PATH_WRONG_OWNER: libc::c_int = -3;
-pub const SUDO_PATH_WORLD_WRITABLE: libc::c_int = -4;
-pub const SUDO_PATH_GROUP_WRITABLE: libc::c_int = -5;
-
-// #define ENOENT 2 /* No such file or directory */
-pub const ENOENT: libc::c_int = 2;
/* Values of sudo_conf_group_source() */
// #define GROUP_SOURCE_ADAPTIVE 0
-// #define GROUP_SOURCE_STATIC 1
+// #define GROUP_SOURCE_STATIC 1
// #define GROUP_SOURCE_DYNAMIC 2
pub const GROUP_SOURCE_ADAPTIVE: libc::c_int = 0;
pub const GROUP_SOURCE_STATIC: libc::c_int = 1;
pub const GROUP_SOURCE_DYNAMIC: libc::c_int = 2;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _IO_marker {
- _unused: [u8; 0],
-}
-
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _IO_codecvt {
- _unused: [u8; 0],
-}
-
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _IO_wide_data {
- _unused: [u8; 0],
-}
-
extern "C" {
fn fclose(__stream: *mut FILE) -> libc::c_int;
fn fopen(_: *const libc::c_char, _: *const libc::c_char) -> *mut FILE;
@@ -210,6 +66,7 @@ extern "C" {
msgid: *const libc::c_char,
) -> *mut libc::c_char;
fn sudo_warn_nodebug_v1(fmt: *const libc::c_char, _: ...);
+ // fn sudo_warnx_nodebug_v1(fmt: *const libc::c_char, _: ...);
fn sudo_secure_file_v1(
path: *const libc::c_char,
uid: uid_t,
@@ -246,40 +103,6 @@ extern "C" {
);
fn sudo_warnx_nodebug_v1(fmt: *const libc::c_char, _: ...);
}
-// #define isblank(c) __isctype((c), _ISblank)
-macro_rules! isblank {
- ($c:expr) => {
- __isctype!($c, _ISblank!())
- };
-}
-
-// # define __isctype(c, type) ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
-macro_rules! __isctype {
- ($c:expr, $type:expr) => {
- ((*__ctype_b_loc()).offset($c as isize) as libc::c_int)
- & ($type as libc::c_int as libc::c_ushort as libc::c_int)
- };
-}
-
-// define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
-// _ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
-#[macro_export]
-macro_rules! _ISbit {
- ($bit:expr) => {
- if ($bit) < 8 {
- ((1 << ($bit)) << 8)
- } else {
- ((1 << ($bit)) >> 8)
- }
- };
-}
-
-#[macro_export]
-macro_rules! _ISblank {
- () => {
- _ISbit!(8)
- };
-}
// # define _PATH_SUDO_ASKPASS NULL
macro_rules! _PATH_SUDO_ASKPASS {
@@ -291,14 +114,14 @@ macro_rules! _PATH_SUDO_ASKPASS {
// # define _PATH_SUDO_SESH "/usr/libexec/utsudo/sesh"
macro_rules! _PATH_SUDO_SESH {
() => {
- (b"/usr/libexec/utsudo/sesh\0" as *const u8 as *const libc::c_char as *mut libc::c_char)
+ (b"/usr/libexec/utsudo/utsesh\0" as *const u8 as *const libc::c_char as *mut libc::c_char)
};
}
-// # define _PATH_SUDO_NOEXEC "/usr/libexec/utsudo/sudo_noexec.so"
+// # define _PATH_SUDO_NOEXEC "/usr/libexec/utsudo/utsudo_noexec.so"
macro_rules! _PATH_SUDO_NOEXEC {
() => {
- (b"/usr/libexec/utsudo/sudo_noexec.so\0" as *const u8 as *const libc::c_char
+ (b"/usr/libexec/utsudo/utsudo_noexec.so\0" as *const u8 as *const libc::c_char
as *mut libc::c_char)
};
}
@@ -317,59 +140,13 @@ macro_rules! _PATH_SUDO_DEVSEARCH {
};
}
-// # define _PATH_SUDO_CONF "/etc/sudo.conf"
+// # define _PATH_SUDO_CONF "/etc/utsudo.conf"
macro_rules! _PATH_SUDO_CONF {
() => {
- (b"/etc/sudo.conf\0" as *const u8 as *const libc::c_char)
+ (b"/etc/utsudo.conf\0" as *const u8 as *const libc::c_char)
};
}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_debug_file {
- pub entries: C2RustUnnamed_0,
- pub debug_file: *mut libc::c_char,
- pub debug_flags: *mut libc::c_char,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_0 {
- pub tqe_next: *mut sudo_debug_file,
- pub tqe_prev: *mut *mut sudo_debug_file,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sudo_conf_debug_file_list {
- pub tqh_first: *mut sudo_debug_file,
- pub tqh_last: *mut *mut sudo_debug_file,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct plugin_info {
- pub entries: C2RustUnnamed_1,
- pub path: *mut libc::c_char,
- pub symbol_name: *mut libc::c_char,
- pub options: *mut *mut libc::c_char,
- pub lineno: libc::c_uint,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct C2RustUnnamed_1 {
- pub tqe_next: *mut plugin_info,
- pub tqe_prev: *mut *mut plugin_info,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct plugin_info_list {
- pub tqh_first: *mut plugin_info,
- pub tqh_last: *mut *mut plugin_info,
-}
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct sudo_conf_debug {
@@ -377,7 +154,6 @@ pub struct sudo_conf_debug {
pub debug_files: sudo_conf_debug_file_list,
pub progname: *mut libc::c_char,
}
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_2 {
@@ -390,7 +166,6 @@ pub struct sudo_conf_debug_list {
pub tqh_first: *mut sudo_conf_debug,
pub tqh_last: *mut *mut sudo_conf_debug,
}
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct sudo_conf_table {
@@ -411,7 +186,6 @@ pub struct sudo_conf_data {
pub plugins: plugin_info_list,
pub path_table: [sudo_conf_path_table; 6],
}
-
#[derive(Copy, Clone)]
#[repr(C)]
pub struct sudo_conf_path_table {
@@ -466,12 +240,12 @@ pub unsafe extern "C" fn parse_variable(
let mut var: *mut sudo_conf_table = 0 as *mut sudo_conf_table;
let mut ret: libc::c_int = 0;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
var = sudo_conf_var_table.as_mut_ptr();
while !((*var).name).is_null() {
if strncmp(entry, (*var).name, (*var).namelen as libc::c_ulong) == 0
- && isblank!(entry.offset((*var).namelen as isize)) != 0
+ && isblank!(*entry.offset((*var).namelen as isize)) != 0
{
entry = entry.offset(((*var).namelen + 1) as isize);
@@ -489,7 +263,7 @@ pub unsafe extern "C" fn parse_variable(
sudo_debug_printf!(
ret,
b"%s: %s:%u: Set %s %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
conf_file,
lineno,
(*var).name,
@@ -499,14 +273,16 @@ pub unsafe extern "C" fn parse_variable(
}
var = var.offset(1);
} // while !((*var).name).is_null()
+
sudo_debug_printf!(
SUDO_DEBUG_WARN,
b"%s: %s:%u: unknown setting %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
conf_file,
lineno,
entry
);
+
debug_return_int!(false as libc::c_int);
}
@@ -527,7 +303,7 @@ unsafe extern "C" fn parse_path(
let mut cur: *mut sudo_conf_path_table = 0 as *mut sudo_conf_path_table;
let mut namelen: size_t = 0 as size_t;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
'bad: loop {
name = sudo_strsplit_v1(
@@ -539,6 +315,7 @@ unsafe extern "C" fn parse_path(
if name.is_null() {
break 'bad;
}
+
namelen = ep.offset_from(name) as libc::c_long as size_t;
/* Parse path (if present). */
@@ -558,10 +335,10 @@ unsafe extern "C" fn parse_path(
let mut pval: *mut libc::c_char = 0 as *mut libc::c_char;
if !path.is_null() {
pval = strdup(path);
- if !pval.is_null() {
+ if pval.is_null() {
sudo_warnx!(
b"%s: %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
b"unable to allocate memory\0" as *const u8 as *const libc::c_char
);
debug_return_int!(-1);
@@ -573,10 +350,11 @@ unsafe extern "C" fn parse_path(
}
(*cur).pval = pval;
(*cur).dynamic = true;
+
sudo_debug_printf!(
SUDO_DEBUG_INFO,
b"%s: %s:%u: Path %s %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
conf_file,
lineno,
(*cur).pname,
@@ -591,14 +369,16 @@ unsafe extern "C" fn parse_path(
cur = cur.offset(1 as isize);
} // !(*cur).pname.is_null()
+
sudo_debug_printf!(
SUDO_DEBUG_WARN,
b"%s: %s:%u: unknown path %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
conf_file,
lineno,
entry
);
+
debug_return_int!(false as libc::c_int);
break 'bad;
@@ -611,6 +391,7 @@ unsafe extern "C" fn parse_path(
conf_file,
lineno
);
+
debug_return_int!(false as libc::c_int);
}
@@ -633,7 +414,7 @@ unsafe extern "C" fn parse_debug(
let mut pathlen: size_t = 0 as size_t;
let mut prognamelen: size_t = 0 as size_t;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
/* Parse progname. */
progname = sudo_strsplit_v1(
@@ -667,7 +448,7 @@ unsafe extern "C" fn parse_debug(
&mut ep,
);
- if !flags.is_null() {
+ if flags.is_null() {
debug_return_int!(false as libc::c_int); /* not enough fields */
}
@@ -675,12 +456,13 @@ unsafe extern "C" fn parse_debug(
debug_spec = sudo_conf_data.debugging.tqh_first;
while !debug_spec.is_null() {
if strncmp((*debug_spec).progname, progname, prognamelen) == 0
- && (*debug_spec).progname.offset(prognamelen as isize) as libc::c_int == '\u{0}' as i32
+ && *((*debug_spec).progname).offset(prognamelen as isize) as libc::c_int == '\0' as i32
{
break;
}
debug_spec = (*debug_spec).entries.tqe_next;
}
+
'oom: loop {
if debug_spec.is_null() {
debug_spec = malloc(::std::mem::size_of::<sudo_conf_debug>() as libc::c_ulong)
@@ -690,7 +472,7 @@ unsafe extern "C" fn parse_debug(
break 'oom;
}
(*debug_spec).progname = strndup(progname, prognamelen);
- if !(*debug_spec).progname.is_null() {
+ if (*debug_spec).progname.is_null() {
free(debug_spec as *mut libc::c_void);
debug_spec = 0 as *mut sudo_conf_debug;
break 'oom;
@@ -708,7 +490,7 @@ unsafe extern "C" fn parse_debug(
debug_file = calloc(1, ::std::mem::size_of::<sudo_debug_file>() as libc::c_ulong)
as *mut sudo_debug_file;
- if !debug_file.is_null() {
+ if debug_file.is_null() {
break 'oom;
}
@@ -734,7 +516,7 @@ unsafe extern "C" fn parse_debug(
sudo_warnx!(
b"%s: %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
b"unable to allocate memory\0"
);
@@ -765,7 +547,7 @@ unsafe extern "C" fn parse_plugin(
let mut symlen: size_t = 0 as size_t;
let mut nopts: libc::c_uint = 0 as libc::c_uint;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
/* Parse symbol. */
symbol = sudo_strsplit_v1(
@@ -799,7 +581,7 @@ unsafe extern "C" fn parse_plugin(
}
'oom: loop {
- if *ep as libc::c_int != '\u{0}' as i32 {
+ if *ep as libc::c_int != '\0' as i32 {
/* Count number of options and allocate array. */
let mut cp: *const libc::c_char = 0 as *const libc::c_char;
let mut opt: *const libc::c_char = ep;
@@ -839,27 +621,36 @@ unsafe extern "C" fn parse_plugin(
b" \t\0" as *const u8 as *const libc::c_char,
&mut ep,
);
- while !cp.is_null() {
- *options.offset(nopts as isize) = strndup(cp, ep.offset_from(cp) as size_t);
- if ((*options).offset(nopts as isize)).is_null() {
+
+ loop {
+ if cp.is_null() {
+ break;
+ }
+ let ref mut fresh0 = *options.offset(nopts as isize);
+ *fresh0 = strndup(cp, ep.offset_from(cp) as libc::c_long as size_t);
+ if (*options.offset(nopts as isize)).is_null() {
+ let ref mut fresh1 = *options.offset(nopts as isize);
+ *fresh1 = 0 as *mut libc::c_char;
break 'oom;
}
- nopts += 1;
+ nopts = nopts.wrapping_add(1);
+
cp = sudo_strsplit_v1(
0 as *const libc::c_char,
entry_end,
b" \t\0" as *const u8 as *const libc::c_char,
&mut ep,
);
- } // while !cp.is_null()
+ }
*options.offset(nopts as isize) = 0 as *mut libc::c_char;
- } // if *ep as libc::c_int != '\u{0}' as i32
+ } // if *ep as libc::c_int != '\0' as i32
info = calloc(
- ::std::mem::size_of::<*const plugin_info>() as libc::c_ulong,
- 1,
+ ::core::mem::size_of::<plugin_info>() as libc::c_ulong,
+ 1 as libc::c_int as libc::c_ulong,
) as *mut plugin_info;
+
if info.is_null() {
break 'oom;
}
@@ -874,7 +665,7 @@ unsafe extern "C" fn parse_plugin(
(*info).options = options;
(*info).lineno = lineno;
- // TAILQ_INSERT_TAIL(&sudo_conf_data.plugins, info, entries);
+ // TAILQ_INSERT_TAIL(&sudo_conf_data.plugins, info, entries);
(*info).entries.tqe_next = 0 as *mut plugin_info;
(*info).entries.tqe_prev = sudo_conf_data.plugins.tqh_last;
*sudo_conf_data.plugins.tqh_last = info;
@@ -884,20 +675,23 @@ unsafe extern "C" fn parse_plugin(
break 'oom;
} // oom loop
+
sudo_warnx!(
b"%s: %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
b"unable to allocate memory\0" as *const u8 as *const libc::c_char
);
if !options.is_null() {
loop {
- nopts -= 1;
- if !(nopts != 0) {
+ let fresh2 = nopts;
+ nopts = nopts.wrapping_sub(1);
+ if !(fresh2 != 0) {
break;
}
free(*options.offset(nopts as isize) as *mut libc::c_void);
}
+
free(options as *mut libc::c_void);
}
if !info.is_null() {
@@ -918,7 +712,7 @@ unsafe extern "C" fn set_var_disable_coredump(
// int val = sudo_strtobool(strval);
let mut val: libc::c_int = sudo_strtobool_v1(strval);
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if val == -1 {
sudo_warnx!(
@@ -934,7 +728,7 @@ unsafe extern "C" fn set_var_disable_coredump(
sudo_conf_data.disable_coredump = val as libc::c_int != 0;
- debug_return_int!(true as libc::c_int);
+ debug_return_int!(true as libc::c_int)
}
#[no_mangle]
@@ -943,7 +737,7 @@ unsafe extern "C" fn set_var_group_source(
mut conf_file: *const libc::c_char,
mut lineno: libc::c_uint,
) -> libc::c_int {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if strcasecmp(strval, b"adaptive\0" as *const u8 as *const libc::c_char) == 0 {
sudo_conf_data.group_source = GROUP_SOURCE_ADAPTIVE;
@@ -960,8 +754,9 @@ unsafe extern "C" fn set_var_group_source(
);
debug_return_int!(false as libc::c_int);
}
- debug_return_int!(true as libc::c_int);
+ debug_return_int!(true as libc::c_int)
}
+
#[no_mangle]
unsafe extern "C" fn set_var_max_groups(
mut strval: *const libc::c_char,
@@ -969,7 +764,7 @@ unsafe extern "C" fn set_var_max_groups(
mut lineno: libc::c_uint,
) -> libc::c_int {
let mut max_groups: libc::c_int = 0 as libc::c_int;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
max_groups = sudo_strtonum(strval, 1, INT_MAX!(), 0 as *mut *const libc::c_char) as libc::c_int;
if max_groups <= 0 {
@@ -982,7 +777,7 @@ unsafe extern "C" fn set_var_max_groups(
debug_return_int!(false as libc::c_int);
}
sudo_conf_data.max_groups = max_groups;
- debug_return_int!(true as libc::c_int);
+ debug_return_int!(true as libc::c_int)
}
#[no_mangle]
@@ -992,7 +787,7 @@ unsafe extern "C" fn set_var_probe_interfaces(
mut lineno: libc::c_uint,
) -> libc::c_int {
let mut val: libc::c_int = sudo_strtobool_v1(strval);
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if val == -1 {
sudo_warnx!(
@@ -1006,7 +801,7 @@ unsafe extern "C" fn set_var_probe_interfaces(
}
sudo_conf_data.probe_interfaces = val as libc::c_int != 0;
- debug_return_int!(true as libc::c_int);
+ debug_return_int!(true as libc::c_int)
}
#[no_mangle]
@@ -1064,25 +859,25 @@ pub unsafe extern "C" fn sudo_conf_debug_files_v1(
let mut progbaselen: size_t = 0 as size_t;
let mut progbase: *const libc::c_char = progname;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
/* Determine basename if program is fully qualified (like for plugins). */
prognamelen = strlen(progname) as size_t;
- progbaselen = strlen(progname) as size_t;
+ progbaselen = prognamelen;
if *progname as libc::c_int == '/' as i32 {
progbase = strrchr(progname, '/' as i32);
progbase = progbase.offset(1 as isize);
progbaselen = strlen(progbase);
}
- /* Convert sudoedit -> sudo. */
- if progbaselen > 4
+ /* Convert utsudoedit -> utsudo. */
+ if progbaselen > 6
&& strcmp(
- progbase.offset(4 as isize),
+ progbase.offset(6 as isize),
b"edit\0" as *const u8 as *const libc::c_char,
) == 0
{
- progbaselen = progbaselen - 4;
+ progbaselen = progbaselen - 6;
}
debug_spec = sudo_conf_data.debugging.tqh_first;
@@ -1090,14 +885,13 @@ pub unsafe extern "C" fn sudo_conf_debug_files_v1(
let mut prog: *const libc::c_char = progbase;
let mut len: size_t = progbaselen;
- if ((*debug_spec).progname).offset(0 as isize) as libc::c_int == '/' as i32 {
+ if *((*debug_spec).progname).offset(0 as isize) as libc::c_int == '/' as i32 {
/* Match fully-qualified name, if possible. */
prog = progname;
len = prognamelen;
}
-
if strncasecmp((*debug_spec).progname, prog, len) == 0
- && ((*debug_spec).progname).offset(len as isize) as libc::c_int == '\u{0}' as i32
+ && *((*debug_spec).progname).offset(len as isize) as libc::c_int == '\u{0}' as i32
{
debug_return_ptr!(&mut ((*debug_spec).debug_files) as *mut sudo_conf_debug_file_list);
}
@@ -1118,51 +912,14 @@ pub unsafe extern "C" fn sudo_conf_probe_interfaces_v1() -> bool {
}
/*
- * Reads in /etc/sudo.conf and populates sudo_conf_data.
+ * Reads in /etc/utsudo.conf and populates sudo_conf_data.
*/
#[no_mangle]
pub unsafe extern "C" fn sudo_conf_read_v1(
mut conf_file: *const libc::c_char,
mut conf_types: libc::c_int,
) -> libc::c_int {
- let mut sb: stat = stat {
- st_dev: 0,
- st_ino: 0,
- #[cfg(target_arch = "x86_64")]
- st_nlink: 0,
- st_mode: 0,
- #[cfg(not(target_arch = "x86_64"))]
- st_nlink: 0,
- st_uid: 0,
- st_gid: 0,
- #[cfg(target_arch = "x86_64")]
- __pad0: 0,
- st_rdev: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad1: 0,
- st_size: 0,
- st_blksize: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad2: 0,
- st_blocks: 0,
- st_atim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_mtim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_ctim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- #[cfg(target_arch = "x86_64")]
- __glibc_reserved: [0; 3],
- #[cfg(not(target_arch = "x86_64"))]
- __glibc_reserved: [0; 2],
- };
-
+ let mut sb: stat = sb_all_arch;
let mut fp: *mut FILE = 0 as *mut FILE;
let mut ret: libc::c_int = false as libc::c_int;
@@ -1171,7 +928,7 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
let mut conf_lineno: libc::c_uint = 0 as libc::c_uint;
let mut linesize: size_t = 0 as size_t;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
prev_locale = setlocale(LC_ALL, 0 as *const libc::c_char);
if prev_locale.is_null() {
@@ -1183,7 +940,7 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
if prev_locale.is_null() {
sudo_warnx!(
b"%s: %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
b"unable to allocate memory\0" as *const u8 as *const libc::c_char
);
debug_return_int!(-(1 as libc::c_int));
@@ -1195,6 +952,7 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
{
setlocale(LC_ALL, b"C\0" as *const u8 as *mut libc::c_char);
}
+
'done: loop {
if conf_file.is_null() {
conf_file = _PATH_SUDO_CONF!();
@@ -1205,7 +963,7 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
&mut sb,
) {
SUDO_PATH_SECURE => {
- break 'done;
+ // break 'done;
}
SUDO_PATH_MISSING => {
/* Root should always be able to read sudo.conf. */
@@ -1285,7 +1043,7 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
}
cur = sudo_conf_table.as_mut_ptr();
- while (*cur).name.is_null() {
+ while !(*cur).name.is_null() {
if strncasecmp(cp, (*cur).name, (*cur).namelen as libc::c_ulong) == 0
&& isblank!(*cp.offset((*cur).namelen as isize) as isize) != 0
{
@@ -1306,13 +1064,15 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
} // ISSET
break;
} // if strncasecmp
+ i = i.wrapping_add(1);
+ cur = cur.offset(1);
} // while (*cur).name.is_null()
- if (*cur).name.is_null() {
+ if ((*cur).name).is_null() {
sudo_debug_printf!(
SUDO_DEBUG_WARN,
b"%s: %s:%u: unsupported entry: %s\0" as *const u8 as *const libc::c_char,
- stdext::function_name!().as_ptr(),
+ get_function_name!(),
conf_file,
conf_lineno,
line
@@ -1330,8 +1090,8 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
free(line as *mut libc::c_void);
/* Restore locale if needed. */
- if prev_locale.offset(0 as isize) as libc::c_int != 'C' as i32
- || prev_locale.offset(1 as isize) as libc::c_int != '\u{0}' as i32
+ if *prev_locale.offset(0 as isize) as libc::c_int != 'C' as i32
+ || *prev_locale.offset(1 as isize) as libc::c_int != '\u{0}' as i32
{
setlocale(LC_ALL, prev_locale);
}
@@ -1346,7 +1106,7 @@ pub unsafe extern "C" fn sudo_conf_read_v1(
#[no_mangle]
pub unsafe extern "C" fn sudo_conf_clear_paths_v1() {
let mut cur: *mut sudo_conf_path_table = 0 as *mut sudo_conf_path_table;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
cur = (sudo_conf_data.path_table).as_mut_ptr();
while !((*cur).pname).is_null() {
@@ -1594,7 +1354,7 @@ unsafe extern "C" fn run_static_initializers() {
pname: 0 as *const libc::c_char,
pnamelen: 0 as libc::c_uint,
dynamic: false,
- pval: _PATH_SUDO_SESH!(),
+ pval: 0 as *mut libc::c_char,
};
null
},
diff --git a/lib/util/src/sudo_debug.rs b/lib/util/src/sudo_debug.rs
index 706325d..ef7ec99 100644
--- a/lib/util/src/sudo_debug.rs
+++ b/lib/util/src/sudo_debug.rs
@@ -88,12 +88,12 @@ macro_rules! O_CREAT {
};
}
-#[macro_export]
+/*#[macro_export]
macro_rules! S_IRUSR {
() => {
0400
};
-}
+}*/
#[macro_export]
macro_rules! IGNORE_RESULT {
@@ -157,21 +157,21 @@ macro_rules! sudo_setbit {
/* Extract subsystem number and convert to an index. */
// #define SUDO_DEBUG_SUBSYS(n) (((n) >> 6) - 1)
-#[macro_export]
+/*#[macro_export]
macro_rules! SUDO_DEBUG_SUBSYS {
($_n:expr) => {
((($_n) >> 6) - 1)
};
-}
+}*/
/* Extract priority number and convert to an index. */
// #define SUDO_DEBUG_PRI(n) (((n) & 0x0f) - 1)
-#[macro_export]
+/*#[macro_export]
macro_rules! SUDO_DEBUG_PRI {
($_n:expr) => {
((($_n) & 0x0f) - 1)
};
-}
+}*/
/* Flag to include string version of errno in debug info. */
// #define SUDO_DEBUG_ERRNO (1<<4)
diff --git a/lib/util/src/sudo_debug_macro.rs b/lib/util/src/sudo_debug_macro.rs
index bb448c9..4822b7a 100644
--- a/lib/util/src/sudo_debug_macro.rs
+++ b/lib/util/src/sudo_debug_macro.rs
@@ -22,6 +22,7 @@ use crate::sudo_debug::*;
pub static mut sudo_debug_subsys: libc::c_int = 0 as libc::c_int;
+
// extern "C" {
// fn sudo_debug_printf2_v1(
// func: *const libc::c_char,
@@ -133,6 +134,7 @@ macro_rules! debug_decl {
};
}
+
macro_rules! debug_return_int {
($ret:expr) => {{
sudo_debug_exit_int_v1(
@@ -233,6 +235,7 @@ macro_rules! debug_return_bool {
}};
}
+
macro_rules! debug_return_str {
($ret:expr) => {{
sudo_debug_exit_str_v1(
@@ -246,6 +249,7 @@ macro_rules! debug_return_str {
}};
}
+
macro_rules! debug_return_const_str {
($ret:expr) => {
let mut sudo_debug_ret: *mut libc::c_char = ($ret);
diff --git a/lib/util/src/sudo_dso.rs b/lib/util/src/sudo_dso.rs
index 625cf52..510d2b8 100644
--- a/lib/util/src/sudo_dso.rs
+++ b/lib/util/src/sudo_dso.rs
@@ -14,46 +14,11 @@
unused_mut
)]
-//secure_path.rs
-use crate::ISSET;
-
-/* Values for sudo_dso_load() mode. */
-// #define SUDO_DSO_LAZY 0x1
-// #define SUDO_DSO_NOW 0x2
-// #define SUDO_DSO_GLOBAL 0x4
-// #define SUDO_DSO_LOCAL 0x8
-
-#[macro_export]
-macro_rules! SUDO_DSO_LAZY {
- () => {
- 0x1
- };
-}
-
-#[macro_export]
-macro_rules! SUDO_DSO_NOW {
- () => {
- 0x2
- };
-}
-
-#[macro_export]
-macro_rules! SUDO_DSO_GLOBAL {
- () => {
- 0x3
- };
-}
-
-#[macro_export]
-macro_rules! SUDO_DSO_LOCAL {
- () => {
- 0x4
- };
-}
+use crate::common::*;
/* The MODE argument to `dlopen' contains one of the following: */
-// #define RTLD_LAZY 0x00001 /* Lazy function call binding. */
-// #define RTLD_NOW 0x00002 /* Immediate function call binding. */
+// #define RTLD_LAZY 0x00001 /* Lazy function call binding. */
+// #define RTLD_NOW 0x00002 /* Immediate function call binding. */
#[macro_export]
macro_rules! RTLD_LAZY {
() => {
@@ -68,7 +33,7 @@ macro_rules! RTLD_NOW {
};
}
-// #define RTLD_GLOBAL 0x00100
+// #define RTLD_GLOBAL 0x00100
#[macro_export]
macro_rules! RTLD_GLOBAL {
() => {
@@ -76,7 +41,7 @@ macro_rules! RTLD_GLOBAL {
};
}
-// #define RTLD_LOCAL 0
+// #define RTLD_LOCAL 0
#[macro_export]
macro_rules! RTLD_LOCAL {
() => {
@@ -89,7 +54,6 @@ macro_rules! RTLD_LOCAL {
// #define SUDO_DSO_DEFAULT ((void *)-2) /* Use default search algorithm. */
// #define SUDO_DSO_SELF ((void *)-3) /* Search the caller itself. */
pub const SUDO_DSO_NEXT: *mut libc::c_void = -(1 as libc::c_int) as *mut libc::c_void;
-pub const SUDO_DSO_DEFAULT: *mut libc::c_void = -(2 as libc::c_int) as *mut libc::c_void;
pub const SUDO_DSO_SELF: *mut libc::c_void = -(3 as libc::c_int) as *mut libc::c_void;
// # define RTLD_NEXT ((void *) -1l)
@@ -98,9 +62,6 @@ pub const RTLD_NEXT: *mut libc::c_void = -(1 as libc::c_long) as *mut libc::c_vo
// # define RTLD_DEFAULT ((void *) 0)
pub const RTLD_DEFAULT: *mut libc::c_void = 0 as *mut libc::c_void;
-// #define ENOENT 2
-pub const ENOENT: libc::c_int = 2;
-
extern "C" {
fn dlerror() -> *mut libc::c_char;
fn dlclose(__handle: *mut libc::c_void) -> libc::c_int;
diff --git a/lib/util/src/term.rs b/lib/util/src/term.rs
index 00352ae..bf015fa 100644
--- a/lib/util/src/term.rs
+++ b/lib/util/src/term.rs
@@ -15,20 +15,11 @@
clashing_extern_declarations
)]
-//ttysize.rs文件中定义
-use crate::TIOCGWINSZ;
-
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_bool_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
+use crate::common::*;
/* Type of a signal handler. */
// typedef void (*__sighandler_t) (int);
-pub type __sighandler_t = Option<unsafe extern "C" fn(libc::c_int) -> ()>;
-pub type __pid_t = libc::c_int;
-pub type __uid_t = libc::c_uint;
-pub type __clock_t = libc::c_long;
-pub type __uint32_t = libc::c_uint;
+
pub type tcflag_t = libc::c_uint;
pub type cc_t = libc::c_uchar;
pub const NCCS: libc::c_int = 32;
@@ -48,141 +39,6 @@ pub static mut sudo_term_erase: libc::c_int = 0;
#[no_mangle]
pub static mut sudo_term_kill: libc::c_int = 0;
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union sigval {
- pub sival_int: libc::c_int,
- pub sival_ptr: *mut libc::c_void,
-}
-pub type __sigval_t = sigval;
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct siginfo_t {
- pub si_signo: libc::c_int,
- pub si_errno: libc::c_int,
- pub si_code: libc::c_int,
- pub __pad0: libc::c_int,
- pub _sifields: sifields_union,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct kill_struct {
- pub si_pid: __pid_t,
- pub si_uid: __uid_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timer_struct {
- pub si_tid: libc::c_int,
- pub si_overrun: libc::c_int,
- pub si_sigval: __sigval_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct rt_struct {
- pub si_pid: __pid_t,
- pub si_uid: __uid_t,
- pub si_sigval: __sigval_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigchld_struct {
- pub si_pid: __pid_t,
- pub si_uid: __uid_t,
- pub si_status: libc::c_int,
- pub si_utime: __clock_t,
- pub si_stime: __clock_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigfault_struct {
- pub si_addr: *mut libc::c_void,
- pub si_addr_lsb: libc::c_short,
- pub _bounds: bounds_struct,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigpoll_struct {
- pub si_band: libc::c_long,
- pub si_fd: libc::c_int,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigsys_struct {
- pub _call_addr: *mut libc::c_void,
- pub _syscall: libc::c_int,
- pub _arch: libc::c_uint,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union sifields_union {
- pub _pad: [libc::c_int; 28],
- pub _kill: kill_struct,
- pub _timer: timer_struct,
- pub _rt: rt_struct,
- pub _sigchld: sigchld_struct,
- pub _sigfault: sigfault_struct,
- pub _sigpoll: sigpoll_struct,
- pub _sigsys: sigsys_struct,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct bounds_struct {
- pub _addr_bnd: addr_bnd_struct,
- pub _key: __uint32_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct addr_bnd_struct {
- pub _lower: *mut libc::c_void,
- pub _upper: *mut libc::c_void,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct __sigset_t {
- pub __val: [libc::c_ulong; 16],
-}
-pub type sigset_t = __sigset_t;
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub union __sigaction_handler_union {
- /* Used if SA_SIGINFO is not set. */
- sa_handler: __sighandler_t,
-
- /* Used if SA_SIGINFO is set. */
- sa_sigaction:
- Option<unsafe extern "C" fn(libc::c_int, *mut siginfo_t, *mut libc::c_void) -> ()>,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct sigaction {
- pub __sigaction_handler: __sigaction_handler_union,
-
- /* Additional set of signals to be blocked. */
- pub sa_mask: sigset_t,
-
- /* Special flags. */
- pub sa_flags: libc::c_int,
-
- /* Restore handler. */
- // void (*sa_restorer) (void);
- pub sa_restorer: Option<unsafe extern "C" fn() -> ()>,
-}
-
/* An integral type that can be modified atomically, without the
possibility of a signal arriving in the middle of the operation. */
// typedef __sig_atomic_t sig_atomic_t;
@@ -230,15 +86,6 @@ pub struct termios {
c_ospeed: speed_t, /* output speed */
}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct winsize {
- ws_row: libc::c_ushort,
- ws_col: libc::c_ushort,
- ws_xpixel: libc::c_ushort,
- ws_ypixel: libc::c_ushort,
-}
-
extern "C" {
fn memset(_: *mut libc::c_void, _: libc::c_int, _: libc::c_ulong) -> *mut libc::c_void;
fn sigemptyset(__set: *mut sigset_t) -> libc::c_int;
@@ -289,27 +136,11 @@ pub const VTIME: libc::c_int = 5 as libc::c_int;
// #define VMIN 6
pub const VMIN: libc::c_int = 6 as libc::c_int;
-// #define CLR(t, f) ((t) &= ~(f))
-#[macro_export]
-macro_rules! CLR {
- ($t:expr, $f:expr) => {
- (($t) &= !($f))
- };
-}
-
-// #define SET(t, f) ((t) |= (f))
-#[macro_export]
-macro_rules! SET {
- ($t:expr, $f:expr) => {
- (($t) |= ($f))
- };
-}
-
// #define ECHO 0000010
#[macro_export]
macro_rules! ECHO {
() => {
- 0000010
+ 0o000010
};
}
@@ -317,7 +148,7 @@ macro_rules! ECHO {
#[macro_export]
macro_rules! ECHONL {
() => {
- 0000100
+ 0o000100
};
}
@@ -325,7 +156,7 @@ macro_rules! ECHONL {
#[macro_export]
macro_rules! ICRNL {
() => {
- 0000400
+ 0o000400
};
}
@@ -333,7 +164,7 @@ macro_rules! ICRNL {
#[macro_export]
macro_rules! IGNCR {
() => {
- 0000200
+ 0o000200
};
}
@@ -341,7 +172,7 @@ macro_rules! IGNCR {
#[macro_export]
macro_rules! INLCR {
() => {
- 0000100
+ 0o000100
};
}
@@ -349,7 +180,7 @@ macro_rules! INLCR {
#[macro_export]
macro_rules! IUCLC {
() => {
- 0001000
+ 0o001000
};
}
@@ -357,7 +188,7 @@ macro_rules! IUCLC {
#[macro_export]
macro_rules! IXON {
() => {
- 0002000
+ 0o002000
};
}
@@ -365,7 +196,7 @@ macro_rules! IXON {
#[macro_export]
macro_rules! OPOST {
() => {
- 0000001
+ 0o000001
};
}
@@ -373,7 +204,7 @@ macro_rules! OPOST {
#[macro_export]
macro_rules! ICANON {
() => {
- 0000002
+ 0o000002
};
}
@@ -381,7 +212,7 @@ macro_rules! ICANON {
#[macro_export]
macro_rules! ISIG {
() => {
- 0000001
+ 0o000001
};
}
@@ -389,7 +220,7 @@ macro_rules! ISIG {
#[macro_export]
macro_rules! IEXTEN {
() => {
- 0100000
+ 0o100000
};
}
@@ -397,7 +228,7 @@ macro_rules! IEXTEN {
#[macro_export]
macro_rules! IGNPAR {
() => {
- 0000004
+ 0o000004
};
}
@@ -405,49 +236,49 @@ macro_rules! IGNPAR {
#[macro_export]
macro_rules! PARMRK {
() => {
- 0000010
+ 0o000010
};
}
// #define INPCK 0000020
#[macro_export]
macro_rules! INPCK {
() => {
- 0000020
+ 0o000020
};
}
// #define ISTRIP 0000040
#[macro_export]
macro_rules! ISTRIP {
() => {
- 0000040
+ 0o000040
};
}
// #define IXANY 0004000
#[macro_export]
macro_rules! IXANY {
() => {
- 0004000
+ 0o004000
};
}
// #define IXOFF 0010000
#[macro_export]
macro_rules! IXOFF {
() => {
- 0010000
+ 0o010000
};
}
// #define IMAXBEL 0020000
#[macro_export]
macro_rules! IMAXBEL {
() => {
- 0020000
+ 0o020000
};
}
// #define IUTF8 0040000
#[macro_export]
macro_rules! IUTF8 {
() => {
- 0040000
+ 0o040000
};
}
@@ -456,35 +287,35 @@ macro_rules! IUTF8 {
#[macro_export]
macro_rules! OLCUC {
() => {
- 0000002
+ 0o000002
};
}
// #define ONLCR 0000004
#[macro_export]
macro_rules! ONLCR {
() => {
- 0000004
+ 0o000004
};
}
// #define OCRNL 0000010
#[macro_export]
macro_rules! OCRNL {
() => {
- 0000010
+ 0o000010
};
}
// #define ONOCR 0000020
#[macro_export]
macro_rules! ONOCR {
() => {
- 0000020
+ 0o000020
};
}
// #define ONLRET 0000040
#[macro_export]
macro_rules! ONLRET {
() => {
- 0000040
+ 0o000040
};
}
@@ -492,28 +323,28 @@ macro_rules! ONLRET {
#[macro_export]
macro_rules! CS7 {
() => {
- 0000040
+ 0o000040
};
}
// #define CS8 0000060
#[macro_export]
macro_rules! CS8 {
() => {
- 0000060
+ 0o000060
};
}
// #define PARENB 0000400
#[macro_export]
macro_rules! PARENB {
() => {
- 0000400
+ 0o000400
};
}
// #define PARODD 0001000
#[macro_export]
macro_rules! PARODD {
() => {
- 0001000
+ 0o001000
};
}
@@ -521,7 +352,7 @@ macro_rules! PARODD {
#[macro_export]
macro_rules! XCASE {
() => {
- 0000004
+ 0o000004
};
}
@@ -529,7 +360,7 @@ macro_rules! XCASE {
#[macro_export]
macro_rules! ECHOE {
() => {
- 0000020
+ 0o000020
};
}
@@ -537,7 +368,7 @@ macro_rules! ECHOE {
#[macro_export]
macro_rules! ECHOK {
() => {
- 0000040
+ 0o000040
};
}
@@ -545,7 +376,7 @@ macro_rules! ECHOK {
#[macro_export]
macro_rules! NOFLSH {
() => {
- 0000200
+ 0o000200
};
}
@@ -553,7 +384,7 @@ macro_rules! NOFLSH {
#[macro_export]
macro_rules! TOSTOP {
() => {
- 0000400
+ 0o000400
};
}
@@ -561,7 +392,7 @@ macro_rules! TOSTOP {
#[macro_export]
macro_rules! ECHOCTL {
() => {
- 0001000
+ 0o001000
};
}
@@ -569,7 +400,7 @@ macro_rules! ECHOCTL {
#[macro_export]
macro_rules! ECHOKE {
() => {
- 0004000
+ 0o004000
};
}
@@ -577,7 +408,7 @@ macro_rules! ECHOKE {
#[macro_export]
macro_rules! PENDIN {
() => {
- 0040000
+ 0o040000
};
}
@@ -593,7 +424,7 @@ macro_rules! B0 {
#[macro_export]
macro_rules! B38400 {
() => {
- 0000017
+ 0o000017
};
}
@@ -682,14 +513,14 @@ unsafe extern "C" fn tcsetattr_nobg(
tp: *mut termios,
) -> libc::c_int {
let mut sa: sigaction = sigaction {
- __sigaction_handler: __sigaction_handler_union { sa_handler: None },
+ __sigaction_handler: Signal_handler { sa_handler: None },
sa_mask: sigset_t { __val: [0; 16] },
sa_flags: 0,
sa_restorer: None,
};
let mut osa: sigaction = sigaction {
- __sigaction_handler: __sigaction_handler_union { sa_handler: None },
+ __sigaction_handler: Signal_handler { sa_handler: None },
sa_mask: sigset_t { __val: [0; 16] },
sa_flags: 0,
sa_restorer: None,
@@ -736,7 +567,7 @@ unsafe extern "C" fn tcsetattr_nobg(
// #[named]
#[no_mangle]
unsafe extern "C" fn sudo_term_restore_v1(fd: libc::c_int, flush: bool) -> bool {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if changed != 0 {
let mut flags: libc::c_int = {
@@ -761,7 +592,7 @@ unsafe extern "C" fn sudo_term_restore_v1(fd: libc::c_int, flush: bool) -> bool
*/
#[no_mangle]
unsafe extern "C" fn sudo_term_noecho_v1(fd: libc::c_int) -> bool {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if changed == 0 && tcgetattr(fd, &mut oterm) != 0 {
debug_return_bool!(false);
@@ -795,9 +626,9 @@ unsafe extern "C" fn sudo_term_raw_v1(fd: libc::c_int, isig: libc::c_int) -> boo
c_ispeed: 0,
c_ospeed: 0,
};
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
- if changed != 0 && tcgetattr(fd, &mut oterm) != 0 {
+ if changed == 0 && tcgetattr(fd, &mut oterm) != 0 {
debug_return_bool!(false);
}
memcpy(
@@ -831,9 +662,9 @@ unsafe extern "C" fn sudo_term_raw_v1(fd: libc::c_int, isig: libc::c_int) -> boo
*/
#[no_mangle]
unsafe extern "C" fn sudo_term_cbreak_v1(fd: libc::c_int) -> bool {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
- if changed != 0 && tcgetattr(fd, &mut oterm) != 0 {
+ if changed == 0 && tcgetattr(fd, &mut oterm) != 0 {
debug_return_bool!(false);
}
@@ -897,7 +728,7 @@ unsafe extern "C" fn sudo_term_copy_v1(src: libc::c_int, dst: libc::c_int) -> bo
ws_ypixel: 0,
};
let mut speed: speed_t = 0 as speed_t;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if tcgetattr(src, &mut tt_src) != 0 || tcgetattr(dst, &mut tt_dst) != 0 {
debug_return_bool!(false);
diff --git a/lib/util/src/ttyname_dev.rs b/lib/util/src/ttyname_dev.rs
index da85da5..c7b767b 100644
--- a/lib/util/src/ttyname_dev.rs
+++ b/lib/util/src/ttyname_dev.rs
@@ -16,35 +16,18 @@
unused_variables
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_str_v1;
-// use crate::sudo_debug::sudo_debug_printf2_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_DEBUG;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERRNO;
-use crate::sudo_debug_macro::SUDO_DEBUG_ERROR;
-use crate::sudo_debug_macro::SUDO_DEBUG_INFO;
-use crate::sudo_debug_macro::SUDO_DEBUG_LINENO;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-
-pub type __dev_t = libc::c_ulong;
-pub type __uid_t = libc::c_uint;
-pub type __gid_t = libc::c_uint;
-pub type __ino_t = libc::c_ulong;
-pub type __mode_t = libc::c_uint;
-#[cfg(target_arch = "x86_64")]
-pub type __nlink_t = libc::c_ulong;
-#[cfg(not(target_arch = "x86_64"))]
-pub type __nlink_t = libc::c_uint;
-pub type __off_t = libc::c_long;
-pub type __time_t = libc::c_long;
-#[cfg(target_arch = "x86_64")]
-pub type __blksize_t = libc::c_long;
-#[cfg(not(target_arch = "x86_64"))]
-pub type __blksize_t = libc::c_int;
-pub type __blkcnt_t = libc::c_long;
-pub type __syscall_slong_t = libc::c_long;
-pub type dev_t = __dev_t;
-pub type size_t = libc::c_ulong;
+use crate::common::*;
+
+extern "C" {
+ fn sudo_debug_printf2_v1(
+ func: *const libc::c_char,
+ file: *const libc::c_char,
+ line: libc::c_int,
+ level: libc::c_int,
+ fmt: *const libc::c_char,
+ _: ...
+ );
+}
// #define PATH_MAX 4096 /* # chars in a path name including nul */
pub const PATH_MAX: usize = 4096;
@@ -52,23 +35,10 @@ pub const PATH_MAX: usize = 4096;
// #define ENOMEM 12 /* Out of memory */
pub const ENOMEM: libc::c_int = 12;
-// #define ERANGE 34 /* Math result not representable */
-pub const ERANGE: libc::c_int = 34;
-
-// #define ENOENT 2 /* No such file or directory */
-pub const ENOENT: libc::c_int = 2;
-
pub const DT_CHR: libc::c_int = 2;
pub const DT_LNK: libc::c_int = 10;
pub const DT_UNKNOWN: libc::c_int = 0;
-// #define _PATH_DEV "/dev/"
-macro_rules! _PATH_DEV {
- () => {
- b"/dev/\0" as *const u8 as *const libc::c_char
- };
-}
-
// console
macro_rules! _PATH_DEV_CONSOLE {
() => {
@@ -104,16 +74,6 @@ macro_rules! _PATH_DEV_STDERR {
};
}
-// #define S_ISCHR(mode) __S_ISTYPE((mode), __S_IFCHR)
-// #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask))
-// #define __S_IFMT 0170000 /* These bits determine file type. */
-// #define __S_IFCHR 0020000 /* Character device. */
-macro_rules! __S_IFMT {
- () => {
- 0o170000
- };
-}
-
macro_rules! __S_IFCHR {
() => {
0o020000
@@ -122,7 +82,7 @@ macro_rules! __S_IFCHR {
macro_rules! __S_ISTYPE {
($mode:expr, $mask:expr) => {
- ((($mode) & __S_IFMT!()) == ($mask))
+ ((($mode) & _S_IFMT!()) == ($mask))
};
}
@@ -132,39 +92,12 @@ macro_rules! S_ISCHR {
};
}
-// # define S_IWOTH (S_IWGRP >> 3) /* Write by others. */
-// # define S_IWGRP (S_IWUSR >> 3) /* Write by group. */
-// # define S_IWUSR __S_IWRITE /* Write by owner. */
-// #define __S_IWRITE 0200 /* Write by owner. */
-macro_rules! __S_IWRITE {
- () => {
- 0200
- };
-}
-
-macro_rules! S_IWUSR {
- () => {
- __S_IWRITE!()
- };
-}
-
-macro_rules! S_IWGRP {
- () => {
- (S_IWUSR!() >> 3)
- };
-}
-
-macro_rules! S_IWOTH {
- () => {
- (S_IWGRP!() >> 3)
- };
-}
-
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __dirstream {
_unused: [u8; 0],
}
+pub type DIR = __dirstream;
extern "C" {
fn sudo_conf_devsearch_path_v1() -> *const libc::c_char;
@@ -196,66 +129,18 @@ extern "C" {
fn opendir(__name: *const libc::c_char) -> *mut DIR;
fn dirfd(__dirp: *mut DIR) -> libc::c_int;
fn readdir(__dirp: *mut DIR) -> *mut dirent;
+ /*
fn sudo_debug_printf2_v1(
- func: *const libc::c_char,
- file: *const libc::c_char,
- lineno: libc::c_int,
- level: libc::c_int,
- fmt: *const libc::c_char,
- _: ...
- );
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct timespec {
- pub tv_sec: __time_t,
- pub tv_nsec: __syscall_slong_t,
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct stat {
- pub st_dev: __dev_t,
- pub st_ino: __ino_t,
- #[cfg(target_arch = "x86_64")]
- pub st_nlink: __nlink_t,
- pub st_mode: __mode_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub st_nlink: __nlink_t,
- pub st_uid: __uid_t,
- pub st_gid: __gid_t,
- #[cfg(target_arch = "x86_64")]
- pub __pad0: libc::c_int,
- pub st_rdev: __dev_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub __pad1: __dev_t,
- pub st_size: __off_t,
- pub st_blksize: __blksize_t,
- #[cfg(not(target_arch = "x86_64"))]
- pub __pad2: libc::c_int,
- pub st_blocks: __blkcnt_t,
- pub st_atim: timespec,
- pub st_mtim: timespec,
- pub st_ctim: timespec,
- #[cfg(target_arch = "x86_64")]
- pub __glibc_reserved: [__syscall_slong_t; 3],
- #[cfg(not(target_arch = "x86_64"))]
- pub __glibc_reserved: [libc::c_int; 2],
-}
-
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct dirent {
- pub d_ino: __ino_t,
- pub d_off: __off_t,
- pub d_reclen: libc::c_ushort,
- pub d_type: libc::c_uchar,
- pub d_name: [libc::c_char; 256],
+ func: *const libc::c_char,
+ file: *const libc::c_char,
+ lineno: libc::c_int,
+ level: libc::c_int,
+ fmt: *const libc::c_char,
+ _: ...
+ );
+ */
}
-pub type DIR = __dirstream;
-
/*
* Device nodes to ignore.
*/
@@ -268,21 +153,14 @@ static mut ignore_devs: [*const libc::c_char; 4] = [
#[inline]
unsafe extern "C" fn fstat(mut __fd: libc::c_int, mut __statbuf: *mut stat) -> libc::c_int {
- #[cfg(target_arch = "x86_64")]
- return __fxstat(1 as libc::c_int, __fd, __statbuf);
- #[cfg(not(target_arch = "x86_64"))]
- return __fxstat(0 as libc::c_int, __fd, __statbuf);
+ return __fxstat(xstat_flag as libc::c_int, __fd, __statbuf);
}
-
#[inline]
unsafe extern "C" fn stat(
mut __path: *const libc::c_char,
mut __statbuf: *mut stat,
) -> libc::c_int {
- #[cfg(target_arch = "x86_64")]
- return __xstat(1 as libc::c_int, __path, __statbuf);
- #[cfg(not(target_arch = "x86_64"))]
- return __xstat(0 as libc::c_int, __path, __statbuf);
+ return __xstat(xstat_flag as libc::c_int, __path, __statbuf);
}
#[inline]
@@ -313,58 +191,23 @@ unsafe extern "C" fn sudo_ttyname_scan(
let mut pathbuf: [libc::c_char; PATH_MAX] = [0; PATH_MAX];
let mut ret: *mut libc::c_char = 0 as *mut libc::c_char;
let mut dp: *mut dirent = 0 as *mut dirent;
-
- let mut sb: stat = stat {
- st_dev: 0,
- st_ino: 0,
- #[cfg(target_arch = "x86_64")]
- st_nlink: 0,
- st_mode: 0,
- #[cfg(not(target_arch = "x86_64"))]
- st_nlink: 0,
- st_uid: 0,
- st_gid: 0,
- #[cfg(target_arch = "x86_64")]
- __pad0: 0,
- st_rdev: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad1: 0,
- st_size: 0,
- st_blksize: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad2: 0,
- st_blocks: 0,
- st_atim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_mtim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_ctim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- #[cfg(target_arch = "x86_64")]
- __glibc_reserved: [0; 3],
- #[cfg(not(target_arch = "x86_64"))]
- __glibc_reserved: [0; 2],
- };
-
+ let mut sb: stat = sb_all_arch;
let mut i: libc::c_int = 0 as libc::c_int;
let mut d: *mut DIR = 0 as *mut DIR;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+
+ debug_decl!(SUDO_DEBUG_UTIL);
'done: loop {
if *dir.offset(0 as isize) as libc::c_int == '\u{0}' as i32 {
*__errno_location() = ENOENT;
break 'done;
}
+
d = opendir(dir);
if d.is_null() {
break 'done;
}
+
if fstat(dirfd(d), &mut sb) == -1 {
sudo_debug_printf!(
SUDO_DEBUG_ERROR | SUDO_DEBUG_LINENO,
@@ -382,71 +225,45 @@ unsafe extern "C" fn sudo_ttyname_scan(
*__errno_location() = ENOENT;
break 'done;
}
+
sudo_debug_printf!(
SUDO_DEBUG_INFO | SUDO_DEBUG_LINENO,
b"scanning for dev %u in %s\0" as *const u8 as *const libc::c_char,
rdev as libc::c_uint,
dir
);
+
sdlen = strlen(dir);
while sdlen > 0 && dir.offset((sdlen - 1) as isize) as libc::c_int == '/' as i32 {
sdlen -= 1;
}
+
if (sdlen + 1) >= ::std::mem::size_of::<[libc::c_char; PATH_MAX]>() as libc::c_ulong {
*__errno_location() = ERANGE;
break 'done;
}
+
memcpy(
pathbuf.as_mut_ptr() as *mut libc::c_void,
dir as *const libc::c_void,
sdlen,
);
- sdlen += 1;
- pathbuf[sdlen as usize] = '/' as i32 as libc::c_char;
- dp = readdir(d);
- while !dp.is_null() {
- let mut sb: stat = stat {
- st_dev: 0,
- st_ino: 0,
- #[cfg(target_arch = "x86_64")]
- st_nlink: 0,
- st_mode: 0,
- #[cfg(not(target_arch = "x86_64"))]
- st_nlink: 0,
- st_uid: 0,
- st_gid: 0,
- #[cfg(target_arch = "x86_64")]
- __pad0: 0,
- st_rdev: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad1: 0,
- st_size: 0,
- st_blksize: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad2: 0,
- st_blocks: 0,
- st_atim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_mtim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_ctim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- #[cfg(target_arch = "x86_64")]
- __glibc_reserved: [0; 3],
- #[cfg(not(target_arch = "x86_64"))]
- __glibc_reserved: [0; 2],
- };
+ let fresh0 = sdlen;
+ sdlen = sdlen.wrapping_add(1);
+ pathbuf[fresh0 as usize] = '/' as i32 as libc::c_char;
+
+ loop {
+ dp = readdir(d);
+ if dp.is_null() {
+ break;
+ }
+ let mut sb: stat = sb_all_arch;
/* Skip anything starting with "." */
if (*dp).d_name[0 as usize] as libc::c_int == '.' as i32 {
continue;
}
+
pathbuf[sdlen as usize] = '\u{0}' as i32 as libc::c_char;
if sudo_strlcat(
pathbuf.as_mut_ptr(),
@@ -462,6 +279,7 @@ unsafe extern "C" fn sudo_ttyname_scan(
);
continue;
}
+
/* Ignore device nodes listed in ignore_devs[]. */
i = 0;
while !ignore_devs[i as usize].is_null() {
@@ -493,6 +311,7 @@ unsafe extern "C" fn sudo_ttyname_scan(
continue;
}
}
+
if stat(pathbuf.as_mut_ptr(), &mut sb) == -1 {
sudo_debug_printf!(
SUDO_DEBUG_ERROR | SUDO_DEBUG_LINENO | SUDO_DEBUG_ERRNO,
@@ -501,6 +320,7 @@ unsafe extern "C" fn sudo_ttyname_scan(
);
continue;
}
+
if S_ISCHR!(sb.st_mode) && sb.st_rdev == rdev {
sudo_debug_printf!(
SUDO_DEBUG_INFO | SUDO_DEBUG_LINENO,
@@ -540,44 +360,9 @@ unsafe extern "C" fn sudo_dev_check(
mut buf: *mut libc::c_char,
mut buflen: size_t,
) -> *mut libc::c_char {
- let mut sb: stat = stat {
- st_dev: 0,
- st_ino: 0,
- #[cfg(target_arch = "x86_64")]
- st_nlink: 0,
- st_mode: 0,
- #[cfg(not(target_arch = "x86_64"))]
- st_nlink: 0,
- st_uid: 0,
- st_gid: 0,
- #[cfg(target_arch = "x86_64")]
- __pad0: 0,
- st_rdev: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad1: 0,
- st_size: 0,
- st_blksize: 0,
- #[cfg(not(target_arch = "x86_64"))]
- __pad2: 0,
- st_blocks: 0,
- st_atim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_mtim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- st_ctim: timespec {
- tv_sec: 0,
- tv_nsec: 0,
- },
- #[cfg(target_arch = "x86_64")]
- __glibc_reserved: [0; 3],
- #[cfg(not(target_arch = "x86_64"))]
- __glibc_reserved: [0; 2],
- };
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ let mut sb: stat = sb_all_arch;
+ debug_decl!(SUDO_DEBUG_UTIL);
+
if stat(devname, &mut sb) == 0 {
if S_ISCHR!(sb.st_mode) && sb.st_rdev == rdev {
sudo_debug_printf!(
@@ -586,6 +371,7 @@ unsafe extern "C" fn sudo_dev_check(
rdev,
devname
);
+
if sudo_strlcpy(buf, devname, buflen) < buflen {
debug_return_str!(buf);
}
@@ -599,6 +385,7 @@ unsafe extern "C" fn sudo_dev_check(
*__errno_location() = ERANGE;
} // if S_ISCHR(
} //if stat(devname
+
sudo_debug_printf!(
SUDO_DEBUG_INFO | SUDO_DEBUG_LINENO,
b"comparing dev %u to %s: no\0" as *const u8 as *const libc::c_char,
@@ -627,7 +414,7 @@ pub unsafe extern "C" fn sudo_ttyname_dev_v1(
let mut ep: *const libc::c_char = 0 as *const libc::c_char;
let mut len: size_t = 0 as size_t;
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
/*
* First, check /dev/console.
@@ -639,6 +426,7 @@ pub unsafe extern "C" fn sudo_ttyname_dev_v1(
*/
devsearch = sudo_conf_devsearch_path_v1();
devsearch_end = devsearch.offset(strlen(devsearch) as isize);
+
cp = sudo_strsplit_v1(
devsearch,
devsearch_end,
@@ -662,12 +450,14 @@ pub unsafe extern "C" fn sudo_ttyname_dev_v1(
);
continue;
} // if len >=
+
memcpy(
path.as_mut_ptr() as *mut libc::c_void,
cp as *const libc::c_void,
len,
);
path[len as usize] = '\u{0}' as i32 as libc::c_char;
+
if strcmp(path.as_mut_ptr(), _PATH_DEV_PTS!()) == 0 {
/* Special case /dev/pts */
len = snprintf(
@@ -677,6 +467,7 @@ pub unsafe extern "C" fn sudo_ttyname_dev_v1(
_PATH_DEV!(),
gnu_dev_minor(rdev),
) as size_t;
+
if len > ::std::mem::size_of::<[libc::c_char; PATH_MAX]>() as libc::c_ulong {
sudo_debug_printf!(
SUDO_DEBUG_ERROR | SUDO_DEBUG_LINENO,
@@ -705,6 +496,7 @@ pub unsafe extern "C" fn sudo_ttyname_dev_v1(
break;
}
}
+
cp = sudo_strsplit_v1(
0 as *const libc::c_char,
devsearch_end,
@@ -713,6 +505,5 @@ pub unsafe extern "C" fn sudo_ttyname_dev_v1(
);
} // while !cp.is_null()
} // ret.is_null()
-
debug_return_str!(ret as *mut libc::c_char)
}
diff --git a/lib/util/src/ttysize.rs b/lib/util/src/ttysize.rs
index 0e13004..359f7a9 100644
--- a/lib/util/src/ttysize.rs
+++ b/lib/util/src/ttysize.rs
@@ -14,36 +14,7 @@
unused_mut
)]
-use crate::sudo_debug::sudo_debug_enter_v1;
-use crate::sudo_debug::sudo_debug_exit_int_v1;
-use crate::sudo_debug::sudo_debug_exit_v1;
-use crate::sudo_debug_macro::SUDO_DEBUG_UTIL;
-
-/* Standard file descriptors. */
-// #define STDERR_FILENO 2 /* Standard error output. */
-#[macro_export]
-macro_rules! STDERR_FILENO {
- () => {
- 2
- };
-}
-
-// #define TIOCGWINSZ 0x5413
-#[macro_export]
-macro_rules! TIOCGWINSZ {
- () => {
- 0x5413
- };
-}
-
-// #define __INT_MAX__ 2147483647
-// #define INT_MAX __INT_MAX__
-#[macro_export]
-macro_rules! INT_MAX {
- () => {
- 2147483647
- };
-}
+use crate::common::*;
extern "C" {
fn ioctl(fd: libc::c_int, __request: libc::c_ulong, ...) -> libc::c_int;
@@ -57,15 +28,6 @@ extern "C" {
}
-#[derive(Copy, Clone)]
-#[repr(C)]
-pub struct winsize {
- pub ws_row: libc::c_ushort,
- pub ws_col: libc::c_ushort,
- pub ws_xpixel: libc::c_ushort,
- pub ws_ypixel: libc::c_ushort,
-}
-
#[no_mangle]
pub unsafe extern "C" fn get_ttysize_ioctl(
rowp: *mut libc::c_int,
@@ -78,7 +40,7 @@ pub unsafe extern "C" fn get_ttysize_ioctl(
ws_ypixel: 0,
};
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if (ioctl(STDERR_FILENO!(), TIOCGWINSZ!(), &wsize) == 0)
&& wsize.ws_row != 0
@@ -96,7 +58,7 @@ pub unsafe extern "C" fn sudo_get_ttysize_v1(
mut rowp: *mut libc::c_int,
mut colp: *mut libc::c_int,
) {
- debug_decl!(stdext::function_name!().as_ptr(), SUDO_DEBUG_UTIL);
+ debug_decl!(SUDO_DEBUG_UTIL);
if get_ttysize_ioctl(rowp, colp) == -(1 as libc::c_int) {
let mut p: *mut libc::c_char = 0 as *mut libc::c_char;
--
2.33.0