PolicyKit: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Oct 25 09:01:52 UTC 2022


 src/polkitagent/polkitagenttextlistener.c |    8 ++++++++
 src/programs/pkttyagent.c                 |   14 +++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

New commits:
commit 07593c1055ddbdda85465e09da1f44b1b4f0fc3d
Author: Martin Kletzander <nert.pinx+github at gmail.com>
Date:   Tue Oct 25 09:01:51 2022 +0000

    pkttyagent: Only restore tty flags if they were changed

diff --git a/src/polkitagent/polkitagenttextlistener.c b/src/polkitagent/polkitagenttextlistener.c
index 0ba0352..99af1d1 100644
--- a/src/polkitagent/polkitagenttextlistener.c
+++ b/src/polkitagent/polkitagenttextlistener.c
@@ -205,6 +205,12 @@ polkit_agent_text_listener_class_init (PolkitAgentTextListenerClass *klass)
                                    g_param_spec_uint ("delay", "", "",
                                                       0, G_MAXUINT, 1,
                                                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+  g_signal_new("tty_attrs_changed",
+               G_TYPE_FROM_CLASS(gobject_class),
+               G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+               0, NULL, NULL, NULL,
+               G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 }
 
 /**
@@ -359,6 +365,7 @@ on_request (PolkitAgentSession *session,
    *       the problem.
    */
 
+  g_signal_emit_by_name(listener, "tty_attrs_changed", TRUE);
   tcgetattr (fileno (listener->tty), &ts);
   ots = ts;
   ts.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
@@ -387,6 +394,7 @@ on_request (PolkitAgentSession *session,
         }
     }
   tcsetattr (fileno (listener->tty), TCSAFLUSH, &ots);
+  g_signal_emit_by_name(listener, "tty_attrs_changed", FALSE);
   putc ('\n', listener->tty);
 
   polkit_agent_session_response (session, str->str);
diff --git a/src/programs/pkttyagent.c b/src/programs/pkttyagent.c
index 8028f2d..ccb5754 100644
--- a/src/programs/pkttyagent.c
+++ b/src/programs/pkttyagent.c
@@ -34,6 +34,7 @@
 
 
 static volatile sig_atomic_t tty_flags_saved;
+static volatile sig_atomic_t tty_flags_changed;
 struct termios ts;
 FILE *tty = NULL;
 struct sigaction savesigterm, savesigint, savesigtstp;
@@ -54,7 +55,7 @@ static void tty_handler(int signal)
       break;
   }
 
-  if (tty_flags_saved)
+  if (tty_flags_saved && tty_flags_changed)
   {
     tcsetattr (fileno (tty), TCSADRAIN, &ts);
   }
@@ -63,6 +64,14 @@ static void tty_handler(int signal)
 }
 
 
+static void tty_attrs_changed(PolkitAgentListener *listener G_GNUC_UNUSED,
+                              gboolean changed,
+                              gpointer user_data G_GNUC_UNUSED)
+{
+  tty_flags_changed = changed;
+}
+
+
 int
 main (int argc, char *argv[])
 {
@@ -221,6 +230,9 @@ main (int argc, char *argv[])
       ret = 127;
       goto out;
     }
+  g_signal_connect(G_OBJECT(listener), "tty_attrs_changed",
+                   G_CALLBACK(tty_attrs_changed), NULL);
+
   local_agent_handle = polkit_agent_listener_register_with_options (listener,
                                                                     POLKIT_AGENT_REGISTER_FLAGS_RUN_IN_THREAD,
                                                                     subject,


More information about the hal-commit mailing list