27 mai 2007

Outil perl pour tester l'accès à un port IP

Ceci est particulièrement utile (quand le réseau possède des firewall / routeurs) pour voir si un port est accessible ou s'il est bloqué ... Merci François pour cet utilitaire.

  1. Copier le code suivant sur la machine Unix ciblée (par exemple sous le nom TestPortIP.pl).
  2. Fermer le programme utilisant ce port (AP0, Tomcat, OpenHR ...), sinon une erreur "Failed to initialize socket" apparaitra du fait d'un conflit d'accès.
  3. L'exécuter en lui passant en paramètre le port à tester (par exemple "perl TestPortIP.pl 2222").
  4. Sur votre poste Windows, ouvrir une fenêtre DOS et exécutez un telnet en précisant la machine et le port ciblés (par exemple "telnet 10.20.30.40 2222").

Si le telnet (au bout de son time out) n'arrive pas à accéder au serveur, une erreur apparaît, le port est bloqué.

Dans le cas contraire, un message "got a connection from:" apparait sur le serveur et "Smile from the server" sur le PC.

#!/usr/bin/perl

use Socket;
$port = $ARGV[0];

$server_struct = pack("S n a4 x8", AF_INET, $port, $server_addr);
$proto = (getprotobyname('tcp'))[2];
socket(MYSOCK, PF_INET, SOCK_STREAM, $proto)|| die "Failed to initialize socket: $!\n";
setsockopt(MYSOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";

my $paddr = sockaddr_in($port, INADDR_ANY);

# bind to a port, then listen
bind(MYSOCK, $paddr) or die "bind: $!";
listen(MYSOCK, SOMAXCONN) or die "listen: $!";
print "SERVER started on port $port\n";

# accepting a connection
my $client_addr;
while ($client_addr = accept(CLIENT, MYSOCK)) {
        # find out who connected
        my ($client_port, $client_ip) = sockaddr_in($client_addr);
        my $client_ipnum = inet_ntoa($client_ip);
        my $client_host = gethostbyaddr($client_ip, AF_INET);
        # print who has connected
        print "got a connection from: $client_host", "[$client_ipnum]\n";
        # send them a message, close connection
        print CLIENT "Smile from the server";
        close CLIENT;
}

20 mai 2007

Upgrade Java et erreur OpenHR "while reading SSL Site Parameters"

Vu sous HR Access 3e
Si a l'ouverture de OpenHR, vous avez une erreur fatale avec le message suivant :

[main] ERROR - OPHRS4201 Error occured while reading SSL Site Parameters org.apache.xml.dtm.DTMConfigurationException: No default implementation found at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:177)

  1. Stoppez les serveur Web, Query et OpenHR
  2. Renommez "$SIGACS/openhr/lib/boot" en boot.old
  3. Renommez "$SIGACS/query/lib/boot" en boot.old
  4. Redémarrez.

Si le test est concluant, vous pouvez détruire les répertoires suffixés en ".old"

A priori, un upgrade Java a eu lieu sur la machine et la librairie Xalan Apache utilisée jusqu'alors par OpenHR entre en concurrence avec celle de Java.

13 mai 2007

Passer par un tableau Cobol indexé permet de limiter les accès SQL.
Utilisez ensuite des SEARCH pour être plus performant.

Exemple :

01 CountryTable.
   02 Country OCCURS 243 TIMES INDEXED BY Cidx.
      03 CountryCode    PIC XX.
      03 CountryName    PIC X(26).
...
          SET Cidx TO 1
          SEARCH Country
             AT END MOVE "Code not found" TO CountryNameSF
             WHEN CountryCode(Cidx) = CountryCodeWF
                  MOVE CountryName(Cidx) TO CountryNameSF
          END-SEARCH
...

Exemple complet sur http://www.csis.ul.ie/

Remarques :
  • Initialisez le tableau ligne à ligne avec un COB INITIALYZE,
  • Le remplir d'occurrences triées.