From e4526517c3a1dd22c65f38686e50d0c3e3e6c8df Mon Sep 17 00:00:00 2001 From: terrencetang Date: Fri, 18 Aug 2023 10:44:55 +0800 Subject: [PATCH] add cyrus-sasl Signed-off-by: terrencetang --- thirdparty/cyrus-sasl/HPKBUILD | 109 +++++++++++ thirdparty/cyrus-sasl/HPKCHECK | 134 ++++++++++++++ thirdparty/cyrus-sasl/OAT.xml | 20 ++ thirdparty/cyrus-sasl/README.OpenSource | 11 ++ thirdparty/cyrus-sasl/README_zh.md | 11 ++ thirdparty/cyrus-sasl/SHA512SUM | 1 + thirdparty/cyrus-sasl/cyrus-sasl_oh_pkg.patch | 68 +++++++ thirdparty/cyrus-sasl/docs/hap_integrate.md | 175 ++++++++++++++++++ .../docs/pic/cyrus-sasl_add_user.png | Bin 0 -> 1704 bytes .../cyrus-sasl/docs/pic/cyrus-sasl_client.png | Bin 0 -> 6445 bytes .../docs/pic/cyrus-sasl_install_dir01.png | Bin 0 -> 31065 bytes .../docs/pic/cyrus-sasl_install_dir02.png | Bin 0 -> 26880 bytes .../docs/pic/cyrus-sasl_install_dir03.png | Bin 0 -> 18964 bytes .../docs/pic/cyrus-sasl_list_user.png | Bin 0 -> 1530 bytes .../docs/pic/cyrus-sasl_ping_localhost.png | Bin 0 -> 6995 bytes .../cyrus-sasl/docs/pic/cyrus-sasl_server.png | Bin 0 -> 5193 bytes 16 files changed, 529 insertions(+) create mode 100644 thirdparty/cyrus-sasl/HPKBUILD create mode 100644 thirdparty/cyrus-sasl/HPKCHECK create mode 100644 thirdparty/cyrus-sasl/OAT.xml create mode 100644 thirdparty/cyrus-sasl/README.OpenSource create mode 100644 thirdparty/cyrus-sasl/README_zh.md create mode 100644 thirdparty/cyrus-sasl/SHA512SUM create mode 100644 thirdparty/cyrus-sasl/cyrus-sasl_oh_pkg.patch create mode 100644 thirdparty/cyrus-sasl/docs/hap_integrate.md create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_add_user.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_client.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_install_dir01.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_install_dir02.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_install_dir03.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_list_user.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_ping_localhost.png create mode 100644 thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_server.png diff --git a/thirdparty/cyrus-sasl/HPKBUILD b/thirdparty/cyrus-sasl/HPKBUILD new file mode 100644 index 00000000..76f5665c --- /dev/null +++ b/thirdparty/cyrus-sasl/HPKBUILD @@ -0,0 +1,109 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Contributor: TangShaoteng +# Maintainer: TangShaoteng + +pkgname=cyrus-sasl +pkgver=2.1.28 +pkgrel=0 +pkgdesc="Simple Authentication and Security Layer (SASL) is a specification that describes how authentication mechanisms can be plugged into an application protocol on the wire. Cyrus SASL is an implementation of SASL that makes it easy for application developers to integrate authentication mechanisms into their application in a generic way." +url="https://www.cyrusimap.org/sasl/" +archs=("armeabi-v7a" "arm64-v8a") +license=("Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved.") +depends=("sqlite" "gdbm") +makedepends=() +source="https://github.com/cyrusimap/$pkgname/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +buildtools="configure" + +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz +patchflag=true + +source envset.sh +host= +prepare() { + if $patchflag + then + cd $builddir + # 1.libc不支持getpass接口,使用scanf替代;2.printf不能及时输出提示信息,使用fflush刷新缓存区 + patch -p1 < `pwd`/../cyrus-sasl_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD + fi + mkdir -p $builddir/$ARCH-build + if [ $ARCH == "armeabi-v7a" ] + then + setarm32ENV + host=arm-linux + elif [ $ARCH == "arm64-v8a" ] + then + setarm64ENV + host=aarch64-linux + else + echo "${ARCH} not support" + return -1 + fi + # crypt函数使用链接静态库方式获取 + export LDFLAGS="-lclang_rt.asan $LDFLAGS" + # crypt函数返回值忽略类型转换 + export CFLAGS="-Wno-int-conversion $CFLAGS" +} + +build() { + cd $builddir/$ARCH-build + ../configure "$@" --host=$host --enable-srp --enable-srp-setpass --enable-auth-sasldb --with-dblib=gdbm --with-gdbm=$LYCIUM_ROOT/usr/gdbm/$ARCH \ + --with-sqlite3=$LYCIUM_ROOT/usr/sqlite/$ARCH --enable-static=yes --with-saslauthd=$LYCIUM_ROOT/usr/cyrus-sasl/$ARCH \ + --with-dbpath=$LYCIUM_ROOT/usr/cyrus-sasl/$ARCH/sasldb2 --with-configdir=$LYCIUM_ROOT/usr/cyrus-sasl/$ARCH > `pwd`/build.log 2>&1 + make V=1 -j4 >> `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir/$ARCH-build + make install >> `pwd`/build.log 2>&1 + cd $OLDPWD + unset host + if [ $ARCH == "armeabi-v7a" ] + then + unsetarm32ENV + elif [ $ARCH == "arm64-v8a" ] + then + unsetarm64ENV + else + echo "${ARCH} not support" + return -1 + fi +} + +check() { + echo "The test must be on an OpenHarmony device!" + # real test cmd + # echo "127.0.0.1 localhost" > /etc/hosts + # ping localhost + # echo -e "pwcheck_method:auxprop\nauxprop_plugin:sasldb\nmech_list:plain login" > $LYCIUM_ROOT/usr/cyrus-sasl/$ARCH/sample.conf + # ./saslauthd/saslauthd -a sasldb + # ./utils/saslpasswd2 -c yourname + # ./utils/sasldblistusers2 + # ./sample/server + # ./sample/client localhost +} + +cleanbuild() { + rm -rf ${PWD}/$builddir #${PWD}/$packageName +} diff --git a/thirdparty/cyrus-sasl/HPKCHECK b/thirdparty/cyrus-sasl/HPKCHECK new file mode 100644 index 00000000..1a765adf --- /dev/null +++ b/thirdparty/cyrus-sasl/HPKCHECK @@ -0,0 +1,134 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Contributor: TangShaoteng +# Maintainer: TangShaoteng + +source HPKBUILD > /dev/null 2>&1 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + +checkprepare() { + # 添加lib子目录sasl2下的库路径到环境变量 + export LD_LIBRARY_PATH=${LYCIUM_ROOT}/usr/${pkgname}/${ARCH}/lib/sasl2:$LD_LIBRARY_PATH + ln -s /bin/sed /usr/bin/sed +} + +openharmonycheck() { + res=0 + sasluser=ohosuser + saslpassword=123456 + cd $builddir/$ARCH-build + + # 添加hosts文件 + echo -e "127.0.0.1 localhost" > /etc/hosts + res=$? + if [ $res -ne 0 ] + then + echo "create file(/etc/hosts) failed" > ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 验证localhost通路 + ping localhost > ${logfile} 2>&1 + res=$? + if [ $res -ne 0 ] + then + echo "ping localhost failed" >> ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 创建配置文件sample.conf + echo -e "pwcheck_method:auxprop\nauxprop_plugin:sasldb\nmech_list:plain login" > ${LYCIUM_ROOT}/usr/${pkgname}/${ARCH}/sample.conf + res=$? + if [ $res -ne 0 ] + then + echo "create file(sample.conf) failed" >> ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 运行saslauthd服务 + ./saslauthd/saslauthd -a sasldb >> ${logfile} 2>&1 + res=$? + if [ $res -ne 0 ] + then + echo "saslauthd start failed" >> ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 检查saslauthd服务运行状态 + process_count=`ps -ef | grep saslauthd | grep -v grep | wc -l` + if [ $process_count -ne 5 ] + then + echo "saslauthd run failed" >> ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 将密码写人文件,用来实现自动化输入密码 + echo -e $saslpassword > saslpassword.txt + # 添加(注册)用户ohosuser(-c后面带的参数是用户名),通过文件重定向输入自动设置文件中预置的密码作为注册密码 + ./utils/saslpasswd2 -c $sasluser < saslpassword.txt < saslpassword.txt + res=$? + if [ $res -ne 0 ] + then + echo "add user failed" >> ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 查询已经添加(注册)的用户 + have_user=`./utils/sasldblistusers2 | grep -w $sasluser | wc -l` + if [ $have_user -ne 1 ] + then + echo "check user failed" >> ${logfile} 2>&1 + cd $OLDPWD + return -1 + fi + + # 运行服务端 + ./sample/server >> ${logfile} 2>&1 & + res=$? + if [ $res -ne 0 ] + then + echo "server start failed" >> ${logfile} 2>&1 + cd $OLDPWD + return res + fi + + # 运行客户端,通过管道方式自动化输入身份ID、授权ID、密码 + echo -e "$sasluser\n$sasluser\n$saslpassword" | ./sample/client localhost >> ${logfile} 2>&1 + return_codes=(${PIPESTATUS[*]}) + if [ "${return_codes[0]}" -ne 0 ]; then + echo "echo strings error for client test" >> ${logfile} 2>&1 + res=${return_codes[0]} + cd $OLDPWD + return $res + fi + if [ "${return_codes[1]}" -ne 0 ]; then + echo "client test filed" >> ${logfile} 2>&1 + res=${return_codes[1]} + cd $OLDPWD + return $res + fi + + # 结束进程 + killall server + killall saslauthd + + cd $OLDPWD + + return $res +} diff --git a/thirdparty/cyrus-sasl/OAT.xml b/thirdparty/cyrus-sasl/OAT.xml new file mode 100644 index 00000000..00f4c474 --- /dev/null +++ b/thirdparty/cyrus-sasl/OAT.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/cyrus-sasl/README.OpenSource b/thirdparty/cyrus-sasl/README.OpenSource new file mode 100644 index 00000000..e69b6bb2 --- /dev/null +++ b/thirdparty/cyrus-sasl/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "cyrus-sasl", + "License": "Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved.", + "License File": "https://github.com/cyrusimap/cyrus-sasl/blob/master/COPYING", + "Version Number": "2.1.28", + "Owner": "tangshaoteng@163.com", + "Upstream URL": "https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.28/cyrus-sasl-2.1.28.tar.gz", + "Description": "Simple Authentication and Security Layer (SASL) is a specification that describes how authentication mechanisms can be plugged into an application protocol on the wire. Cyrus SASL is an implementation of SASL that makes it easy for application developers to integrate authentication mechanisms into their application in a generic way." + } +] diff --git a/thirdparty/cyrus-sasl/README_zh.md b/thirdparty/cyrus-sasl/README_zh.md new file mode 100644 index 00000000..9520bbe2 --- /dev/null +++ b/thirdparty/cyrus-sasl/README_zh.md @@ -0,0 +1,11 @@ +# cyrus-sasl三方库说明 +## 功能简介 +简单身份验证和安全层 (SASL) 是一种规范,用于描述如何将身份验证机制插入到网络上的应用程序协议中。Cyrus SASL 是 SASL 的一种实现,它使应用程序开发人员可以轻松地以通用方式将身份验证机制集成到其应用程序中。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Release +- SDK版本:ohos_sdk_public 4.0.8.1 (API Version 10 Release) +- 三方库版本:2.1.28 +- 当前适配的功能:简单身份验证和安全层。 + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/cyrus-sasl/SHA512SUM b/thirdparty/cyrus-sasl/SHA512SUM new file mode 100644 index 00000000..ed782e9f --- /dev/null +++ b/thirdparty/cyrus-sasl/SHA512SUM @@ -0,0 +1 @@ +db15af9079758a9f385457a79390c8a7cd7ea666573dace8bf4fb01bb4b49037538d67285727d6a70ad799d2e2318f265c9372e2427de9371d626a1959dd6f78 cyrus-sasl-2.1.28.tar.gz diff --git a/thirdparty/cyrus-sasl/cyrus-sasl_oh_pkg.patch b/thirdparty/cyrus-sasl/cyrus-sasl_oh_pkg.patch new file mode 100644 index 00000000..26310c78 --- /dev/null +++ b/thirdparty/cyrus-sasl/cyrus-sasl_oh_pkg.patch @@ -0,0 +1,68 @@ +diff --git a/include/saslutil.h b/include/saslutil.h +index e0fa47c..5b7fb7c 100755 +--- a/include/saslutil.h ++++ b/include/saslutil.h +@@ -90,6 +90,8 @@ LIBSASL_API void sasl_config_done(void); + LIBSASL_API int getopt(int argc, char **argv, char *optstring); + #endif + LIBSASL_API char * getpass(const char *prompt); ++#elif defined(__OHOS__) ++LIBSASL_API char * getpass(const char *prompt); + #endif /* WIN32 */ + + #ifdef __cplusplus +diff --git a/lib/saslutil.c b/lib/saslutil.c +index 46c628c..4a44e8c 100644 +--- a/lib/saslutil.c ++++ b/lib/saslutil.c +@@ -785,6 +785,17 @@ const char *prompt; + return(pbuf); + } + +- ++#elif defined(__OHOS__) ++// The getpass function is not supported on the OHOS platform, so define it here ++char *getpass(const char *prompt) { ++ static char password[128]; ++ printf("%s", prompt); ++ fflush(stdout); // Flush the output buffer to avoid password echo ++ if (fgets(password, sizeof(password), stdin) == NULL) { ++ return NULL; // Return NULL on end-of-file or error ++ } ++ password[strcspn(password, "\n")] = '\0'; // Remove the newline character at the end ++ return password; ++} + + #endif /* WIN32 */ +diff --git a/sample/client.c b/sample/client.c +index e723c6b..b40c634 100644 +--- a/sample/client.c ++++ b/sample/client.c +@@ -61,6 +61,7 @@ + + #include + #include ++#include + + #include "common.h" + +@@ -129,6 +130,7 @@ static int simple(void *context __attribute__((unused)), + default: + return SASL_BADPARAM; + } ++ fflush(stdout); + + fgets(b, 1024, stdin); + chop(b); +diff --git a/sample/http_digest_client.c b/sample/http_digest_client.c +index 6a2ae59..924d6ce 100644 +--- a/sample/http_digest_client.c ++++ b/sample/http_digest_client.c +@@ -19,6 +19,7 @@ + #include + + #include ++#include + + #define SUCCESS 0 + #define ERROR 1 diff --git a/thirdparty/cyrus-sasl/docs/hap_integrate.md b/thirdparty/cyrus-sasl/docs/hap_integrate.md new file mode 100644 index 00000000..8a821b3f --- /dev/null +++ b/thirdparty/cyrus-sasl/docs/hap_integrate.md @@ -0,0 +1,175 @@ +# cyrus-sasl集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 4.0.8.1 (API Version 10 Release)](https://gitee.com/link?target=http%3A%2F%2Fdownload.ci.openharmony.cn%2Fversion%2FMaster_Version%2FOpenHarmony_4.0.8.1%2F20230608_091058%2Fversion-Master_Version-OpenHarmony_4.0.8.1-20230608_091058-ohos-sdk-public.tar.gz) +- [DevEco Studio 3.1 Release](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2F81%2Fv3%2FtgRUB84wR72nTfE8Ir_xMw%2Fdevecostudio-windows-3.1.0.501.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230621T074329Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D22F6787DF6093ECB4D4E08F9379B114280E1F65DA710599E48EA38CB24F3DBF2) +- [准备三方库构建环境](../../../lycium/README.md#1编译环境准备) +- [准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/cyrus-sasl #三方库cyrus-sasl的目录结构如下 + ├── cyrus-sasl_oh_pkg.patch #构建patch文件 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #自动化测试脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库说明文档 + ├── OAT.xml #开源扫描相关文件 + ``` + +- 在tpc_c_cplusplus/lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd tpc_c_cplusplus/lycium + ./build.sh cyrus-sasl + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件 + + ```shell + cyrus-sasl/arm64-v8a cyrus-sasl/armeabi-v7a + gdbm/arm64-v8a gdbm/armeabi-v7a + sqlite/arm64-v8a sqlite/armeabi-v7a + ``` +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 拷贝动态库到`\\entry\libs\${OHOS_ARCH}\`目录: + 动态库需要在`\\entry\libs\${OHOS_ARCH}\`目录,才能集成到hap包中,所以需要将对应的so文件拷贝到对应CPU架构的目录 +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + +  ![thirdparty_install_dir01](pic/cyrus-sasl_install_dir01.png) + +  ![thirdparty_install_dir02](pic/cyrus-sasl_install_dir02.png) + +  ![thirdparty_install_dir03](pic/cyrus-sasl_install_dir03.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libsasl2.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libanonymous.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libcrammd5.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libdigestmd5.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libplain.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libsasldb.a + ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libgdbm.a + ) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/include/cyrus-sasl/${OHOS_ARCH} + ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/include/gdbm/${OHOS_ARCH} + ) + ``` + +## 测试三方库 + +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + + 进入到安装目录tpc_c_cplusplus/lycium/usr/cyrus-sasl/${OHOS_ARCH}/bin,执行如下操作步骤: + +- 配置环境变量 + 执行如下命令: + + ```shell + export LD_LIBRARY_PATH=${LYCIUM_ROOT}/usr/cyrus-sasl/${ARCH}/lib:${LYCIUM_ROOT}/usr/cyrus-sasl/${ARCH}/lib/sasl2:${LYCIUM_ROOT}/usr/gdbm/${ARCH}/lib:$LD_LIBRARY_PATH + ``` + > 注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。 + +- 创建sed软连接: + + ```shell + mount -o remount,rw / + ln -s /bin/sed /usr/bin/sed + ``` + +- 添加/etc/hosts文件,内容如下: + + ```shell + 127.0.0.1 localhost + ``` + +- 测试localhost通畅 + + ```shell + ping localhost + ``` +  ![cyrus-sasl_ping_localhost](pic/cyrus-sasl_ping_localhost.png) + +- 添加配置文件\$\{LYCIUM_ROOT\}/usr/cyrus-sasl/\$\{ARCH\}/sample.conf,内容如下: + + ```shell + pwcheck_method:auxprop + auxprop_plugin:sasldb + mech_list:plain login + ``` + +- 运行saslauthd服务程序 + + ```shell + ./saslauthd/saslauthd -a sasldb + ``` + +- 查看saslauthd服务程序运行状态 + + ```shell + ps -ef | grep saslauthd | grep -v grep + ``` + > 可以查看到有5个saslauthd进程在运行 + +- 注册用户(以用户名ohosuser为例) + + ```shell + ./utils/saslpasswd2 -c ohosuser + ``` +  ![cyrus-sasl_add_user](pic/cyrus-sasl_add_user.png) + +- 查询已注册用户 + + ```shell + ./utils/sasldblistusers2 + ``` +  ![cyrus-sasl_list_user](pic/cyrus-sasl_list_user.png) + +- 运行服务端程序 + + ```shell + ./sample/server + ``` +  ![cyrus-sasl_server](pic/cyrus-sasl_server.png) + +- 运行客户端程序 + + ```shell + ./sample/client localhost + ``` +  ![cyrus-sasl_client](pic/cyrus-sasl_client.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_add_user.png b/thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_add_user.png new file mode 100644 index 0000000000000000000000000000000000000000..5caae015acfd8b9bc38476d772cbc91076c63e4d GIT binary patch literal 1704 zcmYL~ZBUa}7RPVO61MWvx~&VNf;(lMv0w{IqY?~AM;hEJG!O_OKw^1`CLq=jBZ(o* zvMqJCC3SYi2}-gB7lFJIj0#8y?RIH_kfjh}2oPIPAPHeLdGZJkNjB^kKiqTAxie?x zf6n>cd#`=zy(^_g{Civ?6bgqV63MsMQJ`L{9LBEvp}g}oa517` z7pVU_N*2)K-nO*pR|o&11p`|9-S8QbKQw16I02kkvd{+Y)oAKxo@1=bP6bl3q3Jqq z*K$WY?n~XqrkBpVK;}K{h0MLGuc0aFh;7fBaImg_BwN-S zIsd-T(IYli%G>IwaCea*kxb2p)kSuK7%Im|>BtB6B?7gXqmX(<M;N5!(p^Txz~!e>_H~hqldPPYHD+E(>kX(3lUsg$ za^G{DvHy1vqpFCs%<(XvF-gn!#cQbld{2ANwqWy}b#MCOom6P^pdEw1G|eWFor+h(Fg3B{STop&iP26xm>!e62=J8)Wm zW>uq+MK|=fSPC~zn+Rv%iNlM$n(!x&EOnpCC%#f&I3s^H3dfjJ&iO^XZQ@F+%(QGy zX3V_Ry6#_fb^ji6sJR};2FdlK5gE*Sqh9=81KVxz5c>>j*S#ZSvE+qhDVBHNN=1BT zUv~vte^p}WKHjarG^998A$iGF8Sb!t#khFgc~wU8;5D5gy5t98GZVF!zkqD)=}6It2udJU*{zJkw<7vS%@c7-ed4J`erl$drvNuMyI1A$u zZ;ZaJ&?u-Gii9fY`O5$#y4I|Z-o`|&J@?+vZ)RVzUsGs0)cqBs%Y!b4tDjUx%eEA6e~}gnobLFL_=KD*TOx4rW_1HJded+WX}W0{(4HU-X*qns zVa}XiBzZ%JTp1YVnpkskq))AN`lNH8`RR43V103DcylyCV(w-7ni9-(flu;Zj9_Fv zrJjdFO9wBOZ2XYK^Kb-Rsff$}7o`9Si{-&-v0z3MA|0$DHZuor={K=zK35@vPD1B! zi-;F%n;JK5VWsct+qE)h9)JFz?I+uxc=xhR1gBmd7gFEkM@xqmdYsb(bYcas8!<3S zjzEkk5 zcHAK=h9%H#eF}V}9d;ydXEbwcKs9EfK?%1U8Rb_y`ihaQb2z(v+#{RwkGl?7B=hmV z@@k?*fwTemzP5LHulcTqywDY-d;b?2q%n{ExJ>q6-*kvY4C|=ZkSgr)w(>GAyKn1- zP76CL&op~b$p9(}Q#D(-F%F+skROPl2_h0u&DAEH`2L2_VE1oyycF3Ga)m|cMv?xWvU_;pWbN;0KZVo3&2sIjE)Cj&!GS^ zk5?=-qqX$~j|f0h>8op_Mcbp=c3Q&#U~9VeQQ%nP@D8B+=>LrU%GrM9UC-ft ZWnGa3W#|XPf!_t3%E&sY_>lJJ{{b8`hS&fA literal 0 HcmV?d00001 diff --git a/thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_client.png b/thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_client.png new file mode 100644 index 0000000000000000000000000000000000000000..3976d622788f1ab4daccec4f011bac499d489f6d GIT binary patch literal 6445 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 II`-fH2Y@;nqepMr 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 Re%zndd-<&seH`-7{{W1>rDXsB literal 0 HcmV?d00001 diff --git a/thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_install_dir02.png b/thirdparty/cyrus-sasl/docs/pic/cyrus-sasl_install_dir02.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e80e8af204203ae3673e041c2bc94a52387479 GIT binary patch literal 26880 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 D%W>{H literal 0 HcmV?d00001 -- Gitee