private synchronized void readPasswd(final InputStream in) throws IOException {
      final BufferedReader din = new BufferedReader(new InputStreamReader(in));
      String line;
      entries = new HashMap();
      while ((line = din.readLine()) != null) {
         final String[] fields = new String[7];
         final StringTokenizer st = new StringTokenizer(line, ":", true);
         try {
            fields[0] = st.nextToken(); // username
            st.nextToken();

            fields[1] = st.nextToken(); // passwd
            if (fields[1].equals(":")) {
               fields[1] = "";
            } else {
               st.nextToken();
            }

            fields[2] = st.nextToken(); // uid
            if (fields[2].equals(":")) {
               fields[2] = "";
            } else {
               st.nextToken();
            }

            fields[3] = st.nextToken(); // gid
            if (fields[3].equals(":")) {
               fields[3] = "";
            } else {
               st.nextToken();
            }

            fields[4] = st.nextToken(); // gecos
            if (fields[4].equals(":")) {
               fields[4] = "";
            } else {
               st.nextToken();
            }

            fields[5] = st.nextToken(); // dir
            if (fields[5].equals(":")) {
               fields[5] = "";
            } else {
               st.nextToken();
            }

            fields[6] = st.nextToken(); // shell
            if (fields[6].equals(":")) {
               fields[6] = "";
            }
         } catch (NoSuchElementException x) {
            continue;
         }

         entries.put(fields[0], fields);
      }
   }