view src/kryshen/catalina/startup/PasswdUserConfig.java @ 10:086a55aa2620

PasswdUserConfig. Error logging.
author Mikhail Kryshen <mikhail@kryshen.net>
date Mon, 02 Nov 2009 23:17:40 +0300
parents a3321ea9b33f
children 3a71cbe721f9
line source
1 package kryshen.catalina.startup;
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.io.InputStreamReader;
8 import java.util.regex.Pattern;
9 import org.apache.juli.logging.LogFactory;
11 /**
12 *
13 * @author Mikhail Kryshen
14 */
15 public class PasswdUserConfig extends UserConfig {
17 private static final String PASSWD_DATABASE = "passwd";
19 /* Passwd format details. */
20 private static final Pattern PASSWD_SPLIT_PATTERN = Pattern.compile(":");
21 private static final int PASSWD_FIELD_USERNAME = 0;
22 private static final int PASSWD_FIELD_HOME = 5;
24 /**
25 * Command for retrieving passwd database.
26 */
27 private String getent = null;
29 /**
30 * Path to local passwd file.
31 */
32 private String passwd = "/etc/passwd";
34 public PasswdUserConfig() {
35 log = LogFactory.getLog(PasswdUserConfig.class);
36 }
38 /**
39 * Get command for retrieving passwd database.
40 */
41 public String getGetent() {
42 return getent;
43 }
45 /**
46 * Set command for retrieving passwd database.
47 */
48 public void setGetent(String getent) {
49 this.getent = getent;
50 }
52 /**
53 * Get path to local passwd file.
54 */
55 public String getPasswd() {
56 return passwd;
57 }
59 /**
60 * Set path to local passwd file.
61 */
62 public void setPasswd(String passwd) {
63 this.passwd = passwd;
64 }
66 @Override
67 protected void deployUserApps() {
68 BufferedReader in;
70 try {
71 if (getent == null) {
72 in = new BufferedReader(new FileReader(passwd));
73 } else {
74 Process process = Runtime.getRuntime().exec(
75 getent, new String[]{PASSWD_DATABASE});
77 in = new BufferedReader(
78 new InputStreamReader(process.getInputStream()));
79 }
81 String line;
83 try {
84 while ((line = in.readLine()) != null) {
85 String[] fields = PASSWD_SPLIT_PATTERN.split(line);
87 String name = fields[PASSWD_FIELD_USERNAME];
88 File home = new File(fields[PASSWD_FIELD_HOME]);
90 if (!home.isDirectory()) {
91 log.error("Invalid home directory for user"
92 + name + ": " + home.getPath() + ".");
93 continue;
94 }
96 deployUserApps(name, home);
97 }
98 } finally {
99 in.close();
100 }
101 } catch (IOException e) {
102 log.error("Error reading passwd database.", e);
103 } catch (ArrayIndexOutOfBoundsException e) {
104 log.error("Invalid passwd format.", e);
105 }
106 }
107 }