Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package greetd for openSUSE:Factory checked 
in at 2021-11-01 18:35:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/greetd (Old)
 and      /work/SRC/openSUSE:Factory/.greetd.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "greetd"

Mon Nov  1 18:35:45 2021 rev:7 rq:928516 version:0.8.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/greetd/greetd.changes    2021-10-05 
22:34:20.754920850 +0200
+++ /work/SRC/openSUSE:Factory/.greetd.new.1890/greetd.changes  2021-11-01 
18:36:02.737347216 +0100
@@ -1,0 +2,16 @@
+Sun Oct 24 13:46:49 UTC 2021 - Denys Kondratenko <std...@opensuse.org>
+
+- Version bump to 0.8.0
+  * deps: update tokio to 1.0
+  * deps: update nix and other dependencies
+  * Ensure initial session is only run once.
+  * recommend making config world readable rather than setting owner
+  * Update lock file
+  * readme: Add discuss section
+  * docs: Fix scdoc syntax for greetd.5
+  * rustfmt: Change merge_imports to imports_granularity
+  * ipc: Fix tokio codec
+  * Add makefile for man pages
+  * greetd: add terminal switch flag configuration option
+
+-------------------------------------------------------------------

Old:
----
  greetd-0.7.0.obscpio

New:
----
  greetd-0.8.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ greetd.spec ++++++
--- /var/tmp/diff_new_pack.nUnfuz/_old  2021-11-01 18:36:03.537347674 +0100
+++ /var/tmp/diff_new_pack.nUnfuz/_new  2021-11-01 18:36:03.541347676 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           greetd
-Version:        0.7.0
+Version:        0.8.0
 Release:        0
 Summary:        Minimal and flexible login manager daemon
 License:        GPL-3.0-only

++++++ _service ++++++
--- /var/tmp/diff_new_pack.nUnfuz/_old  2021-11-01 18:36:03.565347690 +0100
+++ /var/tmp/diff_new_pack.nUnfuz/_new  2021-11-01 18:36:03.569347693 +0100
@@ -2,7 +2,7 @@
   <service name="obs_scm" mode="disabled">
     <param name="url">https://git.sr.ht/~kennylevinsen/greetd</param>
     <param name="scm">git</param>
-    <param name="revision">0.7.0</param>
+    <param name="revision">0.8.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
   </service>

