SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
What's in an Email Address? 
RFC2822 Em@il @ddresses for Mere Mortals 
Schalk W. Cronjé 
@ysb33r
Why This Topic? 
● Recurring bugs in software we build 
● Lack of understanding at all levels 
– Developers 
– Testers 
– Support People 
● Assumptions made, without reading RFCs 
● Understanding RFCs are not straightforward 
– RTFM is difficult when TFM cannot be found 
● We require a basic reference
Content 
● Overview 
● Local-part 
● Domain-part 
● Valid or not? 
● The real world
Brave, brave RFC World 
RRFFCC22882211 RRFFCC11003344 
RRFFCC11003355 
RRFFCC22882222 
RRFFCC882211 
RRFFCC882222 
Domain name specification. 
Restrictions on email 
addresses at protocol levels. 
Specifies layout of email 
transmitted over internet. 
Specifies format of email 
address. 
RRFFCC22004477 
Encoding of 8-bit in 
RFC2822 header 
fields 
RRFFCC33449900 
Encoding international 
domain names 
RRFFCC11112233 
((PPaarrttiiaallllyy uuppddaatteedd bbyy RRFFCC22882211)) 
Requirements for internet hosts
Address Format 
Modern format 
local-part @ domain-part 
Historic format (RFC821/RFC2821) 
source-route : local-part @ domain-part
RFC2822 Local Parts 
● Unrestricted characters 
0..9 a..z A..Z ! # $ % & ' * + - / = ? ^ _ ` | { } ~ . 
● Quotable charactersq u( oted by “ ) 
< [ ( : @ ; ) ] > , non-ws-ctrl 
● Illegal characters 
All 8-bit. 
● Whitespace 
ws-ctrl illegal, only used for folding in headers 
space character is valid if quoted 
[ RFC2821: 4.1.2; RFC2822: 3.2, 3.4 ]
Local Payload 
● Routing characters 
– ! % have been used for local-routing in legacy 
systems, including UUCP and MHS. 
– Can be used to bypass routing in mis-configured 
systems. 
● Shell exploits 
– | / ` $ have been used to attempt remote 
command execution
Does Case Matter? 
● Case is ignored in domain 
ntaba.biz == ntaba.biz 
● Strictly-speaking case matters in local-parts 
schalk@ntaba.biz != ScHaLk@ntaba.biz 
– Most MTAs ignore case 
– RFC2821 discourages use of case as a 
distinguishing factor 
[ RFC2821: 2.4 ]
Does Size Matter? 
● RFC2821 places limitations on length of local-part and 
domain-part 
– 64 characters for local-part 
– 255 characters for domain-part 
● This is normally not a problem for messages 
transmitted across the internet, but can be problematic 
for in-house applications or encoded email addresses 
such as X.400. 
● Many MTAs will now ignore this length restriction as 
long as the overall SMTP protocol line length restriction 
is not exceeded. 
[ RFC2821: 4.5.3.1 ]
Domain Parts 
● Can either be a RFC1035 domain or an address literal 
● Valid characters for domain names: 
a..z A..Z 0..9 - 
● Subdomains separated by dot character. 
● Subdomain may not start or end with dash. 
● 255 characters max length. 
● 63 characters max per subdomain. 
● Cannot start or end in dot. 
● Restriction of subdomain starting with digit have been 
relaxed.
Address Literals 
● Workarounds for when host names cannot 
be resolved. 
– @[protocol:host-address] 
– IPv4: @[192.1.1.1] 
– IPv6: @[IPv6:fe80::a00:20ff:fec2:2ef4] 
● Protocol must be registered with ICANN. 
[ RFC2821: 4.1.3 ]
International Domain Names 
● Domain names not representable in US-ASCII 
can be registered 
● Such domain names cannot be handles by 
DNS or existing protocols 
● RFC 3490 describes the encoding/decoding 
of such domain names from presentation to 
protocol: 
exämple.com => xn--example-cua.com 
● Potential for phising
Valid or not? 
schalk_cronje@ntaba.biz 
● Valid even under strict RFC2822 
interpretation 
● Most punctuation are valid in local part, 
including: 
{$cha?k*cr%nje}@ntaba.biz
Valid or not? 
schalk_cronje@[192.168.1.1] 
● Yes, the domain part is an address-literal 
● Acceptance of address-literals should be 
configurable 
– They can be security risks 
– RFC2821 prefers usage of MX-based deliveries.
Valid or not? 
schalk_cronje@192.168.1.1 
● No, it is not an address-literal nor a valid 
domain name. 
● Some systems will attempt to deliver this by 
passing the 192.168.1.1 to the domain 
resolving subsystem, which in return will 
simply return the IP address. 
– This violates RFC1123 
– This is a potential security risk. 
[ RFC1123: 2.1 ]
Valid or not? 
schalk_cronje@1967.com 
● Not valid according to RFC1035 
● Limitation lifted in RFC1123. 
[ RFC1123: 2.1 ]
Valid or not? 
schalk_cronje@#192168 
● Valid in RFC821 for compatibility with 
non-TCP/IP networks. 
● Outlawed by RFC2821. 
● Not supported by any modern MTA. 
[ RFC821: 4.1.2; RFC2821: F.4 ]
Valid or not? 
schalk_cronje@.ntaba.biz 
● No, domain-part may not start with a dot. 
[ RFC2822: 3.2.4 ]
Valid or not? 
schalk_cronje@ntaba.biz. 
● No, strictly RFC2822 states that domain-part 
may not end with a dot. 
● RFC1034 use the dot-ending to indicate 
absolute domains (FQDN) in resource 
records. 
● Most systems will accept, resolve and deliver 
this 
[ RFC2822: 3.2.4; RFC1034: 3.1]
Valid or not? 
schalk_cronje@ntaba..biz. 
● No, consecutive dots are not allowed in 
domain parts. 
[ RFC2822: 3.2.4; RFC1034: 3.1]
Valid or not? 
● No. 
.schalk_cronje@ntaba.biz 
schalk..cronje@ntaba.biz 
– Local-parts may not start with a dot. 
– Consecutive dots are not allowed in local parts. 
● Pragmatically, many known MTAs don’t care 
[ RFC2822: 3.2.4]
Valid or not? 
schalk_cronje@lon_eng.ntaba.biz 
● No, _ is not valid in domain names 
● Some DNS servers will support this. 
● Some sites do use th_e for internal systems. 
● It remains illegal for internet operations 
[ RFC2821: 4.1.3 ]
Valid or not? 
schalk_cronje@lon_eng@ntaba.biz 
● No, @ cannot be used unquoted in local 
parts 
“schalk_cronje@lon_eng”@ntaba.biz 
schalk_cronje@lon_eng@ntaba.biz 
[ RFC2822: 3.2.5, 3.4 ]
Local-part Quoting 
● Quoting should only be used where 
absolutely necessary 
● Where a quoted-form have an unquoted 
form... 
– The two forms are equivalent 
– The unquoted form should be used for 
transmission 
● Quoting is performed by enclosing local-part 
in quotes or preceding a character by 
backslash. 
[ RFC2821: 4.1.2 ]
Valid or not? 
<schalk_cronje@ntaba.biz> 
● No, this is an envelope for email addresses 
● The following is valid: 
“<schalk_cronje>”@ntaba.biz
Valid or not? 
schalk_O”cronje@ntaba.biz 
● No, the double quote is a quoting character.
Valid or not? 
schalk_O'cronje@ntaba.biz 
● Yes, apostrophe is valid in unquoted form
Valid or not? 
“schalk_O”cronje”@ntaba.biz 
● This is debatable 
● Neither RFC2821, nor RFC2822, is 
completely clear whether the double quote is 
valid if escaped 
Note that the backslash, "", is a quote character, which is 
used to indicate that the next character is to be used literally 
[ RFC2821: 4.1.2 ]
Valid or not? 
schalk_cronjé@ntaba.biz 
● Not at RFC2821/RFC2822 levels - contains 
at one least 8-bit character 
● Can be completely valid at the presentation 
level 
– Email client can take care of translation between 
a user-readable form and a level suitable for 
transmission 
● There is NO agreed standard for encoding 
non-US-ASCII in local parts
My 8-bit's Worth 
● Custom encoding is valid, when both the sender and 
receiver will know about the encoding 
– Intermediate relays will simply pass it through 
● UTF-7: 
schalk+AF8-cronj+AOk@ntaba.biz 
● RFC2047 (adapted): 
=?UTF-8?Q?schalk_cronj=C3=A9?=@ntaba.biz 
● Storing email addresses with 8-bit content in XML is 
problematic – requires encoding.
The 8-bit Legacy 
● RFC822 was written in a 7-bit world 
– It can be misinterpreted as to 8-bit being legal. 
● Some MTAs will actually transmit 8-bit 
characters in email addresses 
● In-house systems might have a requirement 
for 8-bit 
● An email must be able to allow, block, 
quarantine or filter on 8-bit characters.
Valid or not? 
"`echo haX0r | /usr/bin/passwd root --stdin`"@ntaba.biz 
● Valid even under strict RFC2822 
interpretation 
● Quoting allows for spaces and | to be used 
● Imagine if this was passed to a shell script in 
a badly configured system!
Valid or not? 
"@lon-eng,@scm-eng:schalk_cronje"@ntaba.biz 
● Valid even under strict RFC2822 
interpretation 
● Quoting allows fo@r :, to be used
Valid or not? 
@lon-eng,@scm-eng:schalk_cronje@ntaba.biz 
● Valid even under strict RFC2822 
interpretation 
● This is an example of a source-route. 
● Usage is deprecated 
● It is best to remove them, before relaying. 
[ RFC2821: 3.7, C, F.2 ]
Practical Validation 
● Address validation cannot purely be 
performed against the RFC 
● Context is very important 
● Validation at user-level will differ from that at 
protocol-level. 
RFC rule of thum: bBe as lenient as possible 
in what you accept, but as strict as possible 
in what you send out.
Validation Context 
● Context places additional demands on 
validation algorithms 
● Validation algorithms must be configurable 
– Allows for specifics in user environments 
– Allows for adaptability within various code 
subsystems
Pattern Matching 
● DOS-patterns (*?) is useful, but not good 
enough 
● Regex is a better way to perform complex 
pattern matches 
– Not all users understand regex 
– It is therefore good to give users the option of an 
input notation, but use regex internally to perform 
the matching
The *? Problem 
schalk*cronje@ntaba.biz 
● The above is a valid email address 
● Was the intention to filter for this exact 
address? 
● Or was the intention to filter for addresses 
such as 
schalkRfcDudecronje@ntaba.biz 
● Regex: 
– schalk*cronje@ntaba.biz 
– schalk.*cronje@ntaba.biz
Lists of Addresses 
● RFC2822 uses the comma for separating 
address lists in headers 
● A common misnomer is that it is easy to 
delimit addresses usin;g o r ,. 
● Although it is possible, it is no trivial task to 
parse lists such as 
schalk@ntaba.biz, “s,c,h,a,l,k”@ntaba.biz 
,s,cha,lk@ntaba.biz , “sch”,alk”@ntaba.biz
Real World Violations 
● Use of _ in domain-part 
● Domain part starts with dot 
● Domain part ends in dot 
● 4000 characters in local part 
● 8-bit characters in local-part
What can we do? 
● Developers should never make any 
assumptions as to what the customer might 
need or to what the customer's infrastructure 
might be 
– Code to be as RFC-compliant as possible, but 
allow for configurability as and when needed. 
– User interfaces should be context-sensitive. 
● Testers should ensure that nobody makes 
such assumptions
Handling email addresses is an extraodinary 
complex matter for something very simple. 
Next time you enter an email address... 
...you might not want to take it for granted 
Questions ?

Más contenido relacionado

La actualidad más candente

Simple chat room using python
Simple chat room using pythonSimple chat room using python
Simple chat room using pythonVISHAL VERMA
 
Network Socket Programming with JAVA
Network Socket Programming with JAVANetwork Socket Programming with JAVA
Network Socket Programming with JAVADudy Ali
 
Programming the Network Data Plane
Programming the Network Data PlaneProgramming the Network Data Plane
Programming the Network Data PlaneC4Media
 
Hardware Approaches for Fast Lookup & Classification
Hardware Approaches for Fast Lookup & ClassificationHardware Approaches for Fast Lookup & Classification
Hardware Approaches for Fast Lookup & ClassificationJignesh Patel
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in JavaTushar B Kute
 
gRPC or Rest, why not both?
gRPC or Rest, why not both?gRPC or Rest, why not both?
gRPC or Rest, why not both?Mohammad Murad
 
[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4Open Networking Summits
 
Socket Programming
Socket ProgrammingSocket Programming
Socket ProgrammingCEC Landran
 
Space Communication Protocol-By Nilesh,Pravin
Space Communication Protocol-By Nilesh,PravinSpace Communication Protocol-By Nilesh,Pravin
Space Communication Protocol-By Nilesh,PravinNileshAawale
 
Chapter 4 - Computer Networking a top-down Approach 7th
Chapter 4 - Computer Networking a top-down Approach 7thChapter 4 - Computer Networking a top-down Approach 7th
Chapter 4 - Computer Networking a top-down Approach 7thAndy Juan Sarango Veliz
 
Ch 02 --- sdn and openflow architecture
Ch 02 --- sdn and openflow architectureCh 02 --- sdn and openflow architecture
Ch 02 --- sdn and openflow architectureYoram Orzach
 
Troubleshooting BGP
Troubleshooting BGPTroubleshooting BGP
Troubleshooting BGPAPNIC
 
Network Programming in Java
Network Programming in JavaNetwork Programming in Java
Network Programming in JavaTushar B Kute
 
Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...
Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...
Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...telestax
 

La actualidad más candente (20)

BGP Overview
BGP OverviewBGP Overview
BGP Overview
 
Simple chat room using python
Simple chat room using pythonSimple chat room using python
Simple chat room using python
 
Network Socket Programming with JAVA
Network Socket Programming with JAVANetwork Socket Programming with JAVA
Network Socket Programming with JAVA
 
Programming the Network Data Plane
Programming the Network Data PlaneProgramming the Network Data Plane
Programming the Network Data Plane
 
Hardware Approaches for Fast Lookup & Classification
Hardware Approaches for Fast Lookup & ClassificationHardware Approaches for Fast Lookup & Classification
Hardware Approaches for Fast Lookup & Classification
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in Java
 
gRPC or Rest, why not both?
gRPC or Rest, why not both?gRPC or Rest, why not both?
gRPC or Rest, why not both?
 
[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4[Webinar Slides] Programming the Network Dataplane in P4
[Webinar Slides] Programming the Network Dataplane in P4
 
Socket Programming
Socket ProgrammingSocket Programming
Socket Programming
 
Space Communication Protocol-By Nilesh,Pravin
Space Communication Protocol-By Nilesh,PravinSpace Communication Protocol-By Nilesh,Pravin
Space Communication Protocol-By Nilesh,Pravin
 
Chapter 4 - Computer Networking a top-down Approach 7th
Chapter 4 - Computer Networking a top-down Approach 7thChapter 4 - Computer Networking a top-down Approach 7th
Chapter 4 - Computer Networking a top-down Approach 7th
 
0-RTT TCP converters
0-RTT TCP converters0-RTT TCP converters
0-RTT TCP converters
 
Mis4200notes8 2
Mis4200notes8 2Mis4200notes8 2
Mis4200notes8 2
 
Ch 02 --- sdn and openflow architecture
Ch 02 --- sdn and openflow architectureCh 02 --- sdn and openflow architecture
Ch 02 --- sdn and openflow architecture
 
Troubleshooting BGP
Troubleshooting BGPTroubleshooting BGP
Troubleshooting BGP
 
Network Programming in Java
Network Programming in JavaNetwork Programming in Java
Network Programming in Java
 
TFTP
TFTPTFTP
TFTP
 
Networking in Java
Networking in JavaNetworking in Java
Networking in Java
 
Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...
Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...
Mobicents Summit 2012 - Vladimir Ralev - Mobicents Load Balancer and High Ava...
 
Openflow Protocol
Openflow ProtocolOpenflow Protocol
Openflow Protocol
 

Destacado

Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin WritingSchalk Cronjé
 
Captain Agile and the Providers of Value
Captain Agile and the Providers of ValueCaptain Agile and the Providers of Value
Captain Agile and the Providers of ValueSchalk Cronjé
 
Groovy VFS (with 1.0 news)
Groovy VFS (with 1.0 news)Groovy VFS (with 1.0 news)
Groovy VFS (with 1.0 news)Schalk Cronjé
 
Simple Measurements #2
Simple Measurements #2Simple Measurements #2
Simple Measurements #2Schalk Cronjé
 
Prosperity-focused Agile Technology Leadership
Prosperity-focused Agile Technology LeadershipProsperity-focused Agile Technology Leadership
Prosperity-focused Agile Technology LeadershipSchalk Cronjé
 
Agile teams - Prosperity Focused, Values-driven
Agile teams - Prosperity Focused, Values-drivenAgile teams - Prosperity Focused, Values-driven
Agile teams - Prosperity Focused, Values-drivenSchalk Cronjé
 
Agile teams - Value Focused; Values-driven
Agile teams - Value Focused; Values-drivenAgile teams - Value Focused; Values-driven
Agile teams - Value Focused; Values-drivenSchalk Cronjé
 
Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingSchalk Cronjé
 
Practical Multi-language Generative Programming
Practical Multi-language Generative ProgrammingPractical Multi-language Generative Programming
Practical Multi-language Generative ProgrammingSchalk Cronjé
 
Generative Programming In The Large - Applied C++ meta-programming
Generative Programming In The Large - Applied C++ meta-programmingGenerative Programming In The Large - Applied C++ meta-programming
Generative Programming In The Large - Applied C++ meta-programmingSchalk Cronjé
 
Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Schalk Cronjé
 
Death of Agile : Welcome to Value-focused Testing
Death of Agile : Welcome to Value-focused TestingDeath of Agile : Welcome to Value-focused Testing
Death of Agile : Welcome to Value-focused TestingSchalk Cronjé
 
Practical C++ Generative Programming
Practical C++ Generative ProgrammingPractical C++ Generative Programming
Practical C++ Generative ProgrammingSchalk Cronjé
 
Software Packaging with RPM
Software Packaging with RPMSoftware Packaging with RPM
Software Packaging with RPMSchalk Cronjé
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionSchalk Cronjé
 
Seeking Enligtenment - A journey of purpose rather than instruction
Seeking Enligtenment  - A journey of purpose rather than instructionSeeking Enligtenment  - A journey of purpose rather than instruction
Seeking Enligtenment - A journey of purpose rather than instructionSchalk Cronjé
 

Destacado (20)

Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin Writing
 
Captain Agile and the Providers of Value
Captain Agile and the Providers of ValueCaptain Agile and the Providers of Value
Captain Agile and the Providers of Value
 
Groovy VFS (with 1.0 news)
Groovy VFS (with 1.0 news)Groovy VFS (with 1.0 news)
Groovy VFS (with 1.0 news)
 
Simple Measurements #2
Simple Measurements #2Simple Measurements #2
Simple Measurements #2
 
Real World TDD
Real World TDDReal World TDD
Real World TDD
 
Prosperity-focused Agile Technology Leadership
Prosperity-focused Agile Technology LeadershipProsperity-focused Agile Technology Leadership
Prosperity-focused Agile Technology Leadership
 
Agile teams - Prosperity Focused, Values-driven
Agile teams - Prosperity Focused, Values-drivenAgile teams - Prosperity Focused, Values-driven
Agile teams - Prosperity Focused, Values-driven
 
Agile teams - Value Focused; Values-driven
Agile teams - Value Focused; Values-drivenAgile teams - Value Focused; Values-driven
Agile teams - Value Focused; Values-driven
 
Simple measurements
Simple measurementsSimple measurements
Simple measurements
 
Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin Writing
 
Practical Multi-language Generative Programming
Practical Multi-language Generative ProgrammingPractical Multi-language Generative Programming
Practical Multi-language Generative Programming
 
Generative Programming In The Large - Applied C++ meta-programming
Generative Programming In The Large - Applied C++ meta-programmingGenerative Programming In The Large - Applied C++ meta-programming
Generative Programming In The Large - Applied C++ meta-programming
 
Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016
 
Death of Agile : Welcome to Value-focused Testing
Death of Agile : Welcome to Value-focused TestingDeath of Agile : Welcome to Value-focused Testing
Death of Agile : Welcome to Value-focused Testing
 
Asciidoctor in 15min
Asciidoctor in 15minAsciidoctor in 15min
Asciidoctor in 15min
 
Practical C++ Generative Programming
Practical C++ Generative ProgrammingPractical C++ Generative Programming
Practical C++ Generative Programming
 
Software Packaging with RPM
Software Packaging with RPMSoftware Packaging with RPM
Software Packaging with RPM
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
Seeking Enligtenment - A journey of purpose rather than instruction
Seeking Enligtenment  - A journey of purpose rather than instructionSeeking Enligtenment  - A journey of purpose rather than instruction
Seeking Enligtenment - A journey of purpose rather than instruction
 
Web browser
Web browserWeb browser
Web browser
 

Similar a RfC2822 for Mere Mortals

Byte Ordering - Unit 2.pptx
Byte Ordering - Unit 2.pptxByte Ordering - Unit 2.pptx
Byte Ordering - Unit 2.pptxRockyBhai46825
 
Addressing in networking (IP,MAC,Port addressing)
Addressing in networking (IP,MAC,Port addressing)Addressing in networking (IP,MAC,Port addressing)
Addressing in networking (IP,MAC,Port addressing)Geethu Jose
 
CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5
CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5
CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5Waqas Ahmed Nawaz
 
Http2 Security Perspective
Http2 Security PerspectiveHttp2 Security Perspective
Http2 Security PerspectiveSunil Kumar
 
Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014Đồng Quốc Vương
 
Ccna 4 Final 4 Version 4.0 Answers
Ccna 4 Final 4 Version 4.0 AnswersCcna 4 Final 4 Version 4.0 Answers
Ccna 4 Final 4 Version 4.0 AnswersCCNA4Answers
 
Networking Basics with Linux
Networking Basics with LinuxNetworking Basics with Linux
Networking Basics with LinuxHenry Osborne
 
File 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsxFile 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsxgaurav201196
 
Bt0076, tcp ip
Bt0076, tcp ipBt0076, tcp ip
Bt0076, tcp ipsmumbahelp
 
Bt0076, tcp ip
Bt0076, tcp ipBt0076, tcp ip
Bt0076, tcp ipsmumbahelp
 
1. You are to write a client-server application to support Calculus�.pdf
1. You are to write a client-server application to support Calculus�.pdf1. You are to write a client-server application to support Calculus�.pdf
1. You are to write a client-server application to support Calculus�.pdfaliradios
 
Ccna1 v6.0 pretest exam answers 2018
Ccna1 v6.0 pretest exam answers 2018Ccna1 v6.0 pretest exam answers 2018
Ccna1 v6.0 pretest exam answers 2018Download Mipdfcom
 
44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...
44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...
44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...44CON
 
Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014Đồng Quốc Vương
 
Accelerating and Securing your Applications in AWS. In-depth look at Solving ...
Accelerating and Securing your Applications in AWS. In-depth look at Solving ...Accelerating and Securing your Applications in AWS. In-depth look at Solving ...
Accelerating and Securing your Applications in AWS. In-depth look at Solving ...Amazon Web Services
 
Simplifying open stack and kubernetes networking with romana
Simplifying open stack and kubernetes networking with romanaSimplifying open stack and kubernetes networking with romana
Simplifying open stack and kubernetes networking with romanaJuergen Brendel
 
Application Caching: The Hidden Microservice (SAConf)
Application Caching: The Hidden Microservice (SAConf)Application Caching: The Hidden Microservice (SAConf)
Application Caching: The Hidden Microservice (SAConf)Scott Mansfield
 
Simplifying the OpenStack and Kubernetes network stack with Romana
Simplifying the OpenStack and Kubernetes network stack with RomanaSimplifying the OpenStack and Kubernetes network stack with Romana
Simplifying the OpenStack and Kubernetes network stack with RomanaJuergen Brendel
 

Similar a RfC2822 for Mere Mortals (20)

Byte Ordering - Unit 2.pptx
Byte Ordering - Unit 2.pptxByte Ordering - Unit 2.pptx
Byte Ordering - Unit 2.pptx
 
Addressing in networking (IP,MAC,Port addressing)
Addressing in networking (IP,MAC,Port addressing)Addressing in networking (IP,MAC,Port addressing)
Addressing in networking (IP,MAC,Port addressing)
 
CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5
CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5
CCNA (R & S) Module 01 - Introduction to Networks - Chapter 5
 
Http2 Security Perspective
Http2 Security PerspectiveHttp2 Security Perspective
Http2 Security Perspective
 
4 technical-dns-workshop-day2
4 technical-dns-workshop-day24 technical-dns-workshop-day2
4 technical-dns-workshop-day2
 
Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_5_v5_0_exam_answers_2014
 
Ccna 4 Final 4 Version 4.0 Answers
Ccna 4 Final 4 Version 4.0 AnswersCcna 4 Final 4 Version 4.0 Answers
Ccna 4 Final 4 Version 4.0 Answers
 
Networking Basics with Linux
Networking Basics with LinuxNetworking Basics with Linux
Networking Basics with Linux
 
File 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsxFile 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsx
 
Bt0076, tcp ip
Bt0076, tcp ipBt0076, tcp ip
Bt0076, tcp ip
 
Bt0076, tcp ip
Bt0076, tcp ipBt0076, tcp ip
Bt0076, tcp ip
 
1. You are to write a client-server application to support Calculus�.pdf
1. You are to write a client-server application to support Calculus�.pdf1. You are to write a client-server application to support Calculus�.pdf
1. You are to write a client-server application to support Calculus�.pdf
 
Protocol Buffers
Protocol BuffersProtocol Buffers
Protocol Buffers
 
Ccna1 v6.0 pretest exam answers 2018
Ccna1 v6.0 pretest exam answers 2018Ccna1 v6.0 pretest exam answers 2018
Ccna1 v6.0 pretest exam answers 2018
 
44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...
44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...
44CON London 2015 - Reverse engineering and exploiting font rasterizers: the ...
 
Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014
Www ccnav5 net_ccna_1_chapter_8_v5_0_exam_answers_2014
 
Accelerating and Securing your Applications in AWS. In-depth look at Solving ...
Accelerating and Securing your Applications in AWS. In-depth look at Solving ...Accelerating and Securing your Applications in AWS. In-depth look at Solving ...
Accelerating and Securing your Applications in AWS. In-depth look at Solving ...
 
Simplifying open stack and kubernetes networking with romana
Simplifying open stack and kubernetes networking with romanaSimplifying open stack and kubernetes networking with romana
Simplifying open stack and kubernetes networking with romana
 
Application Caching: The Hidden Microservice (SAConf)
Application Caching: The Hidden Microservice (SAConf)Application Caching: The Hidden Microservice (SAConf)
Application Caching: The Hidden Microservice (SAConf)
 
Simplifying the OpenStack and Kubernetes network stack with Romana
Simplifying the OpenStack and Kubernetes network stack with RomanaSimplifying the OpenStack and Kubernetes network stack with Romana
Simplifying the OpenStack and Kubernetes network stack with Romana
 

Más de Schalk Cronjé

DocuOps & Asciidoctor in a JVM World
DocuOps & Asciidoctor in a JVM WorldDocuOps & Asciidoctor in a JVM World
DocuOps & Asciidoctor in a JVM WorldSchalk Cronjé
 
What's new in Asciidoctor
What's new in AsciidoctorWhat's new in Asciidoctor
What's new in AsciidoctorSchalk Cronjé
 
Probability Management
Probability ManagementProbability Management
Probability ManagementSchalk Cronjé
 
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionCool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionSchalk Cronjé
 
Cool JVM Tools to Help You Test
Cool JVM Tools to Help You TestCool JVM Tools to Help You Test
Cool JVM Tools to Help You TestSchalk Cronjé
 
Using the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentUsing the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentSchalk Cronjé
 
Seeking Enligtenment - A journey of purpose rather tan instruction
Seeking Enligtenment - A journey of purpose rather tan instructionSeeking Enligtenment - A journey of purpose rather tan instruction
Seeking Enligtenment - A journey of purpose rather tan instructionSchalk Cronjé
 
Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingSchalk Cronjé
 
Beyond Estimates - Probability Management
Beyond Estimates - Probability ManagementBeyond Estimates - Probability Management
Beyond Estimates - Probability ManagementSchalk Cronjé
 
Documentation An Engineering Problem Unsolved
Documentation  An Engineering Problem UnsolvedDocumentation  An Engineering Problem Unsolved
Documentation An Engineering Problem UnsolvedSchalk Cronjé
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot WorldSchalk Cronjé
 
Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingSchalk Cronjé
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writingSchalk Cronjé
 
Tree of Knowledge - About Philosophy, Unity & Testing
Tree of Knowledge - About Philosophy, Unity & TestingTree of Knowledge - About Philosophy, Unity & Testing
Tree of Knowledge - About Philosophy, Unity & TestingSchalk Cronjé
 
Beyond estimates - Overview at Agile:MK
Beyond estimates - Overview at Agile:MKBeyond estimates - Overview at Agile:MK
Beyond estimates - Overview at Agile:MKSchalk Cronjé
 
Beyond estimates - Reflection on the state of Agile Forecasting
Beyond estimates - Reflection on the state of Agile ForecastingBeyond estimates - Reflection on the state of Agile Forecasting
Beyond estimates - Reflection on the state of Agile ForecastingSchalk Cronjé
 
Seeking enligtenment - A journey of "Why?" rather than "How?"
Seeking enligtenment - A journey of "Why?" rather than "How?"Seeking enligtenment - A journey of "Why?" rather than "How?"
Seeking enligtenment - A journey of "Why?" rather than "How?"Schalk Cronjé
 

Más de Schalk Cronjé (20)

DocuOps & Asciidoctor in a JVM World
DocuOps & Asciidoctor in a JVM WorldDocuOps & Asciidoctor in a JVM World
DocuOps & Asciidoctor in a JVM World
 
DocuOps & Asciidoctor
DocuOps & AsciidoctorDocuOps & Asciidoctor
DocuOps & Asciidoctor
 
What's new in Asciidoctor
What's new in AsciidoctorWhat's new in Asciidoctor
What's new in Asciidoctor
 
Probability Management
Probability ManagementProbability Management
Probability Management
 
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionCool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
 
Cool JVM Tools to Help You Test
Cool JVM Tools to Help You TestCool JVM Tools to Help You Test
Cool JVM Tools to Help You Test
 
Using the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentUsing the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM Development
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
Seeking Enligtenment - A journey of purpose rather tan instruction
Seeking Enligtenment - A journey of purpose rather tan instructionSeeking Enligtenment - A journey of purpose rather tan instruction
Seeking Enligtenment - A journey of purpose rather tan instruction
 
Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin Writing
 
Beyond Estimates - Probability Management
Beyond Estimates - Probability ManagementBeyond Estimates - Probability Management
Beyond Estimates - Probability Management
 
Documentation An Engineering Problem Unsolved
Documentation  An Engineering Problem UnsolvedDocumentation  An Engineering Problem Unsolved
Documentation An Engineering Problem Unsolved
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot World
 
Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin Writing
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writing
 
Tree of Knowledge - About Philosophy, Unity & Testing
Tree of Knowledge - About Philosophy, Unity & TestingTree of Knowledge - About Philosophy, Unity & Testing
Tree of Knowledge - About Philosophy, Unity & Testing
 
Beyond estimates - Overview at Agile:MK
Beyond estimates - Overview at Agile:MKBeyond estimates - Overview at Agile:MK
Beyond estimates - Overview at Agile:MK
 
Beyond estimates - Reflection on the state of Agile Forecasting
Beyond estimates - Reflection on the state of Agile ForecastingBeyond estimates - Reflection on the state of Agile Forecasting
Beyond estimates - Reflection on the state of Agile Forecasting
 
Seeking enligtenment - A journey of "Why?" rather than "How?"
Seeking enligtenment - A journey of "Why?" rather than "How?"Seeking enligtenment - A journey of "Why?" rather than "How?"
Seeking enligtenment - A journey of "Why?" rather than "How?"
 
Groovy VFS
Groovy VFSGroovy VFS
Groovy VFS
 

Último

Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一Fs
 
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Lucknow
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Paul Calvano
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一Fs
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Excelmac1
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 

Último (20)

Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
 
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 

RfC2822 for Mere Mortals

  • 1. What's in an Email Address? RFC2822 Em@il @ddresses for Mere Mortals Schalk W. Cronjé @ysb33r
  • 2. Why This Topic? ● Recurring bugs in software we build ● Lack of understanding at all levels – Developers – Testers – Support People ● Assumptions made, without reading RFCs ● Understanding RFCs are not straightforward – RTFM is difficult when TFM cannot be found ● We require a basic reference
  • 3. Content ● Overview ● Local-part ● Domain-part ● Valid or not? ● The real world
  • 4. Brave, brave RFC World RRFFCC22882211 RRFFCC11003344 RRFFCC11003355 RRFFCC22882222 RRFFCC882211 RRFFCC882222 Domain name specification. Restrictions on email addresses at protocol levels. Specifies layout of email transmitted over internet. Specifies format of email address. RRFFCC22004477 Encoding of 8-bit in RFC2822 header fields RRFFCC33449900 Encoding international domain names RRFFCC11112233 ((PPaarrttiiaallllyy uuppddaatteedd bbyy RRFFCC22882211)) Requirements for internet hosts
  • 5. Address Format Modern format local-part @ domain-part Historic format (RFC821/RFC2821) source-route : local-part @ domain-part
  • 6. RFC2822 Local Parts ● Unrestricted characters 0..9 a..z A..Z ! # $ % & ' * + - / = ? ^ _ ` | { } ~ . ● Quotable charactersq u( oted by “ ) < [ ( : @ ; ) ] > , non-ws-ctrl ● Illegal characters All 8-bit. ● Whitespace ws-ctrl illegal, only used for folding in headers space character is valid if quoted [ RFC2821: 4.1.2; RFC2822: 3.2, 3.4 ]
  • 7. Local Payload ● Routing characters – ! % have been used for local-routing in legacy systems, including UUCP and MHS. – Can be used to bypass routing in mis-configured systems. ● Shell exploits – | / ` $ have been used to attempt remote command execution
  • 8. Does Case Matter? ● Case is ignored in domain ntaba.biz == ntaba.biz ● Strictly-speaking case matters in local-parts schalk@ntaba.biz != ScHaLk@ntaba.biz – Most MTAs ignore case – RFC2821 discourages use of case as a distinguishing factor [ RFC2821: 2.4 ]
  • 9. Does Size Matter? ● RFC2821 places limitations on length of local-part and domain-part – 64 characters for local-part – 255 characters for domain-part ● This is normally not a problem for messages transmitted across the internet, but can be problematic for in-house applications or encoded email addresses such as X.400. ● Many MTAs will now ignore this length restriction as long as the overall SMTP protocol line length restriction is not exceeded. [ RFC2821: 4.5.3.1 ]
  • 10. Domain Parts ● Can either be a RFC1035 domain or an address literal ● Valid characters for domain names: a..z A..Z 0..9 - ● Subdomains separated by dot character. ● Subdomain may not start or end with dash. ● 255 characters max length. ● 63 characters max per subdomain. ● Cannot start or end in dot. ● Restriction of subdomain starting with digit have been relaxed.
  • 11. Address Literals ● Workarounds for when host names cannot be resolved. – @[protocol:host-address] – IPv4: @[192.1.1.1] – IPv6: @[IPv6:fe80::a00:20ff:fec2:2ef4] ● Protocol must be registered with ICANN. [ RFC2821: 4.1.3 ]
  • 12. International Domain Names ● Domain names not representable in US-ASCII can be registered ● Such domain names cannot be handles by DNS or existing protocols ● RFC 3490 describes the encoding/decoding of such domain names from presentation to protocol: exämple.com => xn--example-cua.com ● Potential for phising
  • 13. Valid or not? schalk_cronje@ntaba.biz ● Valid even under strict RFC2822 interpretation ● Most punctuation are valid in local part, including: {$cha?k*cr%nje}@ntaba.biz
  • 14. Valid or not? schalk_cronje@[192.168.1.1] ● Yes, the domain part is an address-literal ● Acceptance of address-literals should be configurable – They can be security risks – RFC2821 prefers usage of MX-based deliveries.
  • 15. Valid or not? schalk_cronje@192.168.1.1 ● No, it is not an address-literal nor a valid domain name. ● Some systems will attempt to deliver this by passing the 192.168.1.1 to the domain resolving subsystem, which in return will simply return the IP address. – This violates RFC1123 – This is a potential security risk. [ RFC1123: 2.1 ]
  • 16. Valid or not? schalk_cronje@1967.com ● Not valid according to RFC1035 ● Limitation lifted in RFC1123. [ RFC1123: 2.1 ]
  • 17. Valid or not? schalk_cronje@#192168 ● Valid in RFC821 for compatibility with non-TCP/IP networks. ● Outlawed by RFC2821. ● Not supported by any modern MTA. [ RFC821: 4.1.2; RFC2821: F.4 ]
  • 18. Valid or not? schalk_cronje@.ntaba.biz ● No, domain-part may not start with a dot. [ RFC2822: 3.2.4 ]
  • 19. Valid or not? schalk_cronje@ntaba.biz. ● No, strictly RFC2822 states that domain-part may not end with a dot. ● RFC1034 use the dot-ending to indicate absolute domains (FQDN) in resource records. ● Most systems will accept, resolve and deliver this [ RFC2822: 3.2.4; RFC1034: 3.1]
  • 20. Valid or not? schalk_cronje@ntaba..biz. ● No, consecutive dots are not allowed in domain parts. [ RFC2822: 3.2.4; RFC1034: 3.1]
  • 21. Valid or not? ● No. .schalk_cronje@ntaba.biz schalk..cronje@ntaba.biz – Local-parts may not start with a dot. – Consecutive dots are not allowed in local parts. ● Pragmatically, many known MTAs don’t care [ RFC2822: 3.2.4]
  • 22. Valid or not? schalk_cronje@lon_eng.ntaba.biz ● No, _ is not valid in domain names ● Some DNS servers will support this. ● Some sites do use th_e for internal systems. ● It remains illegal for internet operations [ RFC2821: 4.1.3 ]
  • 23. Valid or not? schalk_cronje@lon_eng@ntaba.biz ● No, @ cannot be used unquoted in local parts “schalk_cronje@lon_eng”@ntaba.biz schalk_cronje@lon_eng@ntaba.biz [ RFC2822: 3.2.5, 3.4 ]
  • 24. Local-part Quoting ● Quoting should only be used where absolutely necessary ● Where a quoted-form have an unquoted form... – The two forms are equivalent – The unquoted form should be used for transmission ● Quoting is performed by enclosing local-part in quotes or preceding a character by backslash. [ RFC2821: 4.1.2 ]
  • 25. Valid or not? <schalk_cronje@ntaba.biz> ● No, this is an envelope for email addresses ● The following is valid: “<schalk_cronje>”@ntaba.biz
  • 26. Valid or not? schalk_O”cronje@ntaba.biz ● No, the double quote is a quoting character.
  • 27. Valid or not? schalk_O'cronje@ntaba.biz ● Yes, apostrophe is valid in unquoted form
  • 28. Valid or not? “schalk_O”cronje”@ntaba.biz ● This is debatable ● Neither RFC2821, nor RFC2822, is completely clear whether the double quote is valid if escaped Note that the backslash, "", is a quote character, which is used to indicate that the next character is to be used literally [ RFC2821: 4.1.2 ]
  • 29. Valid or not? schalk_cronjé@ntaba.biz ● Not at RFC2821/RFC2822 levels - contains at one least 8-bit character ● Can be completely valid at the presentation level – Email client can take care of translation between a user-readable form and a level suitable for transmission ● There is NO agreed standard for encoding non-US-ASCII in local parts
  • 30. My 8-bit's Worth ● Custom encoding is valid, when both the sender and receiver will know about the encoding – Intermediate relays will simply pass it through ● UTF-7: schalk+AF8-cronj+AOk@ntaba.biz ● RFC2047 (adapted): =?UTF-8?Q?schalk_cronj=C3=A9?=@ntaba.biz ● Storing email addresses with 8-bit content in XML is problematic – requires encoding.
  • 31. The 8-bit Legacy ● RFC822 was written in a 7-bit world – It can be misinterpreted as to 8-bit being legal. ● Some MTAs will actually transmit 8-bit characters in email addresses ● In-house systems might have a requirement for 8-bit ● An email must be able to allow, block, quarantine or filter on 8-bit characters.
  • 32. Valid or not? "`echo haX0r | /usr/bin/passwd root --stdin`"@ntaba.biz ● Valid even under strict RFC2822 interpretation ● Quoting allows for spaces and | to be used ● Imagine if this was passed to a shell script in a badly configured system!
  • 33. Valid or not? "@lon-eng,@scm-eng:schalk_cronje"@ntaba.biz ● Valid even under strict RFC2822 interpretation ● Quoting allows fo@r :, to be used
  • 34. Valid or not? @lon-eng,@scm-eng:schalk_cronje@ntaba.biz ● Valid even under strict RFC2822 interpretation ● This is an example of a source-route. ● Usage is deprecated ● It is best to remove them, before relaying. [ RFC2821: 3.7, C, F.2 ]
  • 35. Practical Validation ● Address validation cannot purely be performed against the RFC ● Context is very important ● Validation at user-level will differ from that at protocol-level. RFC rule of thum: bBe as lenient as possible in what you accept, but as strict as possible in what you send out.
  • 36. Validation Context ● Context places additional demands on validation algorithms ● Validation algorithms must be configurable – Allows for specifics in user environments – Allows for adaptability within various code subsystems
  • 37. Pattern Matching ● DOS-patterns (*?) is useful, but not good enough ● Regex is a better way to perform complex pattern matches – Not all users understand regex – It is therefore good to give users the option of an input notation, but use regex internally to perform the matching
  • 38. The *? Problem schalk*cronje@ntaba.biz ● The above is a valid email address ● Was the intention to filter for this exact address? ● Or was the intention to filter for addresses such as schalkRfcDudecronje@ntaba.biz ● Regex: – schalk*cronje@ntaba.biz – schalk.*cronje@ntaba.biz
  • 39. Lists of Addresses ● RFC2822 uses the comma for separating address lists in headers ● A common misnomer is that it is easy to delimit addresses usin;g o r ,. ● Although it is possible, it is no trivial task to parse lists such as schalk@ntaba.biz, “s,c,h,a,l,k”@ntaba.biz ,s,cha,lk@ntaba.biz , “sch”,alk”@ntaba.biz
  • 40. Real World Violations ● Use of _ in domain-part ● Domain part starts with dot ● Domain part ends in dot ● 4000 characters in local part ● 8-bit characters in local-part
  • 41. What can we do? ● Developers should never make any assumptions as to what the customer might need or to what the customer's infrastructure might be – Code to be as RFC-compliant as possible, but allow for configurability as and when needed. – User interfaces should be context-sensitive. ● Testers should ensure that nobody makes such assumptions
  • 42. Handling email addresses is an extraodinary complex matter for something very simple. Next time you enter an email address... ...you might not want to take it for granted Questions ?