quinta-feira, 18 de setembro de 2008

SQLite3 + BASH + CGI: realizando update no banco

Precisei recentemente escrever uma aplicação em bash para rodar como cgi em um servidor com apache. Essa aplicação deveria simplesmente retornar algumas informações salvas em um SGBD (no caso SQLite 3) e atualizar outras.

Pois bem, escrevi o programa. Na hora de executar os selects tudo ia as mil maravilhas, porém na hora do update... Graças ao bom e velho 2> descobri que o problema ocorria pois o SQLite3 não conseguia acessar o arquivo. Achei estranho, mas fui tentar resolver.

A aplicação estava sendo executada como CGI, o usuário da mesma seria o wwwrun. Setei as permissões necessárias para que esse usuário pudesse acessar o arquivo do bd e nada. Pesquisando na documentação do SQLIte li que ele poderia estar tendo problemas em acessar um arquivo de commit e não o bd em si, mudei então a variável temp_store, tanto em execução quanto na compilação e nada.

Como meu tempo estava se esgotando, parti para a decisão hard: editei o arquivo /etc/sudoers (através do comando visudoers) e então inclui as seguintes linhas:

%www ALL=(ALL) NOPASSWD: ALL


E então passeia chamar o SQLite, detro do script, através do sudo. Eu sei que essa não era a melhor maneira de resolver o problema, mas enquanto eu não o modifico para trabalhar em perl...