++++++ greetd-0.7.0.obscpio -> greetd-0.8.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/.gitignore new/greetd-0.8.0/.gitignore
--- old/greetd-0.7.0/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/greetd-0.8.0/.gitignore 2021-09-05 21:15:06.000000000 +0200
@@ -0,0 +1,2 @@
+/target
+**/*.rs.bk
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/Cargo.lock new/greetd-0.8.0/Cargo.lock
--- old/greetd-0.7.0/Cargo.lock 2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/Cargo.lock 2021-09-05 21:15:06.000000000 +0200
@@ -1,122 +1,125 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
+version = 3
+
 [[package]]
 name = "agreety"
-version = "0.6.0"
+version = "0.8.0"
 dependencies = [
- "enquote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "greetd_ipc 0.6.0",
- "inish 0.1.0",
- "nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "enquote",
+ "getopts",
+ "greetd_ipc",
+ "inish",
+ "nix",
+ "rpassword",
 ]
 
 [[package]]
 name = "arc-swap"
 version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b585a98a234c46fc563103e9278c9391fde1f4e6850334da895d27edb9580f62"
 
 [[package]]
 name = "async-trait"
 version = "0.1.31"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "26c4f3195085c36ea8d24d32b2f828d23296a9370a28aa39d111f6f16bef9f3b"
 dependencies = [
- "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
 name = "bitflags"
 version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
 
 [[package]]
 name = "bytes"
-version = "0.5.4"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
 
 [[package]]
 name = "cc"
 version = "1.0.53"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "404b1fe4f65288577753b17e3b36a04596ee784493ec249bf81c7f2d2acd751c"
 
 [[package]]
 name = "cfg-if"
 version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
 
 [[package]]
-name = "enquote"
-version = "1.0.3"
+name = "cfg-if"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
-name = "fakegreet"
-version = "0.6.0"
-dependencies = [
- "greetd_ipc 0.6.0",
- "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
- "thiserror 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "fnv"
-version = "1.0.7"
+name = "enquote"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2ec878a5d2f3b6e9eaee72373dd23414cfc7d353104741471bec712ef241a66e"
 
 [[package]]
-name = "fuchsia-zircon"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
+name = "fakegreet"
+version = "0.8.0"
 dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon-sys 0.3.3 
(registry+https://github.com/rust-lang/crates.io-index)",
+ "greetd_ipc",
+ "serde",
+ "thiserror",
+ "tokio",
 ]
 
 [[package]]
-name = "fuchsia-zircon-sys"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
 name = "getopts"
 version = "0.2.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
 dependencies = [
- "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width",
 ]
 
 [[package]]
 name = "greetd"
-version = "0.6.0"
+version = "0.8.0"
 dependencies = [
- "async-trait 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
- "enquote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "greetd_ipc 0.6.0",
- "inish 0.1.0",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "pam-sys 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
- "thiserror 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "users 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "async-trait",
+ "enquote",
+ "getopts",
+ "greetd_ipc",
+ "inish",
+ "libc",
+ "nix",
+ "pam-sys",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "users",
 ]
 
 [[package]]
 name = "greetd_ipc"
-version = "0.6.0"
+version = "0.8.0"
 dependencies = [
- "async-trait 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
- "thiserror 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "async-trait",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
 ]
 
 [[package]]
@@ -124,403 +127,283 @@
 version = "0.1.0"
 
 [[package]]
-name = "iovec"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-dependencies = [
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
 name = "itoa"
 version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
-name = "kernel32-sys"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-dependencies = [
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
 
 [[package]]
 name = "libc"
-version = "0.2.70"
+version = "0.2.82"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
 
 [[package]]
 name = "log"
 version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
 dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10",
 ]
 
 [[package]]
 name = "memchr"
 version = "2.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
 
 [[package]]
 name = "mio"
-version = "0.6.22"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon 0.3.3 
(registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon-sys 0.3.3 
(registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "mio-named-pipes"
-version = "0.1.6"
+version = "0.7.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "e50ae3f04d169fcc9bde0b547d1c205219b7157e07ded9c5aff03e0637cb3ed7"
 dependencies = [
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "mio-uds"
-version = "0.6.8"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-dependencies = [
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
 ]
 
 [[package]]
 name = "miow"
-version = "0.2.1"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
 dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "socket2",
+ "winapi",
 ]
 
 [[package]]
-name = "miow"
-version = "0.3.3"
+name = "nix"
+version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2"
 dependencies = [
- "socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
 ]
 
 [[package]]
-name = "net2"
-version = "0.2.34"
+name = "ntapi"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "7a31937dea023539c72ddae0e3571deadc1414b300483fa7aaec176168cfa9d2"
 dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi",
 ]
 
 [[package]]
-name = "nix"
-version = "0.17.0"
+name = "once_cell"
+version = "1.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
+checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
 
 [[package]]
 name = "pam-sys"
 version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "cd4858311a097f01a0006ef7d0cd50bca81ec430c949d7bf95cbefd202282434"
 dependencies = [
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
 ]
 
 [[package]]
 name = "pin-project-lite"
-version = "0.1.5"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827"
 
 [[package]]
 name = "proc-macro2"
 version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319"
 dependencies = [
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid",
 ]
 
 [[package]]
 name = "quote"
 version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "42934bc9c8ab0d3b273a16d8551c8f0fcff46be73276ca083ec2414c15c4ba5e"
 dependencies = [
- "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
 ]
 
 [[package]]
-name = "redox_syscall"
-version = "0.1.56"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
 name = "rpassword"
-version = "4.0.5"
+version = "5.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d755237fc0f99d98641540e66abac8bc46a0652f19148ac9e21de2da06b326c9"
 dependencies = [
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
+ "winapi",
 ]
 
 [[package]]
 name = "ryu"
 version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1"
 
 [[package]]
 name = "serde"
 version = "1.0.110"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c"
 dependencies = [
- "serde_derive 1.0.110 
(registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
 version = "1.0.110"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984"
 dependencies = [
- "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
 name = "serde_json"
 version = "1.0.53"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2"
 dependencies = [
- "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa",
+ "ryu",
+ "serde",
 ]
 
 [[package]]
 name = "signal-hook-registry"
 version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"
 dependencies = [
- "arc-swap 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
+ "arc-swap",
+ "libc",
 ]
 
 [[package]]
-name = "slab"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
 name = "socket2"
-version = "0.3.12"
+version = "0.3.19"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
 dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_syscall 0.1.56 
(registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi",
 ]
 
 [[package]]
 name = "syn"
 version = "1.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "4696caa4048ac7ce2bcd2e484b3cef88c1004e41b8e945a277e2c25dc0b72060"
 dependencies = [
- "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
 ]
 
 [[package]]
 name = "thiserror"
 version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "467e5ff447618a916519a4e0d62772ab14f434897f3d63f05d8700ef1e9b22c1"
 dependencies = [
- "thiserror-impl 1.0.17 
(registry+https://github.com/rust-lang/crates.io-index)",
+ "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
 version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "e63c1091225b9834089b429bc4a2e01223470e3183e891582909e9d1c4cb55d9"
 dependencies = [
- "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
 name = "tokio"
-version = "0.2.11"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "0ca04cec6ff2474c638057b65798f60ac183e5e79d3448bb7163d36a39cff6ec"
 dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-named-pipes 0.1.6 
(registry+https://github.com/rust-lang/crates.io-index)",
- "mio-uds 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project-lite 0.1.5 
(registry+https://github.com/rust-lang/crates.io-index)",
- "signal-hook-registry 1.2.0 
(registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-macros 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "once_cell",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "tokio-macros",
+ "winapi",
 ]
 
 [[package]]
 name = "tokio-macros"
-version = "0.2.4"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "42517d2975ca3114b22a16192634e8241dc5cc1f130be194645970cc1c371494"
 dependencies = [
- "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
 name = "unicode-width"
 version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
 
 [[package]]
 name = "unicode-xid"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
 
 [[package]]
 name = "users"
-version = "0.9.1"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
 dependencies = [
- "libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
+ "log",
 ]
 
 [[package]]
-name = "void"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
-name = "winapi"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
 name = "winapi"
 version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
 dependencies = [
- "winapi-i686-pc-windows-gnu 0.4.0 
(registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-x86_64-pc-windows-gnu 0.4.0 
(registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
 ]
 
 [[package]]
-name = "winapi-build"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
 name = "winapi-i686-pc-windows-gnu"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 
 [[package]]
 name = "winapi-x86_64-pc-windows-gnu"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-
-[[package]]
-name = "ws2_32-sys"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-dependencies = [
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[metadata]
-"checksum arc-swap 0.4.6 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"b585a98a234c46fc563103e9278c9391fde1f4e6850334da895d27edb9580f62"
-"checksum async-trait 0.1.31 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"26c4f3195085c36ea8d24d32b2f828d23296a9370a28aa39d111f6f16bef9f3b"
-"checksum bitflags 1.2.1 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-"checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" 
= "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
-"checksum cc 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)" = 
"404b1fe4f65288577753b17e3b36a04596ee784493ec249bf81c7f2d2acd751c"
-"checksum cfg-if 0.1.10 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-"checksum enquote 1.0.3 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"2ec878a5d2f3b6e9eaee72373dd23414cfc7d353104741471bec712ef241a66e"
-"checksum fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-"checksum fuchsia-zircon 0.3.3 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
-"checksum fuchsia-zircon-sys 0.3.3 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
-"checksum getopts 0.2.21 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
-"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" 
= "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
-"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" 
= "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
-"checksum kernel32-sys 0.2.2 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
-"checksum lazy_static 1.4.0 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-"checksum libc 0.2.70 (registry+https://github.com/rust-lang/crates.io-index)" 
= "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f"
-"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
-"checksum memchr 2.3.3 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
-"checksum mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)" 
= "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430"
-"checksum mio-named-pipes 0.1.6 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"f5e374eff525ce1c5b7687c4cef63943e7686524a387933ad27ca7ec43779cb3"
-"checksum mio-uds 0.6.8 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0"
-"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" 
= "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
-"checksum miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" 
= "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226"
-"checksum net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)" 
= "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7"
-"checksum nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" 
= "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363"
-"checksum pam-sys 0.5.6 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"cd4858311a097f01a0006ef7d0cd50bca81ec430c949d7bf95cbefd202282434"
-"checksum pin-project-lite 0.1.5 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"f7505eeebd78492e0f6108f7171c4948dbb120ee8119d9d77d0afa5469bef67f"
-"checksum proc-macro2 1.0.12 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319"
-"checksum quote 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" 
= "42934bc9c8ab0d3b273a16d8551c8f0fcff46be73276ca083ec2414c15c4ba5e"
-"checksum redox_syscall 0.1.56 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-"checksum rpassword 4.0.5 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f"
-"checksum ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1"
-"checksum serde 1.0.110 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c"
-"checksum serde_derive 1.0.110 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984"
-"checksum serde_json 1.0.53 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2"
-"checksum signal-hook-registry 1.2.0 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"
-"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" 
= "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
-"checksum socket2 0.3.12 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918"
-"checksum syn 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" 
= "4696caa4048ac7ce2bcd2e484b3cef88c1004e41b8e945a277e2c25dc0b72060"
-"checksum thiserror 1.0.17 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"467e5ff447618a916519a4e0d62772ab14f434897f3d63f05d8700ef1e9b22c1"
-"checksum thiserror-impl 1.0.17 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"e63c1091225b9834089b429bc4a2e01223470e3183e891582909e9d1c4cb55d9"
-"checksum tokio 0.2.11 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"8fdd17989496f49cdc57978c96f0c9fe5e4a58a8bddc6813c449a4624f6a030b"
-"checksum tokio-macros 0.2.4 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"f4b1e7ed7d5d4c2af3d999904b0eebe76544897cdbfb2b9684bed2174ab20f7c"
-"checksum unicode-width 0.1.7 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
-"checksum unicode-xid 0.2.0 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-"checksum users 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" 
= "c72f4267aea0c3ec6d07eaabea6ead7c5ddacfafc5e22bcf8d186706851fb4cf"
-"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" 
= "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
-"checksum winapi 0.2.8 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
-"checksum winapi 0.3.8 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
-"checksum winapi-build 0.1.1 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
-"checksum winapi-i686-pc-windows-gnu 0.4.0 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-"checksum winapi-x86_64-pc-windows-gnu 0.4.0 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-"checksum ws2_32-sys 0.2.1 
(registry+https://github.com/rust-lang/crates.io-index)" = 
"d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/README.md new/greetd-0.8.0/README.md
--- old/greetd-0.7.0/README.md  2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/README.md  2021-09-05 21:15:06.000000000 +0200
@@ -46,7 +46,7 @@
 
 # Create the greeter user
 sudo useradd -M -G video greeter
-sudo chown -R greeter:greeter /etc/greetd/
+sudo chmod -R go+r /etc/greetd/
 
 # Look in the configuration file `/etc/greetd/config.toml` and edit as 
appropriate.
 # When done, enable and start greetd
@@ -56,3 +56,7 @@
 ## How do I write my own greeter?
 
 All you need to do is an application that can speak the greetd IPC protocol, 
which is documented in `greetd-ipc(7)`. See gtkgreet or agreety for inspiration.
+
+# How to discuss
+
+Go to #kennylevinsen @ irc.libera.chat to discuss, or use 
[~kennylevinsen/greetd-de...@lists.sr.ht](https://lists.sr.ht/~kennylevinsen/greetd-devel).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/agreety/Cargo.toml 
new/greetd-0.8.0/agreety/Cargo.toml
--- old/greetd-0.7.0/agreety/Cargo.toml 2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/agreety/Cargo.toml 2021-09-05 21:15:06.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "agreety"
-version = "0.6.0"
+version = "0.8.0"
 authors = ["Kenny Levinsen"]
 edition = "2018"
 license = "GPL-3.0"
@@ -10,7 +10,7 @@
 [dependencies]
 greetd_ipc = { path = "../greetd_ipc", features = ["sync-codec"]}
 inish = { path = "../inish"}
-rpassword = "4.0"
+rpassword = "5.0"
 getopts = "0.2"
 enquote = "1.0.3"
-nix = "0.17"
\ No newline at end of file
+nix = "0.19"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/fakegreet/.gitignore 
new/greetd-0.8.0/fakegreet/.gitignore
--- old/greetd-0.7.0/fakegreet/.gitignore       1970-01-01 01:00:00.000000000 
+0100
+++ new/greetd-0.8.0/fakegreet/.gitignore       2021-09-05 21:15:06.000000000 
+0200
@@ -0,0 +1,2 @@
+/target
+**/*.rs.bk
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/fakegreet/Cargo.toml 
new/greetd-0.8.0/fakegreet/Cargo.toml
--- old/greetd-0.7.0/fakegreet/Cargo.toml       2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/fakegreet/Cargo.toml       2021-09-05 21:15:06.000000000 
+0200
@@ -1,6 +1,6 @@
 [package]
 name = "fakegreet"
