Skip to content

Commit 4046b01

Browse files
committed
cert: add ddns domain to server cert.
1 parent d751fbc commit 4046b01

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

src/dns_conf/ddns_domain.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@
1818

1919
#include "ddns_domain.h"
2020
#include "domain_rule.h"
21+
#include "smartdns/lib/stringutil.h"
22+
23+
static char ddns_domain[DNS_MAX_CNAME_LEN] = {0};
24+
25+
const char *dns_conf_get_ddns_domain(void)
26+
{
27+
return ddns_domain;
28+
}
2129

2230
int _config_ddns_domain(void *data, int argc, char *argv[])
2331
{
@@ -27,6 +35,7 @@ int _config_ddns_domain(void *data, int argc, char *argv[])
2735
}
2836

2937
const char *domain = argv[1];
38+
safe_strncpy(ddns_domain, domain, sizeof(ddns_domain));
3039
_config_domain_rule_flag_set(domain, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0);
3140
return 0;
3241
}

src/include/smartdns/dns_conf.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,8 @@ const char *dns_conf_get_cache_dir(void);
786786

787787
const char *dns_conf_get_data_dir(void);
788788

789+
const char *dns_conf_get_ddns_domain(void);
790+
789791
#ifdef __cplusplus
790792
}
791793
#endif

src/include/smartdns/util.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ int SSL_base64_encode(const void *in, int in_len, char *out);
138138

139139
int generate_cert_key(const char *key_path, const char *cert_path, const char *root_key_path, const char *san, int days);
140140

141-
int generate_cert_san(char *san, int max_san_len);
141+
int generate_cert_san(char *san, int max_san_len, const char *append_san);
142142

143143
int is_cert_valid(const char *cert_file_path);
144144

src/smartdns.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ static int _smartdns_create_cert(void)
382382
char san[PATH_MAX] = {0};
383383
/* 13 month */
384384
int validity_days = 13 * 30;
385+
char ddns_san[DNS_MAX_CNAME_LEN] = {0};
385386

386387
if (dns_conf.need_cert == 0) {
387388
return 0;
@@ -409,8 +410,12 @@ static int _smartdns_create_cert(void)
409410
unlink(dns_conf.bind_ca_key_file);
410411
tlog(TLOG_WARN, "regenerate cert with root ca key %s", dns_conf.bind_root_ca_key_file);
411412
}
413+
414+
if (dns_conf_get_ddns_domain()[0] != 0) {
415+
snprintf(ddns_san, sizeof(ddns_san), "DNS:%s", dns_conf_get_ddns_domain());
416+
}
412417

413-
if (generate_cert_san(san, sizeof(san)) != 0) {
418+
if (generate_cert_san(san, sizeof(san), ddns_san) != 0) {
414419
tlog(TLOG_WARN, "generate cert san failed.");
415420
return -1;
416421
}

src/utils/ssl.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ int is_cert_valid(const char *cert_file_path)
9494
return ret;
9595
}
9696

97-
int generate_cert_san(char *san, int max_san_len)
97+
int generate_cert_san(char *san, int max_san_len, const char *append_san)
9898
{
9999
char hostname[DNS_MAX_HOSTNAME_LEN];
100100
char domainname[DNS_MAX_HOSTNAME_LEN];
@@ -117,11 +117,13 @@ int generate_cert_san(char *san, int max_san_len)
117117
}
118118
san_len += len;
119119

120-
len = snprintf(san + san_len, max_san_len - san_len, ",DNS:%s", "localhost");
121-
if (len < 0 || len >= max_san_len - san_len) {
122-
return -1;
120+
if (append_san != NULL && append_san[0] != '\0') {
121+
len = snprintf(san + san_len, max_san_len - san_len, ",%s", append_san);
122+
if (len < 0 || len >= max_san_len - san_len) {
123+
return -1;
124+
}
125+
san_len += len;
123126
}
124-
san_len += len;
125127

126128
/* get local domain name */
127129
if (getdomainname(domainname, DNS_MAX_HOSTNAME_LEN - 1) == 0) {

0 commit comments

Comments
 (0)