Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1678 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] utilisé une librairie Win32 dans un script pouvant rouler unix

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] utilisé une librairie Win32 dans un script pouvant rouler unix

n°675377
burgergold
5$? va chez l'diable!
Posté le 16-03-2004 à 20:49:53  profilanswer
 

J'ai un script, qui devra vérifier des trucs pour les serveurs web sous les OS suivants: AIX, linux (debian), MVS (zos) et Windows.
 
Je dois entre autre vérifier que le userid tournant le serveur web n'a pas de privilège système.
 
Sous Win32, je compte utilisé Win32::NetAdmin::UserGetAttributes
 
cependant, aussitot que je fais le use, même si c'est dans ma boucle "Si l'os est Win32", j'ai une erreur en tentant de le faire tourner sous unix (Can't locate Win32/NetAdmin.pm in @INC)

mood
Publicité
Posté le 16-03-2004 à 20:49:53  profilanswer
 

n°676009
burgergold
5$? va chez l'diable!
Posté le 17-03-2004 à 11:48:43  profilanswer
 
n°676046
pospos
Posté le 17-03-2004 à 12:25:30  profilanswer
 

Les "use" sont executé à la compilation, quelque soit l'endroit ou ils sont.
 
si tu le fait dans une boucle conditionnelle alors utilise un "require" à la place du "use". Par contre si tu veux importer des fonction (ou si il en importe par defaut et que tu les utilise), il faudra que tu fasse un "import" explicite.
L'autre solution c'est de faire un 'eval "use ...";'

n°676099
burgergold
5$? va chez l'diable!
Posté le 17-03-2004 à 13:28:13  profilanswer
 

et dans mon cas qu'est-ce qui serait le plus approprié?
 
le script peut rouler sous divers OS, mais lorsque c'est windows, j'ai besoin de la Win32::NetAdmin et de certaines de ses fonctions

n°676119
pospos
Posté le 17-03-2004 à 13:46:33  profilanswer
 

moi je ferais:

Code :
  1. if ($^O =~ /win32/i) {
  2.   require Win32::NetAdmin;
  3.   import Win32::NetAdmin;
  4.   # ou eventuellement avec le nom des fonctions que tu veux importer si elles ne sont pas importées par defaut, exactement comme pour le use:
  5.   # import Win32::NetAdmin qw(func1 func2);
  6. }

n°676128
burgergold
5$? va chez l'diable!
Posté le 17-03-2004 à 13:53:25  profilanswer
 

Si je fais
 

Code :
  1. use Win32::NetAdmin;


 
j'ai aucune erreur, sauf à l'exécution sous unix
 
 
Si je fais
 

Code :
  1. if ($^O =~ /win32/i) {
  2.   require Win32::NetAdmin;
  3.   import Win32::NetAdmin qw(USER_PRIV_ADMIN);
  4. }


 
j'ai une erreur de syntaxe en tentant d'utiliser USER_PRIV_ADMIN, que je n'avais pas avec le use
 

Code :
  1. ##########
  2.       # Must not have system privileges beyond what the web server requires to run
  3.       my ($curpassword, $curpasswordAge, $curprivilege, $curhomeDir, $curcomment, $curflags, $curscriptPath);
  4.       Win32::NetAdmin::UserGetAttributes(Win32::NodeName(), $httpd_conf->User, $curpassword, $curpasswordAge,
  5.                                          $curprivilege, $curhomeDir, $curcomment, $curflags, $curscriptPath,
  6.       );
  7.       if (($curprivilege & USER_PRIV_ADMIN)) {
  8.         push(@report, "1.1 Must not have system privileges beyond what the web server requires to run." );
  9.       }
  10.       ##########

n°676155
pospos
Posté le 17-03-2004 à 14:02:11  profilanswer
 

Tu ne l'a que sous Unix cette erreur non?
 
 

n°676164
burgergold
5$? va chez l'diable!
Posté le 17-03-2004 à 14:07:00  profilanswer
 

pospos a écrit :

Tu ne l'a que sous Unix cette erreur non?


 
erreur sous win32

