그래서 내 자신의 목적을 위해 수정하려고하는 샘플 응용 프로그램 소스가있다간단합니까? argv [] 변환 *
기본적으로 쉘 스크립트 (아래의 테스트 예제)를 실행하고 있지만 사과의 보안 프레임 워크를 사용하는 privs를 사용하고 있습니다. 원본 소스는 아래 링크 참조).
작동 // Grab the arguent length
int size = strlen(argv[1]);
// Grab the first argument
char myToolPath[size];
strcpy(myToolPath,argv[1]);
, 그것은 의미 :
myFlags = kAuthorizationFlagDefaults; // 8
myStatus = AuthorizationExecuteWithPrivileges // 9
(myAuthorizationRef, myToolPath, myFlags, myArguments,
&myCommunicationsPipe);
나는 그렇게으로 첫 번째 인수로 myToolPath을 추가 할 명령을 수정 한 : 그 샘플 코드에서
#!/bin/bash
echo [email protected]
whoami
우리는 다음과 같은 통과 내가 달릴 때
./compiled_priv_tool /tmp/example.sh
그것은 내가 사용하고있는 사용자가 아니라 "root"를 반환합니다. 이것은 예
char *myArguments[] = { "-u", NULL };
그래서 내 이전 쉘 예제는 출력을 것이다 샘플 코드에서하는 것입니다
는하지만 지금은이 도우미로 인수를 전달 할 수 있도록하려면 그들은이 배열 에 추가 이 같은 :
./compiled_priv_tool /tmp/example.sh
-u
root
하지만 출력이
같을 것이다, 그래서 ARGV이 스크립트에 포함 할 수있는 동적으로 많은 인수를 전달할 수 있도록하고 싶습니다./compiled_priv_tool /tmp/example.sh -u user -f file path -b lah
-u user -f file path -b lah
root
C 코드의 인수를 처리 할 필요가 없습니다. 쉘 스크립트 (외부 명령)에 직접 전달해야합니다.
argv []를 가져 와서 ./compiled_priv의 경로 인 인수 0 (char * myArguments를 기대하는 값)을 제외하고 복사하는 경우 간단한 (내 희망을 갖고) 간단한 질문을 heres합니다. 코드처럼. 나는 객관적인 C를 배웠고 C로 시작하지 않았을 것입니다. 그래서 이것은 아마도 꽤 기본적인 것입니다.하지만 for 루프를 시도하고 두 개의 인덱스를 복사했지만 작동하지 않습니다. 뭔가 같은 :
문자 * =이
내가 원하는하지만이 작동하지 않습니다, 그것은 잘못된 초기화를 말하는 것처럼, 그것은 한 경우에도 우리의 끝에 NULL이 필요한 것처럼 보이는 것입니다 argv를 [] myArguments 배열은 NSTask와 매우 비슷합니다. 나는 for 루프를 포함 할 것이지만 non-starter를 포함 할 것이다.
그래서 argv의 내용을 1에서 끝까지 배열하고 끝에 NULL을 추가하고 원본 샘플 코드에서 char * myArguments []와 같은 형식으로 마무리해야합니다. 내가 더 잘 이해한다면 그것은 도움이 될 것이지만 어떤 생각을하게 될까요?여기
이
멋진 코드이므로 보안 태그를 제거하십시오. – rook