Update
This commit is contained in:
parent
b3c689eddb
commit
2c47bb10f5
3 changed files with 14 additions and 14 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::borrow::{ Borrow, Cow };
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
@ -11,12 +12,12 @@ use command_runner::CommandRunner;
|
||||||
|
|
||||||
pub struct Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
pub struct Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
||||||
path: D,
|
path: D,
|
||||||
user_name: &'a str,
|
user_name: Cow<'a, str>,
|
||||||
command_runner: &'a CommandRunner
|
command_runner: &'a CommandRunner
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, D> Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
impl<'a, D> Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
||||||
pub fn new(path: D, user_name: &'a str, command_runner: &'a CommandRunner) -> Self {
|
pub fn new(path: D, user_name: Cow<'a, str>, command_runner: &'a CommandRunner) -> Self {
|
||||||
Owner { path: path, user_name: user_name, command_runner: command_runner }
|
Owner { path: path, user_name: user_name, command_runner: command_runner }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -24,12 +25,12 @@ impl<'a, D> Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
||||||
impl<'a, D> Symbol for Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
impl<'a, D> Symbol for Owner<'a, D> where D: AsRef<str> + fmt::Display {
|
||||||
fn target_reached(&self) -> Result<bool, Box<Error>> {
|
fn target_reached(&self) -> Result<bool, Box<Error>> {
|
||||||
let actual_uid = fs::metadata(self.path.as_ref()).unwrap().uid();
|
let actual_uid = fs::metadata(self.path.as_ref()).unwrap().uid();
|
||||||
let target_uid = get_user_by_name(self.user_name).unwrap().uid();
|
let target_uid = get_user_by_name(self.user_name.borrow()).unwrap().uid();
|
||||||
Ok(actual_uid == target_uid)
|
Ok(actual_uid == target_uid)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn execute(&self) -> Result<(), Box<Error>> {
|
fn execute(&self) -> Result<(), Box<Error>> {
|
||||||
try!(self.command_runner.run_with_args("chown", &[self.user_name, self.path.as_ref()]));
|
try!(self.command_runner.run_with_args("chown", &[self.user_name.borrow(), self.path.as_ref()]));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ use std::time::Duration;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use command_runner::CommandRunner;
|
use command_runner::CommandRunner;
|
||||||
|
use resources::{ FileResource, Resource };
|
||||||
use symbols::Symbol;
|
use symbols::Symbol;
|
||||||
use symbols::file::File as FileSymbol;
|
use symbols::file::File as FileSymbol;
|
||||||
|
|
||||||
|
|
@ -125,9 +126,6 @@ impl<'a, P, C> Symbol for NodeJsSystemdUserService<'a, P, C> where P: AsRef<str>
|
||||||
}
|
}
|
||||||
|
|
||||||
fn execute(&self) -> Result<(), Box<Error>> {
|
fn execute(&self) -> Result<(), Box<Error>> {
|
||||||
try!(self.command_runner.run_with_args("mkdir", &["-p", Path::new(self.path.as_ref()).parent().unwrap().to_str().unwrap()]));
|
|
||||||
// FIXME: Permissions
|
|
||||||
// try!(create_dir_all(Path::new(&path).parent().unwrap()));
|
|
||||||
match self.file.execute() {
|
match self.file.execute() {
|
||||||
Ok(_) => {},
|
Ok(_) => {},
|
||||||
Err(e) => return Err(e)
|
Err(e) => return Err(e)
|
||||||
|
|
@ -164,11 +162,11 @@ impl<'a, P, C> Symbol for NodeJsSystemdUserService<'a, P, C> where P: AsRef<str>
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/* // FIXME
|
|
||||||
fn get_prerequisites(&self) -> Vec<Box<Resource>> {
|
fn get_prerequisites(&self) -> Vec<Box<Resource>> {
|
||||||
self.file.get_prerequisites()
|
let mut r: Vec<Box<Resource>> = vec![ Box::new(FileResource { path: ("/var/lib/systemd/linger/".to_string() + self.user_name).into() }) ];
|
||||||
|
r.extend(self.file.get_prerequisites().into_iter());
|
||||||
|
r
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, P, C> fmt::Display for NodeJsSystemdUserService<'a, P, C> where P: AsRef<str> + fmt::Display, C: Deref<Target=str> {
|
impl<'a, P, C> fmt::Display for NodeJsSystemdUserService<'a, P, C> where P: AsRef<str> + fmt::Display, C: Deref<Target=str> {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::borrow::{ Borrow, Cow };
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io::Error as IoError;
|
use std::io::Error as IoError;
|
||||||
|
|
@ -35,12 +36,12 @@ impl<E: Error> fmt::Display for SystemdUserSessionError<E> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SystemdUserSession<'a> {
|
pub struct SystemdUserSession<'a> {
|
||||||
user_name: &'a str,
|
user_name: Cow<'a, str>,
|
||||||
command_runner: &'a CommandRunner
|
command_runner: &'a CommandRunner
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> SystemdUserSession<'a> {
|
impl<'a> SystemdUserSession<'a> {
|
||||||
pub fn new(user_name: &'a str, command_runner: &'a CommandRunner) -> Self {
|
pub fn new(user_name: Cow<'a, str>, command_runner: &'a CommandRunner) -> Self {
|
||||||
SystemdUserSession {
|
SystemdUserSession {
|
||||||
user_name: user_name,
|
user_name: user_name,
|
||||||
command_runner: command_runner
|
command_runner: command_runner
|
||||||
|
|
@ -51,13 +52,13 @@ impl<'a> SystemdUserSession<'a> {
|
||||||
impl<'a> Symbol for SystemdUserSession<'a> {
|
impl<'a> Symbol for SystemdUserSession<'a> {
|
||||||
fn target_reached(&self) -> Result<bool, Box<Error>> {
|
fn target_reached(&self) -> Result<bool, Box<Error>> {
|
||||||
let mut path = PathBuf::from("/var/lib/systemd/linger");
|
let mut path = PathBuf::from("/var/lib/systemd/linger");
|
||||||
path.push(self.user_name);
|
path.push(self.user_name.borrow() as &str);
|
||||||
Ok(path.exists())
|
Ok(path.exists())
|
||||||
// Could also do `loginctl show-user ${self.user_name} | grep -F 'Linger=yes`
|
// Could also do `loginctl show-user ${self.user_name} | grep -F 'Linger=yes`
|
||||||
}
|
}
|
||||||
|
|
||||||
fn execute(&self) -> Result<(), Box<Error>> {
|
fn execute(&self) -> Result<(), Box<Error>> {
|
||||||
match self.command_runner.run_with_args("loginctl", &["enable-linger", self.user_name]) {
|
match self.command_runner.run_with_args("loginctl", &["enable-linger", self.user_name.borrow()]) {
|
||||||
Ok(output) => { println!("{:?} {:?}", from_utf8(&output.stdout).unwrap(), from_utf8(&output.stderr).unwrap() ); match output.status.code() {
|
Ok(output) => { println!("{:?} {:?}", from_utf8(&output.stdout).unwrap(), from_utf8(&output.stderr).unwrap() ); match output.status.code() {
|
||||||
Some(0) => Ok(()),
|
Some(0) => Ok(()),
|
||||||
_ => Err(Box::new(SystemdUserSessionError::GenericError as SystemdUserSessionError<IoError>))
|
_ => Err(Box::new(SystemdUserSessionError::GenericError as SystemdUserSessionError<IoError>))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue