<feed xmlns='http://www.w3.org/2005/Atom'>
<title>accel-ppp.git/accel-pppd/auth, branch master</title>
<subtitle>High performance PPTP/L2TP/SSTP/PPPoE/IPoE server for Linux (mirror of https://github.com/marekm72/accel-ppp.git)
</subtitle>
<id>https://git.amelek.net/marekm72/accel-ppp.git/atom?h=master</id>
<link rel='self' href='https://git.amelek.net/marekm72/accel-ppp.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/'/>
<updated>2022-05-13T11:33:07+00:00</updated>
<entry>
<title>auth: discard unphased PAP Authenticate-Request packets</title>
<updated>2022-05-13T11:33:07+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2022-05-13T10:44:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=3c95746caceeebe38c3640ba8986d7b0c8eb7b91'/>
<id>urn:sha1:3c95746caceeebe38c3640ba8986d7b0c8eb7b91</id>
<content type='text'>
Per https://datatracker.ietf.org/doc/html/rfc1334#section-2.2.1:

 Implementation Note: Because the Authenticate-Ack might be
 lost, the authenticator MUST allow repeated Authenticate-
 Request packets after completing the Authentication phase.
 Protocol phase MUST return the same reply Code returned when
 the Authentication phase completed (the message portion MAY be
 different).  Any Authenticate-Request packets received during
 any other phase MUST be silently discarded.
</content>
</entry>
<entry>
<title>auth: add support challenge-name option for CHAP</title>
<updated>2022-05-13T10:10:10+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2022-05-13T10:10:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=37a4f391f1a4140dfd656aa2e01366686e7380ab'/>
<id>urn:sha1:37a4f391f1a4140dfd656aa2e01366686e7380ab</id>
<content type='text'>
Fine tune commit 39a9eb807ade35cf60edc6f2e209ed74ba1d262f
</content>
</entry>
<entry>
<title>auth: fix CHAP challenge with ixia</title>
<updated>2022-03-08T12:55:36+00:00</updated>
<author>
<name>Gabriel Jeanneau</name>
<email>gabriel.jeanneau@6wind.com</email>
</author>
<published>2022-01-21T12:59:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=39a9eb807ade35cf60edc6f2e209ed74ba1d262f'/>
<id>urn:sha1:39a9eb807ade35cf60edc6f2e209ed74ba1d262f</id>
<content type='text'>
here is the structure of CHAP challenge message for PPP:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |  Identifier   |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Value-Size   |  Value ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Name ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

When sending a CHAP challenge, accel-ppp set NAME to NULL. According to
RFC 1994 (PPP CHAP), this field should neither be NULL nor be equal to
CR/LF. As ixia does not recognize AUthentication packet when this field
is NULL, we set it to "accel-ppp" by default.

In MS-CHAPv1 and MS-CHAPv2, authenticator does not provide information
in Name field.

Signed-off-by: Gabriel Jeanneau &lt;gabriel.jeanneau@6wind.com&gt;
</content>
</entry>
<entry>
<title>Fixed some errors found by valgrind and pvs-studio (#11)</title>
<updated>2021-03-20T14:14:59+00:00</updated>
<author>
<name>[anp/hsw]</name>
<email>sysop@880.ru</email>
</author>
<published>2021-03-20T14:14:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=62f7740033f05053a581e864742575a46ccc6da2'/>
<id>urn:sha1:62f7740033f05053a581e864742575a46ccc6da2</id>
<content type='text'>
* Fix errors found by valgrind

==12312== Syscall param sendmsg(msg.msg_iov[0]) points to uninitialised byte(s)
==12312==    at 0x486CCF0: sendmsg (in /lib/libpthread-2.22.so)
==12312==    by 0x12F57F: rtnl_talk (libnetlink.c:316)
==12312==    by 0x132DA3: genl_resolve_mcg (genl.c:52)
==12312==    by 0x484E1CB: init (vlan_mon.c:528)
==12312==    by 0x484CDC0: vlan_mon_register_proto (vlan_mon.c:48)
==12312==    by 0x510B763: load_vlan_mon (pppoe.c:1914)
==12312==    by 0x510BFF2: load_config (pppoe.c:2064)
==12312==    by 0x510C22A: pppoe_init (pppoe.c:2108)
==12312==    by 0x483E9EB: triton_load_modules (triton.c:704)
==12312==    by 0x1384B2: main (main.c:339)
==12312==  Address 0xbedacdd8 is on thread 1's stack
==12312==  in frame #2, created by genl_resolve_mcg (genl.c:23)

==12312== 15 bytes in 1 blocks are definitely lost in loss record 352 of 836
==12312==    at 0x482A9A9: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12312==    by 0x4B97524: strdup (in /lib/libc-2.22.so)
==12312==    by 0x12C30C: init (telnet.c:769)
==12312==    by 0x483E9EB: triton_load_modules (triton.c:704)
==12312==    by 0x1384B2: main (main.c:339)
==12312==
==12312== 15 bytes in 1 blocks are definitely lost in loss record 353 of 836
==12312==    at 0x482A9A9: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12312==    by 0x4B97524: strdup (in /lib/libc-2.22.so)
==12312==    by 0x12D60A: init (tcp.c:392)
==12312==    by 0x483E9EB: triton_load_modules (triton.c:704)
==12312==    by 0x1384B2: main (main.c:339)

* Fix another warnings by cppcheck

[accel-pppd/ctrl/ipoe/arp.c:256]: (error) Uninitialized variable: n
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 5) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:90]: (warning) %x in format string (no. 6) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 5) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:129]: (warning) %x in format string (no. 6) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 5) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/mac_filter.c:158]: (warning) %x in format string (no. 6) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ctrl/pppoe/pppoe.c:738]: (warning) Possible null pointer dereference
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'int *'.
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ipv6/dhcpv6.c:911]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/libnetlink/libnetlink.c:515]: (warning) Possible null pointer dereference
[accel-pppd/ppp/ipv6cp_opt_intfid.c:185]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 2) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.
[accel-pppd/ppp/ipv6cp_opt_intfid.c:298]: (warning) %x in format string (no. 4) requires 'unsigned int *' but the argument type is 'signed int *'.

* Suppress compiler warnings

* Fix locking errors

/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       279     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 279, 249.
/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       333     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 333, 315.
/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       422     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 422, 372.
/opt/pvs/accel-ppp/accel-pppd/extra/pppd_compat.c       488     warn    V1020 The function exited without calling the 'sigchld_unlock' function. Check lines: 488, 468.
/opt/pvs/accel-ppp/accel-pppd/triton/mempool.c  119     warn    V1020 The function exited without calling the 'pthread_spin_unlock' function. Check lines: 119, 116.

* Fix array len errors

/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        75      warn    V557 Array underrun is possible. The value of 'len - 1' index could reach -1.
/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        76      warn    V557 Array underrun is possible. The value of '-- len' index could reach -1.

* Fix possible memory leaks

/opt/pvs/accel-ppp/accel-pppd/radius/radius.c   936     err     V773 The function was exited without releasing the 'str' pointer. A memory leak is possible.
/opt/pvs/accel-ppp/accel-pppd/radius/serv.c     622     err     V773 The function was exited without releasing the 'str' pointer. A memory leak is possible.
/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        144     err     V773 The function was exited without releasing the 'raw' pointer. A memory leak is possible.

* Fix unsafe code

/opt/pvs/accel-ppp/accel-pppd/cli/tcp.c 364     warn    V1004 The 'host' pointer was used unsafely after it was verified against nullptr. Check lines: 338, 364.
/opt/pvs/accel-ppp/accel-pppd/cli/telnet.c      701     warn    V1004 The 'host' pointer was used unsafely after it was verified against nullptr. Check lines: 675, 701.
/opt/pvs/accel-ppp/accel-pppd/extra/ippool.c    241     err     V614 Potentially uninitialized pointer 'pos' used.
/opt/pvs/accel-ppp/accel-pppd/radius/dict.c     165     err     V614 Uninitialized pointer 'parent_items' used.

* Remove duplicate code

/opt/pvs/accel-ppp/accel-pppd/radius/serv.c     202     warn    V547 Expression 'ts.tv_sec &lt; req-&gt;serv-&gt;fail_time' is always false.

* Fix treating signed bool variables as unsigned

* Add nullptr checking

/opt/pvs/accel-ppp/accel-pppd/ipv6/dhcpv6.c     886     err     V595 The 'opt-&gt;val' pointer was utilized before it was verified against nullptr. Check lines: 886, 890.
/opt/pvs/accel-ppp/accel-pppd/ipv6/nd.c 479     err     V595 The 'opt-&gt;val' pointer was utilized before it was verified against nullptr. Check lines: 479, 483.
/opt/pvs/accel-ppp/accel-pppd/radius/auth.c     152     err     V595 The 'rpd-&gt;auth_ctx' pointer was utilized before it was verified against nullptr. Check lines: 152, 154.
/opt/pvs/accel-ppp/accel-pppd/triton/conf_file.c        114     err     V595 The 'cur_sect' pointer was utilized before it was verified against nullptr. Check lines: 114, 117.

* Add logging of exit conditions

* Clarify calculation

[accel-pppd/ppp/ccp_mppe.c:281]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:282]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:283]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:284]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:285]: (style) Clarify calculation precedence for '&amp;' and '?'.
[accel-pppd/ppp/ccp_mppe.c:286]: (style) Clarify calculation precedence for '&amp;' and '?'.
[drivers/ipoe/ipoe.c:307]: (style) Clarify calculation precedence for '&amp;' and '?'.

* Fix void calculations

[accel-pppd/ctrl/pppoe/disc.c:211]: (portability) 'pkt' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/ctrl/pptp/pptp.c:150]: (portability) 'buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/acct.c:37]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/auth.c:35]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/auth.c:79]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:43]: (portability) 'pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:47]: (portability) 'pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:57]: (portability) 'pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:65]: (portability) 'req.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/dm_coa.c:97]: (portability) 'req.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/radius/serv.c:364]: (portability) 'req.pack.buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/triton/mempool.c:115]: (portability) 'mmap_ptr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/triton/mempool.c:122]: (portability) 'mmap_ptr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/triton/mempool.c:276]: (portability) 'ptr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.

* Fix void part 2

[accel-pppd/ipv6/dhcpv6.c:844]: (portability) 'conf_dnssl' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/ipv6/nd.c:199]: (portability) '(void*)dnsslinfo' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.
[accel-pppd/ipv6/nd.c:432]: (portability) 'conf_dnssl' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined.

* Fix null pointer dereference

[accel-pppd/ctrl/ipoe/ipoe.c:2048]: (warning) Possible null pointer dereference: eth
[accel-pppd/ctrl/ipoe/ipoe.c:2049]: (warning) Possible null pointer dereference: iph

* Remove redundant check

/opt/pvs/accel-ppp/accel-pppd/ctrl/l2tp/packet.c        656     warn    V547 Expression 'attr-&gt;length &lt;= 16' is always false.

* PR fixes

