From 4fb3ee9d143f45e7dbbca0254f14306d9f25a4cd Mon Sep 17 00:00:00 2001 From: handyohos Date: Sun, 17 Sep 2023 20:51:12 +0800 Subject: [PATCH] =?UTF-8?q?Bugfix:=20LE=5FCreateStreamServer=E6=94=AF?= =?UTF-8?q?=E6=8C=81TASK=5FPUBLIC=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1)LE_CreateStreamServer创建的unix domain socket只有设置了TASK_PUBLIC位后others才可以访问 2)paramservice增加TASK_PUBLIC标记 3)其它server默认不是public 4)修改init的libinit.stub.json,开放更多符号 Signed-off-by: handyohos Change-Id: Ie2a09f3a349f64759efe99e04dfb7507f96bc2ec #I820PO --- .../init_module_engine/stub/libinit.stub.json | 47 ++++++++++++++++++- services/loopevent/include/loop_event.h | 1 + services/loopevent/socket/le_socket.c | 11 +++-- services/param/linux/param_msgadp.c | 2 +- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/interfaces/innerkits/init_module_engine/stub/libinit.stub.json b/interfaces/innerkits/init_module_engine/stub/libinit.stub.json index 3aba36db3..de34c46e4 100644 --- a/interfaces/innerkits/init_module_engine/stub/libinit.stub.json +++ b/interfaces/innerkits/init_module_engine/stub/libinit.stub.json @@ -27,5 +27,50 @@ { "name": "GetMatchCmd" }, { "name": "AddCareContextCmdExecutor" }, { "name": "GetParameterFromCmdLine" }, - { "name": "InitSubInitContext" } + { "name": "InitSubInitContext" }, + { "name": "LE_AcceptStreamClient" }, + { "name": "LE_AddSignal" }, + { "name": "LE_CloseLoop" }, + { "name": "LE_CloseSignalTask" }, + { "name": "LE_CloseStreamTask" }, + { "name": "LE_CloseTask" }, + { "name": "LE_CreateAsyncTask" }, + { "name": "LE_CreateBuffer" }, + { "name": "LE_CreateLoop" }, + { "name": "LE_CreateSignalTask" }, + { "name": "LE_CreateStreamClient" }, + { "name": "LE_CreateStreamServer" }, + { "name": "LE_CreateTimer" }, + { "name": "LE_FreeBuffer" }, + { "name": "LE_GetBufferInfo" }, + { "name": "LE_GetDefaultLoop" }, + { "name": "LE_GetSendResult" }, + { "name": "LE_GetSocketFd" }, + { "name": "LE_GetUserData" }, + { "name": "LE_RemoveSignal" }, + { "name": "LE_RemoveWatcher" }, + { "name": "LE_RunLoop" }, + { "name": "LE_Send" }, + { "name": "LE_StartAsyncEvent" }, + { "name": "LE_StartTimer" }, + { "name": "LE_StartWatcher" }, + { "name": "LE_StopAsyncTask" }, + { "name": "LE_StopLoop" }, + { "name": "LE_StopTimer" }, + { "name": "OH_ListAddTail" }, + { "name": "OH_ListInit" }, + { "name": "OH_ListRemove" }, + { "name": "OH_ListGetCnt" }, + { "name": "OH_ListAddWithOrder" }, + { "name": "OH_ListFind" }, + { "name": "OH_ListRemoveAll" }, + { "name": "OH_ListTraversal" }, + { "name": "OH_HashMapAdd" }, + { "name": "OH_HashMapCreate" }, + { "name": "OH_HashMapDestory" }, + { "name": "OH_HashMapFind" }, + { "name": "OH_HashMapGet" }, + { "name": "OH_HashMapIsEmpty" }, + { "name": "OH_HashMapRemove" }, + { "name": "OH_HashMapTraverse" } ] diff --git a/services/loopevent/include/loop_event.h b/services/loopevent/include/loop_event.h index 7ad8c7f91..217a57ee4 100644 --- a/services/loopevent/include/loop_event.h +++ b/services/loopevent/include/loop_event.h @@ -95,6 +95,7 @@ typedef struct { #define TASK_SERVER (0x01 << 16) #define TASK_CONNECT (0x02 << 16) #define TASK_TEST (0x01 << 24) +#define TASK_PUBLIC (0x01 << 25) // If the socket can be publicly connected typedef void (*LE_DisConnectComplete)(const TaskHandle client); typedef void (*LE_ConnectComplete)(const TaskHandle client); typedef void (*LE_SendMessageComplete)(const TaskHandle taskHandle, BufferHandle handle); diff --git a/services/loopevent/socket/le_socket.c b/services/loopevent/socket/le_socket.c index d3533c2c0..91375ffc5 100644 --- a/services/loopevent/socket/le_socket.c +++ b/services/loopevent/socket/le_socket.c @@ -28,7 +28,7 @@ #include "le_utils.h" -static int CreatePipeServerSocket_(const char *server, int maxClient) +static int CreatePipeServerSocket_(const char *server, int maxClient, int public) { int listenfd = socket(PF_UNIX, SOCK_STREAM, 0); LE_CHECK(listenfd > 0, return listenfd, "Failed to create socket errno %d", errno); @@ -51,7 +51,11 @@ static int CreatePipeServerSocket_(const char *server, int maxClient) ret = listen(listenfd, maxClient); LE_CHECK(ret >= 0, close(listenfd); return ret, "Failed to listen socket error: %d", errno); - ret = chmod(server, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP; + if (public) { + mode |= S_IROTH | S_IWOTH; + } + ret = chmod(server, mode); LE_CHECK(ret == 0, return -1, "Failed to chmod %s, err %d. ", server, errno); LE_LOGV("CreatePipeSocket listen fd: %d server:%s ", listenfd, serverAddr.sun_path); return listenfd; @@ -169,7 +173,8 @@ int CreateSocket(int flags, const char *server) } } else if (type == TASK_PIPE) { if (LE_TEST_FLAGS(flags, TASK_SERVER)) { - fd = CreatePipeServerSocket_(server, LOOP_MAX_CLIENT); + fd = CreatePipeServerSocket_(server, LOOP_MAX_CLIENT, + (int)LE_TEST_FLAGS(flags, TASK_PUBLIC)); } else if (LE_TEST_FLAGS(flags, TASK_CONNECT)) { fd = CreatePipeSocket_(server); } diff --git a/services/param/linux/param_msgadp.c b/services/param/linux/param_msgadp.c index bcc9cf734..f8fc1696b 100644 --- a/services/param/linux/param_msgadp.c +++ b/services/param/linux/param_msgadp.c @@ -49,7 +49,7 @@ int ParamServerCreate(ParamTaskPtr *stream, const ParamStreamInfo *streamInfo) PARAM_CHECK(stream != NULL && streamInfo != NULL, return -1, "Invalid param"); PARAM_CHECK(streamInfo->incomingConnect != NULL, return -1, "Invalid incomingConnect"); LE_StreamServerInfo info = {}; - info.baseInfo.flags = TASK_STREAM | TASK_PIPE | TASK_SERVER; + info.baseInfo.flags = TASK_STREAM | TASK_PIPE | TASK_SERVER | TASK_PUBLIC; info.server = streamInfo->server; info.baseInfo.close = streamInfo->close; info.incommingConnect = streamInfo->incomingConnect; -- Gitee