accounts: refresh user list by listening '/etc/shadow'

tower:https://tower.im/projects/8162ac3745044ca29f9f3d21beaeb93d/todos/8e31907514d64d849a65126ab24f5928/
Change-Id: I3ab32448fa5f1b05204e4ecd0cc06f33eb41db48
This commit is contained in:
jouyouyun 2015-06-10 20:59:04 +08:00 committed by Deepin Code Review
parent bb1c3dc0ec
commit 60c311ea6c

View File

@ -29,7 +29,6 @@ import (
)
const (
userFilePasswd = "/etc/passwd"
userFileGroup = "/etc/group"
userFileShadow = "/etc/shadow"
@ -43,7 +42,7 @@ const (
)
func (m *Manager) getWatchFiles() []string {
return []string{userFilePasswd, userFileGroup, userFileShadow}
return []string{userFileGroup, userFileShadow}
}
func (m *Manager) handleFileChanged(ev *fsnotify.FileEvent) {
@ -52,8 +51,6 @@ func (m *Manager) handleFileChanged(ev *fsnotify.FileEvent) {
}
switch {
case strings.Contains(ev.Name, userFilePasswd):
m.handleUserFileChanged(ev, m.handleFilePasswdChanged)
case strings.Contains(ev.Name, userFileGroup):
m.handleUserFileChanged(ev, m.handleFileGroupChanged)
case strings.Contains(ev.Name, userFileShadow):
@ -71,17 +68,6 @@ func (m *Manager) handleUserFileChanged(ev *fsnotify.FileEvent, handler func())
handler()
}
func (m *Manager) handleFilePasswdChanged() {
newList := getUserPaths()
ret, status := compareUserList(m.UserList, newList)
switch status {
case userListAdded:
m.handleUserAdded(ret)
case userListDeleted:
m.handleUserDeleted(ret)
}
}
func (m *Manager) handleFileGroupChanged() {
m.mapLocker.Lock()
defer m.mapLocker.Unlock()
@ -91,6 +77,9 @@ func (m *Manager) handleFileGroupChanged() {
}
func (m *Manager) handleFileShadowChanged() {
m.refreshUserList()
//Update the property 'Locked'
m.mapLocker.Lock()
defer m.mapLocker.Unlock()
for _, u := range m.usersMap {
@ -98,6 +87,17 @@ func (m *Manager) handleFileShadowChanged() {
}
}
func (m *Manager) refreshUserList() {
newList := getUserPaths()
ret, status := compareUserList(m.UserList, newList)
switch status {
case userListAdded:
m.handleUserAdded(ret)
case userListDeleted:
m.handleUserDeleted(ret)
}
}
func (m *Manager) handleUserAdded(list []string) {
var paths = m.UserList
for _, p := range list {