david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[slam] Fix multicast address parsing

slam_parse_multicast_address() was failing to strip the initial "/"
from the URI path.
This commit is contained in:
Michael Brown 2008-06-10 10:03:31 +01:00
parent 798ddf884f
commit 81d92d5181
1 changed files with 11 additions and 8 deletions

View File

@ -632,27 +632,30 @@ static struct xfer_interface_operations slam_xfer_operations = {
static int slam_parse_multicast_address ( struct slam_request *slam,
const char *path,
struct sockaddr_in *address ) {
char path_dup[ strlen ( path ) + 1 ];
char path_dup[ strlen ( path ) /* no +1 */ ];
char *sep;
char *end;
/* Create temporary copy of path */
memcpy ( path_dup, path, sizeof ( path_dup ) );
/* Create temporary copy of path, minus the leading '/' */
assert ( *path == '/' );
memcpy ( path_dup, ( path + 1 ) , sizeof ( path_dup ) );
/* Parse port, if present */
sep = strchr ( path_dup, ':' );
if ( sep ) {
*(sep++) = '\0';
address->sin_port = htons ( strtoul ( sep, &sep, 0 ) );
if ( *sep != '\0' ) {
DBGC ( slam, "SLAM %p invalid multicast port\n",
slam );
address->sin_port = htons ( strtoul ( sep, &end, 0 ) );
if ( *end != '\0' ) {
DBGC ( slam, "SLAM %p invalid multicast port "
"\"%s\"\n", slam, sep );
return -EINVAL;
}
}
/* Parse address */
if ( inet_aton ( path_dup, &address->sin_addr ) == 0 ) {
DBGC ( slam, "SLAM %p invalid multicast address\n", slam );
DBGC ( slam, "SLAM %p invalid multicast address \"%s\"\n",
slam, path_dup );
return -EINVAL;
}