diff --git a/deepin-pw-check-5.0.20.7.orig.tar.xz b/deepin-pw-check-5.0.20.7.orig.tar.xz new file mode 100644 index 0000000..a7b801e Binary files /dev/null and b/deepin-pw-check-5.0.20.7.orig.tar.xz differ diff --git a/deepin-pw-check.spec b/deepin-pw-check.spec new file mode 100644 index 0000000..4098e75 --- /dev/null +++ b/deepin-pw-check.spec @@ -0,0 +1,96 @@ +# Run tests in check section +# disable for bootstrapping +%bcond_with check +%global with_debug 1 +%if 0%{?with_debug} +%global debug_package %{nil} +%endif +Name: deepin-pw-check +Version: 5.0.20.7 +Release: 1 +Summary: Used to check password and manager the configuration for password. +License: GPL-3.0 +URL: https://github.com/linuxdeepin/%{name} +Source0: %{name}-%{version}.orig.tar.xz +Source1: vendor.tar.gz + +BuildRequires: golang +BuildRequires: pam-devel +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(gdk-3.0) +BuildRequires: deepin-gettext-tools +BuildRequires: cracklib-devel +BuildRequires: iniparser + +Patch0: fix-pwd-pam-update-error.patch +Patch1: fix-deepin_pw_check.c-sprintf-error.patch + +Requires: polkit + +%description +In order to unify the authentication interface, +this interface is designed to adapt to fingerprint, face and other authentication methods. + +%package devel +Summary: Header files and libraries used to build deepin-pw-check +Requires: %{name} = %{version}-%{release} +Requires: cracklib-devel iniparser + +%description devel +In order to unify the authentication interface, +this interface is designed to adapt to fingerprint, face and other authentication methods. + +%prep +%setup -q +patch -p1 < rpm/0001-fix-for-UonioTech.patch +%patch0 -p1 +%patch1 -p1 + +tar -xf %{SOURCE1} + +%build +go env -w GO111MODULE=auto +BUILDID="0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \n')" +export GOPATH=%{_builddir}/%{name}-%{version}/vendor:$GOPATH +%make_build GO_BUILD_FLAGS=-trimpath GOBUILD="go build -compiler gc -ldflags \"-B $BUILDID\"" + +%post +pwd-conf-update +sed -i "s/pam_pwquality.so/pam_deepin_pw_check.so/g" /etc/pam.d/system-auth +sed -i "s/pam_pwquality.so/pam_deepin_pw_check.so/g" /etc/pam.d/password-auth + +%postun +if [ "$1" = "0" ] ; then + sed -i "s/pam_deepin_pw_check.so/pam_pwquality.so/g" /etc/pam.d/system-auth + sed -i "s/pam_deepin_pw_check.so/pam_pwquality.so/g" /etc/pam.d/password-auth +fi + +%install +mkdir -p %{buildroot}/%{_sysconfdir}/deepin +export GOPATH=%{_datadir}/gocode +export PKG_FILE_DIR=%{_libdir}/pkgconfig +%make_install PKG_FILE_DIR=%{_libdir}/pkgconfig LIBDIR=lib64 PAM_MODULE_DIR=%{_libdir}/security GOBUILD="go build -compiler gc -ldflags \"-B $BUILDID\"" +%find_lang deepin-pw-check + + +%files -f deepin-pw-check.lang +%doc README.md +%license +%dir %{_sysconfdir}/deepin +%{_bindir}/pwd-conf-update +%{_prefix}/lib/deepin-pw-check/deepin-pw-check +%{_libdir}/libdeepin_pw_check.so.* +%{_libdir}/security/pam_deepin_pw_check.so +%{_datadir}/dbus-1/system-services/*.service +%{_datadir}/dbus-1/system.d/*.conf +%{_datadir}/polkit-1/actions/*.policy + +%files devel +%{_libdir}/libdeepin_pw_check.a +%{_libdir}/libdeepin_pw_check.so +%{_libdir}/pkgconfig/libdeepin_pw_check.pc +%{_includedir}/deepin_pw_check.h + +%changelog +* Fri Jul 22 2022 konglidong - 5.0.20.7-1 +- package init diff --git a/deepin-pw-check.yaml b/deepin-pw-check.yaml new file mode 100644 index 0000000..8129b65 --- /dev/null +++ b/deepin-pw-check.yaml @@ -0,0 +1,4 @@ +version_control: github +src_repo: linuxdeepin/deepin-pw-check +tag_prefix: ^v +seperator: . diff --git a/fix-deepin_pw_check.c-sprintf-error.patch b/fix-deepin_pw_check.c-sprintf-error.patch new file mode 100644 index 0000000..8183b0e --- /dev/null +++ b/fix-deepin_pw_check.c-sprintf-error.patch @@ -0,0 +1,37 @@ +From b1e0ad33fc949d9bb9aa6f4ce2d566c39e089819 Mon Sep 17 00:00:00 2001 +From: panchenbo +Date: Mon, 16 Aug 2021 11:40:16 +0800 +Subject: [PATCH] fix deepin_pw_check.c sprintf error + +--- + lib/deepin_pw_check.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/lib/deepin_pw_check.c b/lib/deepin_pw_check.c +index d528ad9..f5fcc99 100644 +--- a/lib/deepin_pw_check.c ++++ b/lib/deepin_pw_check.c +@@ -255,7 +255,9 @@ bool is_type_valid(const char *pw, char *character_type, int character_num_requi + + p = strtok(character_type_tmp, ";"); + int length = strlen(pw); +- char all_character[512] = "\0"; ++ char all_character[512]; ++ memset(all_character, 0, sizeof(all_character)); ++ int offset = 0; + + while (p != NULL) { + char *next_data_addr = NULL; +@@ -287,7 +289,8 @@ bool is_type_valid(const char *pw, char *character_type, int character_num_requi + } + } + +- sprintf(all_character, "%s%s", all_character, p); ++ offset = strlen(all_character); ++ sprintf(all_character + offset, "%s", p); + DEBUG("p is %s, all_character is %s", p, all_character); + int ok = 0; + for (int i = 0; i < length; i++) { +-- +2.20.1 + diff --git a/fix-pwd-pam-update-error.patch b/fix-pwd-pam-update-error.patch new file mode 100644 index 0000000..3f48493 --- /dev/null +++ b/fix-pwd-pam-update-error.patch @@ -0,0 +1,319 @@ +From 2d590fae89f2455893b509d3861f832e31f1a3c9 Mon Sep 17 00:00:00 2001 +From: panchenbo +Date: Tue, 10 Aug 2021 16:22:25 +0800 +Subject: [PATCH] debug + +--- + tool/pwd_conf_update.c | 157 ++++++++++++++++++----------------------- + 1 file changed, 70 insertions(+), 87 deletions(-) + +diff --git a/tool/pwd_conf_update.c b/tool/pwd_conf_update.c +index 580e471..c9f9747 100644 +--- a/tool/pwd_conf_update.c ++++ b/tool/pwd_conf_update.c +@@ -189,232 +189,215 @@ int update_conf(OS_TYPE os_type) { + } + + char append_string[2048] = {0}; +- sprintf(append_string, "[Password]\n"); ++ int offset = 0; ++ sprintf(append_string + offset, "[Password]\n"); ++ offset = strlen(append_string); + + // 如果找不到该字段,则写默认的 + if (iniparser_find_entry(dic, "Password:STRONG_PASSWORD") == 0) { +- sprintf(append_string, "%sSTRONG_PASSWORD = %s\n", append_string, "true"); ++ sprintf(append_string + offset, "STRONG_PASSWORD = %s\n", "true"); + DEBUG("set STRONG_PASSWORD"); + } else { + // 如果找到了该字段 + // 如果是服务器版,强制覆盖配置 + if (OS_SERVER == os_type) { +- sprintf(append_string, "%sSTRONG_PASSWORD = %s\n", append_string, "true"); ++ sprintf(append_string + offset, "STRONG_PASSWORD = %s\n", "true"); + DEBUG("restore STRONG_PASSWORD"); + } else { + // 如果不是服务器版,则维持原配置 +- sprintf(append_string, "%sSTRONG_PASSWORD = %s\n", append_string, "true"); ++ sprintf(append_string + offset, "STRONG_PASSWORD = %s\n", "true"); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:PASSWORD_MIN_LENGTH") == 0) { +- sprintf(append_string, +- "%sPASSWORD_MIN_LENGTH = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PASSWORD_MIN_LENGTH = %d\n", + default_conf[os_type].min_length); + DEBUG("set PASSWORD_MIN_LENGTH"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sPASSWORD_MIN_LENGTH = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PASSWORD_MIN_LENGTH = %d\n", + default_conf[os_type].min_length); + DEBUG("restore PASSWORD_MIN_LENGTH"); + } else { +- sprintf(append_string, +- "%sPASSWORD_MIN_LENGTH = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PASSWORD_MIN_LENGTH = %d\n", + iniparser_getint(dic, + "Password:PASSWORD_MIN_LENGTH", + default_conf[os_type].min_length)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:PASSWORD_MAX_LENGTH") == 0) { +- sprintf(append_string, +- "%sPASSWORD_MAX_LENGTH = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PASSWORD_MAX_LENGTH = %d\n", + default_conf[os_type].max_length); + DEBUG("set PASSWORD_MAX_LENGTH"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sPASSWORD_MAX_LENGTH = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PASSWORD_MAX_LENGTH = %d\n", + default_conf[os_type].max_length); + DEBUG("restore PASSWORD_MAX_LENGTH"); + } else { +- sprintf(append_string, +- "%sPASSWORD_MAX_LENGTH = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PASSWORD_MAX_LENGTH = %d\n", + iniparser_getint(dic, + "Password:PASSWORD_MAX_LENGTH", + default_conf[os_type].max_length)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:VALIDATE_POLICY") == 0) { +- sprintf(append_string, +- "%sVALIDATE_POLICY = \"%s\"\n", +- append_string, ++ sprintf(append_string + offset, ++ "VALIDATE_POLICY = \"%s\"\n", + default_conf[os_type].validate_policy); + DEBUG("set VALIDATE_POLICY"); + } else { + char cmd[512]; + sprintf(cmd, "sed \"/^VALIDATE_POLICY.*/\"d -i %s", PASSWD_CONF_FILE_PATH); + system(cmd); +- sprintf(append_string, +- "%sVALIDATE_POLICY = \"%s\"\n", +- append_string, ++ sprintf(append_string + offset, ++ "VALIDATE_POLICY = \"%s\"\n", + default_conf[os_type].validate_policy); + DEBUG("set VALIDATE_POLICY after delete"); + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:VALIDATE_REQUIRED") == 0) { +- sprintf(append_string, +- "%sVALIDATE_REQUIRED = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "VALIDATE_REQUIRED = %d\n", + default_conf[os_type].validate_required); + DEBUG("set VALIDATE_REQUIRED"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sVALIDATE_REQUIRED = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "VALIDATE_REQUIRED = %d\n", + default_conf[os_type].validate_required); + DEBUG("restore VALIDATE_REQUIRED"); + } else { +- sprintf(append_string, +- "%sVALIDATE_REQUIRED = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "VALIDATE_REQUIRED = %d\n", + iniparser_getint(dic, + "Password:VALIDATE_REQUIRED", + default_conf[os_type].validate_required)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:PALINDROME_NUM") == 0) { +- sprintf(append_string, +- "%sPALINDROME_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PALINDROME_NUM = %d\n", + default_conf[os_type].palindorme_num); + DEBUG("set PALINDROME_NUM"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sPALINDROME_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PALINDROME_NUM = %d\n", + default_conf[os_type].palindorme_num); + DEBUG("restore PALINDROME_NUM"); + } else { +- sprintf(append_string, +- "%sPALINDROME_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "PALINDROME_NUM = %d\n", + iniparser_getint(dic, + "Password:PALINDROME_NUM", + default_conf[os_type].palindorme_num)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:WORD_CHECK") == 0) { +- sprintf(append_string, +- "%sWORD_CHECK = %d\n", +- append_string, +- default_conf[os_type].word_check); ++ sprintf(append_string + offset, "WORD_CHECK = %d\n", default_conf[os_type].word_check); + DEBUG("set WORD_CHECK"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sWORD_CHECK = %d\n", +- append_string, +- default_conf[os_type].word_check); ++ sprintf(append_string + offset, "WORD_CHECK = %d\n", default_conf[os_type].word_check); + DEBUG("restore WORD_CHECK"); + } else { +- sprintf(append_string, +- "%sWORD_CHECK = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "WORD_CHECK = %d\n", + iniparser_getint(dic, "Password:WORD_CHECK", default_conf[os_type].word_check)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:MONOTONE_CHARACTER_NUM") == 0) { +- sprintf(append_string, +- "%sMONOTONE_CHARACTER_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "MONOTONE_CHARACTER_NUM = %d\n", + default_conf[os_type].monotone_same_character_num); + DEBUG("set MONOTONE_CHARACTER_NUM"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sMONOTONE_CHARACTER_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "MONOTONE_CHARACTER_NUM = %d\n", + default_conf[os_type].monotone_same_character_num); + DEBUG("restore MONOTONE_CHARACTER_NUM"); + } else { +- sprintf(append_string, +- "%sMONOTONE_CHARACTER_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "MONOTONE_CHARACTER_NUM = %d\n", + iniparser_getint(dic, + "Password:MONOTONE_CHARACTER_NUM", + default_conf[os_type].monotone_same_character_num)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:CONSECUTIVE_SAME_CHARACTER_NUM") == 0) { +- sprintf(append_string, +- "%sCONSECUTIVE_SAME_CHARACTER_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "CONSECUTIVE_SAME_CHARACTER_NUM = %d\n", + default_conf[os_type].consecutive_same_character_num); + DEBUG("set CONSECUTIVE_SAME_CHARACTER_NUM"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, +- "%sCONSECUTIVE_SAME_CHARACTER_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "CONSECUTIVE_SAME_CHARACTER_NUM = %d\n", + default_conf[os_type].consecutive_same_character_num); + DEBUG("restore CONSECUTIVE_SAME_CHARACTER_NUM"); + } else { +- sprintf(append_string, +- "%sCONSECUTIVE_SAME_CHARACTER_NUM = %d\n", +- append_string, ++ sprintf(append_string + offset, ++ "CONSECUTIVE_SAME_CHARACTER_NUM = %d\n", + iniparser_getint(dic, + "Password:CONSECUTIVE_SAME_CHARACTER_NUM", + default_conf[os_type].consecutive_same_character_num)); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:DICT_PATH") == 0) { +- sprintf(append_string, "%sDICT_PATH = %s\n", append_string, ""); +- DEBUG("set WORD_CHECK"); ++ sprintf(append_string + offset, "DICT_PATH = %s\n", ""); ++ DEBUG("set DICT_PATH"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, "%sDICT_PATH = %s\n", append_string, ""); ++ sprintf(append_string + offset, "DICT_PATH = %s\n", ""); + DEBUG("restore DICT_PATH"); + } else { +- sprintf(append_string, +- "%sDICT_PATH = %s\n", +- append_string, ++ sprintf(append_string + offset, ++ "DICT_PATH = %s\n", + iniparser_getstring(dic, "Password:DICT_PATH", "")); + } + } ++ offset = strlen(append_string); + + if (iniparser_find_entry(dic, "Password:FIRST_LETTER_UPPERCASE") == 0) { +- sprintf(append_string, "%sFIRST_LETTER_UPPERCASE = %s\n", append_string, "false"); ++ sprintf(append_string + offset, "FIRST_LETTER_UPPERCASE = %s\n", "false"); + DEBUG("set FIRST_LETTER_UPPERCASE"); + } else { + if (OS_SERVER == os_type) { +- sprintf(append_string, "%sFIRST_LETTER_UPPERCASE = %s\n", append_string, "false"); ++ sprintf(append_string + offset, "FIRST_LETTER_UPPERCASE = %s\n", "false"); + DEBUG("restore FIRST_LETTER_UPPERCASE"); + } else { +- sprintf(append_string, +- "%sFIRST_LETTER_UPPERCASE = %s\n", +- append_string, ++ sprintf(append_string + offset, ++ "FIRST_LETTER_UPPERCASE = %s\n", + iniparser_getboolean(dic, "Password:FIRST_LETTER_UPPERCASE", false) ? "true" + : "false"); + } + } + +- DEBUG("append string is %s", append_string); ++ DEBUG("append string :%s", append_string); + + if (strlen(append_string) == 0) { + return 0; +-- +2.20.1 + diff --git a/vendor.tar.gz b/vendor.tar.gz new file mode 100644 index 0000000..a8ffb62 Binary files /dev/null and b/vendor.tar.gz differ