- def mv_user(user_from, user_to)
- # Move the user's mail directory from one domain (that should
- # exist) to another domain (that should exist).
+ def mv_user(src, dst)
+ # It's obviously an error if the source user does not exist.
+ raise NonexistentUserError.new(src.to_s()) if not user_exists(src)
+
+ # And it's an error if the destination user exists already.
+ raise UserAlreadyExistsError.new(dst.to_s()) if user_exists(dst)
+
+ # But is it an error if the target domain does not exist? That's a
+ # bit subtle... The domain may exist in the database, but if it
+ # has not received any mail yet, then its directory won't exist
+ # on-disk.
+ #
+ # There are two possible "oops" scenarios resulting from the fact
+ # that we may run either the Postfixadmin move first or the
+ # Dovecot move first. If we move the user in the database, we
+ # definitely want to move him on disk (that is, we should create
+ # the directory here). But if we move him on disk first, then we
+ # don't know if the database move will fail! We don't want to move
+ # his mail files if he won't get moved in the database.