Vai al contenuto

Problema permessi e output comandi


Saph

Messaggi raccomandati

Salve ragazzi, mi scuso per il titolo poco esplicativo ma non sapevo come meglio semplificare il mio problema:

la mia applicazione dovrebbe chiedere di autenticarsi, quindi lanciare un semplice comando da root.

Per quanto riguarda la parte dell'autenticazione non ci dovrebbero essere grossi problemi, ho seguito le indicazioni fornite dalla documentazione ufficiale e sono arrivato a scrivere questo:


-(IBAction)require:(id)sender {
AuthorizationRef myAuthorizationRef;
OSStatus myStatus;
myStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
								kAuthorizationFlagDefaults, &myAuthorizationRef);

AuthorizationItem myItem;

myItem.name = "com.myOrganization.readPermission";
myItem.valueLength = 0;
myItem.value = NULL;
myItem.flags = 0;

AuthorizationRights myRights;

myRights.count = 1;
myRights.items = &myItem;

AuthorizationFlags myFlags;
myFlags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagExtendRights;


myStatus = AuthorizationCopyRights (myAuthorizationRef, &myRights,
									kAuthorizationEmptyEnvironment, myFlags, NULL);

FILE *p = NULL;

char *myArguments[] = {"/read", NULL};

myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, "/bin/ls", kAuthorizationFlagDefaults, myArguments, &p);

if (myStatus == errAuthorizationSuccess) {
	printf("Authorization success\n\n");
	[self read:p];
}
else
	printf("Authorization failed\n");
}

La cartella /read è una cartella di prova creata da me, a cui ho impostato i permessi in modo da renderla visibile solo da root.

La chiamata [self read:p] è la chiamata ad un metodo che mi permette di leggere il contenuto di un file (visto che, a quanto ho capito, l'output del programma lanciato viene memorizzato in un oggetto di tipo FILE):


- (void) read:(FILE*)fp {
int i=0;
char s[1000];

while (1) {
	fgets(s, 1000, fp);

	if(feof(fp))
		break;

	printf("%d (%d) -> %s",++i,feof(fp),s);
}
printf("\nEnd of File\n");
}

Il problema che ho riscontrato è che, lanciando più volte lo stesso codice (addirittura senza terminare l'applicazione, semplicemente chiamando diverse volte il metodo require), l'output del programma non è sempre lo stesso; ovvero:


CASO 1: 

Authorization success

1 (0) -> a
2 (0) -> b
3 (0) -> c

End of File

------------------------

CASO 2:

Authorization success

1 (0) -> 2 (0) -> a
3 (0) -> b
4 (0) -> c

End of File

Non riesco a capire come mai a volte è come se trovasse una prima riga nulla...

Non credo il problema sia nel metodo read (considerando che l'ho testato su un file "normale" e non mi ha dato problemi) quindi quello che mi viene in mente è qualche problema legato al metodo require, anche se non so bene dove...

Qualche suggerimento?

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...