diff options
| -rw-r--r-- | weed/command/sftp.go | 4 | ||||
| -rw-r--r-- | weed/sftpd/sftp_service.go | 12 | ||||
| -rw-r--r-- | weed/sftpd/user/filestore.go | 5 |
3 files changed, 21 insertions, 0 deletions
diff --git a/weed/command/sftp.go b/weed/command/sftp.go index ed93e44fe..f1a0d9e09 100644 --- a/weed/command/sftp.go +++ b/weed/command/sftp.go @@ -16,6 +16,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/sftpd" stats_collect "github.com/seaweedfs/seaweedfs/weed/stats" "github.com/seaweedfs/seaweedfs/weed/util" + "github.com/seaweedfs/seaweedfs/weed/util/grace" ) var ( @@ -148,6 +149,9 @@ func (sftpOpt *SftpOptions) startSftpServer() bool { UserStoreFile: *sftpOpt.userStoreFile, }) + // Register reload hook for HUP signal + grace.OnReload(service.Reload) + // Set up Unix socket if on non-Windows platforms if runtime.GOOS != "windows" { localSocket := *sftpOpt.localSocket diff --git a/weed/sftpd/sftp_service.go b/weed/sftpd/sftp_service.go index 4d21815a9..c03d636e4 100644 --- a/weed/sftpd/sftp_service.go +++ b/weed/sftpd/sftp_service.go @@ -300,3 +300,15 @@ func (s *SFTPService) handleSFTP(channel ssh.Channel, fs *SftpServer) { glog.Errorf("SFTP server finished with error: %v", err) } } + +// Reload reloads the user store from disk, useful for HUP signal handling +func (s *SFTPService) Reload() { + glog.V(0).Info("Reload SFTP server...") + if fileStore, ok := s.userStore.(*user.FileStore); ok { + if err := fileStore.Reload(); err != nil { + glog.Errorf("Failed to reload user store: %v", err) + } else { + glog.V(0).Info("Successfully reloaded SFTP user store") + } + } +} diff --git a/weed/sftpd/user/filestore.go b/weed/sftpd/user/filestore.go index 4c372aa76..5bd0b0513 100644 --- a/weed/sftpd/user/filestore.go +++ b/weed/sftpd/user/filestore.go @@ -264,3 +264,8 @@ func (s *FileStore) CreateUser(username, password string) (*User, error) { return user, nil } + +// Reload reloads users from the file, useful for HUP signal handling +func (s *FileStore) Reload() error { + return s.loadUsers() +} |
