From 5cb97aee88271dfd25c20629052b3d89f05e63c2 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Mon, 10 Feb 2025 16:47:05 +0800 Subject: (GNU/Hurd) port Linux-specific api. --- examples/tty_conv.c | 7 +++---- libpam/pam_modutil_priv.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/examples/tty_conv.c b/examples/tty_conv.c index 59bbb3b3..0a7af97c 100644 --- a/examples/tty_conv.c +++ b/examples/tty_conv.c @@ -8,7 +8,6 @@ #include #include #include -#include /*************************************** * @brief echo off/on @@ -18,7 +17,7 @@ static void echoOff(int fd, int off) { struct termios tty; - if (ioctl(fd, TCGETA, &tty) < 0) + if (tcgetattr(fd, &tty) < 0) { fprintf(stderr, "TCGETA failed: %s\n", strerror(errno)); return; @@ -27,7 +26,7 @@ static void echoOff(int fd, int off) if (off) { tty.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); - if (ioctl(fd, TCSETAF, &tty) < 0) + if (tcsetattr(fd, TCSAFLUSH, &tty) < 0) { fprintf(stderr, "TCSETAF failed: %s\n", strerror(errno)); } @@ -35,7 +34,7 @@ static void echoOff(int fd, int off) else { tty.c_lflag |= (ECHO | ECHOE | ECHOK | ECHONL); - if (ioctl(fd, TCSETAW, &tty) < 0) + if (tcsetattr(fd, TCSADRAIN, &tty) < 0) { fprintf(stderr, "TCSETAW failed: %s\n", strerror(errno)); } diff --git a/libpam/pam_modutil_priv.c b/libpam/pam_modutil_priv.c index a463e06a..cf0ce3ce 100644 --- a/libpam/pam_modutil_priv.c +++ b/libpam/pam_modutil_priv.c @@ -14,7 +14,9 @@ #include #include #include +#ifdef HAVE_SYS_FSUID_H #include +#endif /* HAVE_SYS_FSUID_H */ /* * Two setfsuid() calls in a row are necessary to check @@ -22,17 +24,32 @@ */ static int change_uid(uid_t uid, uid_t *save) { +#ifdef HAVE_SYS_FSUID_H uid_t tmp = setfsuid(uid); if (save) *save = tmp; return (uid_t) setfsuid(uid) == uid ? 0 : -1; +#else + uid_t euid = geteuid(); + if (save) + *save = euid; + return setresuid(-1, uid, euid); +#endif } + static int change_gid(gid_t gid, gid_t *save) { +#ifdef HAVE_SYS_FSUID_H gid_t tmp = setfsgid(gid); if (save) *save = tmp; return (gid_t) setfsgid(gid) == gid ? 0 : -1; +#else + uid_t egid = getegid(); + if (save) + *save = egid; + return setresgid(-1, gid, egid); +#endif } static int cleanup(struct pam_modutil_privs *p) -- cgit v1.2.3