private void addUser(String username, char[] passwordHash, X500Principal x500User)
			throws DuplicateNameException, IOException {
		if (username == null) {
			throw new IllegalArgumentException();
		}
		synchronized (repositoryMgr) {
			if (userList.containsKey(username)) {
				throw new DuplicateNameException("User " + username + " already exists");
			}
			UserEntry entry = new UserEntry();
			entry.username = username;
			entry.passwordHash = passwordHash;
			entry.passwordTime = (new Date()).getTime();
			entry.x500User = x500User;
			userList.put(username, entry);
			if (x500User != null) {
				dnLookupMap.put(x500User, entry);
			}
			writeUserList();
			log.info("User '" + username + "' added");
		}
	}
Add a user.
@param username user name/SID
@param passwordHash MD5 hash of initial password or null if explicit password reset required
@param x500User X500 user name (may be null)
@throws DuplicateNameException if username already exists
@throws IOException if IO error occurs
Ghidra/Features/GhidraServer/src/main/java/ghidra/server/UserManager.java