Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
libnice
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
libnice
Commits
f5f475dd
Commit
f5f475dd
authored
Jun 16, 2008
by
Youness Alaoui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ported test-format to the new API
parent
e2dd7d8e
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
91 additions
and
61 deletions
+91
-61
stun/tests/test-format.c
stun/tests/test-format.c
+91
-61
No files found.
stun/tests/test-format.c
View file @
f5f475dd
...
...
@@ -40,7 +40,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include "stun/stun
-msg
.h"
#include "stun/stun
agent
.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
...
...
@@ -60,132 +60,169 @@ static void fatal (const char *msg, ...)
exit
(
1
);
}
static
const
char
usr
[]
=
"admin"
;
static
const
char
pwd
[]
=
"s3kr3t"
;
bool
dynamic_check_validater
(
StunAgent
*
agent
,
StunMessage
*
message
,
uint8_t
*
username
,
uint16_t
username_len
,
uint8_t
**
password
,
size_t
*
password_len
,
void
*
user_data
)
{
if
(
username_len
!=
strlen
(
usr
)
||
memcmp
(
username
,
usr
,
strlen
(
usr
))
!=
0
)
fatal
(
"vector test : Validater received wrong username!"
);
*
password
=
(
uint8_t
*
)
pwd
;
*
password_len
=
strlen
(
pwd
);
return
true
;
}
static
void
dynamic_check
(
const
uint8_t
*
msg
,
size_t
len
)
dynamic_check
(
StunAgent
*
agent
,
StunMessage
*
msg
,
size_t
len
)
{
size_t
len2
=
stun_validate
(
msg
,
len
);
if
((
len
!=
len2
)
||
(
len2
&
3
))
fatal
(
"Invalid message (%u, %u)
\n
"
,
(
unsigned
)
len
,
(
unsigned
)
len2
);
if
(
!
stun_demux
(
msg
))
fatal
(
"Invalid message multiplexing"
);
StunMessage
msg2
;
if
(
stun_agent_validate
(
agent
,
&
msg2
,
msg
->
buffer
,
len
,
dynamic_check_validater
,
NULL
)
!=
STUN_VALIDATION_SUCCESS
)
fatal
(
"Could not validate message"
);
printf
(
"Built message of %u bytes
\n
"
,
(
unsigned
)
len
);
}
static
size_t
finish_check
(
uint8_t
*
msg
)
finish_check
(
StunAgent
*
agent
,
StunMessage
*
msg
)
{
stun_msg_t
mshort
;
size_t
len
=
sizeof
(
stun_msg_t
);
memcpy
(
mshort
,
msg
,
sizeof
(
mshort
));
uint8_t
buf
[
STUN_MAX_MESSAGE_SIZE
+
8
];
size_t
len
;
uint16_t
plen
;
StunMessage
msg2
;
msg2
.
agent
=
msg
->
agent
;
msg2
.
buffer
=
buf
;
msg2
.
buffer_len
=
sizeof
(
buf
);
memcpy
(
msg2
.
buffer
,
msg
->
buffer
,
sizeof
(
buf
)
>
msg
->
buffer_len
?
msg
->
buffer_len
:
sizeof
(
buf
));
len
=
stun_agent_finish_message
(
agent
,
msg
,
NULL
,
0
);
if
(
stun_finish
(
msg
,
&
len
,
0
)
)
if
(
len
<=
0
)
fatal
(
"Cannot finish message"
);
dynamic_check
(
msg
,
len
);
dynamic_check
(
agent
,
msg
,
len
);
len
=
sizeof
(
mshort
);
if
(
stun_verify_password
(
mshort
,
"toto"
)
!=
ENOENT
)
if
(
stun_message_find
(
&
msg2
,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY
,
&
plen
)
!=
NULL
)
fatal
(
"Missing HMAC test failed"
);
if
(
stun_finish_short
(
mshort
,
&
len
,
"ABCDE"
,
"admin"
,
"ABC"
,
0
))
stun_message_append_string
(
&
msg2
,
STUN_ATTRIBUTE_USERNAME
,
usr
);
len
=
stun_agent_finish_message
(
agent
,
&
msg2
,
pwd
,
strlen
(
pwd
));
if
(
len
<=
0
)
fatal
(
"Cannot finish message with short-term creds"
);
dynamic_check
(
mshort
,
len
);
if
(
stun_verify_password
(
mshort
,
"admin"
)
!=
0
)
fatal
(
"Valid HMAC test failed"
);
dynamic_check
(
agent
,
&
msg2
,
len
);
return
len
;
}
static
void
check_af
(
const
char
*
name
,
int
family
,
socklen_t
addrlen
)
{
struct
sockaddr_storage
addr
;
stun_msg_t
msg
;
uint8_t
buf
[
100
];
StunAgent
agent
;
StunMessage
msg
;
uint16_t
known_attributes
[]
=
{
STUN_ATTRIBUTE_USERNAME
,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY
,
STUN_ATTRIBUTE_ERROR_CODE
,
0
};
stun_agent_init
(
&
agent
,
known_attributes
,
STUN_COMPATIBILITY_3489BIS
,
STUN_AGENT_USAGE_USE_FINGERPRINT
);
assert
(
addrlen
<=
sizeof
(
addr
));
memset
(
&
addr
,
0
,
sizeof
(
addr
));
stun_
init_request
(
msg
,
STUN_BINDING
);
stun_
agent_init_request
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
)
,
STUN_BINDING
);
if
(
stun_
append_addr
(
msg
,
sizeof
(
msg
),
STUN
_MAPPED_ADDRESS
,
if
(
stun_
message_append_addr
(
&
msg
,
STUN_ATTRIBUTE
_MAPPED_ADDRESS
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
)
!=
EAFNOSUPPORT
)
fatal
(
"Unknown address family test failed"
);
if
(
stun_
append_xor_addr
(
msg
,
sizeof
(
msg
),
STUN
_XOR_MAPPED_ADDRESS
,
if
(
stun_
message_append_xor_addr
(
&
msg
,
STUN_ATTRIBUTE
_XOR_MAPPED_ADDRESS
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
)
!=
EAFNOSUPPORT
)
fatal
(
"Unknown address family xor test failed"
);
addr
.
ss_family
=
family
;
if
(
stun_
append_addr
(
msg
,
sizeof
(
msg
),
STUN
_MAPPED_ADDRESS
,
if
(
stun_
message_append_addr
(
&
msg
,
STUN_ATTRIBUTE
_MAPPED_ADDRESS
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
-
1
)
!=
EINVAL
)
fatal
(
"Too small %s sockaddr test failed"
,
name
);
if
(
stun_
append_xor_addr
(
msg
,
sizeof
(
msg
),
STUN
_XOR_MAPPED_ADDRESS
,
if
(
stun_
message_append_xor_addr
(
&
msg
,
STUN_ATTRIBUTE
_XOR_MAPPED_ADDRESS
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
-
1
)
!=
EINVAL
)
fatal
(
"Too small %s sockaddr xor test failed"
,
name
);
if
(
stun_
append_addr
(
msg
,
sizeof
(
msg
),
STUN
_MAPPED_ADDRESS
,
if
(
stun_
message_append_addr
(
&
msg
,
STUN_ATTRIBUTE
_MAPPED_ADDRESS
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
))
fatal
(
"%s sockaddr test failed"
,
name
);
if
(
stun_
append_xor_addr
(
msg
,
sizeof
(
msg
),
STUN
_XOR_MAPPED_ADDRESS
,
if
(
stun_
message_append_xor_addr
(
&
msg
,
STUN_ATTRIBUTE
_XOR_MAPPED_ADDRESS
,
(
struct
sockaddr
*
)
&
addr
,
addrlen
))
fatal
(
"%s sockaddr xor test failed"
,
name
);
}
int
main
(
void
)
{
uint8_t
msg
[
STUN_MAXMSG
+
8
];
uint8_t
buf
[
100
];
size_t
len
;
struct
sockaddr
addr
;
StunAgent
agent
;
StunMessage
msg
;
uint16_t
known_attributes
[]
=
{
STUN_ATTRIBUTE_USERNAME
,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY
,
STUN_ATTRIBUTE_ERROR_CODE
,
0
};
stun_agent_init
(
&
agent
,
known_attributes
,
STUN_COMPATIBILITY_3489BIS
,
STUN_AGENT_USAGE_USE_FINGERPRINT
);
/* Request formatting test */
stun_
init_request
(
msg
,
STUN_BINDING
);
finish_check
(
msg
);
if
(
memcmp
(
msg
,
"
\x00\x01
"
,
2
))
stun_
agent_init_request
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
)
,
STUN_BINDING
);
finish_check
(
&
agent
,
&
msg
);
if
(
memcmp
(
buf
,
"
\x00\x01
"
,
2
))
fatal
(
"Request formatting test failed"
);
/* Response formatting test */
stun_
init_response
(
msg
,
sizeof
(
msg
),
msg
,
0
);
finish_check
(
msg
);
if
(
memcmp
(
msg
,
"
\x01\x01
"
,
2
))
stun_
agent_init_response
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
);
finish_check
(
&
agent
,
&
msg
);
if
(
memcmp
(
buf
,
"
\x01\x01
"
,
2
))
fatal
(
"Response formatting test failed"
);
/* Error formatting test */
stun_init_request
(
msg
,
STUN_BINDING
);
if
(
stun_init_error
(
msg
,
sizeof
(
msg
),
msg
,
400
,
0
))
stun_agent_init_request
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
STUN_BINDING
);
finish_check
(
&
agent
,
&
msg
);
if
(
!
stun_agent_init_error
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
,
400
))
fatal
(
"Error initialization test failed"
);
finish_check
(
msg
);
if
(
memcmp
(
msg
,
"
\x01\x11
"
,
2
))
finish_check
(
&
agent
,
&
msg
);
if
(
memcmp
(
buf
,
"
\x01\x11
"
,
2
))
fatal
(
"Error formatting test failed"
);
/* Unknown error formatting test */
stun_init_request
(
msg
,
STUN_BINDING
);
if
(
stun_init_error
(
msg
,
sizeof
(
msg
),
msg
,
666
,
0
))
stun_agent_init_request
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
STUN_BINDING
);
finish_check
(
&
agent
,
&
msg
);
if
(
!
stun_agent_init_error
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
&
msg
,
666
))
fatal
(
"Unknown error initialization test failed"
);
finish_check
(
msg
);
if
(
memcmp
(
msg
,
"
\x01\x11
"
,
2
))
finish_check
(
&
agent
,
&
msg
);
if
(
memcmp
(
buf
,
"
\x01\x11
"
,
2
))
fatal
(
"Unknown error formatting test failed"
);
/* Overflow tests */
stun_init_request
(
msg
,
STUN_BINDING
);
stun_agent_init_request
(
&
agent
,
&
msg
,
buf
,
sizeof
(
buf
),
STUN_BINDING
);
for
(
len
=
0
;
stun_
append_flag
(
msg
,
sizeof
(
msg
)
,
0xffff
)
!=
ENOBUFS
;
stun_
message_append_flag
(
&
msg
,
0xffff
)
!=
ENOBUFS
;
len
+=
4
)
{
if
(
len
>
0xffff
)
fatal
(
"Overflow protection test failed"
);
}
if
(
stun_
append32
(
msg
,
sizeof
(
msg
)
,
0xffff
,
0x12345678
)
!=
ENOBUFS
)
if
(
stun_
message_append32
(
&
msg
,
0xffff
,
0x12345678
)
!=
ENOBUFS
)
fatal
(
"Double-word overflow test failed"
);
if
(
stun_
append64
(
msg
,
sizeof
(
msg
)
,
0xffff
,
if
(
stun_
message_append64
(
&
msg
,
0xffff
,
0x123456789abcdef0
)
!=
ENOBUFS
)
fatal
(
"Quad-word overflow test failed"
);
if
(
stun_
append_string
(
msg
,
sizeof
(
msg
)
,
0xffff
,
"foobar"
)
!=
ENOBUFS
)
if
(
stun_
message_append_string
(
&
msg
,
0xffff
,
"foobar"
)
!=
ENOBUFS
)
fatal
(
"String overflow test failed"
);
memset
(
&
addr
,
0
,
sizeof
(
addr
));
...
...
@@ -193,21 +230,14 @@ int main (void)
#ifdef HAVE_SA_LEN
addr
.
sa_len
=
sizeof
(
addr
);
#endif
if
(
stun_
append_xor_addr
(
msg
,
sizeof
(
msg
)
,
0xffff
,
&
addr
,
if
(
stun_
message_append_xor_addr
(
&
msg
,
0xffff
,
&
addr
,
sizeof
(
addr
))
!=
ENOBUFS
)
fatal
(
"Address overflow test failed"
);
len
=
sizeof
(
msg
);
if
(
stun_
finish
(
msg
,
&
len
,
0
)
!=
ENOBUFS
)
if
(
stun_
agent_finish_message
(
&
agent
,
&
msg
,
NULL
,
0
)
!=
0
)
fatal
(
"Fingerprint overflow test failed"
);
len
=
sizeof
(
msg
);
if
(
stun_finish_short
(
msg
,
&
len
,
NULL
,
"secret"
,
NULL
,
0
)
!=
ENOBUFS
)
if
(
stun_agent_finish_message
(
&
agent
,
&
msg
,
pwd
,
strlen
(
pwd
))
!=
0
)
fatal
(
"Message integrity overflow test failed"
);
len
=
sizeof
(
msg
);
if
(
stun_finish_short
(
msg
,
&
len
,
"login"
,
"secret"
,
NULL
,
0
)
!=
ENOBUFS
)
fatal
(
"Username overflow test failed"
);
len
=
sizeof
(
msg
);
if
(
stun_finish_short
(
msg
,
&
len
,
NULL
,
"secret"
,
"foobar"
,
0
)
!=
ENOBUFS
)
fatal
(
"Nonce overflow test failed"
);
/* Address attributes tests */
check_af
(
"IPv4"
,
AF_INET
,
sizeof
(
struct
sockaddr_in
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment