// The returned SecAccessRef, if non-nil, must be released via CFRelease. func createEmptyAccess(label string) (C.SecAccessRef, error) { var err error var labelRef C.CFStringRef if labelRef, err = _UTF8StringToCFString(label); err != nil { return nil, err } defer C.CFRelease(C.CFTypeRef(labelRef)) var access C.SecAccessRef trustedApplicationsArray := arrayToCFArray([]C.CFTypeRef{}) defer C.CFRelease(C.CFTypeRef(trustedApplicationsArray)) if err = newKeychainError(C.SecAccessCreate(labelRef, trustedApplicationsArray, &access)); err != nil { return nil, err } return access, nil }
// The returned SecAccessRef, if non-nil, must be released via CFRelease. func createAccess(label string, trustedApplications []string) (C.CFTypeRef, error) { if len(trustedApplications) == 0 { return nil, nil } // Always prepend with empty string which signifies that we // include a NULL application, which means ourselves. trustedApplications = append([]string{""}, trustedApplications...) var err error var labelRef C.CFStringRef if labelRef, err = StringToCFString(label); err != nil { return nil, err } defer C.CFRelease(C.CFTypeRef(labelRef)) var trustedApplicationsRefs []C.CFTypeRef for _, trustedApplication := range trustedApplications { trustedApplicationRef, err := createTrustedApplication(trustedApplication) if err != nil { return nil, err } defer C.CFRelease(C.CFTypeRef(trustedApplicationRef)) trustedApplicationsRefs = append(trustedApplicationsRefs, trustedApplicationRef) } var access C.SecAccessRef trustedApplicationsArray := ArrayToCFArray(trustedApplicationsRefs) defer C.CFRelease(C.CFTypeRef(trustedApplicationsArray)) errCode := C.SecAccessCreate(labelRef, trustedApplicationsArray, &access) err = checkError(errCode) if err != nil { return nil, err } return C.CFTypeRef(access), nil }