- mexendo com fopen
+ Responder ao Tópico
-
mexendo com fopen
Estou com uma duvida..eu digito um comando da bash e jogo esse comando em uma string como descrito abaixo:
sprintf(str,"%s","cat /etc/passwd | grep :0:0: | tac | cut -d':' -f1");
passwd = popen(str,"r");
printf("Usuario(s) encontrado(s) com id 0 (root):\n");
rewind(passwd);
passwd = popen(str,"r");
while((ch=fgetc(passwd))>0)
{
if(ch!='\n' && ch!='\r'){
sprintf(str2,"%s%c",str2,ch);
}
else{
printf("%s",str2);
sprintf(str2,"%c",ch);
}
}
printf("\n");
pclose(passwd);
}
certo??
eu gostaria de pegar o q estah sendo em str2 e jogar em uma outra string q ja eh inicializada com "userdel "
char user[256]="userdel ";
estou tendo problemas com isso..nao estou conseguindo..sempre q joga os caracteres da string em user..da um problema de kebra de linha..quando ele avança para o seguindo usuario.
por exemplo tenho 2 usuarios com id 0
knoppix e root
ele faz a seguinte coisa:
userdel knoppixluserdel
root
como soluciono isso??
faloow
[]'s
ateh++
-
id-root-check
aaee pessoal ja arrumei..achei uma solucao hehe!! mas de qualquer forma valeu.
kem kiser testar o id-check..eu vou postar logo abaixo..ateh agora eu nao achei nenhuma falha. caso alguem ache..por favor poste aki ok???
keria agradercer principalmente o SDM e o kakaroto q esclareceram minhas duvidas e td ..me deram uma força e me ajudaram bastante e o pessoal tb q postou aqui no forum e que me ajudou..blza?? valeu galera..
OBS: eu testei aki e foi tranquilo caso alguem keira testar fike a vontade soh por prevencao faz uma copia do passwd hehe falooow []'s
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int
main(int argc, char *argv[])
{
FILE *passwd;
char str[51],*str2=(char *)malloc(256),user[256];
int x=0,ch;
if(argc < 2){
printf("Erro de sintaxe\n");
printf("Verefica help para mais informacoes: id-check -h\n");
exit(1);
}
if(setuid(0)!=0)
{
printf("\nVc nao eh root. Nao tem permissao para executar o arquivo\n");
exit(1);
}
if(!(strcmp(argv[1],"-h")))
{
printf("-l listar usuarios com ID 0\n");
printf("-d deletar usuarios com ID 0\n");
printf("Use: ./id-check [opcao]\n");
}
else if(!strcmp(argv[1],"-l"))
{
sprintf(str,"%s","cat /etc/passwd | grep :0:0: | tac | cut -d':' -f1");
passwd = popen(str,"r");
printf("Usuario(s) encontrado(s) com id 0 (root):\n");
rewind(passwd);
while((ch=fgetc(passwd))>0)
{
if(ch!='\n' && ch!='\r'){
sprintf(str2,"%s%c",str2,ch);
}
else{
printf("%s",str2);
sprintf(str2,"%c",ch);
}
}
printf("\n");
pclose(passwd);
}
else if(!strcmp(argv[1],"-d")){
printf("O usuario root nao serah deletado. OK?\n");
sprintf(str,"%s","cat /etc/passwd | grep :0:0: | tac | cut -d':' -f1");
passwd = popen(str,"r");
rewind(passwd);
while((ch=getc(passwd))!=EOF)
{
if(ch!='\n' && ch!='\r'){
sprintf(str2,"%s%c",str2,ch);
}
else{
if(strcmp(str2,"root")){
sprintf(user,"%s%s%c","userdel ",str2,ch);
system(user);
strcpy(str2,"\0");
}
}
}
pclose(passwd);
}
else printf("Erro de sintaxe\n");
return 0;
}