Autore Topic: [RISOLTO] mostrare i permessi di un file o directory e modificarli  (Letto 586 volte)

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Salve. Vorrei mostrare in una label i permessi di una directory e poi modificarli. Non so se è possibile.
Per esempio vorrei poter scrivere:

sAppPath = Application.Path
Label1.Text = "Dir. appl.: " & sAppPath & "  Permessi: " & Stat.Perm(sAppPath)

Purtroppo Stat.Perm(sAppPath) non è una stringa, ma una classe virtuale.
Come si fa?

E poi vorrei sapere se è possibile modificare a programma questi permessi. Grazie
« Ultima modifica: 10 Agosto 2015, 09:16:15 da Cocirio »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: mostrare i permessi di un file o directory e modificarli
« Risposta #1 il: 08 Agosto 2015, 17:16:26 »
Come si fa?

...poni un altro puntino dopo la proprietà .Perm (le parentesi non sono previste), e.........



E poi vorrei sapere se è possibile modificare a programma questi permessi.
Usando la funzione Chmod .
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: mostrare i permessi di un file o directory e modificarli
« Risposta #2 il: 08 Agosto 2015, 18:38:04 »
......ovviamente possiamo giocherellare anche con le funzioni esterne.   ;D

Sappiamo che esiste una funzione della libreria di GNOME che fa quel lavoro di cambiare i permessi:
https://developer.gnome.org/glib/stable/glib-File-Utilities.html#g-chmod

Vediamo un semplicissimo esempio:
Codice: gambas [Seleziona]
Library "libglib-2.0"

' int g_chmod (const gchar *filename, int mode)
' Sets the permissions of a file system object.
Private Extern g_chmod(filename As String, mode As Integer) As Integer


Public Sub Main()

' Neghiamo ogni permesso !
   g_chmod("/percorso/del/file", 000)

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: mostrare i permessi di un file o directory e modificarli
« Risposta #3 il: 08 Agosto 2015, 19:13:37 »
Va bene, giochiamo pure, ma io intanto vorrei capire. Ho scritto così:
  Chmod sAppPath To "rwx-rx-rwx"
  Label7.Text = "Dir. appl.: " & sAppPath & "  Permessi: " & Stat(sAppPath).Perm.User & "-" & Stat(sAppPath).Perm.Group & "-" & Stat(sAppPath).Perm.Other
E sai che cosa ho ottenuto?
Questo:  Dir. appl.:  /home/coc2/lexcoc Permessi: rwx-x-x
Come è possibile?
Poi ho cambiato il comando Chmod in Chmod sAppPath To "rwxr-rwxr-rwxr" (non so che vuol dirre la r finale) e ho ottenuto:
Dir. appl.:  /home/coc2/lexcoc Permessi: rwx-rx-x
Quando avrò capito, se mi spieghi tutto ;), vorrei sapere ancora come si cambia il proprietario. Grazie

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: mostrare i permessi di un file o directory e modificarli
« Risposta #4 il: 08 Agosto 2015, 20:57:42 »
Quando avrò capito, se mi spieghi tutto ;), vorrei sapere ancora come si cambia il proprietario.