Code :
  1. use strict;
  2. #use Win32::NetAdmin;
  3. if ($^O =~ /win32/i) {
  4.   #require Win32::NetAdmin;
  5.   #import Win32::NetAdmin qw(USER_PRIV_ADMIN);
  6. }
  7. ##########
  8. # Must not have system privileges beyond what the web server requires to run
  9. my ($curpassword, $curpasswordAge, $curprivilege, $curhomeDir, $curcomment, $curflags, $curscriptPath);
  10. Win32::NetAdmin::UserGetAttributes(Win32::NodeName(), "yaberger", $curpassword, $curpasswordAge, $curprivilege, $curhomeDir, $curcomment, $curflags, $curscriptPath);
  11. if (($curprivilege & USER_PRIV_ADMIN)) {
  12.   print "1.1 Must not have system privileges beyond what the web server requires to run.\n";
  13. }
  14. ##########
  15. print "test";


 
si j'utilise le "use", ca print mon 1.1 must not have...
si j'utilise le require et le import, sous windows, j'ai cette erreur:
 
Z:\httpd_cops>perl ../test.pl
Bareword "USER_PRIV_ADMIN" not allowed while "strict subs" in use at ../test.pl line 17.
Execution of ../test.pl aborted due to compilation errors.


Message édité par burgergold le 17-03-2004 à 14:07:56
n°676179
pospos
Posté le 17-03-2004 à 14:12:01  profilanswer
 

ouai, c'est pasque Perl verifi les barewords à la compilation, et ta constant USER_PRIV_ADMIN n'existe pas encore à ce moment la...
 
donc la solution c'est soit de mettre tout le bloc du "if $^O..." dans un BEGIN (pas certian que ca marche cependant), soit de declarer une sub USER_PRIV_ADMIN qui sera ensuite ecrasée par la vraie constante au moment de l'importe. Du reste c'est le seul moyen de faire si tu veux que ca tourne aussi sous Unix car meme si tu n'execute pas les portions de code specifiques windows en testant une condition, Perl verifira tout de meme les barewords et si il y a aucune surt qui correspond il va gueuler

n°676195
burgergold
5$? va chez l'diable!
Posté le 17-03-2004 à 14:16:23  profilanswer
 

je viens d'essayer ca et ca ne fonctionne pas
 

Code :
  1. BEGIN {
  2.   if ($^O =~ /win32/i) {
  3.     #use Win32::NetAdmin;
  4.     require Win32::NetAdmin;
  5.     import Win32::NetAdmin qw(USER_PRIV_ADMIN);
  6.   }
  7. }

mood
Publicité
Posté le 17-03-2004 à 14:16:23  profilanswer
 

n°676203
burgergold
5$? va chez l'diable!
Posté le 17-03-2004 à 14:18:08  profilanswer
 

Fonctionnel
 

Code :
  1. use strict;
  2. if ($^O =~ /win32/i) {
  3.   require Win32::NetAdmin;
  4.   import Win32::NetAdmin qw(USER_PRIV_ADMIN);
  5. }
  6. sub USER_PRIV_ADMIN;
  7. if ($^O =~ /win32/i) {
  8.   ##########
  9.   # Must not have system privileges beyond what the web server requires to run
  10.   my ($curpassword, $curpasswordAge, $curprivilege, $curhomeDir, $curcomment, $curflags, $curscriptPath);
  11.  
  12.   Win32::NetAdmin::UserGetAttributes(Win32::NodeName(), "yaberger", $curpassword, $curpasswordAge, $curprivilege, $curhomeDir, $curcomment, $curflags, $curscriptPath);
  13.  
  14.   if (($curprivilege & USER_PRIV_ADMIN)) {
  15.     print "1.1 Must not have system privileges beyond what the web server requires to run.\n";
  16.   }
  17.   ##########
  18. }
  19. print "test";


 
gros merci à toi Pospos, oh grand gourou Perl  :jap:

n°676229
pospos
Posté le 17-03-2004 à 14:27:15  profilanswer
 

http://www.pictobank.com/photoluc/gourou.jpg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] utilisé une librairie Win32 dans un script pouvant rouler unix

 

Sujets relatifs
Mon serveur n'a pas la librairie mcrypt...[Perl] Fonction find, en plus d'utilisation de simili-objet
[perl-cgi] Passage de parametresprog php : script commentaire
[Php] adresse de la page de script ![xchat-script python] get le texte des users?
Script perl qui convertit les fuseaux horairesscript no robot ?!?
MySQL script d'update pour manip sur un tinyblob 
Plus de sujets relatifs à : [Perl] utilisé une librairie Win32 dans un script pouvant rouler unix


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR