Feature Request: Delete all Users based on Group Membership or Create Date

Moderator: Project members

Post Reply
500 Command not understood
Posts: 2
Joined: 2015-03-04 16:02

Feature Request: Delete all Users based on Group Membership or Create Date

#1 Post by kcconnor » 2016-02-01 17:59

I have a FileZilla FTPS server with several hundred accounts. Each time I create an account, I assign a group membership based on the month the account was created (i.e. "2016-01" for all accounts created in January of 2016).

It has been a couple years since I began this practice, and I now have about 3 dozen groups of users dating back to 2013. My original goal was to write a purging script that would go through and remove all user accounts from the XML config file that matched a particular group name, and run that to get rid of accounts more than 60 days old. I haven't done that, because my XML-fu is simply not strong enough.

I'd really like to see an enhancement to FileZilla Server that allows for batch deletion of users based on either group membership, or date of user creation.

User avatar
Site Admin
Posts: 33428
Joined: 2004-02-23 20:49
First name: Tim
Last name: Kosse

Re: Feature Request: Delete all Users based on Group Membership or Create Date

#2 Post by botg » 2016-02-01 18:25

I like this idea. It's something I'll keep in mind for the upcoming FileZilla Server rewrite.

User avatar
Posts: 25507
Joined: 2006-05-01 03:28
Location: Germany

Re: Feature Request: Delete all Users based on Group Membership or Create Date

#3 Post by boco » 2016-02-02 09:49

@botg: The server I use has such a feature, where you can limit an account by using an expiry date or maximum age. Then the account is deactivated (or deleted if desired).
No support requests per PM! You will NOT get any reply!!!
FTP connection problems? Do yourself a favor and read Network Configuration.
FileZilla connection test: https://filezilla-project.org/conntest.php

500 Command not understood
Posts: 2
Joined: 2014-03-06 15:35

Re: Feature Request: Delete all Users based on Group Membership or Create Date

#4 Post by jjmc » 2016-02-08 19:48

From time to time I need to create temporary user accounts on my server, those accounts must be disabled/deleted after the expiration date. To achieve this in an automatic way, I set the expiration date on the 'Comments' field and run the following vbscript on a daily scheduled task. It should be quite easy to adapt it to suit your needs.

Code: Select all

' Purpose: disable or delete 'FileZilla Server' expired user accounts. The
'          expiration date is determined by the presence of the
'          'ACCOUNT_EXPIRATION_STRING' string on the 'Comments' field (case 
'          sensitive) followed by the expiration date.
'          Accounts are deleted if the expiration date is less than current
'          date minus 'DAYS_BEFORE_DELETING_USER_ACCOUNT' number of days, they
'          are disabled if the expiration date is less than or equal to current
'          date.
'          To take changes into account, the server is forced to reload the
'          configuration, therefore it does not need to be restarted.
' Returns: 0 (zero) on success, the error number on failure.
' Requirements: none. Uses MSXML6 which is shipped with Windows.
' Assumptions: the account running the script has read/write permissions on 
'              'SERVER_CONFIG_FILE_PATH' and can run shell commands.

Option Explicit

Const SERVER_CONFIG_FILE_PATH = "C:\Program Files\FileZilla Server\FileZilla Server.xml"
Const SERVER_EXECUTABLE_FILE_PATH = "C:\Program Files\FileZilla Server\FileZilla Server.exe"

Dim objXMLDocument

Set objXMLDocument = CreateObject("Msxml2.DOMDocument.6.0")
objXMLDocument.async = False

If objXMLDocument.parseError.errorCode <> 0 Then

 WScript.Quit objXMLDocument.parseError.errorCode


 Dim objUsers
 Dim objUser
 Dim strUserComments
 Dim strExpirationDate
 Dim strSettingsFileModified
 Dim intReturnValue

 Set objUsers = objXMLDocument.selectNodes("/FileZillaServer/Users/User[contains(Option[@Name='Comments'], '" & ACCOUNT_EXPIRATION_STRING & "')]")

 For Each objUser In objUsers

  strUserComments = objUser.selectNodes("Option[@Name='Comments']").item(0).text
  strExpirationDate = Mid(strUserComments, InStr(strUserComments, ACCOUNT_EXPIRATION_STRING) + Len(ACCOUNT_EXPIRATION_STRING) + 1, 10)

  If IsDate(strExpirationDate) Then

   If Date > DateAdd("d", DAYS_BEFORE_DELETING_USER_ACCOUNT, CDate(strExpirationDate)) Then

    'delete user node
    strSettingsFileModified = "True"

   ElseIf Date >= CDate(strExpirationDate) And objUser.selectNodes("Option[@Name='Enabled']").item(0).text <> "0" Then

    'disable user account
    objUser.selectNodes("Option[@Name='Enabled']").item(0).text = "0"
    strSettingsFileModified = "True"

   End If

  End If


 If strSettingsFileModified = "True" Then

  Dim objShell

  Set objShell = CreateObject("WScript.Shell")
  intReturnValue = objShell.Run("""" & SERVER_EXECUTABLE_FILE_PATH & """" & " /reload-config")

 End If

 WScript.Quit intReturnValue

End If

Post Reply