aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/command/sftp.go4
-rw-r--r--weed/sftpd/sftp_service.go12
-rw-r--r--weed/sftpd/user/filestore.go5
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()
+}