인디노트

MechanismInvoke 를 구현하는 샘플 본문

소스 팁/Objective C, Swift, iOS, macOS

MechanismInvoke 를 구현하는 샘플

인디개발자 2023. 3. 31. 08:04

이거 어디다 쓰는 물건인고? 하시는 개발자분들 계실거 같은데요. 인증 관련 개발자들 중에서 극히 드문 경우에만 사용합니다.

이 예제에서는 AuthorizationExecuteWithPrivileges를 사용하여 메커니즘을 실행하는 예제이며 자꾸 잊어 버려서 기록용으로 올려 놓습니다.

#include <Security/AuthorizationPlugin.h>

OSStatus MyPluginCreate(AuthorizationPluginRef inPlugin, const AuthorizationCallbacks *inCallbacks, AuthorizationPluginRef *outPlugin) {
    // ...
    return err;
}

OSStatus MechanismInvoke(const AuthorizationMechanismId mechanismId, AuthorizationRef authorization, const AuthorizationEngineRef engine, const AuthorizationMechanismRef mechanism, const char *path, const char *const argv[], char **environment, FILE *communicate, const int *beforeCloseFDs, const int argc, const AuthorizationItem argv[]) {
    OSStatus err;
    char **myEnvp = NULL;
    const char *myPath = "/path/to/my/command";

    err = AuthorizationCopyExternalForm(authorization, &authData);
    if (err == noErr) {
        myEnvp = (char **) malloc(sizeof(char *));
        if (myEnvp != NULL) {
            myEnvp[0] = NULL;
            err = AuthorizationExecuteWithPrivileges(authorization, myPath, myEnvp, NULL, &pipe[0]);
            free(myEnvp);
        } else {
            err = memFullErr;
        }
    }
    return err;
}
반응형
Comments