Laboureau pierre wrote:
> 
>     Salut,
> 
> Dans le cadre, de l'acces au port parallele sous Linux, je desire
> utiliser la fonction ioperm() or :
> 
> En utilisant ioperm() en tant qu'utilisateur, le shell renvoie le message
> d'erreur suivant : ioperm:op�ration non permise.
> En tant que root, la communication avec le port fonctionne.
> J'ai donne les droits aux fichiers /dev/lp* et aux fichiers /dev/par* : �a ne
> change rien.
> En utilisant alors setuid(0) (<unistd.h>) : pas + de r�sultats.
> 
> Comment utiliser ioperm() en ayant les droits utilisateur ?

Bon je connais pas pr�cisement la commande ioperm mais avec un coup de
man tu vois :


DESCRIPTION
       Ioperm  positionne les bits de permission d'acc�s du processus
aux ports commen�ant � l'adresse from �tales sur
       num octets � la valeur turn_on.  L'utilisation de ioperm
n�cessite les privil�ges de Super-User.


C'est clair. Sous UNIX les utilisateurs NE PEUVENT PAS toucher au
p�riph�riques directement.
Ton programme qui contient cette commande doit �tre lanc� en tant que
root.

L'utilisation de setuid() ne permet pas a un processus de gagner des
privileges bien sur car cela permettrait � n'importe quel utilisateur
capable de compiler du C de faire un truc du genre :

void main (void)
{
        setuid(0);
        execl("/usr/bin/bash","");
}


Si vraiment ton programme est "s�r" (gare au controle de validit� des
param�tres pouvant g�n�rer des erreurs) tu peux faire comme ceci :
change l'UID et le GID de ton executable a root
et tu fais un chmod u+s

Ainsi lorsque un user lancera l'executable, celui s'executera en tant
que root.

Si t es pas root et que tu peux pas faire ca, c est que tu t es lance
dans un truc irrealisable :)

-- 
----------------------------------------------------------
  Frederic PLE
  email: [EMAIL PROTECTED]     Yahoo! Messenger: gvfred
----------------------------------------------------------
Make money to surf :
         https://www.alladvantage.com/home.asp?refid=IIU-338
         http://www.mediabarre.com/cgi-bin/mba.cgi?004761

Répondre à