summaryrefslogtreecommitdiff
path: root/src/YalpAuth/YalpPGSqlAuth
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2009-11-21 19:13:19 +0100
committerManuel Traut <manut@linutronix.de>2009-11-21 19:13:19 +0100
commit1fc571e228fd4d483fa82c74c6ea059c7adbfde7 (patch)
tree405fcad00bd1f20c6f0bdef6a9dc0375a32b7036 /src/YalpAuth/YalpPGSqlAuth
parent089a599fcf2ecca3d1581a12cd7521aaca6a0b0b (diff)
Auth: fixed Authentication handling
- on server side, iterate through registrated auth plugins for any request - auth pg sql plugin, moved parts of old rmi based code, to new corba layout - remove of plugins not implemented yet - changing user details not implemented yet Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'src/YalpAuth/YalpPGSqlAuth')
-rw-r--r--src/YalpAuth/YalpPGSqlAuth/PGSqlAuth.java118
-rw-r--r--src/YalpAuth/YalpPGSqlAuth/YalpAuthPluginImpl.java209
-rw-r--r--src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java1
3 files changed, 328 insertions, 0 deletions
diff --git a/src/YalpAuth/YalpPGSqlAuth/PGSqlAuth.java b/src/YalpAuth/YalpPGSqlAuth/PGSqlAuth.java
new file mode 100644
index 0000000..ba88ad4
--- /dev/null
+++ b/src/YalpAuth/YalpPGSqlAuth/PGSqlAuth.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2009 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpAuth.YalpPGSqlAuth;
+
+import YalpInterfaces.*;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+import org.omg.PortableServer.*;
+import org.omg.PortableServer.POA;
+
+/*
+ * Class PGSqlAuth
+ *
+ * <em>Postgre SQL database connection</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 2.1 2009-11-21<br>
+ */
+public class PGSqlAuth {
+
+ private static ORB orb;
+ private static POA poa;
+ private static YalpAuthPluginImpl psql;
+ private static AuthPluginInterface authPlugin;
+ private static ServerControlInterface srvCon;
+ private static PluginInfo pluginInfo;
+
+ public PGSqlAuth(String[] argv) {
+
+ pluginInfo = new PluginInfo();
+ pluginInfo.name = "Postgre SQL Auth Plugin";
+ pluginInfo.description = "provides Postgre SQL database based user authentification";
+ pluginInfo.type = PluginType.AUTH_PLUGIN;
+ // pluginInfo.supportedTypes = new MediaType[];
+
+ try {
+ this.orb = ORB.init(argv, null);
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+ } catch(Exception e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't host plugin implementation");
+ }
+
+ try {
+ poa.the_POAManager().activate();
+ } catch(org.omg.PortableServer.POAManagerPackage.AdapterInactive e) {
+ /* t.b.d. error handling */
+ System.out.println("poa inactive");
+ }
+
+ YalpErrorHolder err = new YalpErrorHolder();
+
+ try {
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Server";
+ srvCon = ServerControlInterfaceHelper.narrow(ncRef.resolve_str(name));
+ } catch (Exception e) {
+ System.out.println("Couldn't connect to YALP Server");
+ System.exit(0);
+ }
+
+ psql = new YalpAuthPluginImpl();
+ psql.setORB(orb);
+
+ try {
+ poa.activate_object(psql);
+ org.omg.CORBA.Object ref = poa.servant_to_reference(psql);
+ authPlugin = AuthPluginInterfaceHelper.narrow(ref);
+
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Postgre_SQL_Auth";
+ NameComponent path[] = ncRef.to_name(name);
+ ncRef.rebind(path, authPlugin);
+
+ PluginInfoHolder tmp = new PluginInfoHolder(pluginInfo);
+ srvCon.ping(err);
+ System.out.println(err.value.descr);
+ srvCon.registerAuthPlugin(authPlugin, tmp, err );
+ pluginInfo = tmp.value;
+
+ if(err.value.code != YalpErrorCode.OK)
+ {
+ System.out.println("registring authplugin failed");
+ return;
+ }
+
+ psql.setInfo(pluginInfo);
+ System.out.println("auth plugin registered");
+
+ orb.run();
+
+ } catch (Exception e) {
+ System.out.println("binding plugin failed 1");
+ e.printStackTrace();
+ System.exit(0);
+ }
+ }
+}
diff --git a/src/YalpAuth/YalpPGSqlAuth/YalpAuthPluginImpl.java b/src/YalpAuth/YalpPGSqlAuth/YalpAuthPluginImpl.java
new file mode 100644
index 0000000..9412f2c
--- /dev/null
+++ b/src/YalpAuth/YalpPGSqlAuth/YalpAuthPluginImpl.java
@@ -0,0 +1,209 @@
+package YalpAuth.YalpPGSqlAuth;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.*;
+import java.sql.*;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import YalpInterfaces.*;
+
+public class YalpAuthPluginImpl extends AuthPluginInterfacePOA{
+ private String db;
+ private String dbuser;
+ private String dbpasswd;
+ private Statement stat;
+ private Connection con;
+
+ private PluginInfo pluginInfo;
+
+ private String log4jFile = "log4j_auth_plugin.conf";
+
+ private static Logger logger =
+ Logger.getLogger("Yalp.AuthPlugins.PGSqlAuth.YalpAuthPluginImpl");
+
+ private ORB orb;
+
+/*
+ * Constructor establishes connection to Database Server
+ *
+ * @param db
+ * jdbc Connection to database
+ * @param dbYalpUser
+ * userName for database
+ * @param dbPasswd
+ * password for database
+ */
+ public YalpAuthPluginImpl()
+ {
+ PropertyConfigurator.configureAndWatch(log4jFile);
+ logger.debug("YalpAuthPluginImpl()");
+ }
+
+ public void setORB(ORB _orb)
+ {
+ orb = _orb;
+
+ /* t.b.d. read from config xml */
+ String db = "jdbc:postgresql://localhost:5433/yalp";
+ String dbYalpUser = "yalp";
+ String dbPasswd = "yalp";
+
+ try{
+ dbuser = dbYalpUser;
+ dbpasswd = dbPasswd;
+ Class.forName("org.postgresql.Driver");
+ con = DriverManager.getConnection(db,dbuser,dbpasswd);
+ System.out.println("YalpPGSqlInput: db connection established");
+ stat= con.createStatement();
+ } catch (SQLException e) {
+ System.out.println("Exception in PGSqlInput Constructor: "+e);
+ } catch (ClassNotFoundException e) {
+ System.out.println("Exception in PGSqlInput Constructor: "+e);
+ }
+ }
+
+ public void setInfo(PluginInfo info)
+ {
+ logger.debug("interfaceImpl - setInfo(): "+info.id);
+ pluginInfo = info;
+ }
+
+/*
+ * checks if user exists in yalpYalpUser Database and what rights he has
+ *
+ * @param username
+ * username to check
+ * @param passwd
+ * password to check
+ *
+ * @return enum privilege level
+ */
+ public void userVerify(String username, String passwd, YalpErrorHolder err,
+ YalpUserHolder user)
+ {
+
+ YalpError error = new YalpError ("auth ok", YalpErrorCode.OK,
+ YalpErrorLevel.ERROR_LEVEL_INFO, "authentication module working");
+
+ try{
+ ResultSet result=stat.executeQuery("select * from \"user\" where \"username\" = '"+username+"' and \"passwd\" = '"+passwd+"';");
+
+ if (result.next()){
+ if (result.getBoolean(5)==true)
+ {
+ user.value.level = AccessRights.ADMIN;
+ err.value = error;
+ return;
+ }
+ else
+ {
+ user.value.level = AccessRights.USER;
+ err.value = error;
+ return;
+ }
+ }
+ else
+ {
+ user.value.level = AccessRights.DENY;
+ err.value = error;
+ return;
+ }
+ }catch (SQLException e){
+ user.value.level = AccessRights.DENY;
+ error.code = YalpErrorCode.ERROR_SQL;
+ error.msg = "failed to send auth request to pgsql db";
+ error.level = YalpErrorLevel.ERROR_LEVEL_ERROR;
+ error.descr = e.toString();
+ err.value = error;
+ return;
+ }
+ }
+
+/*
+ * returns an ArrayList with all yalpYalpUsers and Admins
+ *
+ * @return ArrayList<YalpUser>
+ * list with all YalpYalpUsers and Admins
+ */
+ public void getUser(UsersHolder list, YalpErrorHolder err) {
+ try {
+ ArrayList<YalpUser> resultList =new ArrayList<YalpUser>();
+ YalpUser actUser = new YalpUser();
+ String query = "select * from \"user\"order by \"id\";";
+ Statement stat= con.createStatement();
+ ResultSet result=stat.executeQuery(query);
+
+ while(result.next())
+ {
+ /* t.b.d. - create YalpUser according to new database design */
+ // result.getInt(1),result.getString(2),result.getString(3),result.getString(4),result.getBoolean(5)))
+ resultList.add( actUser );
+ }
+ YalpUser[] u = new YalpUser[1];
+ list = new UsersHolder(resultList.toArray(u));
+ } catch (SQLException e) {
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.ERROR_SQL;
+ error.descr = e.toString();
+ error.level = YalpErrorLevel.ERROR_LEVEL_ERROR;
+ err = new YalpErrorHolder(error);
+ }
+ }
+
+/*
+ * submits changes to yalpYalpUserDatabase
+ *
+ * @param change
+ * describes the change to commit
+ * @return int
+ * -1 if failed
+ */
+ public void changeUser(YalpUser usr, String passwd, Action todo,
+ YalpErrorHolder err) {
+
+ /* t.b.d. alter to new db design
+ try{
+ String sql;
+ switch (todo.type){
+ // if updateType is UPDATE
+ case Action._UPDATE:
+ sql="update \"user\" set \"username\"='"+usr.name+"', \"passwd\"='"+change.passwd+"', \"realname\"='"+change.realname+"', \"admin\"="+change.admin+" where \"id\"= "+change.id+" ;";
+ break;
+ // if updateType is INSERT INTO
+ case Action._INSERT:
+ sql="insert into \"user\" values(nextval('userId'), '"+usr+"','"+change.passwd+"','"+change.realname+"',"+change.admin+");";
+ break;
+ // if updateType is DELETE
+ case Action._DELETE:
+ sql="delete from \"user\" where \"id\"= "+change.id+" ;";
+ break;
+ default:
+ //errorhandling
+ }
+ // perform operation on table an return number of updated rows
+ System.out.println(sql);
+ return stat.executeUpdate(sql);
+ }catch(SQLException e){
+ System.out.println("Exception in DbConnection.changeYalpUser: "+e);
+ }
+ */
+ }
+
+ /*
+ * returns plugin information
+ * @param PluginInfoHolder info holder for PluginInformation
+ * @param YalpErrorHolder err holder for error information
+ */
+ public void getInfo(PluginInfoHolder info, YalpErrorHolder err)
+ {
+ info = new PluginInfoHolder(pluginInfo);
+ }
+}
diff --git a/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java b/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java
index bf9077f..676fe3c 100644
--- a/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java
+++ b/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java
@@ -28,5 +28,6 @@ public class YalpPGSqlAuth {
public static void main(String[] args)
{
System.out.println("YalpPGSqlAuth\n");
+ PGSqlAuth auth = new PGSqlAuth(args);
}
}