Vi sarà capitato di aver realizzato un programma Gambas che preveda nella medesima sessione di sistema operativo l'inserimento della propria password di root per aprire un determinato file con accesso protetto.
Come è noto, per far immettere la propria password di root, con
Exec o
Shell si utilizza il comando
gksu (o
gksudo):
Exec ["gksu", "file_ad_accesso_protetto"]
che fa aprire un'apposita finestra.
Diventa, però, alquanto noioso e sgradevole dover inserire ogni volta la password, se dobbiamo o vogliamo lanciare il nostro applicativo più volte - magari per provarlo e testarlo - nella medesima sessione di sistema.
Si può ovviare a questo fastidio, utilizzando il comando
chmod una volta sola per impostare il setUID. Tale comando consentirà con effetto temporaneo, limitato alla sola attuale sessione di sistema, che tutti possano eseguire
tranquillamente un programma o accedere ad un file che richiede i permessi di root.
In sostanza, la password verrà sì inserita, ma
1 volta soltanto !
Ho scritto il seguente codice nell'intento di ottenere come mero esempio libero accedere al file-device del Mouse:
flPro As Process
Public Sub Form_Open()
Dim num As Byte
' riconosce se il programma è stato già lanciato nell'attuale
' sessione di sistema operativo. *Se non* è stato lanciato almeno
' una volta, fa inserire la password di root per impostare il setUID
' e consentire l'apertura del file protetto:
If Not Exist("/tmp/chmod.txt") Then
Exec ["gksu", "chmod 4777", "/dev/input/mouse0"] Wait
File.Save("/tmp/chmod.txt", "c'è")
Endif
' va a gestire il file-device:
flPro = Exec ["cat", "/dev/input/mouse0"] For Read As "flPro"
End
Public Sub flPro_Read()
Dim b As Byte
' legge i dati provenienti dal file-device del mouse...
Read #flPro, b
'...e li mostra in console:
Print b
End
...che ne pensate ?