+ Responder ao Tópico



  1. #1
    kappalinux
    Visitante

    Padrão 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++

  2. #2
    kappalinux
    Visitante

    Padrão 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;

    }