Debugging dyndns
This commit is contained in:
parent
29cc40be48
commit
b8f394b901
|
@ -2,3 +2,4 @@
|
||||||
target
|
target
|
||||||
*peachdeploy.sh
|
*peachdeploy.sh
|
||||||
*vpsdeploy.sh
|
*vpsdeploy.sh
|
||||||
|
*bindeploy.sh
|
||||||
|
|
|
@ -29,6 +29,8 @@ pub struct PeachConfig {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub dyn_dns_server_address: String,
|
pub dyn_dns_server_address: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
pub dyn_nameserver: String,
|
||||||
|
#[serde(default)]
|
||||||
pub dyn_tsig_key_path: String,
|
pub dyn_tsig_key_path: String,
|
||||||
#[serde(default)] // default is false
|
#[serde(default)] // default is false
|
||||||
pub dyn_enabled: bool,
|
pub dyn_enabled: bool,
|
||||||
|
@ -71,6 +73,7 @@ pub fn load_peach_config() -> Result<PeachConfig, PeachError> {
|
||||||
external_domain: "".to_string(),
|
external_domain: "".to_string(),
|
||||||
dyn_domain: "".to_string(),
|
dyn_domain: "".to_string(),
|
||||||
dyn_dns_server_address: "http://dynserver.dyn.peachcloud.org".to_string(),
|
dyn_dns_server_address: "http://dynserver.dyn.peachcloud.org".to_string(),
|
||||||
|
dyn_nameserver: "ns.peachcloud.org".to_string(),
|
||||||
dyn_tsig_key_path: "".to_string(),
|
dyn_tsig_key_path: "".to_string(),
|
||||||
dyn_enabled: false,
|
dyn_enabled: false,
|
||||||
ssb_admin_ids: Vec::new(),
|
ssb_admin_ids: Vec::new(),
|
||||||
|
|
|
@ -16,6 +16,7 @@ use std::{
|
||||||
process::{Command, Stdio},
|
process::{Command, Stdio},
|
||||||
str::FromStr,
|
str::FromStr,
|
||||||
};
|
};
|
||||||
|
use std::ffi::OsStr;
|
||||||
|
|
||||||
use chrono::prelude::*;
|
use chrono::prelude::*;
|
||||||
use jsonrpc_client_core::{expand_params, jsonrpc_client};
|
use jsonrpc_client_core::{expand_params, jsonrpc_client};
|
||||||
|
@ -113,7 +114,7 @@ fn get_public_ip_address() -> Result<String, PeachError> {
|
||||||
/// Reads dyndns configurations from config.yml
|
/// Reads dyndns configurations from config.yml
|
||||||
/// and then uses nsupdate to update the IP address for the configured domain
|
/// and then uses nsupdate to update the IP address for the configured domain
|
||||||
pub fn dyndns_update_ip() -> Result<bool, PeachError> {
|
pub fn dyndns_update_ip() -> Result<bool, PeachError> {
|
||||||
info!("Running dyndns_update_ip");
|
|
||||||
let peach_config = load_peach_config()?;
|
let peach_config = load_peach_config()?;
|
||||||
info!(
|
info!(
|
||||||
"Using config:
|
"Using config:
|
||||||
|
@ -121,21 +122,27 @@ pub fn dyndns_update_ip() -> Result<bool, PeachError> {
|
||||||
dyn_domain: {:?}
|
dyn_domain: {:?}
|
||||||
dyn_dns_server_address: {:?}
|
dyn_dns_server_address: {:?}
|
||||||
dyn_enabled: {:?}
|
dyn_enabled: {:?}
|
||||||
|
dyn_nameserver: {:?}
|
||||||
",
|
",
|
||||||
peach_config.dyn_tsig_key_path,
|
peach_config.dyn_tsig_key_path,
|
||||||
peach_config.dyn_domain,
|
peach_config.dyn_domain,
|
||||||
peach_config.dyn_dns_server_address,
|
peach_config.dyn_dns_server_address,
|
||||||
peach_config.dyn_enabled,
|
peach_config.dyn_enabled,
|
||||||
|
peach_config.dyn_nameserver,
|
||||||
);
|
);
|
||||||
if !peach_config.dyn_enabled {
|
if !peach_config.dyn_enabled {
|
||||||
info!("dyndns is not enabled, not updating");
|
info!("dyndns is not enabled, not updating");
|
||||||
Ok(false)
|
Ok(false)
|
||||||
} else {
|
} else {
|
||||||
// call nsupdate passing appropriate configs
|
// call nsupdate passing appropriate configs
|
||||||
let mut nsupdate_command = Command::new("/usr/bin/nsupdate")
|
let mut nsupdate_command = Command::new("/usr/bin/nsupdate");
|
||||||
|
nsupdate_command
|
||||||
.arg("-k")
|
.arg("-k")
|
||||||
.arg(&peach_config.dyn_tsig_key_path)
|
.arg(&peach_config.dyn_tsig_key_path)
|
||||||
.arg("-v")
|
.arg("-v");
|
||||||
|
let args: Vec<&OsStr> = nsupdate_command.get_args().collect();
|
||||||
|
info!("nsupdate_args: {:?}", args);
|
||||||
|
let mut nsupdate_child = nsupdate_command
|
||||||
.stdin(Stdio::piped())
|
.stdin(Stdio::piped())
|
||||||
.spawn()?;
|
.spawn()?;
|
||||||
// pass nsupdate commands via stdin
|
// pass nsupdate commands via stdin
|
||||||
|
@ -148,19 +155,20 @@ pub fn dyndns_update_ip() -> Result<bool, PeachError> {
|
||||||
update delete {DOMAIN} A
|
update delete {DOMAIN} A
|
||||||
update add {DOMAIN} 30 A {PUBLIC_IP_ADDRESS}
|
update add {DOMAIN} 30 A {PUBLIC_IP_ADDRESS}
|
||||||
send",
|
send",
|
||||||
NAMESERVER = "ns.peachcloud.org",
|
NAMESERVER = peach_config.dyn_nameserver,
|
||||||
ZONE = peach_config.dyn_domain,
|
ZONE = peach_config.dyn_domain,
|
||||||
DOMAIN = peach_config.dyn_domain,
|
DOMAIN = peach_config.dyn_domain,
|
||||||
PUBLIC_IP_ADDRESS = public_ip_address,
|
PUBLIC_IP_ADDRESS = public_ip_address,
|
||||||
);
|
);
|
||||||
let mut nsupdate_stdin = nsupdate_command.stdin.take().ok_or(PeachError::NsUpdate {
|
info!("ns_commands: {:?}", ns_commands);
|
||||||
|
let mut nsupdate_stdin = nsupdate_child.stdin.take().ok_or(PeachError::NsUpdate {
|
||||||
msg: "unable to capture stdin handle for `nsupdate` command".to_string(),
|
msg: "unable to capture stdin handle for `nsupdate` command".to_string(),
|
||||||
})?;
|
})?;
|
||||||
write!(nsupdate_stdin, "{}", ns_commands).map_err(|source| PeachError::Write {
|
write!(nsupdate_stdin, "{}", ns_commands).map_err(|source| PeachError::Write {
|
||||||
source,
|
source,
|
||||||
path: peach_config.dyn_tsig_key_path.to_string(),
|
path: peach_config.dyn_tsig_key_path.to_string(),
|
||||||
})?;
|
})?;
|
||||||
let nsupdate_output = nsupdate_command.wait_with_output()?;
|
let nsupdate_output = nsupdate_child.wait_with_output()?;
|
||||||
info!("nsupdate output: {:?}", nsupdate_output);
|
info!("nsupdate output: {:?}", nsupdate_output);
|
||||||
// We only return a successful result if nsupdate was successful
|
// We only return a successful result if nsupdate was successful
|
||||||
if nsupdate_output.status.success() {
|
if nsupdate_output.status.success() {
|
||||||
|
|
Loading…
Reference in New Issue