!312 sync from upstream

From: @zh_xiaoyu 
Reviewed-by: @duguhaotian 
Signed-off-by: @duguhaotian
This commit is contained in:
openeuler-ci-bot 2022-04-25 12:39:57 +00:00 committed by Gitee
commit 0ab96fc454
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 487 additions and 1 deletions

View File

@ -0,0 +1,211 @@
From c0900d0bb68cb29484f670a67412447df316ff6e Mon Sep 17 00:00:00 2001
From: zhangxiaoyu <zhangxiaoyu58@huawei.com>
Date: Tue, 19 Apr 2022 18:33:16 +0800
Subject: [PATCH 1/3] cleancode: http request
Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
---
src/utils/http/http.c | 150 ++++++++++++++++++++++--------------------
1 file changed, 77 insertions(+), 73 deletions(-)
diff --git a/src/utils/http/http.c b/src/utils/http/http.c
index 2ed7fbe8..0b53cf1e 100644
--- a/src/utils/http/http.c
+++ b/src/utils/http/http.c
@@ -95,38 +95,53 @@ void http_global_cleanup(void)
curl_global_cleanup();
}
+static int http_get_header_common(const unsigned int flag, const char *key, const char *value,
+ struct curl_slist **chunk)
+{
+ int nret = 0;
+ size_t len = 0;
+ char *header = NULL;
+
+ if (flag == 0 || key == NULL || value == NULL) {
+ return 0;
+ }
+
+ // format key: value
+ if (strlen(value) > (SIZE_MAX - strlen(key)) - 3) {
+ ERROR("Invalid authorization option");
+ return -1;
+ }
+
+ // key + ": " + value + '\0'
+ len = strlen(key) + strlen(value) + 3;
+ header = util_common_calloc_s(len);
+ if (header == NULL) {
+ ERROR("Out of memory");
+ return -1;
+ }
+
+ nret = snprintf(header, len, "%s: %s", key, value);
+ if (nret < 0 || (size_t)nret >= len) {
+ ERROR("Failed to print string");
+ } else {
+ *chunk = curl_slist_append(*chunk, header);
+ }
+
+ free(header);
+ return nret == 0 ? 0 : -1;
+}
+
struct curl_slist *http_get_chunk_header(const struct http_get_options *options)
{
int ret = 0;
- int nret;
- size_t len = 0;
+ int i;
struct curl_slist *chunk = NULL;
- char *header = NULL;
char **custom_headers = NULL;
- int i = 0;
- if (options->with_header_auth && options->authorization) {
- if (strlen(options->authorization) > (SIZE_MAX - strlen("Authorization: ")) - 1) {
- ERROR("Invalid authorization option");
- ret = -1;
- goto out;
- }
- len = strlen(options->authorization) + strlen("Authorization: ") + 1;
- header = util_common_calloc_s(len);
- if (header == NULL) {
- ERROR("Out of memory");
- ret = -1;
- goto out;
- }
- nret = snprintf(header, len, "Authorization: %s", options->authorization);
- if (nret < 0 || (size_t)nret >= len) {
- ERROR("Failed to print string");
- ret = -1;
- goto out;
- }
- chunk = curl_slist_append(chunk, header);
- free(header);
- header = NULL;
+ ret = http_get_header_common(options->with_header_auth, "Authorization", options->authorization,
+ &chunk);
+ if (ret != 0) {
+ goto out;
}
if (options->with_header_json) {
@@ -140,47 +155,47 @@ struct curl_slist *http_get_chunk_header(const struct http_get_options *options)
chunk = curl_slist_append(chunk, custom_headers[i]);
}
- if (options->with_header_accept && options->accepts) {
- if (strlen(options->accepts) > (SIZE_MAX - strlen("Accept: ")) - 1) {
- ERROR("Invalid accepts option");
- ret = -1;
- goto out;
- }
- len = strlen(options->accepts) + strlen("Accept: ") + 1;
- header = util_common_calloc_s(len);
- if (header == NULL) {
- ERROR("Out of memory");
- ret = -1;
- goto out;
- }
- nret = snprintf(header, len, "Accept: %s", options->accepts);
- if (nret < 0 || (size_t)nret >= len) {
- ERROR("Failed to print string");
- ret = -1;
- goto out;
- }
- chunk = curl_slist_append(chunk, header);
- free(header);
- header = NULL;
+ ret = http_get_header_common(options->with_header_accept, "Accept", options->accepts,
+ &chunk);
+ if (ret != 0) {
+ goto out;
}
+
out:
- if (ret) {
+ if (ret != 0) {
curl_slist_free_all(chunk);
chunk = NULL;
}
- free(header);
return chunk;
}
-static int http_custom_options(CURL *curl_handle, const struct http_get_options *options)
+static void http_custom_ssl_options(CURL *curl_handle, const struct http_get_options *options)
{
- int ret = 0;
+ if (options->ssl_verify_peer) {
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 1L);
+ } else {
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0L);
+ }
+ if (options->ssl_verify_host) {
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 2L);
+ } else {
+ curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0L);
+ }
- if (curl_handle == NULL || options == NULL) {
- return -1;
+ if (options->ca_file != NULL) {
+ curl_easy_setopt(curl_handle, CURLOPT_CAINFO, options->ca_file);
+ }
+ if (options->cert_file != NULL) {
+ curl_easy_setopt(curl_handle, CURLOPT_SSLCERT, options->cert_file);
+ }
+ if (options->key_file != NULL) {
+ curl_easy_setopt(curl_handle, CURLOPT_SSLKEY, options->key_file);
}
+}
+static void http_custom_general_options(CURL *curl_handle, const struct http_get_options *options)
+{
if (options->timeout) {
/* complete connection within 30 seconds */
curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 30L);
@@ -222,29 +237,18 @@ static int http_custom_options(CURL *curl_handle, const struct http_get_options
if (options->debug) {
curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L);
}
+}
- if (options->ssl_verify_peer) {
- curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 1L);
- } else {
- curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0L);
- }
- if (options->ssl_verify_host) {
- curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 2L);
- } else {
- curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0L);
+static int http_custom_options(CURL *curl_handle, const struct http_get_options *options)
+{
+ if (curl_handle == NULL || options == NULL) {
+ return -1;
}
- if (options->ca_file != NULL) {
- curl_easy_setopt(curl_handle, CURLOPT_CAINFO, options->ca_file);
- }
- if (options->cert_file != NULL) {
- curl_easy_setopt(curl_handle, CURLOPT_SSLCERT, options->cert_file);
- }
- if (options->key_file != NULL) {
- curl_easy_setopt(curl_handle, CURLOPT_SSLKEY, options->key_file);
- }
+ http_custom_general_options(curl_handle, options);
+ http_custom_ssl_options(curl_handle, options);
- return ret;
+ return 0;
}
static void close_file(FILE *pagefile)
--
2.25.1

