nghttpx: Don't exit from save_pid and set_alpn_prefs
This commit is contained in:
parent
9a8e9815c9
commit
e2906025c8
16
src/shrpx.cc
16
src/shrpx.cc
|
@ -294,7 +294,7 @@ int chown_to_running_user(const char *path) {
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
void save_pid() {
|
int save_pid() {
|
||||||
constexpr auto SUFFIX = StringRef::from_lit(".XXXXXX");
|
constexpr auto SUFFIX = StringRef::from_lit(".XXXXXX");
|
||||||
auto &pid_file = get_config()->pid_file;
|
auto &pid_file = get_config()->pid_file;
|
||||||
|
|
||||||
|
@ -313,7 +313,7 @@ void save_pid() {
|
||||||
auto error = errno;
|
auto error = errno;
|
||||||
LOG(ERROR) << "Could not save PID to file " << pid_file << ": "
|
LOG(ERROR) << "Could not save PID to file " << pid_file << ": "
|
||||||
<< strerror(error);
|
<< strerror(error);
|
||||||
exit(EXIT_FAILURE);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto content = util::utos(get_config()->pid) + '\n';
|
auto content = util::utos(get_config()->pid) + '\n';
|
||||||
|
@ -322,14 +322,14 @@ void save_pid() {
|
||||||
auto error = errno;
|
auto error = errno;
|
||||||
LOG(ERROR) << "Could not save PID to file " << pid_file << ": "
|
LOG(ERROR) << "Could not save PID to file " << pid_file << ": "
|
||||||
<< strerror(error);
|
<< strerror(error);
|
||||||
exit(EXIT_FAILURE);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fsync(fd) == -1) {
|
if (fsync(fd) == -1) {
|
||||||
auto error = errno;
|
auto error = errno;
|
||||||
LOG(ERROR) << "Could not save PID to file " << pid_file << ": "
|
LOG(ERROR) << "Could not save PID to file " << pid_file << ": "
|
||||||
<< strerror(error);
|
<< strerror(error);
|
||||||
exit(EXIT_FAILURE);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
@ -341,7 +341,7 @@ void save_pid() {
|
||||||
|
|
||||||
unlink(temp_path);
|
unlink(temp_path);
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_config()->uid != 0) {
|
if (get_config()->uid != 0) {
|
||||||
|
@ -351,6 +351,8 @@ void save_pid() {
|
||||||
<< " failed: " << strerror(error);
|
<< " failed: " << strerror(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
@ -2379,7 +2381,9 @@ int process_options(Config *config,
|
||||||
|
|
||||||
tlsconf.tls_proto_mask = ssl::create_tls_proto_mask(tlsconf.tls_proto_list);
|
tlsconf.tls_proto_mask = ssl::create_tls_proto_mask(tlsconf.tls_proto_list);
|
||||||
|
|
||||||
tlsconf.alpn_prefs = ssl::set_alpn_prefs(tlsconf.npn_list);
|
if (ssl::set_alpn_prefs(tlsconf.alpn_prefs, tlsconf.npn_list) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
tlsconf.bio_method = create_bio_method();
|
tlsconf.bio_method = create_bio_method();
|
||||||
|
|
||||||
|
|
|
@ -94,16 +94,14 @@ int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) {
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// This function is meant be called from master process, hence the
|
int set_alpn_prefs(std::vector<unsigned char> &out,
|
||||||
// call exit(3).
|
const std::vector<std::string> &protos) {
|
||||||
std::vector<unsigned char>
|
|
||||||
set_alpn_prefs(const std::vector<std::string> &protos) {
|
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
|
|
||||||
for (const auto &proto : protos) {
|
for (const auto &proto : protos) {
|
||||||
if (proto.size() > 255) {
|
if (proto.size() > 255) {
|
||||||
LOG(FATAL) << "Too long ALPN identifier: " << proto.size();
|
LOG(FATAL) << "Too long ALPN identifier: " << proto.size();
|
||||||
exit(EXIT_FAILURE);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
len += 1 + proto.size();
|
len += 1 + proto.size();
|
||||||
|
@ -111,10 +109,10 @@ set_alpn_prefs(const std::vector<std::string> &protos) {
|
||||||
|
|
||||||
if (len > (1 << 16) - 1) {
|
if (len > (1 << 16) - 1) {
|
||||||
LOG(FATAL) << "Too long ALPN identifier list: " << len;
|
LOG(FATAL) << "Too long ALPN identifier list: " << len;
|
||||||
exit(EXIT_FAILURE);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto out = std::vector<unsigned char>(len);
|
out.resize(len);
|
||||||
auto ptr = out.data();
|
auto ptr = out.data();
|
||||||
|
|
||||||
for (const auto &proto : protos) {
|
for (const auto &proto : protos) {
|
||||||
|
@ -123,7 +121,7 @@ set_alpn_prefs(const std::vector<std::string> &protos) {
|
||||||
ptr += proto.size();
|
ptr += proto.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
|
@ -181,8 +181,8 @@ bool check_http2_requirement(SSL *ssl);
|
||||||
// passed to SSL_CTX_set_options().
|
// passed to SSL_CTX_set_options().
|
||||||
long int create_tls_proto_mask(const std::vector<std::string> &tls_proto_list);
|
long int create_tls_proto_mask(const std::vector<std::string> &tls_proto_list);
|
||||||
|
|
||||||
std::vector<unsigned char>
|
int set_alpn_prefs(std::vector<unsigned char> &out,
|
||||||
set_alpn_prefs(const std::vector<std::string> &protos);
|
const std::vector<std::string> &protos);
|
||||||
|
|
||||||
// Setups server side SSL_CTX. This function inspects get_config()
|
// Setups server side SSL_CTX. This function inspects get_config()
|
||||||
// and if upstream_no_tls is true, returns nullptr. Otherwise
|
// and if upstream_no_tls is true, returns nullptr. Otherwise
|
||||||
|
|
Loading…
Reference in New Issue