summaryrefslogtreecommitdiff
path: root/meta-openembedded/meta-oe/recipes-graphics
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openembedded/meta-oe/recipes-graphics')
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch158
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.6.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb8
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch46
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch124
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch124
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch180
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch99
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch53
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb9
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_4.1.1.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb)3
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_2.000.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb)6
18 files changed, 843 insertions, 178 deletions
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch b/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch
deleted file mode 100644
index 2eb50a5a3..000000000
--- a/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From 461861cd2e34294830b121db834c05ff39424f6f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 27 Dec 2019 18:42:51 -0800
-Subject: [PATCH] Fix Wimplicit-int-float-conversion warnings with clang 10+
-
-This is a new warning in clang which will be available in clang 10
-onwards
-
-Fixes
-error: implicit conversion from 'const int' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion]
-
-Upstream-Status: Submitted [https://github.com/g-truc/glm/pull/986]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- glm/gtx/scalar_multiplication.hpp | 2 +-
- test/gtx/gtx_fast_trigonometry.cpp | 32 +++++++++++++++---------------
- 2 files changed, 17 insertions(+), 17 deletions(-)
-
-diff --git a/glm/gtx/scalar_multiplication.hpp b/glm/gtx/scalar_multiplication.hpp
-index f391f8de..496ba193 100644
---- a/glm/gtx/scalar_multiplication.hpp
-+++ b/glm/gtx/scalar_multiplication.hpp
-@@ -54,7 +54,7 @@ namespace glm
- template<typename T> \
- return_type_scalar_multiplication<T, Vec> \
- operator/(Vec lh, T const& s){ \
-- return lh *= 1.0f / s; \
-+ return lh *= 1.0f / static_cast<float>(s); \
- }
-
- GLM_IMPLEMENT_SCAL_MULT(vec2)
-diff --git a/test/gtx/gtx_fast_trigonometry.cpp b/test/gtx/gtx_fast_trigonometry.cpp
-index f3bf17bf..f3c4e957 100644
---- a/test/gtx/gtx_fast_trigonometry.cpp
-+++ b/test/gtx/gtx_fast_trigonometry.cpp
-@@ -239,12 +239,12 @@ namespace taylorCos
- std::vector<glm::vec4> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * i));
-+ Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * float(i)));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -280,12 +280,12 @@ namespace taylorCos
- std::vector<glm::vec4> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * i));
-+ Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * float(i)));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -327,12 +327,12 @@ namespace taylorCos
- std::vector<glm::vec4> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * i));
-+ Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * float(i)));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -349,12 +349,12 @@ namespace taylorCos
- std::vector<glm::vec4> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * i));
-+ Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * float(i)));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -371,12 +371,12 @@ namespace taylorCos
- std::vector<glm::vec4> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * i));
-+ Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * float(i)));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -466,12 +466,12 @@ namespace taylor2
- std::vector<float> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = taylorCosA(AngleShift.x + Begin + Steps * i);
-+ Results[i] = taylorCosA(AngleShift.x + Begin + Steps * float(i));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -488,12 +488,12 @@ namespace taylor2
- std::vector<float> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = taylorCosB(AngleShift.x + Begin + Steps * i);
-+ Results[i] = taylorCosB(AngleShift.x + Begin + Steps * float(i));
-
- std::clock_t const TimeStampEnd = std::clock();
-
-@@ -510,12 +510,12 @@ namespace taylor2
- std::vector<float> Results;
- Results.resize(Samples);
-
-- float Steps = (End - Begin) / Samples;
-+ float Steps = (End - Begin) / float(Samples);
-
- std::clock_t const TimeStampBegin = std::clock();
-
- for(std::size_t i = 0; i < Samples; ++i)
-- Results[i] = taylorCosC(AngleShift.x + Begin + Steps * i);
-+ Results[i] = taylorCosC(AngleShift.x + Begin + Steps * float(i));
-
- std::clock_t const TimeStampEnd = std::clock();
-
---
-2.24.1
-
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch b/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch
new file mode 100644
index 000000000..25e851883
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch
@@ -0,0 +1,50 @@
+From 5b83983b246cff440de4421696b6b5dd9072ed2d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 6 Feb 2021 11:36:23 -0800
+Subject: [PATCH] Silence clang warnings
+
+Fixes
+glm/gtc/random.inl:25:17: error: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Werror,-Wimplicit-int-conversion]
+| std::rand() % std::numeric_limits<uint8>::max());
+| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+glm/gtc/../ext/quaternion_common.inl:76:87: error: unused parameter 'k' [-Werror,-Wunused-parameter]
+ GLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k)
+ ^
+
+Upstream-Status: Submitted [https://github.com/g-truc/glm/pull/1055]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ glm/ext/quaternion_common.inl | 2 +-
+ glm/gtc/random.inl | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/glm/ext/quaternion_common.inl b/glm/ext/quaternion_common.inl
+index 0e4a3bb2..8f9dccef 100644
+--- a/glm/ext/quaternion_common.inl
++++ b/glm/ext/quaternion_common.inl
+@@ -104,7 +104,7 @@ namespace glm
+ {
+ // Graphics Gems III, page 96
+ T angle = acos(cosTheta);
+- T phi = angle + k * glm::pi<T>();
++ T phi = angle + static_cast<float>(k) * glm::pi<T>();
+ return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle);
+ }
+ }
+diff --git a/glm/gtc/random.inl b/glm/gtc/random.inl
+index 70485098..a4af2a06 100644
+--- a/glm/gtc/random.inl
++++ b/glm/gtc/random.inl
+@@ -22,7 +22,7 @@ namespace detail
+ GLM_FUNC_QUALIFIER static vec<1, uint8, P> call()
+ {
+ return vec<1, uint8, P>(
+- std::rand() % std::numeric_limits<uint8>::max());
++ static_cast<uint8>(std::rand()) % std::numeric_limits<uint8>::max());
+ }
+ };
+
+--
+2.30.0
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.6.bb b/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb
index e2f4dbebc..c5a7c5bff 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.6.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb
@@ -6,17 +6,17 @@ HOMEPAGE = "https://glm.g-truc.net"
BUGTRACKER = "https://github.com/g-truc/glm/issues"
SECTION = "libs"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://copying.txt;md5=4a735e33f271f57404fda17e80085411"
+LIC_FILES_CHKSUM = "file://copying.txt;md5=462e4b97f73ef12f8171c3c546ce4e8d"
SRC_URI = " \
git://github.com/g-truc/glm;branch=master \
- file://0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch \
+ file://0001-Silence-clang-warnings.patch \
file://glmConfig.cmake.in \
file://glmConfigVersion.cmake.in \
file://glm.pc.in \
file://glmTargets.cmake \
"
-SRCREV = "4db8f89aace8f04c839b606e15b39fb8383ec732"
+SRCREV = "bf71a834948186f4097caa076cd2663c69a10e1e"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb b/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb
index bc46a11d3..8fe837b75 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb
@@ -20,13 +20,6 @@ DEPENDS_append_class-nativesdk = " ${BPN}-native"
inherit autotools-brokensep pkgconfig gettext
-# The source tarball suggested at
-# https://graphviz.gitlab.io/_pages/Download/Download_source.html has no
-# version in its name. So once graphviz is updgraded, only first time users will
-# get checksum errors. Fedora people seem to expect same so they use a versioned
-# source - see https://src.fedoraproject.org/cgit/rpms/graphviz.git/tree/graphviz.spec
-
-SRCREV = "771bc4dbff3e6f358fa75cdc7774a413ccacad51"
SRC_URI = "https://www2.graphviz.org/Packages/stable/portable_source/${BP}.tar.gz \
file://0001-plugin-pango-Include-freetype-headers-explicitly.patch \
"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch
new file mode 100644
index 000000000..0605b32e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch
@@ -0,0 +1,34 @@
+From 9363c98528ef850235852e44f678df6b5c011ee1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 7 Feb 2021 18:08:36 -0800
+Subject: [PATCH] configure.in: Undefine AC_CONFIG_AUX_DIR
+
+This helps reconfiguring with autotools 2.70+
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.in | 5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/configure.in
++++ b/configure.in
+@@ -1,7 +1,6 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(README.txt)
+ AC_CONFIG_AUX_DIR(build-scripts)
+-
+ dnl Set various version strings - taken gratefully from the GTk sources
+
+ # Making releases:
+@@ -40,10 +39,6 @@ AC_SUBST(LT_CURRENT)
+ AC_SUBST(LT_REVISION)
+ AC_SUBST(LT_AGE)
+
+-dnl Detect the canonical build and host environments
+-AC_CONFIG_AUX_DIRS($srcdir/build-scripts)
+-dnl AC_CANONICAL_HOST
+-
+ dnl Check for tools
+ AC_PROG_LIBTOOL
+ AC_PROG_CC
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb
index 8f1960d8a..6b6a531d3 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb
@@ -4,18 +4,18 @@ DEPENDS = "virtual/libsdl2 flac libmikmod libvorbis"
LICENSE = "Zlib"
LIC_FILES_CHKSUM = "file://COPYING.txt;md5=516daf7a177ad4c8874bb9efa1a69c1f"
-SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "a36e8410cac46b00a4d01752b32c3eb1"
+SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${PV}.tar.gz \
+ file://0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch \
+ "
SRC_URI[sha256sum] = "b4cf5a382c061cd75081cf246c2aa2f9df8db04bdda8dcdc6b6cca55bede2419"
S = "${WORKDIR}/SDL2_mixer-${PV}"
inherit autotools-brokensep pkgconfig
-EXTRA_AUTORECONF += "--include=acinclude"
EXTRA_OECONF = "--disable-music-mp3 --enable-music-ogg --disable-music-ogg-shared LIBS=-L${STAGING_LIBDIR}"
+PACKAGECONFIG ??= ""
PACKAGECONFIG[mad] = "--enable-music-mp3-mad-gpl,--disable-music-mp3-mad-gpl,libmad"
do_configure_prepend () {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch
new file mode 100644
index 000000000..e01dc7fa7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch
@@ -0,0 +1,33 @@
+From f6b8e141e00c4837239f5b69af4e7bee1204abba Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Thu, 17 Dec 2020 10:18:58 +0800
+Subject: [PATCH 1/8] greeter: set visible when switch to input user
+
+It switches back to input user entry if press Esc key when input the
+password. At this time, the user name input is shown as '*' rather than
+plain text. Set the visibility to fix this issue. And clean the text as
+well.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index 2c6e5be..f100c72 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -139,6 +139,8 @@ static void switch_to_input_user(void)
+ pass=NULL;
+ }
+ gtk_label_set_text( GTK_LABEL(prompt), _("User:"));
++ gtk_entry_set_text(GTK_ENTRY(login_entry), "");
++ gtk_entry_set_visibility(GTK_ENTRY(login_entry), TRUE);
+ gtk_widget_show(prompt);
+ if(user_list)
+ {
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch
new file mode 100644
index 000000000..da0212975
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch
@@ -0,0 +1,28 @@
+From 3a3c5c644c9790cb3f88f3ce3757c2803cff90c5 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Thu, 17 Dec 2020 14:32:40 +0800
+Subject: [PATCH 2/8] greeter-gdk.c: fix typo
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter-gdk.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/greeter-gdk.c b/src/greeter-gdk.c
+index 1b27d2e..5aa3e7f 100644
+--- a/src/greeter-gdk.c
++++ b/src/greeter-gdk.c
+@@ -299,7 +299,7 @@ void ui_prepare(void)
+ attr.wclass = GDK_INPUT_OUTPUT;
+ win = gdk_window_new(root, &attr, mask);
+ gdk_window_set_decorations(win,0);
+- gdk_window_set_title(win,"lxdm-greter-gdk");
++ gdk_window_set_title(win,"lxdm-greeter-gdk");
+
+ scr=gdk_screen_get_default();
+ g_signal_connect(scr, "size-changed", G_CALLBACK(on_screen_size_changed), win);
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch
new file mode 100644
index 000000000..c64854373
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch
@@ -0,0 +1,46 @@
+From 497e0fc7010969759c8247f7013a89589c44234a Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Thu, 17 Dec 2020 18:12:29 +0800
+Subject: [PATCH 3/8] check whether password expired with pam
+
+Introduce a new enum AuthResult type AUTH_PASSWD_EXPIRE. When user's
+password is expired, return it. Only work with pam.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/lxdm.h | 1 +
+ src/pam.c | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/src/lxdm.h b/src/lxdm.h
+index 568573f..1c2f837 100644
+--- a/src/lxdm.h
++++ b/src/lxdm.h
+@@ -41,6 +41,7 @@ enum AuthResult
+ AUTH_SUCCESS,
+ AUTH_BAD_USER,
+ AUTH_FAIL,
++ AUTH_PASSWD_EXPIRE,
+ AUTH_PRIV,
+ AUTH_ERROR
+ };
+diff --git a/src/pam.c b/src/pam.c
+index 43bd687..16a36f0 100644
+--- a/src/pam.c
++++ b/src/pam.c
+@@ -257,6 +257,10 @@ int lxdm_auth_user_authenticate(LXDM_AUTH *a,const char *user,const char *pass,i
+ return AUTH_FAIL;
+ }
+ ret=pam_acct_mgmt(a->handle,PAM_SILENT);
++ if (ret == PAM_NEW_AUTHTOK_REQD) {
++ g_debug("user %s account has expired\n", user);
++ return AUTH_PASSWD_EXPIRE;
++ }
+ if(ret!=PAM_SUCCESS)
+ {
+ g_debug("user %s acct mgmt fail with %d\n",user,ret);
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch
new file mode 100644
index 000000000..29c1000d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch
@@ -0,0 +1,124 @@
+From d4de5497bd89c408377194b9fa9026ba8e68b634 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 11 Jan 2021 14:11:05 +0800
+Subject: [PATCH 4/8] lxdm.c: add function to change password with pam
+
+Add function to change user's password when pam is enabled. It is useful
+to change user's password when the password is expired.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/lxdm.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/lxdm.h | 1 +
+ 2 files changed, 69 insertions(+)
+
+diff --git a/src/lxdm.c b/src/lxdm.c
+index 638c30f..fe17a71 100644
+--- a/src/lxdm.c
++++ b/src/lxdm.c
+@@ -104,6 +104,10 @@ static int old_tty=1,def_tty = 7,nr_tty=0;
+ static int def_display=0;
+ static GSList *session_list;
+
++#if HAVE_LIBPAM
++static const char *new_passwd = NULL;
++#endif
++
+ static void lxdm_startx(LXSession *s);
+
+ static int get_active_vt(void)
+@@ -759,6 +763,69 @@ int lxdm_auth_user(int type,char *user, char *pass, struct passwd **ppw)
+ return ret;
+ }
+
++
++#if HAVE_LIBPAM
++
++static int do_conv(int num, const struct pam_message **msg,struct pam_response **resp, void *arg)
++{
++ int result = PAM_SUCCESS;
++ int i;
++
++ *resp = (struct pam_response *) calloc(num, sizeof(struct pam_response));
++ for(i = 0; i < num; i++)
++ {
++ switch (msg[i]->msg_style) {
++ case PAM_PROMPT_ECHO_ON:
++ break;
++ case PAM_PROMPT_ECHO_OFF:
++ resp[i]->resp = strdup(new_passwd);
++ break;
++ case PAM_ERROR_MSG:
++ case PAM_TEXT_INFO:
++ break;
++ default:
++ break;
++ }
++ }
++ return result;
++}
++
++static int lxdm_change_passwd_pam(const char *service, const char *user, const char *pass)
++{
++ pam_handle_t *pamh = NULL;
++ static struct pam_conv conv = {
++ do_conv,
++ NULL
++ };
++
++ int ret = pam_start("lxdm", user, &conv, &pamh);
++ if (PAM_SUCCESS != ret) {
++ g_warning("pam_start failed.");
++ return 1;
++ }
++
++ new_passwd = pass;
++ ret = pam_chauthtok(pamh, 0);
++ if (PAM_SUCCESS != ret) {
++ g_warning("pam_chauthtok failed: %s", pam_strerror(pamh, ret));
++ return 1;
++ }
++
++ (void)pam_end(pamh, PAM_SUCCESS);
++
++ return 0;
++}
++#endif
++
++int lxdm_change_passwd(const char *user, const char *pass)
++{
++#if HAVE_LIBPAM
++ return lxdm_change_passwd_pam("lxdm", user, pass);
++#else
++ return 0;
++#endif
++}
++
+ static void close_left_fds(void)
+ {
+ struct dirent **list;
+@@ -1446,6 +1513,7 @@ int lxdm_do_auto_login(void)
+ lxdm_do_login(pw,session,lang,option);
+ success=1;
+ }
++
+ g_free(user);g_free(session);g_free(lang);
+ }
+ g_free(last_lang);
+diff --git a/src/lxdm.h b/src/lxdm.h
+index 1c2f837..be3c81f 100644
+--- a/src/lxdm.h
++++ b/src/lxdm.h
+@@ -30,6 +30,7 @@ G_BEGIN_DECLS
+ extern GKeyFile *config;
+
+ int lxdm_auth_user(int type,char *user,char *pass,struct passwd **ppw);
++int lxdm_change_passwd(const char *user, const char *pass);
+ void lxdm_do_login(struct passwd *pw,char *session,char *lang,char *option);
+ void lxdm_do_reboot(void);
+ void lxdm_do_shutdown(void);
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch
new file mode 100644
index 000000000..ecbe68d14
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch
@@ -0,0 +1,53 @@
+From 54b2ed18ca52fa682ade2fe84e1b0d19d1b78cc4 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 11 Jan 2021 16:48:26 +0800
+Subject: [PATCH 5/8] ui.c: handle password-expire and update-new-password
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/ui.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/src/ui.c b/src/ui.c
+index f233589..3ddb484 100644
+--- a/src/ui.c
++++ b/src/ui.c
+@@ -161,6 +161,9 @@ static gboolean on_greeter_input(GIOChannel *source, GIOCondition condition, gpo
+ ui_drop();
+ lxdm_do_login(pw, session, lang,NULL);
+ }
++ else if (AUTH_PASSWD_EXPIRE == ret) {
++ xwrite(greeter_pipe[0], "password-expire\n", 16);
++ }
+ else
+ {
+ if(pass!=NULL)
+@@ -205,6 +208,23 @@ static gboolean on_greeter_input(GIOChannel *source, GIOCondition condition, gpo
+ g_free(session);
+ g_free(lang);
+ }
++ else if (!strncmp(str, "update-new-password", 19)) {
++ xwrite(greeter_pipe[0], "update-new-password\n", 20);
++ char *user = greeter_param(str, "user");
++ char *pass = greeter_param(str, "newpass");
++ char *session = greeter_param(str, "session");
++ char *lang = greeter_param(str, "lang");
++
++ int ret = lxdm_change_passwd(user, pass);
++ if (ret) {
++ xwrite(greeter_pipe[0], "invalid-new-password\n", 21);
++ } else {
++ struct passwd *pw;
++ ret = lxdm_auth_user(AUTH_TYPE_NORMAL, user, pass, &pw);
++ ui_drop();
++ lxdm_do_login(pw, session, lang, NULL);
++ }
++ }
+ g_free(str);
+ return TRUE;
+ }
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch
new file mode 100644
index 000000000..4cadc3d9b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch
@@ -0,0 +1,124 @@
+From 8414d63343cc7909bc7a972941c678509d5d5be6 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 11 Jan 2021 10:15:45 +0800
+Subject: [PATCH 6/8] themes/Industrial: add info label in ui
+
+Adjust the layout and add a new label "info" under the labe "prompt" in
+themes/Industrial to tell user some useful information such as
+"Authentication failed" or "Invalid password".
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ data/themes/Industrial/greeter-gtk3.ui | 27 +++++++++++++++++++++++++-
+ data/themes/Industrial/greeter.ui | 27 +++++++++++++++++++++++++-
+ data/themes/Industrial/gtk.css | 5 +++++
+ 3 files changed, 57 insertions(+), 2 deletions(-)
+
+diff --git a/data/themes/Industrial/greeter-gtk3.ui b/data/themes/Industrial/greeter-gtk3.ui
+index 2f4e631..e59eee3 100644
+--- a/data/themes/Industrial/greeter-gtk3.ui
++++ b/data/themes/Industrial/greeter-gtk3.ui
+@@ -45,7 +45,12 @@
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+- <object class="GtkHBox" id="hbox3">
++ <object class="GtkVBox" id="vbox3">
++ <property name="visible">True</property>
++ <property name="orientation">vertical</property>
++ <property name="spacing">12</property>
++ <child>
++ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+@@ -91,6 +96,26 @@
+ </packing>
+ </child>
+ </object>
++ </child>
++ <child>
++ <object class="GtkHBox" id="hbox4">
++ <property name="visible">True</property>
++ <property name="spacing">12</property>
++ <child>
++ <object class="GtkLabel" id="info">
++ <property name="visible">True</property>
++ <property name="label" translatable="yes"></property>
++ <property name="yalign">0.2</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ </object>
++ </child>
++ </object>
+ </child>
+ </object>
+ <packing>
+diff --git a/data/themes/Industrial/greeter.ui b/data/themes/Industrial/greeter.ui
+index 3413922..6a02d8d 100644
+--- a/data/themes/Industrial/greeter.ui
++++ b/data/themes/Industrial/greeter.ui
+@@ -47,7 +47,12 @@
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+- <object class="GtkHBox" id="hbox3">
++ <object class="GtkVBox" id="vbox3">
++ <property name="visible">True</property>
++ <property name="orientation">vertical</property>
++ <property name="spacing">12</property>
++ <child>
++ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+@@ -93,6 +98,26 @@
+ </packing>
+ </child>
+ </object>
++ </child>
++ <child>
++ <object class="GtkHBox" id="hbox4">
++ <property name="visible">True</property>
++ <property name="spacing">12</property>
++ <child>
++ <object class="GtkLabel" id="info">
++ <property name="visible">True</property>
++ <property name="label" translatable="yes"></property>
++ <property name="yalign">0.2</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ </object>
++ </child>
++ </object>
+ </child>
+ </object>
+ <packing>
+diff --git a/data/themes/Industrial/gtk.css b/data/themes/Industrial/gtk.css
+index 7621345..be15f43 100644
+--- a/data/themes/Industrial/gtk.css
++++ b/data/themes/Industrial/gtk.css
+@@ -22,3 +22,8 @@
+ font: Sans 12;
+ color: #9E9D9B;
+ }
++
++#info {
++ font: Sans 14;
++ font-style: italic;
++}
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch
new file mode 100644
index 000000000..84a9faebb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch
@@ -0,0 +1,180 @@
+From bae6a2b3a2232abd16a8d8558dda542d4970f1bb Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Tue, 12 Jan 2021 09:23:05 +0800
+Subject: [PATCH 7/8] greeter.c: support to update expired password
+
+Update greeter to work with ui to handle expired password. It checks
+whether password is expired after input user and password. If expired,
+force user to update password immediately. It allows 3 times to try. If
+exceeds, reset to input user.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 81 insertions(+), 2 deletions(-)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index f100c72..804fca0 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -77,6 +77,8 @@ static GtkWidget *lang_menu;
+
+ static char* user = NULL;
+ static char* pass = NULL;
++static char* new_pass = NULL;
++static gboolean pass_expired = FALSE;
+
+ static char* ui_file = NULL;
+ static char *ui_nobody = NULL;
+@@ -167,10 +169,19 @@ static void switch_to_input_passwd(void)
+ else
+ gtk_widget_hide(user_list);
+ }
+- gtk_label_set_text( GTK_LABEL(prompt), _("Password:") );
++ if (pass_expired) {
++ if (!new_pass) {
++ gtk_label_set_text(GTK_LABEL(prompt), _("New password:"));
++ } else {
++ gtk_label_set_text(GTK_LABEL(prompt), _("Retype new password:"));
++ }
++ } else {
++ gtk_label_set_text( GTK_LABEL(prompt), _("Password:") );
++ }
+ gtk_entry_set_text(GTK_ENTRY(login_entry), "");
+ gtk_entry_set_visibility(GTK_ENTRY(login_entry), FALSE);
+ gtk_widget_show(login_entry);
++ gtk_widget_show(prompt);
+ gtk_widget_grab_focus(login_entry);
+ }
+
+@@ -189,6 +200,8 @@ static void try_login_user(const char *user)
+
+ static void on_entry_activate(GtkEntry* entry)
+ {
++ static int count = 0;
++
+ char* tmp;
+ if( !user )
+ {
+@@ -217,6 +230,46 @@ static void on_entry_activate(GtkEntry* entry)
+ }
+ else
+ {
++ if (pass_expired) {
++ if (!new_pass) {
++ new_pass = g_strdup(gtk_entry_get_text(entry));
++ switch_to_input_passwd();
++ } else {
++ tmp = g_strdup(gtk_entry_get_text(entry));
++ if (strcmp(new_pass, tmp)) {
++ g_free(new_pass);
++ new_pass = NULL;
++ // if new passwords not match, retry for 3 times at most
++ if (++count < 3) {
++ switch_to_input_passwd();
++ } else {
++ count = 0;
++ pass_expired = FALSE;
++ switch_to_input_user();
++ }
++ } else if (!strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
++ // if new password is same as old one
++ g_free(new_pass);
++ new_pass = NULL;
++ if (++count < 3) {
++ switch_to_input_passwd();
++ } else {
++ count = 0;
++ pass_expired = FALSE;
++ switch_to_input_user();
++ }
++ } else {
++ char *session_exec=get_session_exec();
++ char *session_lang=get_session_lang();
++
++ printf("update-new-password user=%s newpass=%s session=%s lang=%s\n",
++ user, new_pass, session_exec, session_lang);
++ }
++ }
++
++ return ;
++ }
++
+ char *session_exec=get_session_exec();
+ char *session_lang=get_session_lang();
+
+@@ -227,6 +280,7 @@ static void on_entry_activate(GtkEntry* entry)
+ printf("login user=%s pass=%s session=%s lang=%s\n",
+ user, pass, session_exec, session_lang);
+
++#if 0
+ /* password check failed */
+ g_free(user);
+ user = NULL;
+@@ -241,6 +295,7 @@ static void on_entry_activate(GtkEntry* entry)
+ gtk_label_set_text( GTK_LABEL(prompt), _("User:") );
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+ gtk_entry_set_visibility(GTK_ENTRY(entry), TRUE);
++#endif
+ }
+ }
+
+@@ -1091,8 +1146,12 @@ static void on_screen_size_changed(GdkScreen *screen,GtkWidget *win)
+
+ static gint login_entry_on_key_press (GtkWidget *widget,GdkEventKey *event)
+ {
+- if(event->keyval == GDK_Escape)
++ if(event->keyval == GDK_Escape) {
++ g_free(new_pass);
++ new_pass = NULL;
++ pass_expired = FALSE;
+ switch_to_input_user();
++ }
+ return FALSE;
+ }
+
+@@ -1285,8 +1344,10 @@ static void create_win()
+
+ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpointer data)
+ {
++
+ GIOStatus ret;
+ char *str;
++ static int count = 0;
+
+ if( !(G_IO_IN & condition) )
+ return FALSE;
+@@ -1300,10 +1361,28 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
+ {
+ switch_to_input_user();
+ }
++ else if (!strncmp(str, "password-expire", 15))
++ {
++ pass_expired = TRUE;
++ switch_to_input_passwd();
++ }
+ else if( !strncmp(str, "password", 8))
+ {
+ switch_to_input_passwd();
+ }
++ else if (!strncmp(str, "invalid-new-password", 20))
++ {
++ g_free(new_pass);
++ new_pass = NULL;
++
++ if (count++ < 3) {
++ switch_to_input_passwd();
++ } else {
++ count = 0;
++ pass_expired = FALSE;
++ switch_to_input_user();
++ }
++ }
+ g_free(str);
+ return TRUE;
+ }
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch
new file mode 100644
index 000000000..eab9fd5e2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch
@@ -0,0 +1,99 @@
+From bb4ff4b134383bfdadf7cb5353d3553a8a72d47e Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 13 Jan 2021 10:45:48 +0800
+Subject: [PATCH 8/8] greeter.c: show information on gtk label 'info'
+
+Show information on a gtk label 'info' which is added under label
+'prompt' in the .glade or .ui files.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index 804fca0..a4a2336 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -64,6 +64,7 @@ static GtkWidget* win;
+ static GtkWidget* alignment2;
+ static GtkWidget* prompt;
+ static GtkWidget* login_entry;
++static GtkWidget* info;
+ static GtkWidget* user_list_scrolled;
+ static GtkWidget* user_list;
+
+@@ -241,10 +242,12 @@ static void on_entry_activate(GtkEntry* entry)
+ new_pass = NULL;
+ // if new passwords not match, retry for 3 times at most
+ if (++count < 3) {
++ gtk_label_set_text((GtkLabel *)info, _("Passwords do not match, please retry."));
+ switch_to_input_passwd();
+ } else {
+ count = 0;
+ pass_expired = FALSE;
++ gtk_label_set_text((GtkLabel *)info, _("Maximum number of failed update password attempts exceeded."));
+ switch_to_input_user();
+ }
+ } else if (!strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
+@@ -252,6 +255,7 @@ static void on_entry_activate(GtkEntry* entry)
+ g_free(new_pass);
+ new_pass = NULL;
+ if (++count < 3) {
++ gtk_label_set_text((GtkLabel *)info, _("New password is same as old one, password unchanged."));
+ switch_to_input_passwd();
+ } else {
+ count = 0;
+@@ -1146,6 +1150,9 @@ static void on_screen_size_changed(GdkScreen *screen,GtkWidget *win)
+
+ static gint login_entry_on_key_press (GtkWidget *widget,GdkEventKey *event)
+ {
++
++ gtk_label_set_text(GTK_LABEL(info), "");
++
+ if(event->keyval == GDK_Escape) {
+ g_free(new_pass);
+ new_pass = NULL;
+@@ -1211,11 +1218,14 @@ static void create_win()
+ login_entry = (GtkWidget*)gtk_builder_get_object(builder, "login_entry");
+ if(login_entry!=NULL)
+ {
+- g_signal_connect_after(login_entry,"key-press-event",G_CALLBACK(login_entry_on_key_press),NULL);
++ g_signal_connect(login_entry,"key-press-event",G_CALLBACK(login_entry_on_key_press),NULL);
+ }
+
+ g_signal_connect(login_entry, "activate", G_CALLBACK(on_entry_activate), NULL);
+
++ info = (GtkWidget *)gtk_builder_get_object(builder, "info");
++ gtk_label_set_text(GTK_LABEL(info), "");
++
+ if( g_key_file_get_integer(config, "display", "bottom_pane", 0)==1)
+ {
+ /* hacks to let GtkEventBox paintable with gtk pixmap engine. */
+@@ -1359,11 +1369,13 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
+ gtk_main_quit();
+ else if( !strncmp(str, "reset", 5) )
+ {
++ gtk_label_set_text(GTK_LABEL(info), _("Authentication failed."));
+ switch_to_input_user();
+ }
+ else if (!strncmp(str, "password-expire", 15))
+ {
+ pass_expired = TRUE;
++ gtk_label_set_text(GTK_LABEL(info), _("You are required to change your password immediately."));
+ switch_to_input_passwd();
+ }
+ else if( !strncmp(str, "password", 8))
+@@ -1376,6 +1388,7 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
+ new_pass = NULL;
+
+ if (count++ < 3) {
++ gtk_label_set_text(GTK_LABEL(info), _("Invalid new password. Please input new password again."));
+ switch_to_input_passwd();
+ } else {
+ count = 0;
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch
new file mode 100644
index 000000000..3b12defb0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch
@@ -0,0 +1,53 @@
+From af1c347a31ae243d29c6087da8ffb423b23c74f2 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 1 Feb 2021 09:54:48 +0800
+Subject: [PATCH] greeter.c: disallow empty new password
+
+Do not clear text of label 'promt' when skip_password is set. When user
+is required to update password, it only shows input box without label
+for about 1 second.
+
+And disallow empty new password when user is required to update it.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/2/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index 7e4a168..c0e6b64 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -220,7 +220,6 @@ static void on_entry_activate(GtkEntry* entry)
+ }
+ if(g_key_file_get_integer(config,"base","skip_password",NULL)!=0)
+ {
+- gtk_label_set_text( GTK_LABEL(prompt), "");
+ try_login_user(user);
+ }
+ else
+@@ -235,6 +239,10 @@ static void on_entry_activate(GtkEntry* entry)
+ if (pass_expired) {
+ if (!new_pass) {
+ new_pass = g_strdup(gtk_entry_get_text(entry));
++ if (strlen(new_pass) == 0) {
++ new_pass = NULL;
++ gtk_label_set_text((GtkLabel *)info, _("Empty password is not allowed."));
++ }
+ switch_to_input_passwd();
+ } else {
+ tmp = g_strdup(gtk_entry_get_text(entry));
+@@ -251,7 +259,7 @@ static void on_entry_activate(GtkEntry* entry)
+ gtk_label_set_text((GtkLabel *)info, _("Maximum number of failed update password attempts exceeded."));
+ switch_to_input_user();
+ }
+- } else if (!strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
++ } else if (pass && !strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
+ // if new password is same as old one
+ g_free(new_pass);
+ new_pass = NULL;
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb
index db4767bb3..216bbb624 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm_0.5.3.bb
@@ -9,6 +9,15 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}%20${PV}/${BPN}-${PV}.tar.
file://0002-let-autotools-create-lxdm.conf.patch \
file://0003-check-for-libexecinfo-providing-backtrace-APIs.patch \
file://0004-fix-css-under-gtk-3.20.patch \
+ file://0001-greeter-set-visible-when-switch-to-input-user.patch \
+ file://0002-greeter-gdk.c-fix-typo.patch \
+ file://0003-check-whether-password-expired-with-pam.patch \
+ file://0004-lxdm.c-add-function-to-change-password-with-pam.patch \
+ file://0005-ui.c-handle-password-expire-and-update-new-password.patch \
+ file://0006-themes-Industrial-add-info-label-in-ui.patch \
+ file://0007-greeter.c-support-to-update-expired-password.patch \
+ file://0008-greeter.c-show-information-on-gtk-label-info.patch \
+ file://0009-greeter.c-disallow-empty-new-password.patch \
"
SRC_URI[md5sum] = "061caae432634e6db38bbdc84bc6ffa0"
SRC_URI[sha256sum] = "4891efee81c72a400cc6703e40aa76f3f3853833d048b72ec805da0f93567f2f"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb b/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_4.1.1.bb
index 108c339bf..3eb23dc0f 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_4.1.1.bb
@@ -4,9 +4,8 @@ HOMEPAGE = "http://fukuchi.org/works/qrencode/"
SECTION = "libs"
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
-PV = "4.0.1+git${SRCPV}"
-SRCREV = "7c83deb8f562ae6013fea4c3e65278df93f98fb7"
+SRCREV = "715e29fd4cd71b6e452ae0f4e36d917b43122ce8"
SRC_URI = "git://github.com/fukuchi/libqrencode.git"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_2.000.bb
index ce003e922..d3dd417dc 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_2.000.bb
@@ -3,15 +3,13 @@ require ttf.inc
SUMMARY = "Ethiopia and Eritrea (Amharic) font - TTF Edition"
HOMEPAGE = "http://software.sil.org/abyssinica/"
LICENSE = "OFL-1.1"
-LIC_FILES_CHKSUM = "file://OFL.txt;md5=1694c7fc245cdc85c9971db707928159"
+LIC_FILES_CHKSUM = "file://OFL.txt;md5=80cc8cdcdc3f8ce96957bbac946b70ae"
SRCNAME = "AbyssinicaSIL"
SRC_URI = "http://software.sil.org/downloads/r/abyssinica/${SRCNAME}-${PV}.zip"
S = "${WORKDIR}/${SRCNAME}-${PV}"
-SRC_URI[md5sum] = "a3d943d18e303197c8d3d92d2de54d1e"
-SRC_URI[sha256sum] = "e48a77d5ab8ee0b06464a5b29be70f292aa25dc1e73eb39ec933bd7fa47bbd86"
+SRC_URI[sha256sum] = "274204a53b30f64cca662d78c7199e3c0325ea95ad4109886b47af734c92d0f9"
FONT_PACKAGES = "${PN}"
FILES_${PN} = "${datadir}"
-