Fix permissions, daemonize

This commit is contained in:
Jeremy Soller
2017-10-02 20:55:29 -06:00
parent 57f7378a5c
commit 6166bdcb60
6 changed files with 16 additions and 18 deletions
+7 -10
View File
@@ -25,12 +25,6 @@ mod port_set;
fn run() -> Result<()> {
use syscall::flag::*;
logger::init_logger();
// if unsafe { syscall::clone(0).unwrap() } != 0 {
// return Ok(());
// }
trace!("opening network:");
let network_fd = syscall::open("network:", O_RDWR | O_NONBLOCK)
.map_err(|e| Error::from_syscall_error(e, "failed to open network:"))?
@@ -126,9 +120,12 @@ fn run() -> Result<()> {
}
fn main() {
if let Err(err) = run() {
error!("smoltcpd: {}", err);
process::exit(1);
if unsafe { syscall::clone(0).unwrap() } == 0 {
logger::init_logger();
if let Err(err) = run() {
error!("smoltcpd: {}", err);
process::exit(1);
}
}
process::exit(0);
}
+3 -3
View File
@@ -126,9 +126,9 @@ impl Smolnetd {
fn poll(&mut self) -> Result<()> {
let timestamp = self.get_timestamp();
// trace!("Poll {}", timestamp);
self.iface
.poll(&mut *self.socket_set.borrow_mut(), timestamp)
.expect("poll error");
if let Err(err) = self.iface.poll(&mut *self.socket_set.borrow_mut(), timestamp) {
error!("poll error: {}", err);
}
self.notify_sockets()
}
+1 -2
View File
@@ -11,7 +11,6 @@ use std::ops::DerefMut;
use syscall::data::TimeSpec;
use syscall;
use super::Smolnetd;
use port_set::PortSet;
pub type TcpScheme = SocketScheme<TcpSocket<'static>>;
@@ -109,7 +108,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> {
let remote_endpoint = parse_endpoint(parts.next().unwrap_or(""));
let mut local_endpoint = parse_endpoint(parts.next().unwrap_or(""));
if local_endpoint.port <= 1024 && uid != 0 {
if local_endpoint.port > 0 && local_endpoint.port <= 1024 && uid != 0 {
return Err(syscall::Error::new(syscall::EACCES));
}
+1 -1
View File
@@ -107,7 +107,7 @@ impl<'a, 'b> SchemeSocket for UdpSocket<'a, 'b> {
let remote_endpoint = parse_endpoint(parts.next().unwrap_or(""));
let mut local_endpoint = parse_endpoint(parts.next().unwrap_or(""));
if local_endpoint.port <= 1024 && uid != 0 {
if local_endpoint.port > 0 && local_endpoint.port <= 1024 && uid != 0 {
return Err(syscall::Error::new(syscall::EACCES));
}