From 5e781d7539ac8f1f17e6cfa04c3c28fdfe65f4db Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 11 Sep 2015 23:21:50 -0600 Subject: Have nslcd_systemd manage the backend lifecycle --- src/nshd/hackers_git/db_config.go | 4 ++-- src/nshd/hackers_git/hackers.go | 11 ++++------- src/nshd/hackers_git/hackers_watch.go | 15 +++++++-------- src/nshd/main.go | 14 +++----------- src/nslcd_systemd/nslcd_systemd.go | 10 ++++++++++ 5 files changed, 26 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/nshd/hackers_git/db_config.go b/src/nshd/hackers_git/db_config.go index 55faa18..fde16b3 100644 --- a/src/nshd/hackers_git/db_config.go +++ b/src/nshd/hackers_git/db_config.go @@ -13,8 +13,8 @@ func (o *Hackers) Config_Get(cred p.Ucred, req p.Request_Config_Get) p.Config_En switch req.Key { case p.NSLCD_CONFIG_PAM_PASSWORD_PROHIBIT_MESSAGE: - if o.cfg.Pam_password_prohibit_message != "" { - val = &o.cfg.Pam_password_prohibit_message + if o.Cfg.Pam_password_prohibit_message != "" { + val = &o.Cfg.Pam_password_prohibit_message } } diff --git a/src/nshd/hackers_git/hackers.go b/src/nshd/hackers_git/hackers.go index 88f27ed..9e3976b 100644 --- a/src/nshd/hackers_git/hackers.go +++ b/src/nshd/hackers_git/hackers.go @@ -22,7 +22,7 @@ type Config struct { type Hackers struct { util.NullBackend - cfg Config + Cfg Config lock sync.RWMutex users map[int32]user @@ -38,20 +38,17 @@ type Hackers struct { var _ nslcd_systemd.Backend = &Hackers{} var _ nslcd_proto.Backend = &Hackers{} -func NewHackers(config Config) *Hackers { - o := Hackers{ - cfg: config, - } +func (o *Hackers) Init() error { err := o.Reload() if err != nil { logger.Err("Could not initialize hackers.git: %v", err) - return nil + return err } go func() { defer lsb.Recover() o.worker() }() - return &o + return nil } func (o *Hackers) Close() { diff --git a/src/nshd/hackers_git/hackers_watch.go b/src/nshd/hackers_git/hackers_watch.go index 8e3834e..919a578 100644 --- a/src/nshd/hackers_git/hackers_watch.go +++ b/src/nshd/hackers_git/hackers_watch.go @@ -62,9 +62,9 @@ func (o *Hackers) reload() (err error) { o.close() o.in_fd, err = inotify.InotifyInit() ; if err != nil { return } o.in_wd_home, err = o.in_fd.AddWatch("/home" , in_DIR|in_CHILD_ADD); if err != nil { return } - o.in_wd_yaml, err = o.in_fd.AddWatch(o.cfg.Yamldir, in_DIR|in_CHILD_ANY); if err != nil { return } + o.in_wd_yaml, err = o.in_fd.AddWatch(o.Cfg.Yamldir, in_DIR|in_CHILD_ANY); if err != nil { return } - filenames, err := filepath.Glob(o.cfg.Yamldir + "/*.yml") + filenames, err := filepath.Glob(o.Cfg.Yamldir + "/*.yml") o.users = make(map[int32]user, len(filenames)) o.groups = make(map[string]map[string]bool) o.in_uid2wd = make(map[int32]inotify.Wd, len(filenames)) @@ -152,9 +152,9 @@ func worker_error(format string, a ...interface{}) { } func (o *Hackers) worker() { - err := os.Chdir(o.cfg.Yamldir) + err := os.Chdir(o.Cfg.Yamldir) if err != nil { - worker_error("failed to load %q: %v", o.cfg.Yamldir, err) + worker_error("failed to load %q: %v", o.Cfg.Yamldir, err) } for event, err := o.in_fd.Read(); err == nil; event, err = o.in_fd.Read() { switch event.Wd { @@ -166,16 +166,15 @@ func (o *Hackers) worker() { worker_error("failed to reload hackers.git yaml directory: %v", err) } - err = os.Chdir(o.cfg.Yamldir) + err = os.Chdir(o.Cfg.Yamldir) if err != nil { - worker_error("failed to load %q: %v", o.cfg.Yamldir, err) + worker_error("failed to load %q: %v", o.Cfg.Yamldir, err) } } else if event.Mask&in_CHILD_ANY != 0 { if event.Name == nil { panic("recieved child event from inotify, but no child name") } - filename := o.cfg.Yamldir + "/" + *event.Name - o.load_yaml_file(filename) + o.load_yaml_file(o.Cfg.Yamldir + "/" + *event.Name, true) } else { panic("recieved non-subscribed inotify event from kernel") } diff --git a/src/nshd/main.go b/src/nshd/main.go index 05236b8..775aca2 100644 --- a/src/nshd/main.go +++ b/src/nshd/main.go @@ -4,20 +4,12 @@ import ( "nshd/hackers_git" "nslcd_systemd" "os" - "sd_daemon/lsb" ) func main() { - defer lsb.Recover() - config := hackers_git.Config{ + backend := &hackers_git.Hackers{Cfg: hackers_git.Config{ Pam_password_prohibit_message: "", Yamldir: "/var/cache/parabola-hackers/users", - } - backend := hackers_git.NewHackers(config) - if backend == nil { - os.Exit(int(lsb.EXIT_FAILURE)) - } - ret := nslcd_systemd.Main(backend) - backend.Close() - os.Exit(int(ret)) + }} + os.Exit(int(nslcd_systemd.Main(backend))) } diff --git a/src/nslcd_systemd/nslcd_systemd.go b/src/nslcd_systemd/nslcd_systemd.go index 8d7d4fb..ad92f52 100644 --- a/src/nslcd_systemd/nslcd_systemd.go +++ b/src/nslcd_systemd/nslcd_systemd.go @@ -15,7 +15,9 @@ import ( type Backend interface { nslcd_proto.Backend + Init() error Reload() error + Close() } func get_socket() (socket net.Listener, err error) { @@ -72,6 +74,14 @@ func Main(backend Backend) uint8 { disable_nss_module() + err = backend.Init() + if err != nil { + logger.Err("%s", err.Error()) + sd.Notify(false, "STOPPING=1") + return lsb.EXIT_FAILURE + } + defer backend.Close() + socket, err = get_socket() if err != nil { logger.Err("%s", err.Error()) -- cgit v1.2.2