Hallo,

ich hoffe mir kann hier jemand etwas weiterhelfen:
Ich schlage mich hier gerade mit dem Einbau einer Authentifizierung mit Kerberos in eine eigenentwickelte Client-Server-Anwendung rum. Der Client läuft auf einem Windows PC, der Server auf einer iSeries.
Die reine Kerberos-Geschichte klappt auch so weit. Danach habe ich dann den User, wie er in der Windows-Domäne angelegt ist. So weit, so gut.

Nun müßte ich den aber noch auf den AS/400 User zurückmappen. Auch dafür gibt es eine schöne API von der IBM, um die Informationen vom EIM zu bekommen.

Ich rufe erst die diversen Funktionen zur Konfiguration auf, beim Aufruf von eimConnect() bekomme ich aber so einen nichtssagenden Fehler 3734 "Unbekannter Systemstatus".
Update: Die richtige Meldung lautet: Message: >Unerwarteter LDAP-Fehler. ldap_sasl_bind_s - gss_init_sec_context failed<

Code habe ich unten angehängt.

Achja, mit Client-Access klappt die gesamte Anmeldung natürlich, also korrekt eingerichtet müßte alles sein.

MfG, Ben

PS: Hier der Code, sorry ist etwas wirr und doch etwas gekürzt, ist bisher nur ein Test-Programm:
Code:
    //...
    printf("eimCreateHandle()\n");
    /* Create a new eim handle. Use the eim configuration URL */
    if (0 != (rc = eimCreateHandle(&handle,
                                   NULL,
                                   err)))
    {
        printf("Create handle error = %d\n", rc);
        printf("Message: >%s<\n", getEIMError(err));
        return -1;
    }
    printf("eimCreateHandle() success...\n");
    
    //...

    printf("eimSetConfiguration()\n");
    /* Enable configuration info.               */
    if (0 != (rc = eimSetConfiguration(1,
                                       NULL,
                                       NULL,
                                       NULL,
                                       0,
                                       err)))
    {
        printf("Set configuration error = %d\n", rc);
        printf("Message: >%s<\n", getEIMError(err));
        return -1;
    }
    printf("eimSetConfiguration() success...\n");

    //...
    
    connectInfo.type = QSY_EIM_KERBEROS_KEYTAB;
    connectInfo.connectInfo.kerberosKeyTab.keyTabFile = "/QIBM/UserData/OS400/NetworkAuthentication/keytab/krb5.keytab";
    connectInfo.connectInfo.kerberosKeyTab.principal = "krbsvr400/host@REALM.DE";
    connectInfo.connectInfo.kerberosKeyTab.realm = "REALM.DE";
    
    if (0 != (rc = QsySetEIMConnectInfo( QSY_EIM_CONFIG,
                                         connectInfo,
                                         err)))
    {
        printf("Set connection information error = %d\n", rc);
        printf("Message: >%s<\n", getEIMError(err));
        return -1;
    }
    printf("QsySetEIMConnectInfo() success...\n");
        
    //...
    
    printf("eimConnect()\n");
    con.type = EIM_KERBEROS;
    con.creds.kerberos = NULL;
    con.ssl = NULL;

    /* Connect to configuartion system         */
    if (0 != (rc = eimConnect(&handle,
                              con,
                              err)))
    {
        printf("Connect error = %d\n", rc);
        printf("Message: >%s<\n", getEIMError(err));
        return -1;
    }
    printf("eimConnect() success...\n");

    //...
    
    printf("eimDestroyHandle()\n");
    /* Destroy the handle                       */
    if (0 != (rc = eimDestroyHandle(&handle,
                                    err)))
    {
        printf("Destroy handle error = %d\n", rc);
        printf("Message: >%s<\n", getEIMError(err));
        return -1;
    }
    printf("eimDestroyHandle() success...\n");