Skip to content
Snippets Groups Projects
Commit ff42612e authored by Adrian Damian's avatar Adrian Damian
Browse files

Merge branch 'ac2' of /srv/cadc/git/wopencadc into s1832

parents dbe9e244 ba183879
No related branches found
No related tags found
No related merge requests found
Showing
with 762 additions and 0 deletions
/bin
/bin1
/build
<!--
************************************************************************
******************* CANADIAN ASTRONOMY DATA CENTRE *******************
************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
*
* (c) 2009. (c) 2009.
* Government of Canada Gouvernement du Canada
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
* All rights reserved Tous droits réservés
*
* NRC disclaims any warranties, Le CNRC dénie toute garantie
* expressed, implied, or énoncée, implicite ou légale,
* statutory, of any kind with de quelque nature que ce
* respect to the software, soit, concernant le logiciel,
* including without limitation y compris sans restriction
* any warranty of merchantability toute garantie de valeur
* or fitness for a particular marchande ou de pertinence
* purpose. NRC shall not be pour un usage particulier.
* liable in any event for any Le CNRC ne pourra en aucun cas
* damages, whether direct or être tenu responsable de tout
* indirect, special or general, dommage, direct ou indirect,
* consequential or incidental, particulier ou général,
* arising from the use of the accessoire ou fortuit, résultant
* software. Neither the name de l'utilisation du logiciel. Ni
* of the National Research le nom du Conseil National de
* Council of Canada nor the Recherches du Canada ni les noms
* names of its contributors may de ses participants ne peuvent
* be used to endorse or promote être utilisés pour approuver ou
* products derived from this promouvoir les produits dérivés
* software without specific prior de ce logiciel sans autorisation
* written permission. préalable et particulière
* par écrit.
*
* This file is part of the Ce fichier fait partie du projet
* OpenCADC project. OpenCADC.
*
* OpenCADC is free software: OpenCADC est un logiciel libre ;
* you can redistribute it and/or vous pouvez le redistribuer ou le
* modify it under the terms of modifier suivant les termes de
* the GNU Affero General Public la “GNU Affero General Public
* License as published by the License” telle que publiée
* Free Software Foundation, par la Free Software Foundation
* either version 3 of the : soit la version 3 de cette
* License, or (at your option) licence, soit (à votre gré)
* any later version. toute version ultérieure.
*
* OpenCADC is distributed in the OpenCADC est distribué
* hope that it will be useful, dans l’espoir qu’il vous
* but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE
* without even the implied GARANTIE : sans même la garantie
* warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ
* or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF
* PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence
* General Public License for Générale Publique GNU Affero
* more details. pour plus de détails.
*
* You should have received Vous devriez avoir reçu une
* a copy of the GNU Affero copie de la Licence Générale
* General Public License along Publique GNU Affero avec
* with OpenCADC. If not, see OpenCADC ; si ce n’est
* <http://www.gnu.org/licenses/>. pas le cas, consultez :
* <http://www.gnu.org/licenses/>.
*
* $Revision: 4 $
*
************************************************************************
-->
<project default="build" basedir=".">
<property environment="env"/>
<property file="local.build.properties" />
<property file="${env.A}/compilers/setup.ant.java.properties" />
<import file="${env.A}/compilers/setup.ant.java.targets.xml"/>
<!-- developer convenience: place for extra targets and properties -->
<import file="extras.xml" optional="true" />
<property file="local.build.properties" />
<property name="project" value="userAdmin" />
<!-- JAR files to be included in classpath and war file -->
<property name="cadcAccessControl" value="${lib}/cadcAccessControl.jar" />
<property name="cadcAccessControl-Server" value="${lib}/cadcAccessControl-Server.jar" />
<property name="cadcUtil" value="${lib}/cadcUtil.jar" />
<property name="javaUtil" value="${lib}/javaUtil.jar" />
<property name="log4j" value="${ext.lib}/log4j.jar" />
<property name="commons-logging" value="${ext.lib}/commons-logging.jar" />
<property name="jconn3" value="${ext.lib}/jconn3.jar" />
<property name="spring" value="${ext.lib}/spring.jar" />
<property name="unboundid" value="${ext.lib}/unboundid-ldapsdk-se.jar" />
<property name="cadc" value="${cadcAccessControl}:${cadcAccessControl-Server}:${cadcUtil}:${javaUtil}" />
<property name="external" value="${unboundid}:${spring}:${commons-logging}:${jconn3}:${log4j}" />
<property name="jars" value="${cadc}:${external}" />
<target name="build" depends="simpleJar" />
<!-- JAR files needed to run the test suite -->
<property name="junit" value="${ext.dev}/junit.jar" />
<property name="easymock" value="${ext.dev}/easymock.jar" />
<property name="em_extras" value="${ext.dev}/objenesis.jar:${ext.dev}/cglib.jar:${ext.dev}/asm.jar" />
<property name="testingJars" value="${junit}:${easymock}:${em_extras}" />
</project>
#!/bin/tcsh -f
source ${DEFAULT_CONFIG_DIR}/JavaSystemProps.csh || exit $status
java -Xmx128m ${JAVA_SYSTEM_PROPS} -jar ${CADC_ROOT}/lib/userAdmin.jar $*:q
package ca.nrc.cadc.ac.admin;
import java.io.PrintStream;
import java.security.Principal;
import java.security.PrivilegedAction;
import org.apache.log4j.Logger;
import ca.nrc.cadc.ac.server.PluginFactory;
import ca.nrc.cadc.ac.server.UserPersistence;
/**
* Govern the methods that each access control admin command has to support.
* @author yeunga
*
*/
public abstract class AbstractCommand implements PrivilegedAction<Object>
{
private static final Logger log = Logger.getLogger(AbstractCommand.class);
protected PrintStream systemOut = System.out;
protected PrintStream systemErr = System.err;
/**
* Set the system out.
* @param printStream
*/
public void setSystemOut(PrintStream printStream)
{
this.systemOut = printStream;
}
/**
* Set the system err.
* @param printStream
*/
public void setSystemErr(PrintStream printStream)
{
this.systemErr = printStream;
}
@SuppressWarnings("unchecked")
protected <T extends Principal> UserPersistence<T> getUserPersistence()
{
PluginFactory pluginFactory = new PluginFactory();
return pluginFactory.getUserPersistence();
}
}
package ca.nrc.cadc.ac.admin;
import org.apache.log4j.Logger;
/**
* This class approves the specified pending user by changing the user
* from a pending user to an active user in the LDAP server.
* @author yeunga
*
*/
public class Approve extends AbstractCommand
{
private static final Logger log = Logger.getLogger(Approve.class);
private String userID;
/**
* Constructor
* @param userID Id of the pending user to be approved
*/
public Approve(final String userID)
{
this.userID = userID;
}
@Override
public Object run()
{
// TODO Auto-generated method stub
return new Object();
}
}
/*
************************************************************************
******************* CANADIAN ASTRONOMY DATA CENTRE *******************
************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
*
* (c) 2014. (c) 2014.
* Government of Canada Gouvernement du Canada
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
* All rights reserved Tous droits réservés
*
* NRC disclaims any warranties, Le CNRC dénie toute garantie
* expressed, implied, or énoncée, implicite ou légale,
* statutory, of any kind with de quelque nature que ce
* respect to the software, soit, concernant le logiciel,
* including without limitation y compris sans restriction
* any warranty of merchantability toute garantie de valeur
* or fitness for a particular marchande ou de pertinence
* purpose. NRC shall not be pour un usage particulier.
* liable in any event for any Le CNRC ne pourra en aucun cas
* damages, whether direct or être tenu responsable de tout
* indirect, special or general, dommage, direct ou indirect,
* consequential or incidental, particulier ou général,
* arising from the use of the accessoire ou fortuit, résultant
* software. Neither the name de l'utilisation du logiciel. Ni
* of the National Research le nom du Conseil National de
* Council of Canada nor the Recherches du Canada ni les noms
* names of its contributors may de ses participants ne peuvent
* be used to endorse or promote être utilisés pour approuver ou
* products derived from this promouvoir les produits dérivés
* software without specific prior de ce logiciel sans autorisation
* written permission. préalable et particulière
* par écrit.
*
* This file is part of the Ce fichier fait partie du projet
* OpenCADC project. OpenCADC.
*
* OpenCADC is free software: OpenCADC est un logiciel libre ;
* you can redistribute it and/or vous pouvez le redistribuer ou le
* modify it under the terms of modifier suivant les termes de
* the GNU Affero General Public la “GNU Affero General Public
* License as published by the License” telle que publiée
* Free Software Foundation, par la Free Software Foundation
* either version 3 of the : soit la version 3 de cette
* License, or (at your option) licence, soit (à votre gré)
* any later version. toute version ultérieure.
*
* OpenCADC is distributed in the OpenCADC est distribué
* hope that it will be useful, dans l’espoir qu’il vous
* but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE
* without even the implied GARANTIE : sans même la garantie
* warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ
* or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF
* PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence
* General Public License for Générale Publique GNU Affero
* more details. pour plus de détails.
*
* You should have received Vous devriez avoir reçu une
* a copy of the GNU Affero copie de la Licence Générale
* General Public License along Publique GNU Affero avec
* with OpenCADC. If not, see OpenCADC ; si ce n’est
* <http://www.gnu.org/licenses/>. pas le cas, consultez :
* <http://www.gnu.org/licenses/>.
*
* $Revision: 4 $
*
************************************************************************
*/
package ca.nrc.cadc.ac.admin;
import java.security.cert.CertificateException;
import javax.security.auth.Subject;
import org.apache.log4j.Logger;
import ca.nrc.cadc.auth.CertCmdArgUtil;
import ca.nrc.cadc.auth.SSLUtil;
import ca.nrc.cadc.util.ArgumentMap;
/**
* This class parses the command line input arguments.
*/
public class CmdLineParser
{
private static Logger log = Logger.getLogger(CmdLineParser.class);
// no need to proceed further if false
private boolean proceed = true;
private String appName = "";
private AbstractCommand command;
private Subject subject;
/**
* Default constructor.
*/
public CmdLineParser(final String name)
{
this.appName = name;
}
/**
* Return proceed status.
* @return true program should proceed with further processing
* false program should not proceed further
*/
public boolean proceed()
{
return this.proceed;
}
/**
* Get the user admin command to be performed.
* @return user admin command
*/
public AbstractCommand getCommand()
{
return this.command;
}
/**
* Get the subject representing the user executing this user admin tool.
*/
public Subject getSubject()
{
return this.subject;
}
protected boolean isValid(final ArgumentMap am) throws UsageException
{
int levelCount = 0;
int cmdCount = 0;
// only one command is allowed per command line
if (am.isSet("list"))
{
this.command = new List();
cmdCount++;
}
if (am.isSet("list-pending"))
{
this.command = new ListPending();
cmdCount++;
}
String userID = am.getValue("view");
if ((userID != null ) && (!userID.equalsIgnoreCase("true")))
{
this.command = new View(userID);
cmdCount++;
}
userID = am.getValue("reject");
if ((userID != null ) && (!userID.equalsIgnoreCase("true")))
{
this.command = new Reject(userID);
cmdCount++;
}
userID = am.getValue("approve");
if ((userID != null ) && (!userID.equalsIgnoreCase("true")))
{
this.command = new Approve(userID);
cmdCount++;
}
// only one log level is allowed
if (am.isSet("v") || am.isSet("verbose"))
{
levelCount++;
}
if (am.isSet("d") || am.isSet("debug"))
{
levelCount++;
}
if ((cmdCount == 1) && (levelCount <2))
{
return true;
}
else
{
String msg = "";
if (cmdCount > 1)
{
msg = "Only one command can be specified.\n";
}
if (levelCount == 2)
{
msg = "--verbose and --debug are mutually exclusive options\n";
}
throw new UsageException(msg);
}
}
/**
* Parse the command line arguments.
* @param args command line arguments
* @throws UsageException Error in command line
* @throws CertificateException
*/
public void parse(final String[] args) throws UsageException, CertificateException
{
ArgumentMap am = new ArgumentMap( args );
this.proceed = false;
if (!am.isSet("h") && !am.isSet("help") && isValid(am))
{
Subject subject = CertCmdArgUtil.initSubject(am, true);
try
{
SSLUtil.validateSubject(subject, null);
this.subject = subject;
this.proceed = true;
}
catch (CertificateException e)
{
if (am.isSet("list") || am.isSet("list-pending"))
{
// we can use anonymous subject
this.proceed = true;
}
else
{
throw e;
}
}
}
}
/**
* Provide the default command line usage.
*/
public String getUsage()
{
StringBuilder sb = new StringBuilder();
sb.append("\n");
sb.append("Usage: " + this.appName + " <command> [-v|--verbose|-d|--debug] [-h|--help]\n");
sb.append("Where command is\n");
sb.append("--list :list users in the Users tree\n");
sb.append(" :can be executed as an anonymous user\n");
sb.append("--list-pending :list users in the UserRequests tree\n");
sb.append(" :except those with nsaccountlock=true\n");
sb.append(" :can be executed as an anonymous user\n");
sb.append("--view=<userid> :print the entire details of the user\n");
sb.append("--approve=<userid> :delete the user from the UserRequests tree\n");
sb.append(" :by setting nsaccount=true, and insert it to the Users tree\n");
sb.append("--reject=<userid> :delete the user from the UserRequests tree\n");
sb.append("\n");
sb.append("-v|--verbose : Verbose mode print progress and error messages\n");
sb.append("-d|--debug : Debug mode print all the logging messages\n");
sb.append("-h|--help : Print this message and exit\n");
return sb.toString();
}
}
package ca.nrc.cadc.ac.admin;
import java.security.AccessControlException;
import java.security.Principal;
import java.util.Collection;
import org.apache.log4j.Logger;
import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.server.UserPersistence;
import ca.nrc.cadc.net.TransientException;
/**
* This class provides a list of all active users in the LDAP server.
* @author yeunga
*
*/
public class List extends AbstractCommand
{
private static final Logger log = Logger.getLogger(List.class);
/**
* Constructor
*/
public List()
{
}
@Override
public Object run()
{
try
{
final UserPersistence<Principal> userPersistence = getUserPersistence();
Collection<User<Principal>> users = userPersistence.getUsers();
for (User<Principal> user : users)
{
systemOut.println(user.getUserID().getName());
}
}
catch (AccessControlException e)
{
log.error(e.getMessage(), e);
}
catch (TransientException e)
{
String message = "Internal Transient Error: " + e.getMessage();
log.error(message, e);
}
return null;
}
}
/*
************************************************************************
******************* CANADIAN ASTRONOMY DATA CENTRE *******************
************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
*
* (c) 2014. (c) 2014.
* Government of Canada Gouvernement du Canada
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
* All rights reserved Tous droits réservés
*
* NRC disclaims any warranties, Le CNRC dénie toute garantie
* expressed, implied, or énoncée, implicite ou légale,
* statutory, of any kind with de quelque nature que ce
* respect to the software, soit, concernant le logiciel,
* including without limitation y compris sans restriction
* any warranty of merchantability toute garantie de valeur
* or fitness for a particular marchande ou de pertinence
* purpose. NRC shall not be pour un usage particulier.
* liable in any event for any Le CNRC ne pourra en aucun cas
* damages, whether direct or être tenu responsable de tout
* indirect, special or general, dommage, direct ou indirect,
* consequential or incidental, particulier ou général,
* arising from the use of the accessoire ou fortuit, résultant
* software. Neither the name de l'utilisation du logiciel. Ni
* of the National Research le nom du Conseil National de
* Council of Canada nor the Recherches du Canada ni les noms
* names of its contributors may de ses participants ne peuvent
* be used to endorse or promote être utilisés pour approuver ou
* products derived from this promouvoir les produits dérivés
* software without specific prior de ce logiciel sans autorisation
* written permission. préalable et particulière
* par écrit.
*
* This file is part of the Ce fichier fait partie du projet
* OpenCADC project. OpenCADC.
*
* OpenCADC is free software: OpenCADC est un logiciel libre ;
* you can redistribute it and/or vous pouvez le redistribuer ou le
* modify it under the terms of modifier suivant les termes de
* the GNU Affero General Public la “GNU Affero General Public
* License as published by the License” telle que publiée
* Free Software Foundation, par la Free Software Foundation
* either version 3 of the : soit la version 3 de cette
* License, or (at your option) licence, soit (à votre gré)
* any later version. toute version ultérieure.
*
* OpenCADC is distributed in the OpenCADC est distribué
* hope that it will be useful, dans l’espoir qu’il vous
* but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE
* without even the implied GARANTIE : sans même la garantie
* warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ
* or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF
* PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence
* General Public License for Générale Publique GNU Affero
* more details. pour plus de détails.
*
* You should have received Vous devriez avoir reçu une
* a copy of the GNU Affero copie de la Licence Générale
* General Public License along Publique GNU Affero avec
* with OpenCADC. If not, see OpenCADC ; si ce n’est
* <http://www.gnu.org/licenses/>. pas le cas, consultez :
* <http://www.gnu.org/licenses/>.
*
* $Revision: 4 $
*
************************************************************************
*/
package ca.nrc.cadc.ac.admin;
import java.io.PrintStream;
import java.security.cert.CertificateException;
import javax.security.auth.Subject;
import org.apache.log4j.Logger;
import ca.nrc.cadc.util.LoggerUtil;
/**
* A command line admin tool for LDAP users.
*
* @author yeunga
*
*/
public class Main
{
private static Logger log = Logger.getLogger(Main.class);
private static final String APP_NAME = "userAdmin";
private static PrintStream systemOut = System.out;
private static PrintStream systemErr = System.err;
/**
* Set the system out.
* @param printStream
*/
public static void setSystemOut(PrintStream printStream)
{
systemOut = printStream;
}
/**
* Set the system err.
* @param printStream
*/
public static void setSystemErr(PrintStream printStream)
{
systemErr = printStream;
}
/**
* Execute the specified utility.
* @param args The arguments passed in to this programme.
*/
public static void main(String[] args)
{
CmdLineParser parser = new CmdLineParser(APP_NAME);
try
{
LoggerUtil.initialize(new String[]
{ "ca.nrc.cadc.ac", "ca.nrc.cadc.auth", "ca.nrc.cadc.util" },
args);
parser.parse(args);
if (parser.proceed())
{
AbstractCommand command = parser.getCommand();
command.setSystemOut(systemOut);
command.setSystemErr(systemErr);
if (parser.getSubject() == null)
{
// no credential, but command works with an anonymous user
command.run();
}
else
{
// has credential, execute the command
Subject.doAs(parser.getSubject(), command);
}
}
else
{
systemOut.println(parser.getUsage());
}
}
catch(UsageException e)
{
systemErr.println("ERROR: " + e.getMessage());
systemOut.println(parser.getUsage());
System.exit(0);
}
catch(CertificateException e)
{
systemErr.println("ERROR: " + e.getMessage());
e.printStackTrace(systemErr);
System.exit(0);
}
catch(Throwable t)
{
systemErr.println("ERROR: " + t.getMessage());
t.printStackTrace(systemErr);
System.exit(-1);
}
}
}
package ca.nrc.cadc.ac.admin;
import org.apache.log4j.Logger;
/**
* This class deletes the specified pending user from the LDAP server.
* @author yeunga
*
*/
public class Reject extends AbstractCommand
{
private static final Logger log = Logger.getLogger(Reject.class);
private String userID;
/**
* Constructor
* @param userID Id of the pending user to be deleted
*/
public Reject(final String userID)
{
this.userID = userID;
}
@Override
public Object run()
{
// TODO Auto-generated method stub
return new Object();
}
}
/*
************************************************************************
**** C A N A D I A N A S T R O N O M Y D A T A C E N T R E *****
*
* (c) 2013. (c) 2013.
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
* All rights reserved Tous droits reserves
*
* NRC disclaims any warranties Le CNRC denie toute garantie
* expressed, implied, or statu- enoncee, implicite ou legale,
* tory, of any kind with respect de quelque nature que se soit,
* to the software, including concernant le logiciel, y com-
* without limitation any war- pris sans restriction toute
* ranty of merchantability or garantie de valeur marchande
* fitness for a particular pur- ou de pertinence pour un usage
* pose. NRC shall not be liable particulier. Le CNRC ne
* in any event for any damages, pourra en aucun cas etre tenu
* whether direct or indirect, responsable de tout dommage,
* special or general, consequen- direct ou indirect, particul-
* tial or incidental, arising ier ou general, accessoire ou
* from the use of the software. fortuit, resultant de l'utili-
* sation du logiciel.
*
*
* @version $Revision$
*
**** C A N A D I A N A S T R O N O M Y D A T A C E N T R E *****
************************************************************************
*/
package ca.nrc.cadc.ac.admin;
/**
* Exception thrown when a problem with the command line arguments is
* encountered.
*/
public class UsageException extends Exception
{
private static final long serialVersionUID = -661234412216725414L;
public UsageException(String message)
{
super(message);
}
}
Main-Class: ca.nrc.cadc.ac.admin.Main
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment