Some formatting, white space correction and override annotations
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAM.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAM.java
index fc54e5e..1eca107 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAM.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAM.java
@@ -23,18 +23,18 @@
import static org.jvnet.libpam.impl.CLibrary.libc;
import com.sun.jna.Pointer;
import static com.sun.jna.Native.POINTER_SIZE;
+import static java.util.logging.Level.FINE;
+
import com.sun.jna.ptr.PointerByReference;
import java.util.Set;
import java.util.logging.Logger;
-import java.util.logging.Level;
/**
* PAM authenticator.
*
* <p>
- * Instances are thread unsafe and non reentrant. An instace cannot be reused
- * to authenticate multiple users.
+ * Instances are thread unsafe and non reentrant. An instance cannot be reused to authenticate multiple users.
*
* <p>
* For an overview of PAM programming, refer to the following resources:
@@ -47,40 +47,40 @@
* @author Kohsuke Kawaguchi
*/
public class PAM {
+
+ private static final Logger LOGGER = Logger.getLogger(PAM.class.getName());
+
private pam_handle_t pht;
private int ret;
/**
- * Temporarily stored to pass a value from {@link #authenticate(String, String)}
- * to {@link pam_conv}.
+ * Temporarily stored to pass a value from {@link #authenticate(String, String)} to {@link pam_conv}.
*/
private String password;
/**
* Creates a new authenticator.
*
- * @param serviceName
- * PAM service name. This corresponds to the service name that shows up
- * in the PAM configuration,
+ * @param serviceName PAM service name. This corresponds to the service name that shows up in the PAM configuration,
*/
public PAM(String serviceName) throws PAMException {
pam_conv conv = new pam_conv(new PamCallback() {
public int callback(int num_msg, Pointer msg, Pointer resp, Pointer pointer) {
- if(LOGGER.isLoggable(Level.FINE))
- LOGGER.fine("pam_conv num_msg="+num_msg);
- if(password==null)
+ if (LOGGER.isLoggable(FINE))
+ LOGGER.fine("pam_conv num_msg=" + num_msg);
+ if (password == null)
return PAM_CONV_ERR;
// allocates pam_response[num_msg]. the caller will free this
- Pointer m = libc.calloc(pam_response.SIZE,num_msg);
- resp.setPointer(0,m);
+ Pointer m = libc.calloc(pam_response.SIZE, num_msg);
+ resp.setPointer(0, m);
- for( int i=0; i<num_msg; i++ ) {
- pam_message pm = new pam_message(msg.getPointer(POINTER_SIZE*i));
- if(LOGGER.isLoggable(Level.FINE))
- LOGGER.fine(pm.msg_style+":"+pm.msg);
- if(pm.msg_style==PAM_PROMPT_ECHO_OFF) {
- pam_response r = new pam_response(m.share(pam_response.SIZE*i));
+ for (int i = 0; i < num_msg; i++) {
+ pam_message pm = new pam_message(msg.getPointer(POINTER_SIZE * i));
+ if (LOGGER.isLoggable(FINE))
+ LOGGER.fine(pm.msg_style + ":" + pm.msg);
+ if (pm.msg_style == PAM_PROMPT_ECHO_OFF) {
+ pam_response r = new pam_response(m.share(pam_response.SIZE * i));
r.setResp(password);
r.write(); // write to (*resp)[i]
}
@@ -91,15 +91,15 @@
});
PointerByReference phtr = new PointerByReference();
- check(libpam.pam_start(serviceName,null,conv,phtr), "pam_start failed");
+ check(libpam.pam_start(serviceName, null, conv, phtr), "pam_start failed");
pht = new pam_handle_t(phtr.getValue());
}
private void check(int ret, String msg) throws PAMException {
this.ret = ret;
- if(ret!=0) {
- if(pht!=null)
- throw new PAMException(msg+" : "+libpam.pam_strerror(pht,ret));
+ if (ret != 0) {
+ if (pht != null)
+ throw new PAMException(msg + " : " + libpam.pam_strerror(pht, ret));
else
throw new PAMException(msg);
}
@@ -108,27 +108,25 @@
/**
* Authenticate the user with a password.
*
- * @return
- * Upon a successful authentication, return information about the user.
- * @throws PAMException
- * If the authentication fails.
+ * @return Upon a successful authentication, return information about the user.
+ * @throws PAMException If the authentication fails.
*/
public UnixUser authenticate(String username, String password) throws PAMException {
this.password = password;
try {
- check(libpam.pam_set_item(pht,PAM_USER,username),"pam_set_item failed");
- check(libpam.pam_authenticate(pht,0),"pam_authenticate failed");
- check(libpam.pam_setcred(pht,0),"pam_setcred failed");
+ check(libpam.pam_set_item(pht, PAM_USER, username), "pam_set_item failed");
+ check(libpam.pam_authenticate(pht, 0), "pam_authenticate failed");
+ check(libpam.pam_setcred(pht, 0), "pam_setcred failed");
// several different error code seem to be used to represent authentication failures
// check(libpam.pam_acct_mgmt(pht,0),"pam_acct_mgmt failed");
PointerByReference r = new PointerByReference();
- check(libpam.pam_get_item(pht,PAM_USER,r),"pam_get_item failed");
+ check(libpam.pam_get_item(pht, PAM_USER, r), "pam_get_item failed");
String userName = r.getValue().getString(0);
Passwd pwd = libc.getpwnam(userName);
- if(pwd==null)
+ if (pwd == null)
throw new PAMException("Authentication succeeded but no user information is available");
- return new UnixUser(userName,pwd);
+ return new UnixUser(userName, pwd);
} finally {
this.password = null;
}
@@ -136,44 +134,40 @@
/**
* Returns the groups a user belongs to
+ *
* @param username
* @return Set of group names
* @throws PAMException
- * @deprecated
- * Pointless and ugly convenience method.
+ * @deprecated Pointless and ugly convenience method.
*/
public Set<String> getGroupsOfUser(String username) throws PAMException {
return new UnixUser(username).getGroups();
}
/**
- * After a successful authentication, call this method to obtain the effective user name.
- * This can be different from the user name that you passed to the {@link #authenticate(String, String)}
- * method.
+ * After a successful authentication, call this method to obtain the effective user name. This can be different from the
+ * user name that you passed to the {@link #authenticate(String, String)} method.
*/
/**
- * Performs an early disposal of the object, instead of letting this GC-ed.
- * Since PAM may hold on to native resources that don't put pressure on Java GC,
- * doing this is a good idea.
+ * Performs an early disposal of the object, instead of letting this GC-ed. Since PAM may hold on to native resources
+ * that don't put pressure on Java GC, doing this is a good idea.
*
* <p>
- * This method is called by {@link #finalize()}, too, so it's not required
- * to call this method explicitly, however.
+ * This method is called by {@link #finalize()}, too, so it's not required to call this method explicitly, however.
*/
public void dispose() {
- if(pht!=null) {
- libpam.pam_end(pht,ret);
- pht=null;
+ if (pht != null) {
+ libpam.pam_end(pht, ret);
+ pht = null;
}
}
-
@Override
protected void finalize() throws Throwable {
super.finalize();
dispose();
}
- private static final Logger LOGGER = Logger.getLogger(PAM.class.getName());
+
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAMException.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAMException.java
index dcdf65c..7af3d09 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAMException.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/PAMException.java
@@ -22,6 +22,9 @@
* @author Kohsuke Kawaguchi
*/
public class PAMException extends Exception {
+
+ private static final long serialVersionUID = 1L;
+
public PAMException() {
}
@@ -37,5 +40,5 @@
super(cause);
}
- private static final long serialVersionUID = 1L;
+
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/UnixUser.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/UnixUser.java
index 1487056..ef161fa 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/UnixUser.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/UnixUser.java
@@ -33,10 +33,10 @@
*/
public class UnixUser {
private final String userName, gecos, dir, shell;
- private final int uid,gid;
+ private final int uid, gid;
private final Set<String> groups;
- /*package*/ UnixUser(String userName, Passwd pwd) throws PAMException {
+ UnixUser(String userName, Passwd pwd) throws PAMException {
this.userName = userName;
this.gecos = pwd.getPwGecos();
this.dir = pwd.getPwDir();
@@ -44,33 +44,33 @@
this.uid = pwd.getPwUid();
this.gid = pwd.getPwGid();
- long sz = 4; /*sizeof(gid_t)*/
+ long sz = 4; /* sizeof(gid_t) */
int ngroups = 64;
- Memory m = new Memory(ngroups*sz);
+ Memory m = new Memory(ngroups * sz);
IntByReference pngroups = new IntByReference(ngroups);
try {
- if(libc.getgrouplist(userName,pwd.getPwGid(),m,pngroups)<0) {
+ if (libc.getgrouplist(userName, pwd.getPwGid(), m, pngroups) < 0) {
// allocate a bigger memory
- m = new Memory(pngroups.getValue()*sz);
- if(libc.getgrouplist(userName,pwd.getPwGid(),m,pngroups)<0)
+ m = new Memory(pngroups.getValue() * sz);
+ if (libc.getgrouplist(userName, pwd.getPwGid(), m, pngroups) < 0)
// shouldn't happen, but just in case.
throw new PAMException("getgrouplist failed");
}
ngroups = pngroups.getValue();
} catch (LinkageError e) {
// some platform, notably Solaris, doesn't have the getgrouplist function
- ngroups = libc._getgroupsbymember(userName,m,ngroups,0);
- if (ngroups<0)
+ ngroups = libc._getgroupsbymember(userName, m, ngroups, 0);
+ if (ngroups < 0)
throw new PAMException("_getgroupsbymember failed");
}
groups = new HashSet<String>();
- for( int i=0; i<ngroups; i++ ) {
+ for (int i = 0; i < ngroups; i++) {
int gid = m.getInt(i * sz);
Group grp = libc.getgrgid(gid);
- if( grp == null ) {
- continue;
+ if (grp == null) {
+ continue;
}
groups.add(grp.gr_name);
}
@@ -81,8 +81,8 @@
}
/**
- * Copy constructor for mocking. Not intended for regular use. Only for testing.
- * This signature may change in the future.
+ * Copy constructor for mocking. Not intended for regular use. Only for testing. This signature may change in the
+ * future.
*/
protected UnixUser(String userName, String gecos, String dir, String shell, int uid, int gid, Set<String> groups) {
this.userName = userName;
@@ -139,14 +139,13 @@
/**
* Gets the groups that this user belongs to.
*
- * @return
- * never null.
+ * @return never null.
*/
public Set<String> getGroups() {
return Collections.unmodifiableSet(groups);
}
public static boolean exists(String name) {
- return libc.getpwnam(name)!=null;
+ return libc.getpwnam(name) != null;
}
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDCLibrary.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDCLibrary.java
index eadff3e..5edb804 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDCLibrary.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDCLibrary.java
@@ -22,6 +22,7 @@
*/
public interface BSDCLibrary extends CLibrary {
- BSDPasswd getpwnam(String username);
+ @Override
+ BSDPasswd getpwnam(String username);
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDPasswd.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDPasswd.java
index 21c1820..3f2ea78 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDPasswd.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/BSDPasswd.java
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+
import org.jvnet.libpam.impl.CLibrary.Passwd;
/**
@@ -64,8 +65,7 @@
@Override
protected List getFieldOrder() {
List fieldOrder = new ArrayList(super.getFieldOrder());
- fieldOrder.addAll(Arrays.asList("pw_gecos",
- "pw_dir", "pw_shell"));
+ fieldOrder.addAll(Arrays.asList("pw_gecos", "pw_dir", "pw_shell"));
return fieldOrder;
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/CLibrary.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/CLibrary.java
index dbc80ec..3ff6aaa 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/CLibrary.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/CLibrary.java
@@ -16,25 +16,26 @@
package org.jvnet.libpam.impl;
-import com.sun.jna.Platform;
-import com.sun.jna.Pointer;
-import com.sun.jna.Native;
-import com.sun.jna.Library;
-import com.sun.jna.Structure;
-import com.sun.jna.Memory;
-import com.sun.jna.ptr.IntByReference;
import java.util.Arrays;
import java.util.List;
+
import org.jvnet.libpam.PAMException;
+import com.sun.jna.Library;
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Platform;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.IntByReference;
+
/**
* @author Kohsuke Kawaguchi
*/
public interface CLibrary extends Library {
/**
- * Comparing http://linux.die.net/man/3/getpwnam
- * and my Mac OS X reveals that the structure of this field isn't very portable.
- * In particular, we cannot read the real name reliably.
+ * Comparing http://linux.die.net/man/3/getpwnam and my Mac OS X reveals that the structure of this field isn't very
+ * portable. In particular, we cannot read the real name reliably.
*/
public class Passwd extends Structure {
/**
@@ -86,9 +87,11 @@
return null;
}
+ @Override
protected List getFieldOrder() {
return Arrays.asList("pw_name", "pw_passwd", "pw_uid", "pw_gid");
}
+
public void setPwName(String pw_name) {
this.pw_name = pw_name;
}
@@ -105,58 +108,61 @@
this.pw_gid = pw_gid;
}
-
}
public class Group extends Structure {
public String gr_name;
// ... the rest of the field is not interesting for us
+ @Override
protected List getFieldOrder() {
return Arrays.asList("gr_name");
}
- public void setGrName(String gr_name) {
- this.gr_name = gr_name;
- }
+ public void setGrName(String gr_name) {
+ this.gr_name = gr_name;
+ }
}
Pointer calloc(int count, int size);
+
Pointer strdup(String s);
+
Passwd getpwnam(String username);
/**
- * Lists up group IDs of the given user. On Linux and most BSDs, but not on Solaris.
- * See http://www.gnu.org/software/hello/manual/gnulib/getgrouplist.html
+ * Lists up group IDs of the given user. On Linux and most BSDs, but not on Solaris. See
+ * http://www.gnu.org/software/hello/manual/gnulib/getgrouplist.html
*/
- int getgrouplist(String user, int/*gid_t*/ group, Memory groups, IntByReference ngroups);
+ int getgrouplist(String user, int/* gid_t */ group, Memory groups, IntByReference ngroups);
/**
- * getgrouplist equivalent on Solaris.
- * See http://mail.opensolaris.org/pipermail/sparks-discuss/2008-September/000528.html
+ * getgrouplist equivalent on Solaris. See
+ * http://mail.opensolaris.org/pipermail/sparks-discuss/2008-September/000528.html
*/
int _getgroupsbymember(String user, Memory groups, int maxgids, int numgids);
- Group getgrgid(int/*gid_t*/ gid);
+
+ Group getgrgid(int/* gid_t */ gid);
+
Group getgrnam(String name);
// other user/group related functions that are likely useful
// see http://www.gnu.org/software/libc/manual/html_node/Users-and-Groups.html#Users-and-Groups
-
public static final CLibrary libc = Instance.init();
static class Instance {
private static CLibrary init() {
if (Platform.isMac() || Platform.isOpenBSD()) {
- return (CLibrary) Native.loadLibrary("c", BSDCLibrary.class);
+ return Native.loadLibrary("c", BSDCLibrary.class);
} else if (Platform.isFreeBSD()) {
- return (CLibrary) Native.loadLibrary("c", FreeBSDCLibrary.class);
+ return Native.loadLibrary("c", FreeBSDCLibrary.class);
} else if (Platform.isSolaris()) {
- return (CLibrary) Native.loadLibrary("c", SolarisCLibrary.class);
+ return Native.loadLibrary("c", SolarisCLibrary.class);
} else if (Platform.isLinux()) {
- return (CLibrary) Native.loadLibrary("c", LinuxCLibrary.class);
+ return Native.loadLibrary("c", LinuxCLibrary.class);
} else {
- return (CLibrary) Native.loadLibrary("c", CLibrary.class);
+ return Native.loadLibrary("c", CLibrary.class);
}
}
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDCLibrary.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDCLibrary.java
index 308117a..b9c8365 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDCLibrary.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDCLibrary.java
@@ -22,6 +22,7 @@
*/
public interface FreeBSDCLibrary extends CLibrary {
- FreeBSDPasswd getpwnam(String username);
+ @Override
+ FreeBSDPasswd getpwnam(String username);
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDPasswd.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDPasswd.java
index bba1538..a34bd47 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDPasswd.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/FreeBSDPasswd.java
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+
import org.jvnet.libpam.impl.CLibrary.Passwd;
/**
@@ -36,7 +37,6 @@
*
* @author R. Tyler Croy
*/
-
public class FreeBSDPasswd extends Passwd {
/* Honeywell login info */
public String pw_gecos;
@@ -65,8 +65,7 @@
@Override
protected List getFieldOrder() {
List fieldOrder = new ArrayList(super.getFieldOrder());
- fieldOrder.addAll(Arrays.asList("pw_gecos",
- "pw_dir", "pw_shell"));
+ fieldOrder.addAll(Arrays.asList("pw_gecos", "pw_dir", "pw_shell"));
return fieldOrder;
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxCLibrary.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxCLibrary.java
index 71057bb..7c65def 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxCLibrary.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxCLibrary.java
@@ -20,9 +20,9 @@
*
* @author Sebastian Sdorra
*/
-public interface LinuxCLibrary extends CLibrary
-{
+public interface LinuxCLibrary extends CLibrary {
- LinuxPasswd getpwnam(String username);
+ @Override
+ LinuxPasswd getpwnam(String username);
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxPasswd.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxPasswd.java
index cb6a272..d17fd67 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxPasswd.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/LinuxPasswd.java
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+
import org.jvnet.libpam.impl.CLibrary.Passwd;
/**
@@ -47,7 +48,7 @@
/* default shell */
public String pw_shell;
-
+ @Override
public String getPwGecos() {
return pw_gecos;
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/PAMLibrary.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/PAMLibrary.java
index 3a60e24..1fe8d3c 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/PAMLibrary.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/PAMLibrary.java
@@ -16,29 +16,49 @@
package org.jvnet.libpam.impl;
-import com.sun.jna.Library;
-import com.sun.jna.PointerType;
-import com.sun.jna.Structure;
-import com.sun.jna.Pointer;
-import com.sun.jna.Native;
-import com.sun.jna.Callback;
-import com.sun.jna.ptr.PointerByReference;
+import static org.jvnet.libpam.impl.CLibrary.libc;
+
import java.util.Arrays;
import java.util.List;
-import static org.jvnet.libpam.impl.CLibrary.libc;
+
+import com.sun.jna.Callback;
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.PointerType;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.PointerByReference;
/**
* libpam.so binding.
*
- * See http://www.opengroup.org/onlinepubs/008329799/apdxa.htm
- * for the online reference of pam_appl.h
+ * See http://www.opengroup.org/onlinepubs/008329799/apdxa.htm for the online reference of pam_appl.h
*
* @author Kohsuke Kawaguchi
*/
public interface PAMLibrary extends Library {
+
+ final int PAM_USER = 2;
+
+ // error code
+ final int PAM_SUCCESS = 0;
+ final int PAM_CONV_ERR = 6;
+
+ final int PAM_PROMPT_ECHO_OFF = 1; /* Echo off when getting response */
+ final int PAM_PROMPT_ECHO_ON = 2; /* Echo on when getting response */
+ final int PAM_ERROR_MSG = 3; /* Error message */
+ final int PAM_TEXT_INFO = 4; /* Textual information */
+
+ public static final PAMLibrary libpam = Native.loadLibrary("pam", PAMLibrary.class);
+
+
class pam_handle_t extends PointerType {
- public pam_handle_t() {}
- public pam_handle_t(Pointer pointer) { super(pointer); }
+ public pam_handle_t() {
+ }
+
+ public pam_handle_t(Pointer pointer) {
+ super(pointer);
+ }
}
class pam_message extends Structure {
@@ -53,6 +73,7 @@
read();
}
+ @Override
protected List getFieldOrder() {
return Arrays.asList("msg_style", "msg");
}
@@ -67,14 +88,15 @@
}
class pam_response extends Structure {
+
+ public static final int SIZE = new pam_response().size();
+
/**
- * This is really a string, but this field needs to be malloc-ed by the conversation
- * method, and to be freed by the caler, so I bind it to {@link Pointer} here.
+ * This is really a string, but this field needs to be malloc-ed by the conversation method, and to be freed by the
+ * caler, so I bind it to {@link Pointer} here.
*
- * The man page doesn't say that, but see
- * http://www.netbsd.org/docs/guide/en/chap-pam.html#pam-sample-conv
- * This behavior is confirmed with a test, too; if I don't do strdup,
- * libpam crashes.
+ * The man page doesn't say that, but see http://www.netbsd.org/docs/guide/en/chap-pam.html#pam-sample-conv This
+ * behavior is confirmed with a test, too; if I don't do strdup, libpam crashes.
*/
public Pointer resp;
public int resp_retcode;
@@ -87,17 +109,18 @@
read();
}
- public pam_response() {}
+ public pam_response() {
+ }
/**
* Sets the response code.
*/
public void setResp(String msg) {
- this.resp = libc.strdup(msg);
+ this.resp = libc.strdup(msg);
}
protected Pointer getResp() {
- return resp;
+ return resp;
}
public void setRespCode(int resp_retcode) {
@@ -108,22 +131,21 @@
return resp_retcode;
}
+ @Override
protected List getFieldOrder() {
return Arrays.asList("resp", "resp_retcode");
}
-
- public static final int SIZE = new pam_response().size();
}
class pam_conv extends Structure {
public interface PamCallback extends Callback {
/**
- * According to http://www.netbsd.org/docs/guide/en/chap-pam.html#pam-sample-conv,
- * resp and its member string both needs to be allocated by malloc,
- * to be freed by the caller.
+ * According to http://www.netbsd.org/docs/guide/en/chap-pam.html#pam-sample-conv, resp and its member string both needs
+ * to be allocated by malloc, to be freed by the caller.
*/
int callback(int num_msg, Pointer msg, Pointer resp, Pointer pointer);
}
+
public PamCallback conv;
public Pointer pointer;
@@ -131,34 +153,31 @@
this.conv = conv;
}
+ @Override
protected List getFieldOrder() {
return Arrays.asList("conv", "pointer");
}
- protected PamCallback getConv(){
+
+ protected PamCallback getConv() {
return conv;
}
}
int pam_start(String service, String user, pam_conv conv, PointerByReference/* pam_handle_t** */ pamh_p);
+
int pam_end(pam_handle_t handle, int pam_status);
+
int pam_set_item(pam_handle_t handle, int item_type, String item);
+
int pam_get_item(pam_handle_t handle, int item_type, PointerByReference item);
+
int pam_authenticate(pam_handle_t handle, int flags);
+
int pam_setcred(pam_handle_t handle, int flags);
+
int pam_acct_mgmt(pam_handle_t handle, int flags);
+
String pam_strerror(pam_handle_t handle, int pam_error);
- final int PAM_USER = 2;
-
- // error code
- final int PAM_SUCCESS = 0;
- final int PAM_CONV_ERR = 6;
-
-
- final int PAM_PROMPT_ECHO_OFF = 1; /* Echo off when getting response */
- final int PAM_PROMPT_ECHO_ON = 2; /* Echo on when getting response */
- final int PAM_ERROR_MSG = 3; /* Error message */
- final int PAM_TEXT_INFO = 4; /* Textual information */
-
- public static final PAMLibrary libpam = (PAMLibrary)Native.loadLibrary("pam",PAMLibrary.class);
+
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisCLibrary.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisCLibrary.java
index 3c5a34e..e621da7 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisCLibrary.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisCLibrary.java
@@ -22,6 +22,7 @@
*/
public interface SolarisCLibrary extends CLibrary {
- SolarisPasswd getpwnam(String username);
+ @Override
+ SolarisPasswd getpwnam(String username);
}
diff --git a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisPasswd.java b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisPasswd.java
index 67b92df..a2c8fd7 100644
--- a/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisPasswd.java
+++ b/appserver/libpam4j/src/main/java/org/jvnet/libpam/impl/SolarisPasswd.java
@@ -26,13 +26,13 @@
* Solaris passwd
*
* struct passwd {
- * char *pw_name;
- * char *pw_passwd;
- * uid_t pw_uid;
- * gid_t pw_gid;
- * char *pw_gecos;
- * char *pw_dir;
- * char *pw_shell;
+ * char *pw_name;
+ * char *pw_passwd;
+ * uid_t pw_uid;
+ * gid_t pw_gid;
+ * char *pw_gecos;
+ * char *pw_dir;
+ * char* *pw_shell;
* };
*
* @author Sebastian Sdorra
@@ -44,7 +44,6 @@
public String pw_shell;
-
@Override
public String getPwGecos() {
return pw_gecos;
@@ -63,8 +62,7 @@
@Override
protected List getFieldOrder() {
List fieldOrder = new ArrayList(super.getFieldOrder());
- fieldOrder.addAll(Arrays.asList("pw_gecos",
- "pw_dir", "pw_shell"));
+ fieldOrder.addAll(Arrays.asList("pw_gecos", "pw_dir", "pw_shell"));
return fieldOrder;
}
diff --git a/nucleus/common/common-util/src/main/java/com/sun/enterprise/util/FelixPrettyPrinter.java b/nucleus/common/common-util/src/main/java/com/sun/enterprise/util/FelixPrettyPrinter.java
index 69a0314..cf53bcc 100644
--- a/nucleus/common/common-util/src/main/java/com/sun/enterprise/util/FelixPrettyPrinter.java
+++ b/nucleus/common/common-util/src/main/java/com/sun/enterprise/util/FelixPrettyPrinter.java
@@ -160,7 +160,8 @@
List<Integer> ids = findBundleIds(test1);
- String test2 = prettyPrintExceptionMessage(" Unable to resolve org.glassfish.main.resources.mail-connector [29](R 29.0): missing requirement [org.glassfish.main.resources.mail-connector [29](R 29.0)] osgi.wiring.package; (&(osgi.wiring.package=org.glassfish.resources.admin.cli)(version>=7.0.0)(!(version>=8.0.0))) [caused by: Unable to resolve org.glassfish.main.resources.connector [217](R 217.0): missing requirement [org.glassfish.main.resources.connector [217](R 217.0)] osgi.wiring.package; (&(osgi.wiring.package=com.sun.enterprise.repository)(version>=7.0.0)(!(version>=8.0.0))) [caused by: Unable to resolve org.glassfish.main.deployment.dol [284](R 284.0): missing requirement [org.glassfish.main.deployment.dol [284](R 284.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.enterprise.inject.spi)(version>=3.0.0)(!(version>=4.0.0))) [caused by: Unable to resolve jakarta.enterprise.cdi-api [127](R 127.0): missing requirement [jakarta.enterprise.cdi-api [127](R 127.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.enterprise.lang.model)(version>=4.0.0)(!(version>=5.0.0)))]]] Unresolved requirements: [[org.glassfish.main.resources.mail-connector [29](R 29.0)] osgi.wiring.package; (&(osgi.wiring.package=org.glassfish.resources.admin.cli)(version>=7.0.0)(!(version>=8.0.0)))] ");
+ String test2 = prettyPrintExceptionMessage(" Unable to resolve org.apache.felix.scr [304](R 304.0): missing requirement [org.apache.felix.scr [304](R 304.0)] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.10.0)(!(version>=2.0.0))) Unresolved requirements: [[org.apache.felix.scr [304](R304.0)] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.10.0)(!(version>=2.0.0)))]\n"
+ + "at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4398) ");
System.out.println(test2);