--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="Author" content="KaiRo - Robert Kaiser">
+ <title>Web Logins after Persona</title>
+ <link rel="stylesheet" type="text/css" href="slides.css">
+ <script type="text/javascript" src="slides.js"></script>
+ <link rel="contents" href="#index" title="Overview">
+ <link rel="index" id="link-toc" href="#toc" title="Contents">
+ <link rel="start" id="link-start" href="#index" title="Start">
+</head>
+<body onload="docLoaded();">
+<header id="header"><div id="header-text">Web Logins</div>
+ <div id="subheader-text"></div>
+ <a id="headerlogo" href="#index" title="Startseite">Mozilla</a>
+</header>
+<nav id="slidenav">
+ <a href="#toc" id="nav-toc" accesskey="t">toc</a> ||
+ <a href="#index" id="nav-start" accesskey="s">start</a> ||
+ <a href="#" id="nav-prev" accesskey="p" hidden>< back</a>
+ <span id="nav-prev-nolink" class="nolink">< back</span> |
+ <a href="#" id="nav-next" id="goNext" accesskey="n" hidden>fwd ></a>
+ <span id="nav-next-nolink" class="nolink">fwd ></span>
+</nav>
+
+<article id="toc" title="Table of Contents">
+<h1>Table of Contents</h1>
+<h2>Web Logins after Persona</h2>
+
+<div class="captionedbox">
+<p class="captionedbox-caption">The following slides are available in this presentation:</p>
+<div class="captionedbox-content">
+<ul id="toc-list">
+</ul>
+</article>
+
+<article id="index" title="Start Page">
+<h1>Web Logins after Persona</h1>
+<h2>How I solved logins on my small websites</h2>
+
+<div class="simplebox">
+<mark><a href="http://home.kairo.at/">Robert Kaiser</a></mark>,
+"KaiRo" <kairo@kairo.at>
+<br><small>Mozilla Rep</small>
+</div>
+
+<div class="captionedbox">
+<p class="captionedbox-caption">Slides:
+ <a href="https://slides.kairo.at/fosdem2016/">https://slides.kairo.at/fosdem2017/</a></p>
+<div class="captionedbox-content small">
+<ul class="small">
+ <li>Created for
+ <a href="http://fosdem.org/2016/schedule/track/mozilla/">Mozilla
+ Developer Room</a> at <a href="http://www.fosdem.org/">FOSDEM 2017</a> in
+ Brussels.</li>
+ <li>Written in HTML 5 with CSS 3 and JavaScript.</li>
+ <li>Navigation via links on all slides, via access keys
+ (e.g. "n"/Alt+Shift+N for "next") or back/forward arrow keys</li>
+ <li><a href="#toc">Contents</a></li>
+ <li><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/at/"><img
+ alt="Licensed under CC-BY-SA," style="border-width:0;vertical-align:bottom;"
+ src="cc-by-sa-80x15.png"></a> 01/2017 Robert Kaiser.</li>
+</ul>
+</div>
+</div>
+</article>
+
+<article id="persona" title="What's Persona?">
+<h1>What <s>is</s>was Persona?</h1>
+
+<div class="simplebox">
+<p>Login/Identity solution by Mozilla, 2011-2016</p>
+<ul>
+ <li>Decentralized / Federated (with Fallback)</li>
+ <li>Multiple identities</li>
+ <li>Verified Email</li>
+ <li>Potential for browser integration</li>
+ <li>BrowserID protocol, easy to implement, server-side verification</li>
+ <li>Permission-less</li>
+</ul>
+<p><a href="http://feeding.cloud.geek.nz/posts/persona-guiding-principles/">See
+blog post by François Marier</a></p>
+</div>
+</article>
+
+<article id="smallsite" title="Needs of a Small Website">
+<h1>Needs of a Small Website</h1>
+
+<div class="simplebox">
+<ul>
+ <li>Easy to implement</li>
+ <li>Trusted identification</li>
+ <li>Avoid dealing with how to secure passwords</li>
+ <li>No lock-in (identification via email?)</li>
+ <li>Privacy (not telling every login attempt to a big company)</li>
+</ul>
+</div>
+</article>
+
+<article id="localext" title="Local vs. External Login">
+<h1>Local vs. External Login</h1>
+
+<div class="simplebox">
+<ul>
+ <li>Local: Need to secure passwords</li>
+ <li>Local: Sounds easy to implement, complications in details</li>
+ <li>Local: Can always be trusted</li>
+ <li>External: Potential for lock-in</li>
+ <li>External: Potential privacy issues</li>
+ <li>External: Implementation difficulty depends on API</li>
+</ul>
+</div>
+</article>
+
+<article id="extalt" title="External Alternatives">
+<h1>External Alternatives</h1>
+
+<div class="simplebox">
+<ul>
+ <li><s>Mozilla Persona</s></li>
+ <li><s>Firefox Accounts</s></li>
+ <li>Facebook, Google, GitHub</li>
+ <li>Other OAuth2 providers</li>
+ <li>OpenID Connect (OIDC) providers (based on OAuth2)</li>
+ <li>Other/older providers/standards (OAuth1, ...)</li>
+ <li>Intermediates, e.g. Auth0</li>
+</ul>
+</div>
+</article>
+
+<article id="portier" title="Interlude: A Future Alternative">
+<h1>Interlude: A Future Alternative</h1>
+
+<div class="simplebox">
+<p><a href="https://portier.github.io/">Portier</a> is a new in-development alternative</p>
+<ul>
+ <li>Email authentication</li>
+ <li>Decentralized (fallback to passwordless email auth)</li>
+ <li>Speaking OIDC to client and "Brokers"</li>
+ <li>"Spiritual successor to Mozilla Persona"</li>
+ <li>Still in development ("early beta")</li>
+</ul>
+</div>
+</article>
+
+<article id="selfhost" title="Self-Hosted "External"">
+<h1>Self-Hosted "External"</h1>
+
+<div class="simplebox">
+<ul>
+ <li>Full control over login stack</li>
+ <li>Password security isolated from website code</li>
+ <li>Management of multiple identities possible</li>
+ <li>Privacy and trust are no issues</li>
+ <li>When using standard API, possibility for being switched out later</li>
+ <li>Still needing to secure properly</li>
+</ul>
+</div>
+</article>
+
+<article id="phpauthserver" title="The PHP Authserver">
+<h1>The PHP Authserver</h1>
+
+<div class="simplebox">
+<ul>
+ <li>OAuth2 API (potential extension to OIDC later), using <a href="http://bshaffer.github.io/oauth2-server-php-docs/">oauth2-server-php</a></li>
+ <li>Password storage with password_hash (currently bcrypt) + nonce, auto-upgrade on login</li>
+ <li>Relatively easy to install on Linux with Apache + PHP5/PHP7 + MySQL (Other DBs should be easy to support)</li>
+ <li><a href="http://www.doctrine-project.org/projects/dbal.html">Doctrine DBAL</a> for DB abstraction,
+ <a href="https://github.com/KaiRo-at/php-utility-classes">php-utility-classes</a> for email and DOM document abstraction</li>
+ <li>Skinnable to brand installation to fit operator</a>
+ <li>My installation at <a href="https://auth.kairo.at/">auth.kairo.at</a> scores <a href="https://observatory.mozilla.org/analyze.html?host=auth.kairo.at">A+ from Mozilla Observatory</a></li>
+</ul>
+</div>
+</article>
+
+<article id="status" title="Current Status">
+<h1>Current Status</h1>
+<ul>
+ <li>Only Authorization Code flow supported right now, oauth2-server-php can do Client Credentials as well as OIDC, should not be too hard to add.</li>
+ <li>Tested with Apache and MySQL for now, other web and DB servers should be possible easily.</li>
+ <li>Rudimentary documentation exists in the main README.</li>
+ <li>Languages supported are US English (default) and German, detected via Accept-Language sent by browser.</li>
+ <li>Testing is done by running logins with KaiRo's websites (2 different client implementations).</li>
+ <li><mark>Open Source at <a href="https://github.com/KaiRo-at/authserver">github.com/KaiRo-at/authserver</a></mark>, under MPL2 - <mark>released TODAY</mark>!</li>
+</ul>
+<div class="simplebox">
+
+</div>
+</article>
+
+<article id="help" title="Help Needed">
+<h1>Help Needed</h1>
+
+<div class="simplebox">
+<ul>
+ <li>Implementation of OIDC and perhaps Client Credentials flows.</li>
+ <li>Setting up a test suite and infrastructure.</li>
+ <li>Writing more complete documentation.</li>
+ <li>More languages?</li>
+ <li>More installations?</li>
+ <li>Your ideas and pull requests!</li>
+</ul>
+</div>
+</article>
+
+<article id="end" title="The End">
+
+<div class="simplebox">
+<h1 class="cent" style="position: relative; z-index: 3; font-size: 2.5em;">Questions?</h1>
+<h2 class="cent" style="position: relative; margin-top: 3rem; z-index: 3; font-size: 2em;"><a href="https://github.com/KaiRo-at/authserver">github.com/KaiRo-at/authserver</a></h2>
+<img src="autodestruct_deactivated.jpg" class="sshot"
+ style="width: 100%; margin-top: -7.5em; position: relative; z-index: 1;"
+ alt="Auto Destruct Deactivated">
+</div>
+</article>
+
+</body>
+</html>
--- /dev/null
+/**************************
+ * styles for talk slides *
+ * by Robert Kaiser *
+ * <kairo@kairo.at> *
+ * (for FOSDEM 2017) *
+ **************************/
+
+
+/***** base style *****/
+
+@font-face {
+ font-family: 'Liberation Sans';
+ src: url('template/LiberationSans-Regular-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Liberation Sans';
+ src: url('template/LiberationSans-Italic-webfont.woff') format('woff');
+ font-weight: normal;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: 'Liberation Sans';
+ src: url('template/LiberationSans-Bold-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Liberation Sans';
+ src: url('template/LiberationSans-BoldItalic-webfont.woff') format('woff');
+ font-weight: bold;
+ font-style: italic;
+}
+
+html {
+ overflow: hidden; /* to make translations not paint scrollbars */
+ background: #FFFFEE;
+ height: 100%;
+}
+
+body {
+ margin: 0px;
+ padding: 0px;
+ border: 0px;
+ font-family: "Liberation Sans", sans-serif;
+ font-size: 2em;
+ color: #336699;
+ background: url("template/page-background-top.png") top left repeat-x;
+ height: 100%;
+}
+
+ul {
+ padding-left: 1.2em;
+ margin-bottom: 0.5em;
+}
+
+ul:first-child,
+ul:last-child {
+ margin-top: 0;
+}
+
+#header {
+ height: 40px;
+ position: relative;
+ border-top: 1px solid white;
+}
+
+#headerlogo {
+ position: absolute;
+ display: block;
+ right: 25px;
+ top: 3px;
+ text-indent: -2000px;
+ font-size: 1px;
+ overflow: hidden;
+ height: 40px;
+ width: 64px;
+ background: url("template/KaiRoLogo-64x40.png") no-repeat;
+}
+
+#header-text {
+ position: relative;
+ top: 5px;
+ left: 25px;
+ width: calc(100% - 50px);
+ font-size: 20px;
+ font-weight: bold;
+ color: #336699;
+}
+
+#header-text.neartime {
+ color: #6080FF;
+}
+
+#header-text.ontime {
+ color: #40AA40;
+}
+
+#header-text.overtime {
+ color: #FF8080;
+}
+
+#subheader-text {
+ color: #336699;
+ position: relative;
+ top: 3px;
+ left: 25px;
+ width: calc(100% - 50px);
+ font-size: 10px;
+}
+
+#slidenav {
+ position: absolute;
+ right: 200px;
+ top: 15px;
+ font-size: 10px;
+}
+
+#slidenav a:link,
+#slidenav a:visited {
+ color: #669999;
+}
+
+#slidenav a:hover,
+#slidenav a:active {
+ color: #88BBBB;
+}
+
+#slidenav .nolink {
+ color: #CCCCCC;
+}
+
+article {
+ position: absolute;
+ width: 100%;
+ /* header is 40px, 7px to have a bit of distance,
+ * 3px height-reducing on the bottom for safety */
+ top: 47px;
+ height: calc(100% - 50px);
+ overflow: auto;
+
+ transition-property: transform, opacity;
+ transition-duration: 3s;
+ transition-timing-function: ease;
+ transform-origin: center 5em;
+
+ opacity: 0;
+/*
+ transform: translate(-100%, 0);
+*/
+/*
+ transform: scale(0.1) rotate(360deg) translate(-200%, 0);
+*/
+ transform: scale(0.1) translate(-400%, 0);
+}
+
+article[aria-selected="true"] {
+ opacity: 1;
+ transform: scale(1) rotate(0deg) translate(0, 0);
+}
+
+article[aria-selected="true"] ~ article {
+ opacity: 0;
+/*
+ transform: translate(100%, 0);
+*/
+/*
+ transform: scale(0.1) rotate(-360deg) translate(200%, 0);
+*/
+ transform: scale(0.1) translate(400%, 0);
+}
+
+/***** headers *****/
+
+h1, h2, h3, h4 {
+ margin: 0.5em 0;
+ font-weight: bold;
+ color: #FFFFEE;
+ background: #003366;
+ text-align: center;
+}
+
+h1 {
+ margin-top: 0;
+ font-size: 1.7em;
+}
+
+h2 {
+ font-size: 1.3em;
+}
+
+h3 {
+ font-size: 1.1em;
+}
+
+h4 {
+ font-size: 1em;
+ text-align: left;
+}
+
+/***** boxes *****/
+
+.simplebox {
+ padding: 0.5em;
+}
+
+.captionedbox {
+ padding: 0px;
+}
+
+.simplebox,
+.captionedbox {
+ margin: 1em;
+ background: #fff;
+ background-image: radial-gradient(center 45px, ellipse farthest-corner, #FFFFEE 0, #fff 100%);
+ box-shadow: #AAAA80 3px 3px 2px 0;
+}
+
+.captionedbox-content {
+ margin: 0;
+ padding: 0.5em;
+ border: 0px;
+ border-top: 1px solid #89AACC;
+}
+
+.captionedbox-caption {
+ margin: 0;
+ padding: 0.5em;
+ font-weight: bold;
+}
+
+/***** misc formatting *****/
+
+mark {
+ font-weight: bold;
+ color: #FF6600;
+ background-color: transparent;
+}
+
+s {
+ text-decoration: line-through;
+ color: #808080;
+}
+
+.border {
+ border: 1px solid #336699;
+ padding: 0.5em;
+}
+
+.sshot {
+ box-shadow: #6d7581 3px 3px 2px 0;
+}
+
+.slidepic {
+ float: right;
+ margin-left: .5em;
+}
+
+.ensurepicinbox {
+ clear: both;
+ font-size: 1px;
+ margin: 0;
+}
+
+.largetext {
+ font-size: 2em;
+}
+
+ul > li {
+ margin: 0.5em 0;
+}
+
+.columns2 {
+ -moz-columns: 2;
+}
+
+ul.nobullets > li {
+ list-style-type: none;
+}
+
+ul.arrows > li {
+ list-style-type: none;
+}
+ul.arrows > li:before {
+ content: "\21d2\20"; /* \2192 would be single thin arrow, hex 20 is space */
+}
+
+.cent {
+ text-align: center;
+}
+
+.topmargin {
+ margin-top: 0.5em;
+}
+
+.akey {
+ text-decoration: underline;
+}
+
+a:link, a:visited { color: #669999; text-decoration: none; }
+a:hover, a:active { color: #88BBBB; text-decoration: underline; }
+
+mark a:link, mark a:visited { color: #FF6600; }
+mark a:hover, mark a:active { color: #FF6600; }
+
+pre { margin: 0; }
+
+/***** small stuff *****/
+
+.small,
+.small {
+ font-size: 0.75em;
+}
+
+ul.small,
+.small ul {
+ padding: 0px;
+ border: 0px;
+ margin: 0px 0px 0px 1em;
+}
+
+ul.small > li
+.small ul > li {
+ margin: 0px;
+ padding: 0px;
+ border: 0px;
+}
+
+/***** specific slides *****/
+
--- /dev/null
+/******************************
+ * JavaScript for talk slides *
+ * by Robert Kaiser *
+ * <kairo@kairo.at> *
+ * (for FOSDEM 2011) *
+ ******************************/
+
+var slides = {};
+var articleNodes;
+var currentSlide;
+var currentIdx;
+var defaultIdx = 1; // set to slide index to show by default
+var firstIdx = 2; // set no value if to use first available
+var lastIdx; // set no value if to use first available
+
+var pageTitle, headerText, subHeaderText;
+var navPrev, navNext, navPrevNolink, navNextNolink;
+
+// Slide timer - color variation of headerText
+var slideSeconds = 2 * 60;
+
+// Called when the document has been loaded.
+function docLoaded() {
+ pageTitle = document.getElementsByTagName("title")[0];
+ headerText = document.getElementById("header-text");
+ subHeaderText = document.getElementById("subheader-text");
+ navPrev = document.getElementById("nav-prev");
+ navNext = document.getElementById("nav-next");
+ navPrevNolink = document.getElementById("nav-prev-nolink");
+ navNextNolink = document.getElementById("nav-next-nolink");
+ articleNodes = document.getElementsByTagName("article");
+
+ if (!firstIdx)
+ firstIdx = 0;
+ if (!lastIdx)
+ lastIdx = articleNodes.length - 1;
+
+ // Get a list of all slides (articles).
+ subHeaderText.textContent = articleNodes.length + " slides...";
+ for (var i = 0; i < articleNodes.length; ++i) {
+ subHeaderText.textContent = "Indexing slide " + i + " / " + articleNodes.length;
+ if (!articleNodes[i].id)
+ articleNodes[i].id = "slide_" + i;
+
+ slides[articleNodes[i].id] =
+ {"idx": i,
+ "name": articleNodes[i].id,
+ "title": articleNodes[i].title ? articleNodes[i].title : articleNodes[i].id,
+ "obj": articleNodes[i]};
+
+ if (location.hash.length &&
+ (location.hash == "#" + articleNodes[i].id || location.hash == "#" + i)) {
+ articleNodes[i].setAttribute("aria-selected", "true");
+ currentSlide = slides[articleNodes[i].id];
+ currentIdx = i;
+ }
+ }
+
+ if (!currentSlide) {
+ currentIdx = defaultIdx;
+ currentSlide = slides[articleNodes[currentIdx].id];
+ currentSlide.obj.setAttribute("aria-selected", "true");
+ location.hash = "#" + currentSlide.name;
+ }
+ updateDisplay();
+}
+
+// Called when the hash part of the location changes.
+function locationHashChanged() {
+ if (location.hash.length > 1) {
+ var hashtag = location.hash.substring(1);
+ // If not a number, treat as ID
+ if (isNaN(hashtag) && slides[hashtag]) {
+ currentSlide.obj.removeAttribute("aria-selected");
+ currentSlide = slides[hashtag];
+ currentIdx = currentSlide.idx;
+ currentSlide.obj.setAttribute("aria-selected", "true");
+ updateDisplay();
+ }
+ else if (articleNodes[hashtag]) {
+ currentSlide.obj.removeAttribute("aria-selected");
+ currentIdx = hashtag;
+ currentSlide = slides[articleNodes[currentIdx].id];
+ currentSlide.obj.setAttribute("aria-selected", "true");
+ updateDisplay();
+ }
+ }
+}
+window.onhashchange = locationHashChanged;
+
+// Update the display after we updated what slide is shown.
+function updateDisplay() {
+ if (currentIdx >= firstIdx && currentIdx <= lastIdx &&
+ currentSlide.name != "toc")
+ subHeaderText.textContent = (currentIdx - firstIdx + 1) + "/" +
+ (lastIdx - firstIdx + 1) + " - " +
+ currentSlide.title;
+ else
+ subHeaderText.textContent = currentSlide.title;
+ pageTitle.textContent = headerText.textContent + ": " + currentSlide.title;
+ if (currentIdx > firstIdx && currentSlide.name != "toc") {
+ navPrev.hidden = false;
+ navPrev.href = "#" + articleNodes[currentIdx - 1].id;
+ navPrevNolink.hidden = true;
+ }
+ else {
+ navPrev.hidden = true;
+ navPrevNolink.hidden = false;
+ }
+ if (currentIdx < lastIdx && currentSlide.name != "toc") {
+ navNext.hidden = false;
+ navNext.href = "#" + articleNodes[currentIdx + 1].id;
+ navNextNolink.hidden = true;
+ }
+ else {
+ navNext.hidden = true;
+ navNextNolink.hidden = false;
+ }
+ headerText.className = "";
+ slideStart = new Date();
+ if (currentSlide.name == "toc")
+ createTOC();
+ else
+ setTimeout("timerFired()", timerMSec);
+}
+
+// Create TOC list.
+function createTOC() {
+ var list = document.getElementById("toc-list");
+ if (!list.getElementsByTagName("li").length) {
+ for (var slide in slides) {
+ if (slide != "toc") {
+ var item = document.createElement("li");
+ var link = document.createElement("a");
+ var slideHeaders = slides[slide].obj.getElementsByTagName("h1");
+ if (slideHeaders.length)
+ link.textContent = slideHeaders[0].textContent;
+ else
+ link.textContent = slides[slide].title;
+ link.href = "#" + slides[slide].name;
+ item.appendChild(link);
+ list.appendChild(item);
+ }
+ }
+ }
+}
+
+// Do timed color variation on slides.
+function timerFired() {
+ var slideCurrent = new Date();
+ var secondsDiff = Math.round((slideCurrent.getTime() - slideStart.getTime()) / 1000);
+ if (secondsDiff >= slideSeconds) {
+ headerText.className = "overtime";
+ }
+ else if (secondsDiff >= Math.round(2 * slideSeconds / 3)) {
+ headerText.className = "ontime";
+ setTimeout("timerFired()", timerMSec);
+ }
+ else if (secondsDiff >= Math.round(slideSeconds / 3)) {
+ headerText.className = "neartime";
+ setTimeout("timerFired()", timerMSec);
+ }
+ else {
+ // We should never come here, but if we do, go into a 100ms loop until we get over the upcoming step.
+ setTimeout("timerFired()", 100);
+ }
+}
+var slideStart = new Date();
+var timerMSec = 1000 * (slideSeconds / 3);
+setTimeout("timerFired()", timerMSec);
+
+// Keyboard/click nav functionality, mostly inherited from FOSDEM 2007.
+(function() {
+ function go(where) {
+ where = where || "next";
+ var navElem = document.getElementById("nav-" + where);
+ if (!navElem.hidden)
+ window.location.href = navElem.href;
+ }
+
+ function handleClick(e) {
+ e = e || event;
+ var target = (window.event) ? e.srcElement : e.target;
+ if (e.which == 1 && target.nodeName != "A" && target.nodeName != "VIDEO")
+ go("next");
+ }
+
+ function handleKeyPress(e) {
+ e = e || event;
+ switch (e.keyCode) {
+ case e.DOM_VK_LEFT:
+ go("prev"); break;
+ case e.DOM_VK_RIGHT:
+ go("next"); break;
+ }
+ }
+
+ window.onclick = handleClick;
+ window.onkeypress = handleKeyPress;
+})();
--- /dev/null
+LICENSE AGREEMENT AND LIMITED PRODUCT WARRANTY LIBERATION FONT SOFTWARE
+This agreement governs the use of the Software and any updates to the
+Software, regardless of the delivery mechanism. Subject to the following
+terms, Red Hat, Inc. ("Red Hat") grants to the user ("Client") a license to
+this collective work pursuant to the GNU General Public License v.2 with the
+exceptions set forth below and such other terms as our set forth in this End
+User License Agreement.
+1. The Software and License Exception. LIBERATION font software (the
+"Software") consists of TrueType-OpenType formatted font software for
+rendering LIBERATION typefaces in sans serif, serif, and monospaced character
+styles. You are licensed to use, modify, copy, and distribute the Software
+pursuant to the GNU General Public License v.2 with the following exceptions:
+1) As a special exception, if you create a document which uses this font, and
+embed this font or unaltered portions of this font into the document, this
+font does not by itself cause the resulting document to be covered by the GNU
+General Public License. This exception does not however invalidate any other
+reasons why the document might be covered by the GNU General Public License.
+If you modify this font, you may extend this exception to your version of the
+font, but you are not obligated to do so. If you do not wish to do so, delete
+this exception statement from your version.
+
+2) As a further exception, any distribution of the object code of the Software
+in a physical product must provide you the right to access and modify the
+source code for the Software and to reinstall that modified version of the
+Software in object code form on the same physical product on which you
+received it.
+2. Intellectual Property Rights. The Software and each of its components,
+including the source code, documentation, appearance, structure and
+organization are owned by Red Hat and others and are protected under copyright
+and other laws. Title to the Software and any component, or to any copy,
+modification, or merged portion shall remain with the aforementioned, subject
+to the applicable license. The "LIBERATION" trademark is a trademark of Red
+Hat, Inc. in the U.S. and other countries. This agreement does not permit
+Client to distribute modified versions of the Software using Red Hat's
+trademarks. If Client makes a redistribution of a modified version of the
+Software, then Client must modify the files names to remove any reference to
+the Red Hat trademarks and must not use the Red Hat trademarks in any way to
+reference or promote the modified Software.
+3. Limited Warranty. To the maximum extent permitted under applicable law, the
+Software is provided and licensed "as is" without warranty of any kind,
+expressed or implied, including the implied warranties of merchantability,
+non-infringement or fitness for a particular purpose. Red Hat does not warrant
+that the functions contained in the Software will meet Client's requirements
+or that the operation of the Software will be entirely error free or appear
+precisely as described in the accompanying documentation.
+4. Limitation of Remedies and Liability. To the maximum extent permitted by
+applicable law, Red Hat or any Red Hat authorized dealer will not be liable to
+Client for any incidental or consequential damages, including lost profits or
+lost savings arising out of the use or inability to use the Software, even if
+Red Hat or such dealer has been advised of the possibility of such damages.
+5. Export Control. As required by U.S. law, Client represents and warrants
+that it: (a) understands that the Software is subject to export controls under
+the U.S. Commerce Department's Export Administration Regulations ("EAR"); (b)
+is not located in a prohibited destination country under the EAR or U.S.
+sanctions regulations (currently Cuba, Iran, Iraq, Libya, North Korea, Sudan
+and Syria); (c) will not export, re-export, or transfer the Software to any
+prohibited destination, entity, or individual without the necessary export
+license(s) or authorizations(s) from the U.S. Government; (d) will not use or
+transfer the Software for use in any sensitive nuclear, chemical or biological
+weapons, or missile technology end-uses unless authorized by the U.S.
+Government by regulation or specific license; (e) understands and agrees that
+if it is in the United States and exports or transfers the Software to
+eligible end users, it will, as required by EAR Section 740.17(e), submit
+semi-annual reports to the Commerce Department's Bureau of Industry & Security
+(BIS), which include the name and address (including country) of each
+transferee; and (f) understands that countries other than the United States
+may restrict the import, use, or export of encryption products and that it
+shall be solely responsible for compliance with any such import, use, or
+export restrictions.
+6. General. If any provision of this agreement is held to be unenforceable,
+that shall not affect the enforceability of the remaining provisions. This
+agreement shall be governed by the laws of the State of North Carolina and of
+the United States, without regard to any conflict of laws provisions, except
+that the United Nations Convention on the International Sale of Goods shall
+not apply.
+Copyright © 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark
+of Red Hat, Inc.
+