Ir ao conteúdo

Posts recomendados

Postado

Boa noite, não sei que não é o local pra isso, mas, precisava de uma ajudinha, o negócio é o seguinte, trabalho com instalações de programas e Bancos de Dados, temos um desses programas que roda em Postgresql, em toda a instalação temos que alterar o PG_HBA.conf, a linha 80 te a instrução de 127.0.0.1/32 e temos que trocar pra 0.0.0.0/32 pro banco conectar e funcionar, criei um bat pra abrir as portas do firewall, dar permissão de escrita e compartilhar as pastas do Postgresql e do programa (ja esta funcionando), mas não acho nenhum comando que eu possa incluir no bat e alterar essa linha, detalhe, tem que ser por bat ou powershell, pra poder rodar em qqr maquina(Windows) a linha a ser alterada é a linha 80

 

image.thumb.png.a1f01dd291b225ee718d4cc38c472cc7.png

Postado

Primeiro renomeie o arquivo PG_HBA.conf para algo como PG_HBA.bak.

Analise o "PG_HBA.bak" com um for. Salve a linha 80 em uma variavel digamos Linha80.

 

Assim você pode mudar o conteúdo de uma variável:

set Linha80=%Linha80:127.0.0.1/32=0.0.0.0/32%

 

Crie um novo Arquivo chamado PG_HBA.conf já com as modificações usando ">>PG_HHBA.conf" dentro do for para criar as linhas.

 

 

Postado

Eu tenho esse utilitário que eu fiz aqui faz um tempo, não sei se ajuda.

 

para utilizá-lo você faz dessa maneira especifica a linha com -l e -s para especificar o que vai ser substituído.

	line -l 80 -s "host all all 0.0.0.0/0 md5" PG_HBA.conf

 

Executável com o código fonte.

line.zip

funciona no windows(a partir do vista) e no linux.

 

código fonte.

Spoiler
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define T_STR 256

struct linha
{
    int posicao;
    char str[T_STR];
};


int main(int argc, char *argv[])
{
    int contador, quantidade = 0;
    struct linha linha = {0 , {' '}};
    char str[T_STR];
    FILE *arq = NULL;

    if (argc == 1) {
        puts("Digite line -h para informações");
    }

    for (contador = 0; contador < argc; contador++) {
        if (strcmp(argv[contador], "-h") == 0) {
            puts("NOME\n\tline\n\nMODO DE USAR\n\n\tline [OPÇÕES]... [ARQUIVO]..");
            puts("-l especifica a linha que sera substituida");
            puts("-s especifica o conteudo da linha a ser substituida");
            break;
        } else if (strcmp(argv[contador], "-l") == 0) {
            sscanf(argv[contador+1], "%d", &linha.posicao);
            linha.posicao--;
            quantidade++;
        } else if (strcmp(argv[contador], "-s") == 0) { 
            strcpy(linha.str, argv[contador+1]);
            linha.str[strlen(linha.str)] = '\n';
            quantidade++;
        }
    }

    if (quantidade == 2) {
        FILE *n_arq = NULL;
        /* Abre o arquivo */
        arq = fopen(argv[argc-1], "r+");
        if (arq == NULL) {
            perror("Não foi possível abrir o arquivo para leitura ou escrita");
            exit(EXIT_FAILURE);
        }

        /* conta a quantidade de linhas no arquivo */
        quantidade = 0;
        do {
            if (fgets(str, T_STR, arq) != NULL) {
                quantidade++;
            }
        } while (!feof(arq));

        if (quantidade < linha.posicao) {
            fclose(arq);
            perror("O arquivo e menor do que a linha especificada!");
            exit(EXIT_SUCCESS);
        }

        rewind(arq);

        n_arq = fopen("tmp.dat", "w+");
        if (n_arq != NULL) {
            for (contador = 0; contador < quantidade; contador++) {
                fgets(str, T_STR, arq);
                if (linha.posicao == contador) {
                    if (!fputs(linha.str, n_arq)) {
                        perror("Erro na escrita do arquivo");
                        exit(EXIT_FAILURE);
                    }
                } else {
                    if (!fputs(str, n_arq)) {
                        perror("Erro na escrita do arquivo");
                        exit(EXIT_FAILURE);
                    }
                }
            }
        }

        fflush(arq);
        fclose(arq);
        fflush(n_arq);
        fclose(n_arq);
        remove(argv[argc-1]);
        rename("tmp.dat", argv[argc-1]);
    } else {
        puts("Parametros invalidos!");
    }
    return(0);
}

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!