Hallo Peter,
Das funktioniert ja wunderbar, aber trotzdem gibt mit
ip2long immer signed-Werte zurück. z.B. konvertiert er
255.255.255.255 gleich zu -1 statt zu 4294967295.
255.255.255.255 ist keine gueltige IP-Adresse. Wenn du einen
Client mit dieser IP triffst, kannst du ihn gleich abweisen.
Trotzdem ist der Rueckgabewert von -1 richtig. man inet_addr
(siehe unten) sagt dazu:
The inet_addr() function converts the Internet host
address cp from numbers-and-dots notation into binary data
in network byte order. If the input is invalid,
INADDR_NONE (usually -1) is returned. This is an obsolete
interface to inet_aton, described immediately above; it
is obsolete because -1 is a valid address (255.255.255.255),
and inet_aton provides a cleaner way to indicate error
return.
Dann funktioniert mein System natürlich nicht mehr immer.
Doch, es funktioniert wunderbar.
z.B. gibt die letzte Regel die Policy an, und diese hat
als von "0.0.0.0" und als bis "255.255.255.255".
0.0.0.0 ist genau so wenig eine gueltige IP-Adresse wie
255.255.255.255.
Typen kann ich offensichtlich mit Casts umwandeln aber
nicht *UNSIGNED* erzwingen.
Ich habe mal im Source nachgeschaut. Nein, das kannst du
nicht erzwingen. Diese Funktion ist ein Wrapper um ntohl().
Diese ntohl()-Funktion gibt uint32 zurueck, also
unsinged long. Die PHP-Funktion ip2long aber wandelt das
intern um nach long:
RETURN_LONG(ntohl(inet_addr(Z_STRVAL_PP(str))));
Tatsaechlich sollte die inet_addr() Funktion gar nicht mehr
verwendet werden, sie ist als obsolet gekennzeichnet. Mal
sehen, wie das in PHP 4.3.3 aussieht, moment... da sieht es
genau so aus. Hm. Mal einen Patch einreichen.
Gruesse,
CK
http://cforum.teamone.de/
http://wishlist.tetekum.de/
If God had meant for us to be in the Army, we would have been born with green, baggy skin.