Respondo a mi mensaje con una correccion y un añadido:
El añadido es la llamada desde una cl al programa en "c"
/********************************************************************/
/* llamada al programa en c de creacion de identificador EIM      ED*/
/* y asociaciones                                                 ED*/
/********************************************************************/
             DCL        VAR(&nombas) TYPE(*CHAR) LEN(11)              
             DCL        VAR(&nombWi) TYPE(*CHAR) LEN(11)              
             DCL        VAR(&identi) TYPE(*CHAR) LEN(30)              
             DCL        VAR(&identiv) TYPE(*CHAR) LEN(30)              
             DCL        VAR(&descri) TYPE(*CHAR) LEN(40)              
             DCL        VAR(&USUARIO) TYPE(*CHAR) LEN(59) +            
                          VALUE('os400-profile="">USUARIO,cn=accounts,o+
                          s400-sys=DOMINIO')                    
             DCL        VAR(&PASS) TYPE(*CHAR) LEN(9) VALUE(' Contraseña As/400')
             DCL        VAR(&NULL)      TYPE(*CHAR) LEN(1) VALUE(X'00')
             CHGVAR     VAR(&USUARIO) VALUE(&USUARIO *TCAT &NULL)      
             CHGVAR     VAR(&PASS) VALUE(&PASS *TCAT &NULL)  
             CHGVAR     VAR(&identiv) VALUE('IDENTIFICADOR VIEJO' *TCAT +        
                          &NULL)                                      
             CHGVAR     VAR(&nombas) VALUE('USUARIO AS/400 ' *TCAT &NULL)    
             CHGVAR     VAR(&nombwi) VALUE('usuario güindos' *TCAT &NULL)    
             CHGVAR     VAR(&identi) VALUE('IDENTIFICADOR NUEVO' *TCAT +    
                          &NULL)                                      
             CHGVAR     VAR(&DESCRI) VALUE('Nombre' *TCAT +  
                          &NULL)                                      
             CALL       PGM(ADDASOEIM) PARM(&IDENTIV &IDENTI &DESCRI +
                          &NOMBWI &NOMBAS &USUARIO &PASS)            
             MONMSG     MSGID(CPF0000)    
     ENDPGM          

Haceros notar que para llamar al programa TODAS las variables de caracter deben terminar con  el caracter nulo  VALUE(X'00').
Correccion, he añadido dos parametros mas     &USUARIO &PASS
y he correguido un error que no permitie borra y crear identificador en la misma ejecucion (en azul).
#include <eim.h>                                                      
#include <stdio.h>                                                    
int main(int argc, char *argv[])              
{                                                                      
    int           rc;                                                  
    char          eimerr[100];                                        
 /*   char          user;        */                                    
    EimRC       * err;                                                
    EimHandle     handle;                                              
    EimHandle     handle2;                                            
    EimIdentifierInfo x;                            
     EimConnectInfo con;                                                
     char          unique[30];                                          
     unsigned int  sizeOfUnique = 30;      
    /*estructura de error                 */  
     memset(eimerr,0x00,100);                                          
     err = (EimRC *)eimerr;                                            
     err->memoryProvidedByCaller = 100;                                
     /* Create nuevo eim handle.    */                                  
     if (0 != (rc = eimCreateHandle(&handle2,                          
                                    NULL,                              
                                    err)))                              
   /*      printf("Create handle error = %d", rc);  */                  
     /* informacion de conexion         */                              
     con.type = EIM_SIMPLE ;                                            
     con.creds.simpleCreds.protect = EIM_PROTECT_NO;                    
         /* nombre calificado                 */                        
     con.creds.simpleCreds.bindDn = argv[6];                            
         /* contraseña                 */                              
     con.creds.simpleCreds.bindPw = argv[7];                            
     con.ssl = NULL;                                          
     /* Conectar a la configuracion del sistema         */              
     if (0 != (rc = eimConnect(&handle2,                                
                               con,                                    
                               err)))                                  
  /*       printf("error de conexion = %d", rc);      */                
         /* Borrar identificador */                                    
         x.idtype = EIM_UNIQUE_NAME;                                    
         x.id.uniqueName = argv[1];                                      
     /* borrar identificador */                                          
     if (0 != (rc = eimRemoveIdentifier(&handle2,                        
                                        &x,                              
                                        err)))                          
   /*   printf("error al borrar identificador = %d", rc);*/              
     /* añadir identificador         */                                  
            x.idtype = EIM_UNIQUE_NAME;                                  
         x.id.uniqueName = argv[2];                                      
     if (0 != (rc = eimAddIdentifier(&handle2,                          
                                     argv[2],                            
                                     EIM_FAIL,                          
                                     &sizeOfUnique,                      
                                     unique,                            
                                     argv[3],                            
                                    err)))                            
  /*  printf("error al añadir identificador = %d", rc); */            
    x.idtype = EIM_UNIQUE_NAME;                                        
    x.id.uniqueName =argv[2];              
    /* Añadir asociacion origen                 */                    
    if (0 != (rc = eimAddAssociation(&handle2,                        
                                     EIM_SOURCE,                      
                                     &x,                              
                                     "REGISTRO DE GÜINDOS",                        
                                     argv[4],                          
                                     err)))                            
    {                                                                  
  /*      printf("error al añadir asociacion origen= %d", rc);   */    
    }                                                                  
    /* Añadir asociacion destino                 */                    
    if (0 != (rc = eimAddAssociation(&handle2,                          
                                     EIM_TARGET,                        
                                     &x,                                
                                     "REGISTRO DEL ISERIES",            
                                     argv[5],                          
                                     err)))                            
    {                                                                  
 /*       printf("error al añadir asociacion destino = %d", rc);    */  
                                                                       
  }                                                                    
                                                                       
       /* destruir handle                 */                            
  rc=eimDestroyHandle(&handle2,err);                                    
    return 0;                                                          
}                                                                                                                


> Hace unos dias pregunte al foro si alguien me podia ayudar con las
> apis eim de asociaciones de kerberos. Bueno, a base de "pegarme" con
> ellas (estan en c) he conseguido hacer este programa que, pasandole
> como parametros, por este orden:
> Identificador antiguo (lo borra) argv[1]
> Identificador nuevo   (lo crea)   argv[2]
> descripcion del identificador argv[3]
> usuario de windows argv[4]
> usuario de Iseries argv[5]
> Crea el identificador y las asociaciones destino y origen.
> En el fuente hay que sustituir, el usuario de conexion y su
> contraseña, nombres de registors Kerberos e iseries
> Espero que os sea util.
>
> #include <eim.h>                                                      
> #include <stdio.h>                                                    
> int main(int argc, char *argv[])                                      
> {                                                                    
>     int           rc;                                                
>     char          eimerr[100];                                        
>  /*   char          user;        */                                  
>     EimRC       * err;                                                
>     EimHandle     handle;                                            
>     EimHandle     handle2;                                            
>     EimIdentifierInfo x;                                            
>     EimConnectInfo con;                                              
>     char          unique[30];                                        
>     unsigned int  sizeOfUnique = 30;                                    
>    /*estructura de error                 */                            
>     memset(eimerr,0x00,100);                                            
>     err = (EimRC *)eimerr;                                              
>     err->memoryProvidedByCaller = 100;                                  
>     /* Create nuevo eim handle.    */                                  
>     if (0 != (rc = eimCreateHandle(&handle2,                            
>                                    NULL,                                
>                                    err)))                              
>   /*      printf("Create handle error = %d", rc);  */                  
>     /* informacion de conexion         */                              
>     con.type = EIM_SIMPLE ;                                            
>     con.creds.simpleCreds.protect = EIM_PROTECT_NO;                    
>         /* nombre calificado                 */                        
>         con.creds.simpleCreds.bindDn = "os400-profile=""
> /*contraseña*/                              
>     con.creds.simpleCreds.bindPw = "CONTRASEÑA";                          
>     con.ssl = NULL;                                                    
>     /* Conectar a la configuracion del sistema         */              
>     if (0 != (rc = eimConnect(&handle2,                                
>                               con,                                      
>                               err)))                                    
>  /*       printf("error de conexion = %d", rc);      */                
>         /* Borrar identificador */                                      
>         x.idtype = EIM_UNIQUE_NAME;                                    
>         x.id.uniqueName = argv[1];                                      
>     /* borrar identificador */                                          
>     if (0 != (rc = eimRemoveIdentifier(&handle2,                        
>                                        &x,                              
>                                        err)))                          
>   /*   printf("error al borrar identificador = %d", rc);*/              
>     /* añadir identificador         */                                
>     if (0 != (rc = eimAddIdentifier(&handle2,                          
>                                     argv[2],                          
>                                     EIM_FAIL,                          
>                                     &sizeOfUnique,                    
>                                     unique,                            
>                                     argv[3],                          
>                                     err)))                            
>   /*  printf("error al añadir identificador = %d", rc); */            
>     x.idtype = EIM_UNIQUE_NAME;                                        
>     x.id.uniqueName =argv[2];                                          
>     /* Añadir asociacion origen                 */                    
>     if (0 != (rc = eimAddAssociation(&handle2,                        
>                                      EIM_SOURCE,                      
>                                      &x,                              
>                                      "NOMBRE REGISTRO KERBEROS",            
>                                      argv[4],                          
>                                      err)))                            
>     {                                                                  
>   /*      printf("error al añadir asociacion origen= %d", rc);   */    
>     }                                                                  
>     /* Añadir asociacion destino                 */                    
>     if (0 != (rc = eimAddAssociation(&handle2,                        
>                                      EIM_TARGET,                      
>                                      &x,                              
>                                      "NOMBRE REGISTRO ISERIES",          
>                                      argv[5],                          
>                                      err)))                            
>     {                                                                  
>  /*       printf("error al añadir asociacion destino = %d", rc);    */
>                                                                        
>   }                                                                    
>                                                                        
>        /* destruir handle                 */                            
>   rc=eimDestroyHandle(&handle2,err);                                    
>     return 0;                                                          
> }                                                                      
_______________________________________________ AMCOR FLEXIBLES - LEADING THROUGH INNOVATION _______________________________________________ CAUTION - This message may contain privileged and confidential information intended only for the use of the addressee named above. If you are not the intended recipient of this message you are hereby notified that any use, dissemination, distribution or reproduction of this message is prohibited. If you have received this message in error please notify AMCOR FLEXIBLES immediately. Any views expressed in this message are those of the individual sender and may not necessarily reflect the views of AMCOR FLEXIBLES.

Responder a