OIM Java API silently ignores accounts operations such as enable/disable/revoke

Hi
I am facing a strange situation here.
My Java app (standalone) was able to set provisioned accounts to "enabled" and then disabled these enabled ones.
Now, provisioned accounts can't be enabled anymore.
Commands issued from Java API using ProvisioningService such as "enable", "disable" and "revoke" are being simply ignored. No exception raised, no changes.
Am I missing some step? Do I need to run any scheduled job in order to "commit" these changes performed from the OIM Java API?
How do I debug this?
TIA

Sorry for my ignorance, but where's this "resource history" thing in OIM?
Here's what I am doing.
First, I use the Self Service UI to provision an account. This account belongs to an application instance backed by the OIM Webservice connector.
I suppose it works because after requesting the account, the connector creates it and returns back a unique ID (which is assigned to the account uid) and the account shows up in "my accounts" tab as "provisioned".
So far, so good.
THEN
I run my standalone java app from outside OIM, which uses OIM Java API. This app connects to OIM as xelsysadm, and I search for the account and do something like this
public void enableAccount(String uid) throws AccessDeniedException, NumberFormatException, AccountNotFoundException, ImproperAccountStateException,
    GenericProvisioningException, InvalidUidException {
  Account a = findAccountIdByUID(uid);
  if (a != null) {
    System.out.println("enabling "+a.getAccountID()+":"+a.getAccountStatus()+":"+a.getAccountData().getData().get("UD_AVNC_USR_LOGIN")); <<< here I confirm I am changing the right account, it is
    ProvisioningService provService = oimClient.getService(oracle.iam.provisioning.api.ProvisioningService.class);
    provService.enable(Long.parseLong(a.getAccountID()));
  }else {
    throw new InvalidUidException(uid);
then I expect to refresh "my accounts" tab and see my account status changed from "Provisioned" to "Enabled".
I don't know if these screenshots may help, but anyway
These are the tasks for the provisioning process. I believe the one we're interested here is the #22
these are the status definitions for the process. They're also created by default during the OIM webservice connector module import process I guess
these are the task to object status mapping for the task #22 below, also created automatically I guess.
I am a little bit confused because the OIM manual -- http://docs.oracle.com/cd/E27559_01/user.1112/e27151/myaccess.htm#OMUSG3166 -- says the user can just perform the operations on the accounts, but says nothing about any kind of restriction. I mean, what are exactly the state transition for accounts (the default one)?
TIA

Similar Messages

  • OIM 11gR2: API to modify accounts

    Hi all,
    I would like to develop an event handler for OIM 11gR2 to modify a user account (for example Active Directory account) if some conditions are satisfied.
    I looked for proper API in Java API Reference for Oracle Identity Manager and I found the interface ProvisioningService.
    I already developed an event handler for test purpose that gets and prints account details and it works.
    My question is: can you provide me an example to use the API to modify an account correctly please?
    Thanks in advance,
    Daniele

    Find the act_key for this new organization and then use the UserManager api to update the act_key for all the accounts.

  • OIM java api code

    what is DB in code line below, how and where should it be declared:
    userIntf=(tcUserOperationsIntf)ioUtilityFactory.getUtility(*db*,"Thor.API.Operations.tcUserOperationsIntf");

    moSignature = tcCryptoUtil.sign("xelsysadm", "PrivateKey");
                   utilFactory = new tcUtilityFactory(env, moSignature);
    tcRequestOperations requestOperations = (tcRequestOperations) utilFactory.getUtility("Thor.API.Operations.tctcRequestOperationsIntf");
    No db.. Remove that db..

  • Enable/Disable a ldap account programatically

    What I am trying to do is to enable/disable an account on iPlanet server through our application using LDAP API.
    I know that I have to set a value to nsaccountlock operational attribute to activate/inactivate the account. However, I looked at the inactive Perl script on the server and it seems to add nsRoleDN and nsRole to this account as well.
    Now I could do the same thing as the Perl script on my appliation, but my question is how do I know which Role do I use to add to the account I want to enable/disable? I know that the default role is nsManageDisableRole, but how about the admin change this Role name or using different role? Is there a way to detect the role?
    Thanks

    You cannot change the role name. If you want to use the same account activation scheme as used by the console and the perl script command lines, you must use the exact same names for roles, etc.
    If you don't care about using the console or the command lines to manage roles, you can use any scheme you like, but you cannot mix and match the two schemes.

  • Which Java API could check the type of Operating System the JVM is running?

    Does anyone know which Java API could check the type of Operating System the JVM is running?
    thanks a lot!

    check out System class.
    regards
    shyamAnd specifically, the getProperty() method.
    - K

  • Problem with creating customer account using TCA Java API

    Hi,
    I am trying to create customer account using TCA java API. i am getting exception saying PL/SQL numeric error: character to number conversion. but this error raises when calling API method
    HzCustAccountV2Pub.createCustAccount.
    can any body help me in solving this issue, any clue why this exception raises. i have tested even the code given in TCA API user guide. that code also gets same error.

    package client;
    import java.math.BigDecimal;
    import java.sql.Timestamp;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import oracle.jdbc.driver.OracleConnection;
    import oracle.jdbc.driver.OracleCallableStatement;
    import oracle.jdbc.driver.OracleTypes;
    import oracle.apps.ar.hz.v2api.HzCustAccountV2Pub;
    import oracle.apps.ar.hz.v2api.HzPartyV2Pub;
    import oracle.apps.ar.hz.v2api.HzCustomerProfileV2Pub;
    class CreateCustAccount {
         public static void main(String[] args) throws Exception {
         HzCustAccountV2Pub.CustAccountRec p_cust_account_rec = new HzCustAccountV2Pub.CustAccountRec();
         HzPartyV2Pub.PersonRec p_person_rec = new HzPartyV2Pub.PersonRec();
         HzCustomerProfileV2Pub.CustomerProfileRec p_customer_profile_rec = new      HzCustomerProfileV2Pub.CustomerProfileRec();
         BigDecimal[] x_cust_account_id = new BigDecimal[1];
         String[] x_account_number = new String[1];
         BigDecimal[] x_party_id = new BigDecimal[1];
         String[] x_party_number = new String[1];
         BigDecimal[] x_profile_id = new BigDecimal[1];
         String[] x_return_status = new String[1];
         BigDecimal[] x_msg_count = new BigDecimal[1];
         String[] x_msg_data = new String[1];
         try
         Class.forName ("oracle.jdbc.driver.OracleDriver");
         OracleConnection conn = (OracleConnection) DriverManager.getConnection ("jdbc:oracle:thin:@ebiztst.trianz.int:1526:PATCH","apps","apps");
         HzCustAccountV2Pub custaccountV2Pub = new HzCustAccountV2Pub();
         p_cust_account_rec.account_name = "John Ac";
         p_person_rec.person_first_name = "John";
         p_person_rec.person_last_name = "Smith";
         p_cust_account_rec.created_by_module = "TCA_EXAMPLE";
         HzCustAccountV2Pub.createCustAccount(
         conn
         , "T"
         , p_cust_account_rec
         , p_person_rec
         , p_customer_profile_rec
         , "F"
         , x_cust_account_id
         , x_account_number
         , x_party_id
         , x_party_number
         , x_profile_id
         , x_return_status
         , x_msg_count
         , x_msg_data
         System.out.println( "x_return_status = " + x_return_status[0] );
         System.out.println( "x_msg_count = " + x_msg_count[0] );
         System.out.println( "x_msg_data = " + x_msg_data[0]);
         if (x_msg_count[0].intValue() > 1) {
              OracleCallableStatement ocs = null;
              for (int i=0; i<x_msg_count[0].intValue(); i++) {
              ocs = (OracleCallableStatement)conn.prepareCall(
              "begin ? := fnd_msg_pub.get( p_encoded => ’F’ ); end;");
              ocs.registerOutParameter(1, OracleTypes.VARCHAR);
              ocs.execute();
              System.out.println((i + 1) + ". " + ocs.getString(1));
              conn.close();
              } catch (ClassNotFoundException e) {
              System.out.println("Driver Not Found: " + e);
              } catch (SQLException e) {
              System.out.println("SQL Error." + e);
    }

  • Has any java api can scraping Legacy System (Terminal such as tn3270)

    Has anyone know java api or method that can scraping user interface of terminal emulator such as tn3270, 5250? I try to search a lot in google but still can' t find. i saw many products that were written in java. I think there is the way to develop it.
    For now. only one method to scrap the terminal that i know is using winhllapi with C#.
    someone guide me plz thank you very much

    Hi,
    PJCs will stay, same for Java Importer. You are right that we didn't publish any Javadocs until yet. I'll takle this one up to again suggest to the developers. Only the minority of classes though are Forms classes, the rest are UI classes with consume from an internal group.Just to be clear, PJCs, JavaBeans and Java in Forms will not phase out.
    Note also that PJCs don't help you to migrate Forms to J2EE, they help you to use Java in Forms.
    Frank

  • Error while creating user id from MDM JAVA API in 7.1 SP7

    Hi,
    We are trying to create user id in MDM 7.1 SP7 using JAVA API in SAP Portal. When trying to create user id, we are getting below error. If you have any solution please let us know.
    com.sap.mdm.commands.CommandException: MDM repository data is out-of-date or is locked by another MDM Server. Refresh the data and try the operation again. If the error persists, contact the system administrator
    Thanks,
    Vinit Pugaliya

    URGENT** How to change  OIM user password from outside OIM

  • Java API for running entire ".sql" files on a remote DB ( mySQL or Oracle)?

    Hi,
    Would anyone happen to know if there's a java API for executing entire ".sql" files (containing several different SQL commands), on a remote database server ?
    It's enough if the API works with MySQL and/or Oracle.
    Just to demonstrate what i'm looking for:
    Suppose you've created sql file "c:/test.sql" with several script lines:
    -- test.sql:
    insert into TABLE1 values(3,3);
    insert into TABLE1 values(5,5);
    create table TABLE2 (name VARCHER) ENGINE innoDB; -- MYSQL specific
    Then the java API should look something like:
    // Dummy java code:
    String driver="com.mysql.jdbc.Driver";
    String url= "jdbc:mysql://localhost:3306/myDb";
    SomeAPI.executeScriptFile( "c:/test.sql", driver, url);
    Thanks.

    No such a API, but it's easy to parse all sqls in a file, then run those command:
    For instance:
    import java.sql.*;
    import java.util.Properties;
    /* A demo show how to load some sql statements. */
    public class testSQL {
    private final static Object[] getSQLStatements(java.util.Vector v) {
    Object[] statements = new Object[v.size()];
    Object temp;
    for (int i = 0; i < v.size(); i++) {
    temp = v.elementAt(i);
    if (temp instanceof java.util.Vector)
    statements[i] = getSQLStatements( (java.util.Vector) temp);
    else
    statements[i] = temp;
    return statements;
    public final static Object[] getSQLStatements(String sqlFile) throws java.
    io.IOException {
    java.util.Vector v = new java.util.Vector(1000);
    try {
    java.io.BufferedReader br = new java.io.BufferedReader(new java.io.
    FileReader(sqlFile));
    java.util.Vector batchs = new java.util.Vector(10);
    String temp;
    while ( (temp = br.readLine()) != null) {
    temp = temp.trim();
    if (temp.length() == 0)
    continue;
    switch (temp.charAt(0)) {
    case '*':
    case '"':
    case '\'':
    // System.out.println(temp);
    break; //Ignore any line which begin with the above character
    case '#': //Used to begin a new sql statement
    if (batchs.size() > 0) {
    v.addElement(getSQLStatements(batchs));
    batchs.removeAllElements();
    break;
    case 'S':
    case 's':
    case '?':
    if (batchs.size() > 0) {
    v.addElement(getSQLStatements(batchs));
    batchs.removeAllElements();
    v.addElement(temp);
    break;
    case '!': //Use it to get a large number of simple update statements
    if (batchs.size() > 0) {
    v.addElement(getSQLStatements(batchs));
    batchs.removeAllElements();
    String part1 = temp.substring(1);
    String part2 = br.readLine();
    for (int i = -2890; i < 1388; i += 39)
    batchs.addElement(part1 + i + part2);
    for (int i = 1890; i < 2388; i += 53) {
    batchs.addElement(part1 + i + part2);
    batchs.addElement(part1 + i + part2);
    for (int i = 4320; i > 4268; i--) {
    batchs.addElement(part1 + i + part2);
    batchs.addElement(part1 + i + part2);
    for (int i = 9389; i > 7388; i -= 83)
    batchs.addElement(part1 + i + part2);
    v.addElement(getSQLStatements(batchs));
    batchs.removeAllElements();
    break;
    default:
    batchs.addElement(temp);
    break;
    if (batchs.size() > 0) {
    v.addElement(getSQLStatements(batchs));
    batchs.removeAllElements();
    br.close();
    br = null;
    catch (java.io.FileNotFoundException fnfe) {
    v.addElement(sqlFile); //sqlFile is a sql command, not a file Name
    Object[] statements = new Object[v.size()];
    for (int i = 0; i < v.size(); i++)
    statements[i] = v.elementAt(i);
    return statements;
    public static void main(String argv[]) {
    try {
    String url;
    Object[] statements;
    switch (argv.length) {
    case 0: //Use it for the simplest test
    case 1:
    url = "jdbc:dbf:/.";
    if (argv.length == 0) {
    statements = new String[1];
    statements[0] = "select * from test";
    else
    statements = argv;
    break;
    case 2:
    url = argv[0];
    statements = getSQLStatements(argv[1]);
    break;
    default:
    throw new Exception(
    "Syntax Error: java testSQL url sqlfile");
    Class.forName("com.hxtt.sql.dbf.DBFDriver").newInstance();
    //Please see Connecting to the Database section of Chapter 2. Installation in Development Document
    Properties properties = new Properties();
    Connection con = DriverManager.getConnection(url, properties);
    Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
    //Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    // stmt.setMaxRows(0);
    stmt.setFetchSize(10);
    final boolean serializeFlag = false;//A test switch to serialize/deserialize the resultSet
    ResultSet rs;
    for (int i = 0; i < statements.length; i++) {
    if (statements[i] instanceof java.lang.String) {
    String temp = (java.lang.String) statements;
    switch (temp.charAt(0)) {
    case 'S':
    case 's':
    case '?':
    System.out.println(temp);
    rs = stmt.executeQuery(temp);
    if (serializeFlag) {
    // serialize the resultSet
    try {
    java.io.FileOutputStream fileOutputStream = new
    java.io.FileOutputStream("testrs.tmp");
    java.io.ObjectOutputStream
    objectOutputStream = new java.io.
    ObjectOutputStream(fileOutputStream);
    objectOutputStream.writeObject(rs);
    objectOutputStream.flush();
    objectOutputStream.close();
    fileOutputStream.close();
    catch (Exception e) {
    System.out.println(e);
    e.printStackTrace();
    System.exit(1);
    rs.close(); //Let the CONCUR_UPDATABLE resultSet release its open files at once.
    rs = null;
    // deserialize the resultSet
    try {
    java.io.FileInputStream fileInputStream = new
    java.io.FileInputStream("testrs.tmp");
    java.io.ObjectInputStream objectInputStream = new
    java.io.ObjectInputStream(
    fileInputStream);
    rs = (ResultSet) objectInputStream.
    readObject();
    objectInputStream.close();
    fileInputStream.close();
    catch (Exception e) {
    System.out.println(e);
    e.printStackTrace();
    System.exit(1);
    ResultSetMetaData resultSetMetaData = rs.
    getMetaData();
    int iNumCols = resultSetMetaData.getColumnCount();
    for (int j = 1; j <= iNumCols; j++) {
    // System.out.println(resultSetMetaData.getColumnName(j));
    /* System.out.println(resultSetMetaData.getColumnType(j));
    System.out.println(resultSetMetaData.getColumnDisplaySize(j));
    System.out.println(resultSetMetaData.getPrecision(j));
    System.out.println(resultSetMetaData.getScale(j));
    System.out.println(resultSetMetaData.
    getColumnLabel(j)
    + " " +
    resultSetMetaData.getColumnTypeName(j));
    Object colval;
    rs.beforeFirst();
    long ncount = 0;
    while (rs.next()) {
    // System.out.print(rs.rowDeleted()+" ");
    ncount++;
    for (int j = 1; j <= iNumCols; j++) {
    colval = rs.getObject(j);
    System.out.print(colval + " ");
    System.out.println();
    rs.close(); //Let the resultSet release its open tables at once.
    rs = null;
    System.out.println(
    "The total row number of resultset: " + ncount);
    System.out.println();
    break;
    default:
    int updateCount = stmt.executeUpdate(temp);
    System.out.println(temp + " : " + updateCount);
    System.out.println();
    else if (statements[i] instanceof java.lang.Object[]) {
    int[] updateCounts;
    Object[] temp = (java.lang.Object[]) statements[i];
    try {
    for (int j = 0; j < temp.length; j++){
    System.out.println( temp[j]);
    stmt.addBatch( (java.lang.String) temp[j]);
    updateCounts = stmt.executeBatch();
    for (int j = 0; j < temp.length; j++)
    System.out.println((j+1)+":"+temp[j]);
    for (int j = 0; j < updateCounts.length; j++)
    System.out.println((j+1)+":" +updateCounts[j]);
    catch (java.sql.BatchUpdateException e) {
    updateCounts = e.getUpdateCounts();
    for (int j = 0; j < updateCounts.length; j++)
    System.out.println((j+1)+":"+updateCounts[j]);
    java.sql.SQLException sqle = e;
    do {
    System.out.println(sqle.getMessage());
    System.out.println("Error Code:" +
    sqle.getErrorCode());
    System.out.println("SQL State:" + sqle.getSQLState());
    sqle.printStackTrace();
    while ( (sqle = sqle.getNextException()) != null);
    catch (java.sql.SQLException sqle) {
    do {
    System.out.println(sqle.getMessage());
    System.out.println("Error Code:" +
    sqle.getErrorCode());
    System.out.println("SQL State:" + sqle.getSQLState());
    sqle.printStackTrace();
    while ( (sqle = sqle.getNextException()) != null);
    stmt.clearBatch();
    System.out.println();
    stmt.close();
    con.close();
    catch (SQLException sqle) {
    do {
    System.out.println(sqle.getMessage());
    System.out.println("Error Code:" + sqle.getErrorCode());
    System.out.println("SQL State:" + sqle.getSQLState());
    sqle.printStackTrace();
    while ( (sqle = sqle.getNextException()) != null);
    catch (Exception e) {
    System.out.println(e.getMessage());
    e.printStackTrace();

  • Multiple Data Sources and Accessing External Java APIs

    Hi Everyone,
    I have a couple of questions for which I was not able to find satisfactory answers in the forum search, so here they are. I would be really grateful if you can help us out with this.
    1. Accessing two Data Sources in the same report: We have a requirement to access two data sources in the same report, and use the data from one source to run a query on the other source. Our product (OIM) has its own DB. And it integrates with BPEL (another Oracle application) for some functionality. BPEL has its own DB. A few reports need data from both these repositories. For simplicity, consider that we need to join two tables, but one table is in OIM DB and the other is in BPEL DB. I guess such a join is not possible. So to work around it, we would like to run a query against one DB and then use the results to run a query on the other DB, which will basically simulate the join by running two queries.
    Is something like this possible in BIP? If not directly available, can you suggest something which can act as a work around to achieve this?
    2. Calling External Java APIs from BIP: We need to call some external APIs (for achieving Data Security) 'before' we run the queries in BIP. Basically the Java API will specifya set of keys which will have to be used in an 'in' clause. I looked at the section "Building a Data Template" in the BIP User's Guide (http://bipublisher.us.oracle.com/doc/prod_docs/BI_Publisher_10_1_3_3_3/bip.1013/b40017/T421739T434255.htm). As far as I can see, it discusses how to invoke a PL/SQL procedure using <datatrigger> but the usage is not clear to me. Is there any other document that discusses this in detail? Also, I am not sure if it is possible to access Java APIs. Has it been done before? If yes, then can anyone provide some sample code (sample report bits) which I can refer to to get this thing working?
    Also, the data coming from the Java API may not be in the correct format. We may have to do some additional processing (like converting data in a Java Object to something like comma separated list to be plugged into a query). Is that possible? What will be the best approach here?
    Sorry for the detailed post!
    Thanks,
    Jatan

    Yes you should be able to use both - for example using a Flash Variable to pass in the URL of the XML that you want to load.
    FlashVars are only supposed to be passed in on startup and they are defined as part of the OBJECT/EMBED tag for the HTML.
    Actually it was possible to update FlashVars at runtime in Xcelsius 4.5 with certain JavaScript calls but not in Xcelsius 2008 (because Adobe Flex which Xcelsius 2008 is based on does not allow the same mechanism).
    FYI, for those that are interested in Xcelsius 2008 you pass values into/out of Xcelsius at runtime using External Interface and JavaScript instead.
    Regards,
    Matt

  • Java API for adding new User in OID

    I am search documentation for sample code to add a new User to the OID via Java API, I could not find any. Is it not possible to do so? if it is, can someone point me to the right location.
    Thanks

       * This method adds employee details into directory
       * @param emp Employee details to be added
       * @param password Password for the employee
       * @exception GroceryAppException if  directory operation fails
      public void addEmployee(Employee emp, String password)
        throws GroceryAppException {
        Map attrs = new HashMap();
        List  objclass = new ArrayList();
        // Object classes that the employee must use
        objclass.add("top");
        objclass.add("inetOrgPerson");
        objclass.add("orcluserv2");
        // create other attributes and their values
        // Add all attributes that you need to set
        attrs.put("uid",emp.getEmpId());
        attrs.put("cn",emp.getFirstName());
        attrs.put("sn",emp.getLastName());
        attrs.put("postaladdress",emp.getAddress());
        attrs.put("mail",emp.getEmail());
        try {
          // create the Directory Entry with the specified attributes
          dirManager.addDirectoryEntry("cn="+emp.getFirstName()+"cn=Users,dc=oracle,dc=com"
                                             , objclass, attrs);
        } catch (NamingException namingEx) { // for Directory errors
          throw new GroceryAppException("Error while adding employee entry to directory :" +
                                      namingEx.getMessage());
      }And the Directory Manager
       * Creates an entry in Directory with the specified attributes and objectclass,
       * with the specified Distingushed Name.
       * @param dn Distinguished name of the entry to be created
       * @param objCls Object classes that the entry must use
       * @param map Attribute,value mappings of the entry
       * @exception NamingException if adding entry fails
       public void addDirectoryEntry(String dn, List objCls, Map map)
         throws NamingException {
          // Create attribute list, ignore case of attribute names
          Attributes attrs = new BasicAttributes(true);
          if( !objCls.isEmpty()) {
            Attribute objclass = new BasicAttribute("objectclass");
            // Iterate thriough the collection and add the object classes to the attribute
            Iterator objclsIter = objCls.iterator();
            while(objclsIter.hasNext()) {
              // Add the object classes
              objclass.add(objclsIter.next());
            // Add the object class attribute to list
            attrs.put(objclass);
          // Iterate through other attributes and add to attributes list
          Iterator attrsIter = map.entrySet().iterator();
          while( attrsIter.hasNext() ) {
            Map.Entry attr = (Map.Entry)attrsIter.next();
            attrs.put(new BasicAttribute((String)attr.getKey(),attr.getValue()));
          // add the directory entry to the directory with the attributes
          dirctx.createSubcontext(dn, attrs);
       }

  • OIM - Understanding the scheduled-task User Operations

    Hi,
    Could anybody here explain what that task means?
    The manual says:
    This scheduled task performs the operation specified by the UserOperation attribute on the user account specified by the UserLogin attribute
    Does anybody here have an example of a scenario that this task could be useful?
    Regards
    HH

    Pretty simple. That scheduler is used to perform some actions on the OIM user account on a pre-defined schedule. That means you can perform ENABLE, DISABLE, or DELETE actions on any OIM user. And the attribute values could be:
    UserLogin - OIM User Login
    UserOperation - ENABLE
    The above scheduler run will enable the user if its disabled. Now the utility part. Consider the following use cases:
    *1)* You terminated any user, say User001 and you want to Disable this user and all its provisioned resources at 18:00 hours once he finishes all the office works, and if you directly Disable the user from Disable User button the User and all his resources would be gone immediately. So you can set this scheduler to run at 18:00 hours with the values User001 and DISABLE
    *2)* You are an OIM help-desk guy and OIM administrator doesn't want you to have access to menu item Users because he doesn't want you to have a look at the OIM user personal details but he still want that you can actually perform enable-disable actions on OIM. In such case he will give you access to Manage Schedule Task menu-item so that you can perform the daily operations activity. This will be a solution to the use-case.
    Thanks
    Sunny

  • Java API to read the Encrypted Values from Windows Registry settings

    Is there any Java API to read the Encrypted Values from Windows Registry settings ?
    My Java Application invokes a 3rd party Tool that writes the key/value to windows registry settings under : “HKLM\Software\<3rdparty>\dataValue”.
    This entry is in BINARY and encrypted with 3DES, using crypto API from Microsoft.
    3rd party software to encrypt the data stored in registry it
    either uses C++ code: and uses the call “CryptProtectData” and “CryptUnProtectData” or
    If it is a .NET (C#) it uses the call “Protect” or “UnProtect” from class “ProtectData” of WinCrypt.h from the library “Crypt32.lib.
    Note: The data is encrypted using auto-generated machinekey and there is no public key shared to decrypt the Encrypted data.
    Since the data is encrypted using auto-generated machinekey the same can be decrypted from a .Net / C++ application using CryptUnprotectData or UnProtect() API of WinCrypt.h from the library “Crypt32.lib.
    To know more about Auto-Generated MachineKey in Windows refer the links below
    http://aspnetresources.com/tools/machineKey
    http://msdn.microsoft.com/en-us/library/ms998288.aspx
    I need to find a way in Java to find the equivalent API to decrypt (CryptUnprotectData) and Microsoft will automatically use the correct key.
    But i couldn't find any informato related to Java APIs to enrypt or decrypt data using auto-generated machinekey.
    Is there a way to read the encrypted data from Windows regsitry settings that is encrypted using the Auto-Generated Machine Key ?
    Kindly let me know if Java provides any such API or mechanism for this.

    If the symmetric key is "auto-generated" and is not being stored anywhere on the machine, it implies that the key is being regenerated based on known values on the machine. This is the same principle in generating 3DES keys using PBE (password-based-encryption). I would review the documentation on the C# side, figure out the algorithm or "seed" values being used by the algorithm, and then attempt to use the JCE to derive the 3DES key using PBE; you will need to provide the known values as parameters to the PBE key-generation function in JCE. Once derived, it can be used to decrypt the ciphertext from the Regiistry in exactly the same way as the CAPI/CNG framework.
    An alternate way for Java to use this key, is to write a JNI library that will call the native Windows code to do the decryption; then the Java program does not need to know details about the key.
    That said, there is a risk that if your code can derive the key based on known seeds, then so can an attacker. I don't know what your applicatiion is doing, but if this is anything related to compliance for some data-security regulation like PCI-DSS, then you will fail the audit (for being unable to prove you have adequate controls on the symmetric key) if a knowledgable QSA probes this design.
    Arshad Noor
    StrongAuth, Inc.

  • Performance of Java API 2

    Hello,
    we are currently using Java API 2 that comes with MDM 5.5 SP5 (Build 5.5.42.65) to read extended information from the mdm repository.
    Our process:
    We are export every product as a XML file over the MDM Syndicator and enrich this file with extended information from the API (This step is needed because we cannot export all data by the Syndicator, for example multilingual attributes / some product data like textblocks / id's for incremental updates ...).
    Actually the performance is really bad, we need ca. 10-15 secs to process one file, that is really frustrating when you have stored near 70.000 products in your repository.
    Are there some tricks to improve the performance or is the API really so slow? Or any better alternatives for an fast export?
    Thanks for your help ....
    Best Regards,
    Jan

    1 - If you are able to use the EJB connection with the LiveCycle SDK classes (you have are using a supported java version such as 1.5_xx, your network security doesn't prevent RMI calls, etc.) then that is your best bet.
    2 - Yes, you will need the java APIs to be accessible for your application. The LiveCycle APIs have remote EJB endpoints so you can access them from another server.
    3 - There are samples that ship with the LiveCycle server (located in your LCInstall\LiveCycle_ES_SDK\samples\Forms). There are also samples on the LiveDocs page at: http://livedocs.adobe.com/livecycle/8.2/programLC/programmer/help/000064.html

  • How can I create a new User with the Java API like OIDDAS do?

    Hello,
    I'm currently working on an BPEL based process. And i need to create an OCS user. So far I can create an user in the OID. But I cant find any documentation about given this user an email account,calendar and content function etc.
    Did anybody know if there are some OIDDAS Webservices? Or did anybody know how to do this using the Java APIs?

    You are asking about a Database User I hope.
    You can look into the Oracle 8i Documentation and find various privillages listed.
    In particular, you may find:
    Chapter 27 Privileges, Roles, and Security Policies
    an intresting chapter.
    You may want to do this with the various tools included with 8i - including the
    Oracle DBA Studio - expand the Security node and you can create USERS and ROLES.
    Or use SQL*Plus. To create a
    user / password named John / Smith, you would login to SQL*Plus as System/manager (or other) and type in:
    Create user John identified by Smith;
    Grant CONNECT to John;
    Grant SELECT ANY TABLE to John;
    commit;
    There is much more you can do
    depending on your needs.
    Please read the documentation.
    -John
    null

Maybe you are looking for

  • How to synchronize colors with two different video cameras

    I own Sony FX1 and HC9 video cameras. The color between the two video cameras can be pretty noticeable, and I tend to flip between the two cameras a lot during editing. Ideally I would get them to match up better before I start filming, but despite m

  • Asset Balances Display

    Hi All I have a problem in Asset Display. My client follows calander year. He has not closed his accounts yet for the calander year 2007. He has also not done AJRW- Fiscal Year Change. But when the client is trying to look inot the Asset Balance Disp

  • Data packets not updated in PSA (incorrect)

    Dear Friends, Can anybody help me on this topic. A process chain is in error and the error message is "Data records were marked as incorrect in the PSA" how can i maintenance the PSA to upload the relevant data packet or is there any other way to  ed

  • How can I undisable my apple id?

    How can I undisable my apple id?

  • How Come My Transitions End Up As Black Frame?

    So Im working with 1920 x 1080 Sony EX1 footage and when I export it as movie my transitions like dissolve, fade in fade out end up as a flash of black. When I changed my export settings to pixel aspect ratio to square it worked but the film ended up