-version = "0.6.0"
+version = "0.8.0"
 authors = ["Kenny Levinsen"]
 edition = "2018"
 license = "GPL-3.0"
@@ -10,5 +10,5 @@
 [dependencies]
 serde = { version = "1.0", features = ["derive"] }
 greetd_ipc = { path = "../greetd_ipc", features = ["tokio-codec"] }
-tokio = { version = "0.2", features = ["process"] }
+tokio = { version = "1.0", features = ["process"] }
 thiserror = "1.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/fakegreet/src/main.rs 
new/greetd-0.8.0/fakegreet/src/main.rs
--- old/greetd-0.7.0/fakegreet/src/main.rs      2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/fakegreet/src/main.rs      2021-09-05 21:15:06.000000000 
+0200
@@ -6,7 +6,7 @@
     net::{UnixListener, UnixStream},
     process::Command,
     task,
-    time::delay_for,
+    time::sleep,
 };
 
 use crate::error::Error;
@@ -82,7 +82,7 @@
                 || s.password != Some("password".to_string())
                 || response != Some("9".to_string())
             {
-                delay_for(Duration::from_millis(2000)).await;
+                sleep(Duration::from_millis(2000)).await;
                 return Err(Error::AuthError("nope".to_string()));
             }
             s.ok = true;
