git: 9d56cc6b40e2 - main - x11/mate-screensaver: Fix helper option
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 01 Jan 2022 01:35:03 UTC
The branch main has been updated by ericbsd: URL: https://cgit.FreeBSD.org/ports/commit/?id=9d56cc6b40e2694687d6c22c46bcf64cd43b2d81 commit 9d56cc6b40e2694687d6c22c46bcf64cd43b2d81 Author: Eric Turgeon <ericbsd@FreeBSD.org> AuthorDate: 2022-01-01 00:11:27 +0000 Commit: Eric Turgeon <ericbsd@FreeBSD.org> CommitDate: 2022-01-01 01:34:53 +0000 x11/mate-screensaver: Fix helper option This patch revert changes that broke --enable-authentication-scheme and --with-passwd-helper PR: 260811 Reported by: Tomoaki AOKI --- x11/mate-screensaver/Makefile | 1 + .../files/patch-src_gs-auth-helper.c | 211 +++++++++++++++++++++ 2 files changed, 212 insertions(+) diff --git a/x11/mate-screensaver/Makefile b/x11/mate-screensaver/Makefile index b798061a496d..3ca02330cdfd 100644 --- a/x11/mate-screensaver/Makefile +++ b/x11/mate-screensaver/Makefile @@ -2,6 +2,7 @@ PORTNAME= mate-screensaver PORTVERSION= 1.26.1 +PORTREVISION= 1 CATEGORIES= x11 mate MASTER_SITES= MATE DIST_SUBDIR= mate diff --git a/x11/mate-screensaver/files/patch-src_gs-auth-helper.c b/x11/mate-screensaver/files/patch-src_gs-auth-helper.c new file mode 100644 index 000000000000..df40c211e3aa --- /dev/null +++ b/x11/mate-screensaver/files/patch-src_gs-auth-helper.c @@ -0,0 +1,211 @@ +--- src/gs-auth-helper.c.orig 2021-12-31 23:57:08 UTC ++++ src/gs-auth-helper.c +@@ -51,9 +51,6 @@ + #include "gs-auth.h" + #include "subprocs.h" + +-#include "../helper/helper_proto.h" +-#define MAXLEN 1024 +- + static gboolean verbose_enabled = FALSE; + + GQuark +@@ -82,105 +79,85 @@ gs_auth_get_verbose (void) + + static gboolean + ext_run (const char *user, +- GSAuthMessageFunc func, +- gpointer data) ++ const char *typed_passwd, ++ gboolean verbose) + { +- int pfd[2], r_pfd[2], status; +- pid_t pid; +- gboolean verbose = gs_auth_get_verbose (); ++ int pfd[2], status; ++ pid_t pid; + +- if (pipe (pfd) < 0 || pipe (r_pfd) < 0) +- { +- return FALSE; +- } ++ if (pipe (pfd) < 0) ++ { ++ return 0; ++ } + +- if (verbose) +- { +- g_message ("ext_run (%s, %s)", +- PASSWD_HELPER_PROGRAM, user); +- } ++ if (verbose) ++ { ++ g_message ("ext_run (%s, %s)", ++ PASSWD_HELPER_PROGRAM, user); ++ } + +- block_sigchld (); ++ block_sigchld (); + +- if ((pid = fork ()) < 0) +- { +- close (pfd [0]); +- close (pfd [1]); +- close (r_pfd [0]); +- close (r_pfd [1]); +- return FALSE; +- } ++ if ((pid = fork ()) < 0) ++ { ++ close (pfd [0]); ++ close (pfd [1]); ++ return FALSE; ++ } + +- if (pid == 0) +- { +- close (pfd [1]); +- close (r_pfd [0]); +- if (pfd [0] != 0) +- { +- dup2 (pfd [0], 0); +- } +- if (r_pfd [1] != 1) +- { +- dup2 (r_pfd [1], 1); +- } ++ if (pid == 0) ++ { ++ close (pfd [1]); ++ if (pfd [0] != 0) ++ { ++ dup2 (pfd [0], 0); ++ } + +- /* Helper is invoked as helper service-name [user] */ +- execlp (PASSWD_HELPER_PROGRAM, PASSWD_HELPER_PROGRAM, "mate-screensaver", user, NULL); +- if (verbose) +- { +- g_message ("%s: %s", PASSWD_HELPER_PROGRAM, g_strerror (errno)); +- } ++ /* Helper is invoked as helper service-name [user] */ ++ execlp (PASSWD_HELPER_PROGRAM, PASSWD_HELPER_PROGRAM, "mate-screensaver", user, NULL); ++ if (verbose) ++ { ++ g_message ("%s: %s", PASSWD_HELPER_PROGRAM, g_strerror (errno)); ++ } + +- exit (1); +- } ++ exit (1); ++ } + +- close (pfd [0]); +- close (r_pfd [1]); ++ close (pfd [0]); + +- gboolean ret = FALSE; +- while (waitpid (pid, &status, WNOHANG) == 0) +- { +- int msg_type; +- char buf[MAXLEN]; +- size_t msg_len = MAXLEN; ++ /* Write out password to helper process */ ++ if (!typed_passwd) ++ { ++ typed_passwd = ""; ++ } ++ write (pfd [1], typed_passwd, strlen (typed_passwd)); ++ close (pfd [1]); + +- msg_type = read_prompt (r_pfd [0], buf, &msg_len); +- if (0 == msg_type) continue; +- if (msg_type < 0) +- { +- g_message ("Error reading prompt (%d)", msg_type); +- ret = FALSE; +- goto exit; +- } ++ while (waitpid (pid, &status, 0) < 0) ++ { ++ if (errno == EINTR) ++ { ++ continue; ++ } + +- char *input = NULL; +- func (msg_type, buf, &input, data); ++ if (verbose) ++ { ++ g_message ("ext_run: waitpid failed: %s\n", ++ g_strerror (errno)); ++ } + +- unsigned int input_len = input ? strlen (input) : 0; +- ssize_t wt; ++ unblock_sigchld (); ++ return FALSE; ++ } + +- wt = write_msg (pfd [1], input, input_len); +- if (wt < 0) +- { +- g_message ("Error writing prompt reply (%li)", wt); +- ret = FALSE; +- goto exit; +- } +- } ++ unblock_sigchld (); + +- close (pfd [1]); +- close (r_pfd [0]); +- unblock_sigchld (); ++ if (! WIFEXITED (status) || WEXITSTATUS (status) != 0) ++ { ++ return FALSE; ++ } + +- if (! WIFEXITED (status) || WEXITSTATUS (status) != 0) +- { +- ret = FALSE; +- } +- else +- ret = TRUE; +- +- exit: +- return ret; ++ return TRUE; + } + + gboolean +@@ -190,7 +167,28 @@ gs_auth_verify_user (const char *username, + gpointer data, + GError **error) + { +- return ext_run (username, func, data); ++ gboolean res = FALSE; ++ char *password; ++ ++ password = NULL; ++ ++ /* ask for the password for user */ ++ if (func != NULL) ++ { ++ func (GS_AUTH_MESSAGE_PROMPT_ECHO_OFF, ++ "Password: ", ++ &password, ++ data); ++ } ++ ++ if (password == NULL) ++ { ++ return FALSE; ++ } ++ ++ res = ext_run (username, password, gs_auth_get_verbose ()); ++ ++ return res; + } + + gboolean