other sono gli altri utenti che non siano il proprietario o appartengano al gruppo. Cioè, se
un file ha il proprietario "giulio" e gruppo "amicidigiulio", other ti da i permessi dell'utente
"paperino" che non è il proprietario e non fa parte del gruppo "amicidigiulio" perché l'ho cacciato. Cerca su google "permessi file gnu linux" per i dettagli.
Per la prima domanda non ho capito. Do per scontato che sai interpretare r-w-x, quindi
suppongo che tu voglia sapere come si fa a capire quali permessi ha un utente loggato su un qualsiasi file. Io farei così:
DIM sFile AS String
DIM sGruppiUtente AS String
DIM arsGruppi AS String[]
sFile = "/home/pippo/file"
'Senza argomenti groups ti da i gruppi dell'utente loggato.
'Se vuoi sapere altri utenti, "groups utente". In
'questo caso però devi ripulire la risposta prima di creare
'l'array.
SHELL "groups" TO sGruppiUtente
'Creo un'array con i gruppi cui appartiene l'utente loggato,
'poiché InStr può dare falsi positivi.
arsGruppi = Split(Trim$(sGruppiUtente), " ")
IF Stat(sfile).user = User.Name THEN
'l'utente loggato è il proprietario e quindi
'ha i permessi di Stat(sFile).Perm.User
'e puoi finirla qui, perché in genere il proprietario
'ha i maggiori permessi (anche se non è certo).
ENDIF
'Cerco se l'user loggato appartiene al gruppo del file
IF arsGruppi.Exist(Stat(sfile).Group) THEN
'l'utente loggato è nel gruppo del file e quindi
'ha i permessi di Stat(sFile).Perm.Group
ENDIF
'Alla fine se l'utente non è il proprietario
'e non appartiene al gruppo i suoi permesi su quel file sono:
'Stat(sFile).Perm.Other
END
Ciao.
EDIT: allego piccolo esempio. Scegli un file e in console ti scrive che permessi ha su quel file l'utente che sta usando il programma.
Scrive tutti i permessi, se ce ne sono. Sta a te decidere quali vuoi tenere in considerazione, come filtrarli et cetera et cetera. Insomma è un esempio delle cose scritte su.
Va bene, se vuoi sapere se hai i permessi di lettura/scrittura, io modificherei
l'esempio che ho postato così:
PUBLIC SUB Form_Open()
DIM sFile AS String
DIM sGruppiUtente AS String
DIM arsGruppi AS String[]
DIM sPermessi AS String
SHELL "groups" TO sGruppiUtente
arsGruppi = Split(Trim$(sGruppiUtente), " ")
IF NOT Dialog.OpenFile() THEN
sFile = Dialog.Path
ELSE
Message.Error("Devi scegliere un file!", "Esci")
ME.Close
ENDIF
IF Stat(sfile).user = User.Name THEN sPermessi = sPermessi & Stat(sFile).Perm.User
IF arsGruppi.Exist(Stat(sfile).Group) THEN sPermessi = sPermessi & Stat(sFile).Perm.Group
sPermessi = sPermessi & Stat(sFile).Perm.Other
IF InStr(sPermessi, "r") THEN PRINT "permesso di lettura"
IF InStr(sPermessi, "w") THEN PRINT "permesso di scrittura"
END
In pratica modifichi la stringa sPermessi dopo la verifica per user, group, other
e alla fine con Instr valuti se puoi leggere ("r") il file e scriverci sopra ("w").
Allego l'esempio modificato.