Dunque......... nel parametro Mode della funzione Chmod vanno comunque inseriti 9 simboli: 3 per ogni utente titolare di accesso (Proprietario, Gruppo e Altri)
I simboli - come lettere - ammessi sono solo tre:
 r  (consente la lettura);
 w (consente la scrittura);
 x (consente l'esecuzione)
Inoltre ve ne sono altri quattro (s, S, t, T) per impostazioni particolari.
Rinvio al riguardo a questa pagina della documentazione ufficiale:
http://gambaswiki.org/wiki/cat/mode

I simboli - in via ordinaria - non vanno separati da spazi da altri simboli !

Qualora non intendiamo attribuire una capacità sul file ad un utente (e solo in questo caso), al posto del simbolo poniamo un trattino -
Pertanto, i simboli fondamentali sono quattro: r, w, x, - .

Esempio in cui assegnamo tutte le capacità a tutti e tre gli utenti:
Codice: gambas [Seleziona]
Chmod "/percorso/del/file" To "rwxrwxrwx" ' ci sono in tutto 9 simboli (in questo caso solo lettere)



Esempio in cui neghiamo ogni facoltà a tutti e tre gli utenti:
Codice: gambas [Seleziona]
Chmod "/percorso/del/file" To "---------" ' ci sono in tutto 9 simboli (in questo caso solo trattini)



Esempio con la tua impostazione (non assegni la capacità di scrittura all'utente Gruppo):
Codice: gambas [Seleziona]
Chmod "/percorso/del/file" To "rwxr-xrwx"   ' ci sono in tutto 'sempre' 9 simboli (un trattino e 8 lettere)
« Ultima modifica: 10 Agosto 2015, 12:39:06 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: mostrare i permessi di un file o directory e modificarli
« Risposta #5 il: 09 Agosto 2015, 09:13:01 »
Grazie! Finalmente vedo tutto più chiaro. Inoltre, come ho scritto poco fa nell'altra discussione - per puro caso contemporanea - di problemi tecnici, stanotte ho avuto un'illuminazione: ho capito che l'application.path dà la cartella del progetto in ambiente ide, mentre in run-time del programma installato dà /usr/bin. Per mia ulteriore vergogna, questo l'avevo già visto due mesi fa, ma non ci avevo dato peso.
Ora quindi io proverò a scrivere:

  sAppPath = Application.Path
  If Right(sAppPath, 6) <> "lexcoc" Then
    sAppPath = sAppPath & "/lexcoc"
  Endif
  Chmod sAppPath To "rwxr-xrwx"
  With Stat(sAppPath).Perm
    Label7.Text = "Dir. appl.: " & sAppPath & "  Permessi: " & .User & "-" & .Group & "-" & .Other
  End With

Ed ecco che cosa ottengo:
Dir. appl.:  /home/coc2/lexcoc Permessi: rwx-rx-rwx
che è proprio quello che volevo.
Ma tra poco saprò se tutto funziona dopo l'installazione. Magari non ci sarà bisogno nemmeno di modificare i permessi.
Ciao

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: mostrare i permessi di un file o directory e modificarli
« Risposta #6 il: 09 Agosto 2015, 17:09:45 »
No. Nell'installato l'istruzione Chmod sAppPath To "rwxr-xrwx" provoca un errore che non ho registrato ma che era più o meno "operaziione non consentita".
La variabile sAppPath ovviamente conteneva /usr/bin/lexcoc.
Poi, tolta l'istruzione Chmod e rifatta l'installazione, ho preso gli errori di cui allego le screenshot.
La prima dice che il file "istruzioni_lexcoc.txt" non esiste in /usr/bin/lexcoc. Avendo cercato questo file in tutto il filesystem senza successo, è evidente che il file non è incluso nel pacchetto .deb.
Per la seconda screenshot devo andare a vedere l'istruzione 222, ma lo farò quando torno sul sistema di origine (ora sono sul target  dove non c'è il source e non è installato gambas3).
Va bene, è sempre il tentativo di creazione di un file:
hFile = Open sAppPath &/ "passi.txt" For Create
Ma l'errore è dovuto al fatto che 'lexcoc', trovato in /usr/bin del target, non è una cartella. E' un file di tipo sconosciuto.
Ci vorrebbe un generatore di pacchetti .deb più facile da usare, con cui si potesse trasportare tutta la cartella del progetto, contenente i file necessari e l'eseguibile, in una zona non protetta del target.
La discussione è comunque terminata con successo, perché ho imparato a mostrare i permessi e a modificarli.
Ciao
« Ultima modifica: 10 Agosto 2015, 09:14:20 da Cocirio »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [RISOLTO] mostrare i permessi di un file o directory e modificarli
« Risposta #7 il: 10 Agosto 2015, 12:22:11 »
Purtroppo non posso ripetere la tua prova perché non dispongo dello stesso tuo SO., però vorrei darti un consiglio: vedo che hai tue argomenti attivi riguardanti praticamente lo stesso problema. Secondo me, essendo uno prioritario rispetto all'altro, potresti abbandonare quello corrente e dedicarti solamente a risolvere il problema di fondo legato alla inesistenza del file lexcoc. Quando avrai superato positivamente quell'ostacolo, allora potrai completare bene anche questo.
 :ciao:
:ciao: