[Gelöst] kSecServerItem will nicht in den Schlüsselbund

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Gelöst] kSecServerItem will nicht in den Schlüsselbund

    Ich will ein kSecServerItem in den Schlüsselbund speichern. Bekomme allerdings die Meldung " / The attribute does not exist."
    Sieht jemand den Fehler?

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <Carbon/Carbon.h>
    4. #include <Security/Security.h>
    5. int main(void)
    6. {
    7. SecKeychainItemRef item;
    8. SecKeychainAttributeList list;
    9. SecKeychainAttribute attrs[2];
    10. OSStatus err;
    11. char *server = "192.168.1.1";
    12. char *username = "hello";
    13. char *password = "world";
    14. attrs[0].tag = kSecServerItemAttr; // <--- das funktioniert nicht
    15. //attrs[0].tag = kSecDescriptionItemAttr; // <--- das funktioniert
    16. attrs[0].data = (void *)server;
    17. attrs[0].length = strlen(server);
    18. attrs[1].tag = kSecAccountItemAttr;
    19. attrs[1].data = (void *)username;
    20. attrs[1].length = strlen(username);
    21. list.count = 2;
    22. list.attr = attrs;
    23. err = SecKeychainItemCreateFromContent(kSecGenericPasswordItemClass,
    24. &list, strlen(password), password, NULL, NULL, &item);
    25. if(err != noErr)
    26. printf("%s\n", GetMacOSStatusCommentString(err));
    27. return 0;
    28. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mactus ()

  • Mit den vorhandenen Item-Typen würde ich auskommen. Nur woher weiss man z.B., dass kSecGenericPasswordItemClass kein kSecServerItemAttr hat?

    Ich will erstmal nur für eine Server+Account-Kombination ein Passwort speichern. Das könnte man zwar auch mit SecKeychainAddGenericPassword bewerkstelligen, aber die Low-Level-methoden scheinen mir flexibler zu sein, wenn man einen Eintrag updaten will oder für dieselbe Server+Account-Kombination neben Passwort noch weitere Einträge speichern will (z.B. Zertifikat o.ä.)
  • Weil kSecServerItemAttr definitiv ein Attribut des kSecClassInternetPassword Items ist. Das war auch mal irgendwo dokumentiert.

    Zum Erstellen würde ich Dir SecKeychainAddInternetPassword empfehlen. Und zum Ändern SecKeychainItemModifyAttributesAndData ans Herz legen. Um das passende Zertifikat zu finden SecKeychainSearchCreateFromAttributes.

    P.S.: Gefunden. opensource.apple.com/source/li…ities-55005/lib/Schema.m4 :)
    * Kann Spuren von Erdnüssen enthalten.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von NSObject ()