2010-02-02 4 views
0

Mon programme exécute essentiellement un fichier exécutable avec des arguments de ligne de commande. Un processus enfant est forké et la sortie du processus enfant est prise dans le fichier "filename".Le fichier ne peut être ouvert que par l'utilisateur root. Permission autorisée, je suppose

Le problème est que le fichier est fait et les données sont écrites, mais il ne peut être ouvert par l'utilisateur root .. Comment le rendre lisible à l'utilisateur qui a invoqué le programme?

Le code est le suivant: -

#include<stdio.h> 
    #include<string.h>  //strcpy() used 
    #include<malloc.h>  //malloc() used 
    #include<unistd.h>  //fork() used 
    #include<stdlib.h>  //exit() function used 
    #include<sys/wait.h> //waitpid() used 
    #include<fcntl.h> 

    int main(int argc, char **argv) 
    { 
char *command; 
char input[256]; 
char **args=NULL; 
char *arg; 
int count=0; 
char *binary; 
pid_t pid; 
int fdw; 

printf("Enter the name of the executable(with full path)"); 
fgets(input,256,stdin); 

command = malloc(strlen(input)); 
strncpy(command,input,strlen(input)-1); 

binary=strtok(command," "); 
args=malloc(sizeof(char*)); 

args[0]=malloc(strlen(binary)+1); 
strcpy(args[0],binary); 

while ((arg=strtok(NULL," "))!=NULL) 
{ 
    if (count%10 == 0) args=realloc(args,sizeof(char*)*10); 
    count++; 
    args[count]=malloc(strlen(arg)); 
    strcpy(args[count],arg); 
} 
args[++count]=NULL; 

if ((fdw=open("filename",O_WRONLY|O_EXCL|O_CREAT|0700)) == -1) 
    perror("Error making file"); 
close(1); 
dup(fdw); 

if ((pid = fork()) == -1) 
{ 
    perror("Error forking...\n"); 
    exit(1); 
} 
if (pid == 0) execvp(args[0],&args[0]); 
else 
{ 
    int status; 
    waitpid(-1, &status, 0); 
} 
return 0; 
} 
+0

Que dit ls -l lorsqu'il est pointé sur le fichier? – bmargulies

+0

------ xr-- 1 shadyabhi shadyabhi 7342 2010-02-03 01:39 nom de fichier –

Répondre

3

Relisez la page de manuel pour ouvrir, vous n'êtes pas correctement l'argument de passage en mode fichier et provoquant les drapeaux à foiré dans le processus.

+0

Ohh .. c'était tellement bête .... thanx ... –

+0

juste changé l'appel open() à: - open ("filename", O_WRONLY | O_EXCL | O_CREAT, 777) & le problème a été résolu .... –

+2

N'utilisez pas 777; c'est un nombre décimal, pas octal. Ne pas utiliser 0777; le fichier n'est pas destiné à être exécutable, et ne devrait probablement pas non plus être accessible en écriture. Utilisez 0644 ou même 0444 (ou peut-être 0664 si vous faites confiance au reste des personnes qui appartiennent à votre groupe). –

Questions connexes