Página 1 de 1
Permissoes de arquivos....
Enviado: 13 Set 2006 12:28
por Aflitos
No Linux, utilizando:
Debian GNU/Linux Operating System : Linux 2.6.8-2-386 i686
Compiler : GNU C 3.3.5
xHarbour Version : xHarbour build 0.99.60 Intl. (SimpLex)
Build Date : May 29 2006 12:37:10
Quando tendo gerar um arquivo temporario a partir do meu sistema numa pasta compartilhada com o windows via samba,
os mesmos são criados com permissões diferentes das definidas no sistema operacional.
Qdo dou um DbCreate() o arquivo é gerado com -rw-r--r-- e seu indice .cdx tb fica assim, dando erro cod 5.
Ja verifiquei as configurações do linux e estao corretas...ocorre que o xharbour não esta obedecendo os padroes de umask
do sistema operacional.
Me ajuda por favor.
Enviado: 13 Set 2006 18:17
por dopi
Eu costumo fazer o seguinte nos meus programas:
1 - Voce precisará ter privilégios de root Para virar root digite: su e a senha do root
2 - Crie um Grupo djsystem Digite:
groupadd djsystem
3 - Crie os usuários do sistema (se eles ainda não existirem)
useradd nome_usuario
4 - Defina a senha para os novos usuários digitando
passwd nome_usuario (Re-digite a mesma senha 2 vezes)
5 - Adicione os usuários que poderão usar o programa djsystem no grupo recem criado djsystem
usermod -G djsystem nome_usuario
6 - Cria uma pasta para o programa DJSYSTEM em /opt/djsystem/ Digite:
mkdir /opt/djsystem
7 - Mude o grupo da pasta para o grupo djsystem recem criado para que todos os usuários do sistema possam acessar
Digite:
chown :djsystem /opt/djsystem -R
8 - Configure essa pasta para que todos os arquivos criados nela tenham sempre o mesmo Grupo... Isso é importante, pois caso contrário, durante uma re-indexação os arquivos de indices pertenceriam a apenas um usuário, bloqueando o acesso aos indices aos demais usuários:
Digite:
chmod g+s /opt/djsystem/ -R
9 - Vamos dar permissão de Leitura e Escrita para o Dono "u" e para o Grupo "g" na pasta recem criada
chmod ug+rwx /opt/djsystem -R
10 - Vamos remover todos os direitos dos outros usuários "o", para que somente o dono da pasta (root) ou quem pertença ao grupo (djsystem) consiga modificar os arquivos da pasta /opt/djsystem
chmod o-rwx /opt/djsystem -R
Paralelo a isso, defina a UMASK padrão para cada usuário, para que ele grave sempre arquivos com direito de
Leitura e
Gravação para o Dono e o Grupo
No Linux digite:
umask 006
Isso pode estar no
.bash_profile dos usuários ou ainda no script de inicialização do seu sistema...
Se preferir, crie a função
umask dentro do xHarbour
Código: Selecionar todos
// UMASK(MASCARA) <- MASCARA ATUAL
#pragma BEGINDUMP
#include "hbapi.h"
HB_FUNC(UMASK)
{
hb_retnl(umask(hb_parni(1)));
}
#pragma ENDDUMP
Exemplo de uso:
umask(2) // Grava sempre arquivos como -rw-rw-r--
umask(6) // Grava sempre arquivos como -rw-rw----
No meu caso, uso umask(2) para criar relatórios em disco, pois pode ocorrer do usuário querer exportar o arquivo gerado (via samba) para um editor de textos...
Enviado: 16 Set 2006 03:09
por Aflitos
Prezado dopi, sua resposta resolveu o problema das permissões, apesar de eu achar que foi a função umask que vc passou que foi a solução mesmo.
Mas veja vc, agora que as permissões estão corretas esta me acontecendo o seguinte. O arquivo (DBF) temporario criado com registros numa pasta compartilhada com o windows via samba é aberto pelo sistema Microsiga que por sua vez altera o dito Dbf, da commit, e fecha tudo direitinho.
Ocorre que quando volto pro meu sistema e abro o mesmo arquivo as alterações feitas pelo Siga não estão la. E o mais incrível é que se antes de abrir novamente no meu sistema eu mexer no mesmo arquivo pelo dbu ou fox por por exemplo e fizer qualquer alteração, dai sim meu sistema passa a enxergar inclusive as alterações feitas pelo Siga.
Os paths estão estão corretos, inclusive abro o dbf com caminho e nome completo, barras corretas, tudo em minusculo, permissões (agora) corretas. No inicio do sistema faço um Set Default e Set Path para a pasta do sistema.
Peço novamente a paciencia e a ajuda de todos.
Obrigado.
Enviado: 16 Set 2006 08:31
por dopi
Aflitos,
Verifique como fica o arquivo depois de gravado pelo programa da Microsiga através do SAMBA...
Tecle:
ls -l /pathdosistema/arquivo.dbf
e verifique se o
Dono e o
Grupo, além das permissões do arquivo estão corretas...
No SAMBA, podemos configurar a MASK no
/etc/samba/smb.conf Exemplo:
Código: Selecionar todos
[Sistemas]
comment = Diretorio com os sistemas utilizados na loja
path = /djsystem/sistemas
read only = no
browseable = no
write list = @loja, @administracao, @root
create mask = 0660
directory mask = 0770
vfs object = recycle
- browseable = no -> Apenas Oculta o compartilhamento
- Write list -> usuários ou grupos (iniciam com @) que podem acessar o compartilhamento
- create mask 0660 -> grava os arquivos como "rw-rw----"
- directory mask 0770 -> grava os diretorios como "rwxrwx---"
Mas ao que parece, esse arquivo está associado a algum INDICE. O Clipper / xHarbour abre automáticamente o arquivo de indice se ele tiver o nome identico ao do DBF, porém acredito que o programa da Microsiga não esteja fazendo isso (abrindo o indice)...
Experimente fazer o seguinte: Sempre depois que houver a atualização da Microsiga, abra o seu arquivo e crie novamente os índices...