[Risolto] Linguaggio C e Stringhe

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
alhandra
Prode Principiante
Messaggi: 2
Iscrizione: mercoledì 24 settembre 2008, 11:02

[Risolto] Linguaggio C e Stringhe

Messaggio da alhandra »

Ciao a tutti! :)

Sto scrivendo un programma in C e ho la necessità di eseguire uno usermod. Purtroppo l'esecuzione non va a buon fine a causa del parser sulla stringa passatagli come argomento.

Il comando che voglio eseguire (ed è corretto) è:
/usr/sbin/usermod -R "" nomeutente

La stringa viene costruita nel seguente modo:

Codice: Seleziona tutto

char **nargv;
char *option[]={"-R"};

//allocazione per nargv e suoi elementi

nargv[index++]="/usr/sbin/usermod";

len=strlen(option[0])+8;
[b](void)snprintf(nargv[index++],len,"%s \"\" ",option[0]);[/b]

nargv[index++]=username;
nargv[index++]=NULL;

switch(pid=fork()){
      case -1:
            //gestisci errore
      case 0:
            execvp(nargv[0],nargv);
            break;
      default:
            //attendi figlio 
            //gestisci padre  
}

L'errore riportato è il seguente:

Codice: Seleziona tutto

UX: /usr/sbin/usermod: ERROR:  ""  is not a valid role name. Choose another.
Qualcuno mi sa dire come posso risolvere? Help me, please!
Ultima modifica di alhandra il giovedì 25 settembre 2008, 8:59, modificato 1 volta in totale.
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: Linguaggio C e Stringhe

Messaggio da bite »

Se ben capisco, devi passare come argomento una stringa nulla, vero? E allora passa l'indirizzo di una stringa nulla, non una stringa che contiene due doppi apici. Quando dai il comando a mano ci pensa la shell, ma con una execv* ci devi pensare tu.

Prova cosi':

Codice: Seleziona tutto

...
nargv[index++]="/usr/sbin/usermod";
nargv[index++] = "-R";
nargv[index++] = "";
nargv[index++] = username;
nargv[index++] = NULL;
...
Una curiosità: su che OS stai lavorando? In Linux, usermod non riconosce l'opzione -R :)
Avatar utente
alhandra
Prode Principiante
Messaggi: 2
Iscrizione: mercoledì 24 settembre 2008, 11:02

Re: Linguaggio C e Stringhe

Messaggio da alhandra »

Ciao bite,
Ho provato il tuo suggerimento ma la shell me lo interpretava come se l'opzione passata fosse lo username, cioè così:
/usr/sbin/usermod -R  username

mi hai dato però l''idea per provare:

Codice: Seleziona tutto

char *t;

t="";
(void)sprintf(nargv[index++],"%s",t);
e funziona!

Sto lavorando su opensolaris, indiana, build 98.
E il -R indica i ruoli (esempio root) che può assumere un utente di sistema.

Grazie per l'aiuto! ;)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti