private static void readUserList(File file, Map<String, UserEntry> usersIndexByName,
			Map<X500Principal, UserEntry> x500LookupMap) throws IOException {
		try (BufferedReader br = new BufferedReader(new FileReader(file))) {
			String line;
			while ((line = br.readLine()) != null) {
				if (line.startsWith("#")) {
					continue;
				}
				try {
					StringTokenizer st = new StringTokenizer(line, ":");
					UserEntry entry = new UserEntry();
					entry.username = st.nextToken();
					if (!isValidUserName(entry.username)) {
						log.error("Invalid user name, skipping: " + entry.username);
						continue;
					}

					// Password Hash
					if (st.hasMoreTokens()) {
						entry.passwordHash = st.nextToken().toCharArray();

						// Password Time
						if (st.hasMoreTokens()) {
							try {
								String timeStr = st.nextToken();
								if ("*".equals(timeStr)) {
									entry.passwordTime = NO_EXPIRATION;
								}
								else {
									entry.passwordTime = NumericUtilities.parseHexLong(timeStr);
								}
							}
							catch (NumberFormatException e) {
								log.error(
									"Invalid password time - forced expiration: " + entry.username);
								entry.passwordTime = 0;
							}

							// Distinguished Name
							if (st.hasMoreTokens()) {
								String dn = st.nextToken();
								if (dn.length() > 0) {
									entry.x500User = new X500Principal(dn);
								}

							}
						}
					}
					usersIndexByName.put(entry.username, entry);
					if (entry.x500User != null) {
						x500LookupMap.put(entry.x500User, entry);
					}
				}
				catch (NoSuchElementException e) {
					// skip entry
				}
			}
		}
	}
Print to stdout the set of user names with access to the specified repositories root.
This is intended to be used with the svrAdmin console command
@param repositoriesRootDir repositories root directory
Ghidra/Features/GhidraServer/src/main/java/ghidra/server/UserManager.java