All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.darwinsys.unix.UnixPasswdEntry Maven / Gradle / Ivy

package com.darwinsys.unix;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Structure of the readable password on a BSD system;
 * on Linux your milage may vary, and on MS-Windows
 * you're out of luck...
 */
public class UnixPasswdEntry {

	public static final String DEFAULT_FILE_NAME = "/etc/passwd";

	private String name; 		// User's login name.
	private String dummyPassword; // User's encrypted password - only in shadow
	private int uid; 			// User's login user ID.
	private int	gid; 			// User's login group ID.
	private String loginClass; 	// NOT PUBLIC User's general classification (see login.conf(5)).
	private String change; 		// NOT PUBLIC Password change time.
	private String expire; 		// NOT PUBLIC Account expiration time.
	private String gecos; 		// General information about the user.
	private String homeDir; 	// User's home directory.
	private String shell; 		// User's login shell.

	static final Pattern patt = Pattern.compile(
		"([\\w-]+):(.*?):(\\d+):(\\d+):(.*?):([/\\w]+):([-/\\w]*)");

	public static List getPwEntries() throws IOException {
		return getPwEntries(DEFAULT_FILE_NAME);
	}

    public static List getPwEntries(String fileName) throws IOException {
    	List all = new ArrayList();
    	BufferedReader rdr = new BufferedReader(new FileReader(fileName));
    	String line;
    	try {
    		while ((line = rdr.readLine()) != null) {
    			Matcher m = patt.matcher(line);
    			if (!m.matches()) {
    				throw new IOException("Line doesn't match RE " + line);
    			}
    			UnixPasswdEntry ent = new UnixPasswdEntry();
    			ent.name = m.group(1);
    			ent.dummyPassword = m.group(2);
    			ent.uid = Integer.parseInt(m.group(3));
    			ent.gid = Integer.parseInt( m.group(4));
    			ent.gecos = m.group(5);
    			ent.homeDir = m.group(6);
    			ent.shell = m.group(7);
    			all.add(ent);
    		}
    	} finally {
    		if (rdr != null)
    			rdr.close();
    	}
    	return all;
    }

    @Override
    public String toString() {
    	return String.format("pw_ent(%s, %d, %s, %s)", name, uid, gecos, homeDir);
    }

	public String getChange() {
		return change;
	}

	public void setChange(String change) {
		this.change = change;
	}

	public String getDummyPassword() {
		return dummyPassword;
	}

	public void setDummyPassword(String dummyPassword) {
		this.dummyPassword = dummyPassword;
	}

	public String getExpire() {
		return expire;
	}

	public void setExpire(String expire) {
		this.expire = expire;
	}

	public String getGecos() {
		return gecos;
	}

	public void setGecos(String gecos) {
		this.gecos = gecos;
	}

	public int getGid() {
		return gid;
	}

	public void setGid(int gid) {
		this.gid = gid;
	}

	public String getHomeDir() {
		return homeDir;
	}

	public void setHomeDir(String homeDir) {
		this.homeDir = homeDir;
	}

	public String getLoginClass() {
		return loginClass;
	}

	public void setLoginClass(String loginClass) {
		this.loginClass = loginClass;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getShell() {
		return shell;
	}

	public void setShell(String shell) {
		this.shell = shell;
	}

	public int getUid() {
		return uid;
	}

	public void setUid(int uid) {
		this.uid = uid;
	}

	public static Pattern getPattern() {
		return patt;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy