View Javadoc

1   /***
2    *  Copyright 2003-2007 Greg Luck
3    *
4    *  Licensed under the Apache License, Version 2.0 (the "License");
5    *  you may not use this file except in compliance with the License.
6    *  You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *  Unless required by applicable law or agreed to in writing, software
11   *  distributed under the License is distributed on an "AS IS" BASIS,
12   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *  See the License for the specific language governing permissions and
14   *  limitations under the License.
15   */
16  
17  
18  package net.sf.jpam;
19  
20  import java.util.List;
21  import java.util.Collections;
22  import java.util.Arrays;
23  
24  /***
25   * A type-safe enum for PAM return values.
26   * <p/>
27   * Warning. When comparing values do not use <code>==</code>.
28   * Use the <code>.equals(Object o)</code> method.
29   * <p/>
30   * These are based on the Linux PAM projects return values.
31   *
32   * @author <a href="mailto:gregluck@users.sourceforge.net">Greg Luck</a>
33   * @version $Id: PamReturnValue.java 1 2006-12-31 23:27:21Z gregluck $
34   */
35  public class PamReturnValue {
36  
37      /***
38       * A constant PamReturnValue
39       */
40      public static final PamReturnValue PAM_SUCCESS =
41              new PamReturnValue(0, "Successful function return.");
42      /***
43       * A constant PamReturnValue
44       */
45      public static final PamReturnValue PAM_OPEN_ERR =
46              new PamReturnValue(1, "dlopen() failure when dynamically loading a service module.");
47      /***
48       * A constant PamReturnValue
49       */
50      public static final PamReturnValue PAM_SYMBOL_ERR =
51              new PamReturnValue(2, "Symbol not found.");
52      /***
53       * A constant PamReturnValue
54       */
55      public static final PamReturnValue PAM_SERVICE_ERR =
56              new PamReturnValue(3, "Error in service module.");
57      /***
58       * A constant PamReturnValue
59       */
60      public static final PamReturnValue PAM_SYSTEM_ERR =
61              new PamReturnValue(4, "System error.");
62      /***
63       * A constant PamReturnValue
64       */
65      public static final PamReturnValue PAM_BUF_ERR =
66              new PamReturnValue(5, "Memory buffer error.");
67      /***
68       * A constant PamReturnValue
69       */
70      public static final PamReturnValue PAM_PERM_DENIED =
71              new PamReturnValue(6, "Permission denied.");
72      /***
73       * A constant PamReturnValue
74       */
75      public static final PamReturnValue PAM_AUTH_ERR =
76              new PamReturnValue(7, "Authentication failure.");
77      /***
78       * A constant PamReturnValue
79       */
80      public static final PamReturnValue PAM_CRED_INSUFFICIENT =
81              new PamReturnValue(8, "Can not access authentication data due to insufficient credentials.");
82      /***
83       * A constant PamReturnValue
84       */
85      public static final PamReturnValue PAM_AUTHINFO_UNAVAIL =
86              new PamReturnValue(9, "Underlying authentication service can not retrieve authentication information.");
87      /***
88       * A constant PamReturnValue
89       */
90      public static final PamReturnValue PAM_USER_UNKNOWN =
91              new PamReturnValue(10, "User not known to the underlying authentication module.");
92      /***
93       * A constant PamReturnValue
94       */
95      public static final PamReturnValue PAM_MAXTRIES =
96              new PamReturnValue(11, "An authentication service has maintained a retry "
97              + "count which has been reached.  No further retries should be attempted.");
98      /***
99       * A constant PamReturnValue
100      */
101     public static final PamReturnValue PAM_NEW_AUTHTOK_REQD =
102             new PamReturnValue(12, "New authentication token required. This is normally returned if"
103             + " the machine security policies require that the password should be changed because"
104             + " the password is NULL or it has aged.");
105     /***
106      * A constant PamReturnValue
107      */
108     public static final PamReturnValue PAM_ACCT_EXPIRED =
109             new PamReturnValue(13, "User account has expired.");
110     /***
111      * A constant PamReturnValue
112      */
113     public static final PamReturnValue PAM_SESSION_ERR =
114             new PamReturnValue(14, "Can not make/remove an entry for the specified session.");
115     /***
116      * A constant PamReturnValue
117      */
118     public static final PamReturnValue PAM_CRED_UNAVAIL =
119             new PamReturnValue(15, "Underlying authentication service can not retrieve user credentials unavailable.");
120     /***
121      * A constant PamReturnValue
122      */
123     public static final PamReturnValue PAM_CRED_EXPIRED =
124             new PamReturnValue(16, "User credentials expired.");
125     /***
126      * A constant PamReturnValue
127      */
128     public static final PamReturnValue PAM_CRED_ERR =
129             new PamReturnValue(17, "Failure setting user credentials.");
130     /***
131      * A constant PamReturnValue
132      */
133     public static final PamReturnValue PAM_NO_MODULE_DATA =
134             new PamReturnValue(18, "No module specific data is present.");
135     /***
136      * A constant PamReturnValue
137      */
138     public static final PamReturnValue PAM_CONV_ERR =
139             new PamReturnValue(19, "Conversation error.");
140     /***
141      * A constant PamReturnValue
142      */
143     public static final PamReturnValue PAM_AUTHTOK_ERR =
144             new PamReturnValue(20, "Authentication token manipulation error.");
145     /***
146      * A constant PamReturnValue
147      */
148     public static final PamReturnValue PAM_AUTHTOK_RECOVER_ERR =
149             new PamReturnValue(21, "Authentication information cannot be recovered.");
150     /***
151      * A constant PamReturnValue
152      */
153     public static final PamReturnValue PAM_AUTHTOK_LOCK_BUSY =
154             new PamReturnValue(22, "Authentication token lock busy.");
155     /***
156      * A constant PamReturnValue
157      */
158     public static final PamReturnValue PAM_AUTHTOK_DISABLE_AGING =
159             new PamReturnValue(23, "Authentication token aging disabled.");
160     /***
161      * A constant PamReturnValue
162      */
163     public static final PamReturnValue PAM_TRY_AGAIN =
164             new PamReturnValue(24, "Preliminary check by password service.");
165     /***
166      * A constant PamReturnValue
167      */
168     public static final PamReturnValue PAM_IGNORE =
169             new PamReturnValue(25, "Ignore underlying account module regardless of whether the control flag"
170             + "is required, optional, or sufficient.");
171     /***
172      * A constant PamReturnValue
173      */
174     public static final PamReturnValue PAM_ABORT =
175             new PamReturnValue(26, "Critical error (?module fail now request).");
176     /***
177      * A constant PamReturnValue
178      */
179     public static final PamReturnValue PAM_AUTHTOK_EXPIRED =
180             new PamReturnValue(27, "User's authentication token has expired.");
181     /***
182      * A constant PamReturnValue
183      */
184     public static final PamReturnValue PAM_MODULE_UNKNOWN =
185             new PamReturnValue(28, "Module is not known.");
186     /***
187      * A constant PamReturnValue
188      */
189     public static final PamReturnValue PAM_BAD_ITEM =
190             new PamReturnValue(29, "Bad item passed to pam_*_item().");
191     /***
192      * A constant PamReturnValue
193      */
194     public static final PamReturnValue PAM_CONV_AGAIN =
195             new PamReturnValue(30, "Conversation function is event driven and data is not available yet.");
196     /***
197      * A constant PamReturnValue
198      */
199     public static final PamReturnValue PAM_INCOMPLETE =
200             new PamReturnValue(31, "Please call this function again to complete authentication stack. Before calling"
201             + " again, verify that conversation is completed.");
202 
203 
204     private static final PamReturnValue[] PRIVATE_VALUES =
205             {PAM_SUCCESS, PAM_OPEN_ERR, PAM_SYMBOL_ERR, PAM_SERVICE_ERR, PAM_SYSTEM_ERR,
206              PAM_BUF_ERR, PAM_PERM_DENIED, PAM_AUTH_ERR, PAM_CRED_INSUFFICIENT, PAM_AUTHINFO_UNAVAIL,
207              PAM_USER_UNKNOWN, PAM_MAXTRIES, PAM_NEW_AUTHTOK_REQD, PAM_ACCT_EXPIRED, PAM_SESSION_ERR,
208              PAM_CRED_UNAVAIL, PAM_CRED_EXPIRED, PAM_CRED_ERR, PAM_NO_MODULE_DATA, PAM_CONV_ERR,
209              PAM_AUTHTOK_ERR, PAM_AUTHTOK_RECOVER_ERR, PAM_AUTHTOK_LOCK_BUSY, PAM_AUTHTOK_DISABLE_AGING,
210              PAM_TRY_AGAIN, PAM_IGNORE, PAM_ABORT, PAM_AUTHTOK_EXPIRED, PAM_MODULE_UNKNOWN, PAM_BAD_ITEM,
211              PAM_CONV_AGAIN, PAM_INCOMPLETE
212             };
213 
214     private final String description;
215     private final int id;
216 
217     private PamReturnValue(int id, String description) {
218         this.id = id;
219         this.description = description;
220     }
221 
222     /***
223      * Returns true if the supplied object is of the
224      * same type and has the same id.
225      */
226     public boolean equals(final Object o) {
227         if (this == o) {
228             return true;
229         }
230         if (!(o instanceof PamReturnValue)) {
231             return false;
232         }
233         final PamReturnValue pamReturnValue = (PamReturnValue) o;
234         if (id != pamReturnValue.id) {
235             return false;
236         }
237         return true;
238     }
239 
240     /***
241      * Gets the PamReturnValue that matches the given id
242      * @param id a valid Integer with a value between 0 and 31
243      * @return the PamReturnValue matching the id
244      * @throws IllegalArgumentException if the id is outside the range of possible return values
245      */
246     public static PamReturnValue fromId(int id) throws IllegalArgumentException {
247         int maxId = VALUES.size() - 1;
248         if (id > maxId || id < 0) {
249             throw new IllegalArgumentException("id " + id + " is not between 0 and " + maxId);
250         }
251         return (PamReturnValue) VALUES.get(id);
252     }
253 
254     /***
255      * @return a hash code for the object.
256      */
257     public int hashCode() {
258         return id;
259     }
260 
261     /***
262      * @return the String description of the return value
263      */
264     public String toString() {
265         return description;
266     }
267 
268     /***
269      * The enumeration of possible values
270      */
271     public static final List VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
272 }
273 
274