* PR fixes 2</content>
</entry>
<entry>
<title>auth/chap-secrets/dhcpv4: fix big-endian arch support</title>
<updated>2020-09-05T22:09:01+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2020-09-05T22:09:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=3dc35ad353017d12049a70d1b3c2c90f0aaade43'/>
<id>urn:sha1:3dc35ad353017d12049a70d1b3c2c90f0aaade43</id>
<content type='text'>
</content>
</entry>
<entry>
<title>ppp: lcp: auth: fix one-by-one oveflow</title>
<updated>2020-08-02T14:09:13+00:00</updated>
<author>
<name>Vladislav Grishenko</name>
<email>themiron@mail.ru</email>
</author>
<published>2020-08-02T14:09:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=8d1f8733b1a202431b0faf91d70f935f65b0cec2'/>
<id>urn:sha1:8d1f8733b1a202431b0faf91d70f935f65b0cec2</id>
<content type='text'>
lcp auth doesn't take into account auth extra bytes
for lcp request buffer allocation for chap/mschap/mschapv2
protocols, so last byte corrupts memory with undefined behavior
incl. crash.
</content>
</entry>
<entry>
<title>auth: remove .recv_conf_req from struct ppp_auth_handler_t</title>
<updated>2018-11-27T06:56:56+00:00</updated>
<author>
<name>Guillaume Nault</name>
<email>g.nault@alphalink.fr</email>
</author>
<published>2018-11-19T16:44:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=9de2460f922eba2c8e0ace09be5f42e74a0f0ff7'/>
<id>urn:sha1:9de2460f922eba2c8e0ace09be5f42e74a0f0ff7</id>
<content type='text'>
This callback isn't used anymore. Let's remove it from all
authentication backends.

Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
</content>
</entry>
<entry>
<title>auth: fix re-authentication of peer in all chap modules</title>
<updated>2018-03-24T06:41:38+00:00</updated>
<author>
<name>Guillaume Nault</name>
<email>g.nault@alphalink.fr</email>
</author>
<published>2018-03-21T17:09:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=10ede239609e41e259be9c38932e33f7dc74bd8a'/>
<id>urn:sha1:10ede239609e41e259be9c38932e33f7dc74bd8a</id>
<content type='text'>
If the peer re-authenticates (because of option conf_interval) and pwdb
calls auth_result(), we may add the interval timer again to the session
context. This crashes accel-ppp when deleting the session, because the
interval timer is removed only once and the superfluous timers are
still running. Therefore, when removing the context, triton detects
this issue and calls abort().

To fix this, we need to detect if the session is already started and
just send a CHAP Success message in this case.

Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
</content>
</entry>
<entry>
<title>auth: avoid sending duplicate CHAP Failure messages in mschap-v1 and mschap-v2</title>
<updated>2018-03-24T06:41:22+00:00</updated>
<author>
<name>Guillaume Nault</name>
<email>g.nault@alphalink.fr</email>
</author>
<published>2018-03-21T17:09:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=29c626683ea1aa6136360a6afcc6a053d0342a3d'/>
<id>urn:sha1:29c626683ea1aa6136360a6afcc6a053d0342a3d</id>
<content type='text'>
When pwdb returns PWDB_NO_IMPL and chap_recv_response() performs the
authentication itself, it delegates this task to chap_check_response().
This function sends a CHAP Failure message if it can't retrieve the
password, but not in case of password mismatch. Since
chap_recv_response() already sends a CHAP Failure message on error,
the one sent by chap_check_response() is useless.

Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
</content>
</entry>
<entry>
<title>auth: fix missing CHAP Success message in chap-md5</title>
<updated>2018-03-24T06:41:01+00:00</updated>
<author>
<name>Guillaume Nault</name>
<email>g.nault@alphalink.fr</email>
</author>
<published>2018-03-21T17:09:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/marekm72/accel-ppp.git/commit/?id=5da833d512870bfb4d39741df2bec7fad2969ebd'/>
<id>urn:sha1:5da833d512870bfb4d39741df2bec7fad2969ebd</id>
<content type='text'>
When pwdb returns PWDB_NO_IMPL, then chap_recv_response() tries to
authenticate the peer itself. If this authentication succeeds but the
session is already started (in case of re-authentication, with option
conf_interval), no CHAP Success is sent.

This patch sends the missing CHAP Success message in this case, so that
the peer knows that its response has been received and accepted, and
that no retransmission is required.

Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
</content>
</entry>
</feed>