@@ -94,7 +94,7 @@
         if !self.inner.borrow().ok {
             return Err(Error::Error("not yet dammit".to_string()));
         }
-        delay_for(Duration::from_millis(5000)).await;
+        sleep(Duration::from_millis(5000)).await;
         Ok(())
     }
 
@@ -151,7 +151,7 @@
     std::env::set_var("GREETD_SOCK", path);
 
     let _ = std::fs::remove_file(path);
-    let mut listener =
+    let listener =
         UnixListener::bind(path).map_err(|e| format!("unable to open listener: 
{}", e))?;
 
     let arg = env::args().nth(1).expect("need argument");
@@ -174,7 +174,7 @@
     }
 }
 
-#[tokio::main]
+#[tokio::main(flavor = "current_thread")]
 async fn main() {
     let res = task::LocalSet::new()
         .run_until(async move { server().await })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/.gitignore 
new/greetd-0.8.0/greetd/.gitignore
--- old/greetd-0.7.0/greetd/.gitignore  1970-01-01 01:00:00.000000000 +0100
+++ new/greetd-0.8.0/greetd/.gitignore  2021-09-05 21:15:06.000000000 +0200
@@ -0,0 +1,2 @@
+/target
+**/*.rs.bk
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/Cargo.toml 
new/greetd-0.8.0/greetd/Cargo.toml
--- old/greetd-0.7.0/greetd/Cargo.toml  2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/greetd/Cargo.toml  2021-09-05 21:15:06.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "greetd"
-version = "0.6.0"
+version = "0.8.0"
 authors = ["Kenny Levinsen"]
 edition = "2018"
 license = "GPL-3.0"
@@ -11,16 +11,16 @@
 debug = []
 
 [dependencies]
-nix = "0.17"
+nix = "0.19"
 pam-sys = "0.5.6"
-users = "0.9.1"
+users = "0.11.0"
 serde = { version = "1.0", features = ["derive"] }
 serde_json = "1.0"
 greetd_ipc = { path = "../greetd_ipc", features = ["tokio-codec"] }
 inish = { path = "../inish" }
 libc = "0.2"
-tokio = { version = "0.2", features = ["net", "sync", "macros", "signal", 
"rt-util", "io-util", "time"] }
+tokio = { version = "1.0", features = ["net", "sync", "macros", "signal", 
"rt", "io-util", "time"] }
 getopts = "0.2"
 thiserror = "1.0"
 async-trait = "0.1"
-enquote = "1.0.3"
\ No newline at end of file
+enquote = "1.0.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/config/mod.rs 
new/greetd-0.8.0/greetd/src/config/mod.rs
--- old/greetd-0.7.0/greetd/src/config/mod.rs   2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/greetd/src/config/mod.rs   2021-09-05 21:15:06.000000000 
+0200
@@ -5,6 +5,8 @@
 
 use super::error::Error;
 
+const RUNFILE: &str = "/run/greetd.run";
+
 #[derive(Debug, Eq, PartialEq)]
 pub enum VtSelection {
     Next,
@@ -33,17 +35,20 @@
 #[derive(Debug, Eq, PartialEq, Default)]
 pub struct ConfigTerminal {
     pub vt: VtSelection,
+    pub switch: bool,
 }
 
 #[derive(Debug, Eq, PartialEq)]
 pub struct ConfigGeneral {
     pub source_profile: bool,
+    pub runfile: String,
 }
 
 impl Default for ConfigGeneral {
     fn default() -> Self {
         ConfigGeneral {
             source_profile: true,
+            runfile: RUNFILE.to_string(),
         }
     }
 }
@@ -100,7 +105,7 @@
     };
 
     Ok(ConfigFile {
-        terminal: ConfigTerminal { vt },
+        terminal: ConfigTerminal { vt, switch: true },
         default_session: ConfigSession {
             user: greeter_user,
             command: greeter,
@@ -161,18 +166,31 @@
                         .map_err(|e| format!("could not parse vt number: {}", 
e))?,
                 ),
             },
+            switch: section
+                .get("switch")
+                .unwrap_or(&"true")
+                .parse()
+                .map_err(|e| format!("could not parse switch: {}", e))?,
         }),
         None => Err("no terminal specified"),
     }?;
 
     let general = match config.get("general") {
-        Some(section) => ConfigGeneral {
-            source_profile: section
-                .get("source_profile")
-                .unwrap_or(&"true")
-                .parse()
-                .map_err(|e| format!("could not parse source_profile: {}", 
e))?,
-        },
+        Some(section) => {
+            let runfilestr = section.get("runfile").unwrap_or(&RUNFILE);
+            let runfile = maybe_unquote(runfilestr)
+                .map_err(|e| format!("unable to read general.runfile: {}", 
e))?;
+
+            ConfigGeneral {
+                source_profile: section
+                    .get("source_profile")
+                    .unwrap_or(&"true")
+                    .parse()
+                    .map_err(|e| format!("could not parse source_profile: {}", 
e))?,
+                runfile,
+            }
+        }
+
         None => Default::default(),
     };
 
@@ -288,7 +306,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Specific(1)
+                    vt: VtSelection::Specific(1),
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -310,7 +329,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Next
+                    vt: VtSelection::Next,
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -337,7 +357,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Specific(1)
+                    vt: VtSelection::Specific(1),
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -364,7 +385,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Specific(1)
+                    vt: VtSelection::Specific(1),
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -386,6 +408,7 @@
 [terminal]\nvt = 1\n[default_session]\ncommand = \"agreety\"
 [general]
 source_profile = false
+runfile = \"/path/to/greetd.state\"
 ",
         )
         .expect("config didn't parse");
@@ -393,7 +416,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Specific(1)
+                    vt: VtSelection::Specific(1),
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -401,6 +425,7 @@
                 },
                 general: ConfigGeneral {
                     source_profile: false,
+                    runfile: "/path/to/greetd.state".to_string(),
                 },
                 initial_session: None,
             }
@@ -433,7 +458,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Specific(1)
+                    vt: VtSelection::Specific(1),
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -455,7 +481,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Next
+                    vt: VtSelection::Next,
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
@@ -477,7 +504,8 @@
             config,
             ConfigFile {
                 terminal: ConfigTerminal {
-                    vt: VtSelection::Current
+                    vt: VtSelection::Current,
+                    switch: true,
                 },
                 default_session: ConfigSession {
                     command: "agreety".to_string(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/context.rs 
new/greetd-0.8.0/greetd/src/context.rs
--- old/greetd-0.7.0/greetd/src/context.rs      2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/greetd/src/context.rs      2021-09-05 21:15:06.000000000 
+0200
@@ -1,10 +1,14 @@
-use std::time::{Duration, Instant};
+use std::{
+    fs::File,
+    path::Path,
+    time::{Duration, Instant},
+};
 
 use nix::{
     sys::wait::{waitpid, WaitPidFlag, WaitStatus},
     unistd::alarm,
 };
-use tokio::{sync::RwLock, time::delay_for};
+use tokio::{sync::RwLock, time::sleep};
 
 use crate::{
     error::Error,
@@ -41,6 +45,7 @@
     pam_service: String,
     term_mode: TerminalMode,
     source_profile: bool,
+    runfile: String,
 }
 
 impl Context {
@@ -51,6 +56,7 @@
         pam_service: String,
         term_mode: TerminalMode,
         source_profile: bool,
+        runfile: String,
     ) -> Context {
         Context {
             inner: RwLock::new(ContextInner {
@@ -64,6 +70,7 @@
             pam_service,
             term_mode,
             source_profile,
+            runfile,
         }
     }
 
@@ -131,6 +138,18 @@
         Ok(())
     }
 
+    /// Check if this is the first time greetd starts since boot, or if it 
restarted for any reason
+    pub fn is_first_run(&self) -> bool {
+        !Path::new(&self.runfile).exists()
+    }
+
+    /// Create runfile used to check if greetd was already started since boot
+    pub fn create_runfile(&self) {
+        if let Err(err) = File::create(&self.runfile) {
+            eprintln!("could not create runfile: {}", err);
+        }
+    }
+
     /// Directly start an initial session, bypassing the normal scheduling.
     pub async fn start_user_session(&self, user: &str, cmd: Vec<String>) -> 
Result<(), Error> {
         {
@@ -341,7 +360,7 @@
                                 return Err("greeter exited without creating a 
session".into());
                             }
                             if sesion_length < Duration::from_secs(1) {
-                                delay_for(Duration::from_secs(1)).await;
+                                sleep(Duration::from_secs(1)).await;
                             }
                             inner.current = Some(SessionChildSet {
                                 child: self.start_greeter().await?,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/main.rs 
new/greetd-0.8.0/greetd/src/main.rs
--- old/greetd-0.7.0/greetd/src/main.rs 2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/greetd/src/main.rs 2021-09-05 21:15:06.000000000 +0200
@@ -29,7 +29,7 @@
     worker::main(&sock)
 }
 
-#[tokio::main]
+#[tokio::main(flavor = "current_thread")]
 async fn main() {
     let config = match config::read_config() {
         Ok(config) => config,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/server.rs 
new/greetd-0.8.0/greetd/src/server.rs
--- old/greetd-0.7.0/greetd/src/server.rs       2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/greetd/src/server.rs       2021-09-05 21:15:06.000000000 
+0200
@@ -31,6 +31,17 @@
     Ok(())
 }
 
+fn wait_vt(term_mode: &TerminalMode) -> Result<(), Error> {
+    match term_mode {
+        TerminalMode::Terminal { path, vt, .. } => {
+            let term = Terminal::open(path)?;
+            term.vt_waitactive(*vt)?;
+        }
+        TerminalMode::Stdin => (),
+    }
+    Ok(())
+}
+
 fn wrap_result<T>(res: Result<T, Error>) -> Response {
     match res {
         Ok(_) => Response::Success,
@@ -145,14 +156,14 @@
             TerminalMode::Terminal {
                 path: format!("/dev/tty{}", vt),
                 vt,
-                switch: true,
+                switch: config.file.terminal.switch,
             }
         }
         VtSelection::None => TerminalMode::Stdin,
         VtSelection::Specific(vt) => TerminalMode::Terminal {
             path: format!("/dev/tty{}", vt),
             vt,
-            switch: true,
+            switch: config.file.terminal.switch,
         },
     };
     return Ok(term);
@@ -211,10 +222,14 @@
     let uid = Uid::from_raw(u.uid());
     let gid = Gid::from_raw(u.primary_group_id());
 
-    let mut listener = Listener::create(uid, gid)?;
+    let listener = Listener::create(uid, gid)?;
 
     let term_mode = get_tty(&config)?;
 
+    if !config.file.terminal.switch {
+        wait_vt(&term_mode).map_err(|e| format!("unable to wait VT: {}", e))?;
+    }
+
     let ctx = Rc::new(Context::new(
         config.file.default_session.command,
         config.file.default_session.user,
@@ -222,9 +237,10 @@
         service.to_string(),
         term_mode.clone(),
         config.file.general.source_profile,
+        config.file.general.runfile,
     ));
 
-    if let Some(s) = config.file.initial_session {
+    if let (Some(s), true) = (config.file.initial_session, ctx.is_first_run()) 
{
         if let Err(e) = ctx.start_user_session(&s.user, vec![s.command]).await 
{
             eprintln!("unable to start greeter: {}", e);
             reset_vt(&term_mode).map_err(|e| format!("unable to reset VT: {}", 
e))?;
@@ -238,6 +254,8 @@
         std::process::exit(1);
     }
 
+    ctx.create_runfile();
+
     let mut alarm = signal(SignalKind::alarm()).expect("unable to listen for 
SIGALRM");
     let mut child = signal(SignalKind::child()).expect("unable to listen for 
SIGCHLD");
     let mut term = signal(SignalKind::terminate()).expect("unable to listen 
for SIGTERM");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/session/interface.rs 
new/greetd-0.8.0/greetd/src/session/interface.rs
--- old/greetd-0.7.0/greetd/src/session/interface.rs    2020-12-22 
12:29:48.000000000 +0100
+++ new/greetd-0.8.0/greetd/src/session/interface.rs    2021-09-05 
21:15:06.000000000 +0200
@@ -105,7 +105,7 @@
         let cur_exe = std::env::current_exe()?;
         let bin = CString::new(cur_exe.to_str().expect("unable to get current 
exe name"))?;
 
-        let child = match fork().map_err(|e| format!("unable to fork: {}", 
e))? {
+        let child = match unsafe { fork() }.map_err(|e| format!("unable to 
fork: {}", e))? {
             ForkResult::Parent { child, .. } => child,
             ForkResult::Child => {
                 execv(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/session/worker.rs 
new/greetd-0.8.0/greetd/src/session/worker.rs
--- old/greetd-0.7.0/greetd/src/session/worker.rs       2020-12-22 
12:29:48.000000000 +0100
+++ new/greetd-0.8.0/greetd/src/session/worker.rs       2021-09-05 
21:15:06.000000000 +0200
@@ -225,7 +225,7 @@
     // PAM is weird and gets upset if you exec from the process that opened
     // the session, registering it automatically as a log-out. Thus, we must
     // exec in a new child.
-    let child = match fork().map_err(|e| format!("unable to fork: {}", e))? {
+    let child = match unsafe { fork() }.map_err(|e| format!("unable to fork: 
{}", e))? {
         ForkResult::Parent { child, .. } => child,
         ForkResult::Child => {
             // It is important that we do *not* return from here by
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd/src/terminal/mod.rs 
new/greetd-0.8.0/greetd/src/terminal/mod.rs
--- old/greetd-0.7.0/greetd/src/terminal/mod.rs 2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/greetd/src/terminal/mod.rs 2021-09-05 21:15:06.000000000 
+0200
@@ -111,6 +111,14 @@
         Ok(())
     }
 
+    /// Waits for specified VT to become active.
+    pub fn vt_waitactive(&self, target_vt: usize) -> Result<(), Error> {
+        if let Err(v) = unsafe { ioctl::vt_waitactive(self.fd, target_vt as 
i32) } {
+            return Err(format!("terminal: unable to wait for activation: {}", 
v).into());
+        }
+        Ok(())
+    }
+
     /// Set the VT mode to VT_AUTO with everything cleared.
     fn vt_mode_clean(&self) -> Result<(), Error> {
         let mode = ioctl::vt_mode {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd_ipc/Cargo.toml 
new/greetd-0.8.0/greetd_ipc/Cargo.toml
--- old/greetd-0.7.0/greetd_ipc/Cargo.toml      2020-12-22 12:29:48.000000000 
+0100
+++ new/greetd-0.8.0/greetd_ipc/Cargo.toml      2021-09-05 21:15:06.000000000 
+0200
@@ -1,6 +1,6 @@
 [package]
 name = "greetd_ipc"
-version = "0.6.0"
+version = "0.8.0"
 authors = ["Kenny Levinsen"]
 edition = "2018"
 license = "GPL-3.0"
@@ -20,6 +20,6 @@
 [dependencies]
 serde = { version = "1.0", features = ["derive"] }
 serde_json = "1.0"
-tokio = { version = "0.2", features = ["io-util"], optional = true }
+tokio = { version = "1.0", features = ["io-util"], optional = true }
 async-trait = { version = "0.1", optional = true }
 thiserror = { version = "1.0", optional = true }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/greetd_ipc/src/codec/tokio.rs 
new/greetd-0.8.0/greetd_ipc/src/codec/tokio.rs
--- old/greetd-0.7.0/greetd_ipc/src/codec/tokio.rs      2020-12-22 
12:29:48.000000000 +0100
+++ new/greetd-0.8.0/greetd_ipc/src/codec/tokio.rs      2021-09-05 
21:15:06.000000000 +0200
@@ -8,7 +8,7 @@
 //! use greetd_ipc::{Request, Response};
 //! use greetd_ipc::codec::TokioCodec;
 //!
-//! #[tokio::main]
+//! #[tokio::main(flavor = "current_thread")]
 //! async fn main() -> Result<(), Box<dyn std::error::Error>> {
 //!     let mut stream = UnixStream::connect(env::var("GREETD_SOCK")?).await?;
 //!     Request::CreateSession { username: "john".to_string() }.write_to(&mut 
stream).await?;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/man/Makefile 
new/greetd-0.8.0/man/Makefile
--- old/greetd-0.7.0/man/Makefile       1970-01-01 01:00:00.000000000 +0100
+++ new/greetd-0.8.0/man/Makefile       2021-09-05 21:15:06.000000000 +0200
@@ -0,0 +1,33 @@
+SCDOC=$(shell pkg-config --variable=scdoc scdoc)
+PREFIX?=/usr/local
+MANDIR?=$(PREFIX)/share/man
+DESTDIR?=
+
+agreety.1: agreety-1.scd
+       $(SCDOC) < agreety-1.scd > agreety.1
+
+greetd.1: greetd-1.scd
+       $(SCDOC) < greetd-1.scd > greetd.1
+
+greetd.5: greetd-5.scd
+       $(SCDOC) < greetd-5.scd > greetd.5
+
+greetd-ipc.7: greetd-ipc-7.scd
+       $(SCDOC) < greetd-ipc-7.scd > greetd-ipc.7
+
+all: agreety.1 greetd.1 greetd.5 greetd-ipc.7
+
+install:
+       mkdir -p $(DESTDIR)$(MANDIR)/man1
+       mkdir -p $(DESTDIR)$(MANDIR)/man5
+       mkdir -p $(DESTDIR)$(MANDIR)/man7
+       install -m644 agreety.1 $(DESTDIR)$(MANDIR)/man1/agreety.1
+       install -m644 greetd.1 $(DESTDIR)$(MANDIR)/man1/greetd.1
+       install -m644 greetd.5 $(DESTDIR)$(MANDIR)/man5/greetd.5
+       install -m644 greetd-ipc.7 $(DESTDIR)$(MANDIR)/man7/greetd-ipc.7
+
+clean:
+       rm -f agreety.1 greetd.1 greetd.5 greetd-ipc.7
+
+.DEFAULT_GOAL=all
+.PHONY: all install clean
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/man/greetd-5.scd 
new/greetd-0.8.0/man/greetd-5.scd
--- old/greetd-0.7.0/man/greetd-5.scd   2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/man/greetd-5.scd   2021-09-05 21:15:06.000000000 +0200
@@ -37,6 +37,16 @@
 
        Use of a specific VT with appropriate conflict avoidance is recommended.
 
+*switch* = true|false
+       Whether or not to switch to *vt*.
+
+       If set to false and *vt* is not currently active VT, greetd will wait 
for
+       *vt* to become active, before doing anything including starting greeter.
+
+       If set to true, greetd will switch current VT to *vt*,
+
+       Default is true.
+
 ## general
 
 This section contains general configuration that does not fit in other sections
@@ -46,6 +56,13 @@
        Whether or not to source ~/.profile and /etc/profile if present when 
running
        commands. Defaults to true.
 
+*runfile* = path-to-runfile
+       Location of greetd's runfile that is created during the first run to 
prevent
+       the initial session from being run again on session termination or on 
greetd
+       restart.
+
+       This file should be in a location that is cleared during a reboot.
+
 ## default_session
 
 This section describes the default session, also referred to as the *greeter*.
@@ -66,6 +83,11 @@
 This optional section describes the initial session, commonly referred to as
 "auto-login".
 
+The initial session will only be executed during the first run of greetd since
+boot in order to ensure signing out works properly and to prevent security
+issues whenever greetd or the greeter exit. This is checked through the
+presence of the runfile.
+
 *command* = command-line
        The command-line to run to start the initial session, e.g. "sway". The
        initial session will be run when exactly once when greetd is initially
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greetd-0.7.0/rustfmt.toml 
new/greetd-0.8.0/rustfmt.toml
--- old/greetd-0.7.0/rustfmt.toml       2020-12-22 12:29:48.000000000 +0100
+++ new/greetd-0.8.0/rustfmt.toml       2021-09-05 21:15:06.000000000 +0200
@@ -1,2 +1,2 @@
 unstable_features = true
-merge_imports = true
+imports_granularity = "Crate"

++++++ greetd.obsinfo ++++++
--- /var/tmp/diff_new_pack.nUnfuz/_old  2021-11-01 18:36:03.689347761 +0100
+++ /var/tmp/diff_new_pack.nUnfuz/_new  2021-11-01 18:36:03.689347761 +0100
@@ -1,5 +1,5 @@
 name: greetd
-version: 0.7.0
-mtime: 1608636588
-commit: b25b72ae51b3b6dca945b6078e55b593b02fb7a5
+version: 0.8.0
+mtime: 1630869306
+commit: d2477a8f9c50097a689125304ea2a1e3660d274e
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/greetd/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.greetd.new.1890/vendor.tar.gz differ: char 5, line 1

Reply via email to