View File

@ -0,0 +1,235 @@
From b58453982016f9a2f707b51ad54f12583aa21929 Mon Sep 17 00:00:00 2001
From: wujing <wujing50@huawei.com>
Date: Wed, 20 Apr 2022 10:52:30 +0800
Subject: [PATCH 2/3] refactor mount parse in spec module
Signed-off-by: wujing <wujing50@huawei.com>
---
src/daemon/modules/spec/specs_mount.c | 160 +++++++++++++++++---------
1 file changed, 106 insertions(+), 54 deletions(-)
diff --git a/src/daemon/modules/spec/specs_mount.c b/src/daemon/modules/spec/specs_mount.c
index 5644b21e..c89f077f 100644
--- a/src/daemon/modules/spec/specs_mount.c
+++ b/src/daemon/modules/spec/specs_mount.c
@@ -580,7 +580,7 @@ out:
static int append_tmpfs_option_size(defs_mount *m, size_t size)
{
int nret = 0;
- char kvbuf[MOUNT_PROPERTIES_SIZE] = {0};
+ char kvbuf[MOUNT_PROPERTIES_SIZE] = { 0 };
if (size == 0) {
return 0;
@@ -604,7 +604,7 @@ static int append_tmpfs_option_size(defs_mount *m, size_t size)
static int append_tmpfs_option_mode(defs_mount *m, uint32_t mode)
{
int nret = 0;
- char kvbuf[MOUNT_PROPERTIES_SIZE] = {0};
+ char kvbuf[MOUNT_PROPERTIES_SIZE] = { 0 };
if (mode == 0) {
return 0;
@@ -625,19 +625,8 @@ static int append_tmpfs_option_mode(defs_mount *m, uint32_t mode)
return 0;
}
-static defs_mount *parse_mount(mount_spec *spec)
+static int parse_basic_mount_spec_fileds(const mount_spec *spec, defs_mount *m)
{
- int ret = 0;
- defs_mount *m = NULL;
- bool has_pro = false;
- bool has_sel = false;
-
- m = util_common_calloc_s(sizeof(defs_mount));
- if (m == NULL) {
- ERROR("Out of memory");
- return NULL;
- }
-
m->type = util_strdup_s(spec->type);
if (strcmp(m->type, MOUNT_TYPE_TMPFS) == 0) {
m->source = util_strdup_s("tmpfs");
@@ -652,58 +641,122 @@ static defs_mount *parse_mount(mount_spec *spec)
if (spec->readonly) {
if (util_array_append(&m->options, "ro")) {
ERROR("append ro mode to array failed");
- ret = -1;
- goto out;
+ return -1;
}
m->options_len++;
}
- if (spec->bind_options != NULL) {
- if (spec->bind_options->propagation != NULL) {
- if (util_array_append(&m->options, spec->bind_options->propagation)) {
- ERROR("append propagation to array failed");
- ret = -1;
- goto out;
- }
- m->options_len++;
- has_pro = true;
- }
- if (spec->bind_options->selinux_opts != NULL) {
- if (util_array_append(&m->options, spec->bind_options->selinux_opts)) {
- ERROR("append selinux opts to array failed");
- ret = -1;
- goto out;
- }
- m->options_len++;
- has_sel = true;
- }
+ return 0;
+}
+
+static int append_spec_bind_mount_options(const mount_spec *spec, defs_mount *m, bool *has_pro, bool *has_sel)
+{
+ if (spec->bind_options == NULL) {
+ return 0;
}
- if (spec->volume_options != NULL && spec->volume_options->no_copy) {
- if (util_array_append(&m->options, "nocopy")) {
- ERROR("append nocopy to array failed");
- ret = -1;
- goto out;
+ if (spec->bind_options->propagation != NULL) {
+ if (util_array_append(&m->options, spec->bind_options->propagation)) {
+ ERROR("append propagation to array failed");
+ return -1;
}
m->options_len++;
+ *has_pro = true;
}
-
- if (strcmp(m->type, MOUNT_TYPE_TMPFS) == 0 && spec->tmpfs_options != NULL) {
- if (append_tmpfs_option_size(m, (size_t) spec->tmpfs_options->size_bytes) != 0) {
- ERROR("append tmpfs option size failed");
- ret = -1;
- goto out;
+ if (spec->bind_options->selinux_opts != NULL) {
+ if (util_array_append(&m->options, spec->bind_options->selinux_opts)) {
+ ERROR("append selinux opts to array failed");
+ return -1;
}
+ m->options_len++;
+ *has_sel = true;
+ }
- if (append_tmpfs_option_mode(m, spec->tmpfs_options->mode) != 0) {
- ERROR("append tmpfs option mode failed");
- ret = -1;
- goto out;
- }
+ return 0;
+}
+
+static int append_spec_volume_options(const mount_spec *spec, defs_mount *m)
+{
+ if (spec->volume_options == NULL || !spec->volume_options->no_copy) {
+ return 0;
+ }
+
+ if (util_array_append(&m->options, "nocopy")) {
+ ERROR("append nocopy to array failed");
+ return -1;
+ }
+ m->options_len++;
+
+ return 0;
+}
+
+static int append_spec_tmpfs_options(const mount_spec *spec, defs_mount *m)
+{
+ if (strcmp(m->type, MOUNT_TYPE_TMPFS) != 0 || spec->tmpfs_options == NULL) {
+ return 0;
+ }
+
+ if (append_tmpfs_option_size(m, (size_t)spec->tmpfs_options->size_bytes) != 0) {
+ ERROR("append tmpfs option size failed");
+ return -1;
+ }
+
+ if (append_tmpfs_option_mode(m, spec->tmpfs_options->mode) != 0) {
+ ERROR("append tmpfs option mode failed");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int append_spec_mount_options(const mount_spec *spec, defs_mount *m, bool *has_pro, bool *has_sel)
+{
+ if (append_spec_bind_mount_options(spec, m, has_pro, has_sel) != 0) {
+ ERROR("Failed to append bind options in v2_spec");
+ return -1;
+ }
+
+ if (append_spec_volume_options(spec, m) != 0) {
+ ERROR("Failed to append volume options in v2_spec");
+ return -1;
+ }
+
+ if (append_spec_tmpfs_options(spec, m) != 0) {
+ ERROR("Failed to append tmpfs options in v2_spec");
+ return -1;
+ }
+
+ return 0;
+}
+
+static defs_mount *parse_mount(const mount_spec *spec)
+{
+ int ret = 0;
+ defs_mount *m = NULL;
+ bool has_pro = false;
+ bool has_sel = false;
+
+ m = util_common_calloc_s(sizeof(defs_mount));
+ if (m == NULL) {
+ ERROR("Out of memory");
+ return NULL;
+ }
+
+ ret = parse_basic_mount_spec_fileds(spec, m);
+ if (ret != 0) {
+ ERROR("Failed to parse basic mount fileds in v2_spec");
+ goto out;
+ }
+
+ ret = append_spec_mount_options(spec, m, &has_pro, &has_sel);
+ if (ret != 0) {
+ ERROR("Failed to append spec mount options");
+ goto out;
}
ret = append_default_mount_options(m, true, has_pro, has_sel);
if (ret != 0) {
+ ERROR("Failed to append default mount options");
goto out;
}
@@ -2857,8 +2910,7 @@ static void add_mount(defs_mount **merged_mounts, size_t *merged_mounts_len, def
*merged_mounts_len += 1;
}
-static int add_embedded_layers(container_config *container_spec, defs_mount **merged_mounts,
- size_t *merged_mounts_len)
+static int add_embedded_layers(container_config *container_spec, defs_mount **merged_mounts, size_t *merged_mounts_len)
{
int ret = 0;
size_t i = 0;
@@ -2976,7 +3028,7 @@ out:
static char *get_valid_tmpfs_dst_path(char *tmpfs)
{
- char dstpath[PATH_MAX] = {0};
+ char dstpath[PATH_MAX] = { 0 };
if (tmpfs == NULL) {
return NULL;
--
2.25.1

View File

@ -0,0 +1,30 @@
From e0c13b23ddee161a6196ca2e0c970704e4bbef0e Mon Sep 17 00:00:00 2001
From: WangFengTu <wangfengtu@huawei.com>
Date: Sun, 24 Apr 2022 14:18:26 +0800
Subject: [PATCH 3/3] support isula wait even if it's not oci image
Signed-off-by: WangFengTu <wangfengtu@huawei.com>
---
src/cmd/isula/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cmd/isula/main.c b/src/cmd/isula/main.c
index 0e5b845c..2deb862c 100644
--- a/src/cmd/isula/main.c
+++ b/src/cmd/isula/main.c
@@ -134,11 +134,11 @@ struct command g_commands[] = {
"rmi", false, cmd_rmi_main, g_cmd_rmi_desc, NULL, &g_cmd_rmi_args
},
#endif
-#ifdef ENABLE_OCI_IMAGE
{
// `wait` sub-command
"wait", false, cmd_wait_main, g_cmd_wait_desc, NULL, &g_cmd_wait_args
},
+#ifdef ENABLE_OCI_IMAGE
{
// `logs` sub-command
"logs", false, cmd_logs_main, g_cmd_logs_desc, NULL, &g_cmd_logs_args
--
2.25.1

View File

@ -1,5 +1,5 @@
%global _version 2.0.13 %global _version 2.0.13
%global _release 1 %global _release 2
%global is_systemd 1 %global is_systemd 1
%global enable_shimv2 1 %global enable_shimv2 1
%global is_embedded 1 %global is_embedded 1
@ -13,6 +13,10 @@ URL: https://gitee.com/openeuler/iSulad
Source: https://gitee.com/openeuler/iSulad/repository/archive/v%{version}.tar.gz Source: https://gitee.com/openeuler/iSulad/repository/archive/v%{version}.tar.gz
BuildRoot: {_tmppath}/iSulad-%{version} BuildRoot: {_tmppath}/iSulad-%{version}
Patch0001: 0001-cleancode-http-request.patch
Patch0002: 0002-refactor-mount-parse-in-spec-module.patch
Patch0003: 0003-support-isula-wait-even-if-it-s-not-oci-image.patch
%ifarch x86_64 aarch64 %ifarch x86_64 aarch64
Provides: libhttpclient.so()(64bit) Provides: libhttpclient.so()(64bit)
Provides: libisula.so()(64bit) Provides: libisula.so()(64bit)
@ -239,6 +243,12 @@ fi
%endif %endif
%changelog %changelog
* Mon Apr 25 2022 zhangxiaoyu <zhangxiaoyu58@huawei.com> - 2.0.13-2
- Type: bugfix
- ID: NA
- SUG: NA
- DESC: sync from upstream
* Mon Apr 18 2022 wangfengtu <wangfengtu@huawei.com> - 2.0.13-1 * Mon Apr 18 2022 wangfengtu <wangfengtu@huawei.com> - 2.0.13-1
- Type: bugfix - Type: bugfix
- ID: NA - ID: NA