diff -r c437d4824174 openidurl/openidurl.module
--- a/openidurl/openidurl.module	Sun Oct 26 13:33:17 2008 -0400
+++ b/openidurl/openidurl.module	Sun Oct 26 21:36:41 2008 +0000
@@ -31,7 +31,7 @@
       $server = variable_get('openidurl_server', NULL);
       $delegate = variable_get('openidurl_delegate', NULL);
       $xrds = variable_get('openidurl_xrds', NULL);
-      _openidurl_set_html_head($server, $delegate, $xrds);
+      _openidurl_response($server, $delegate, $xrds);
     }
   }
   else {
@@ -84,8 +84,48 @@
     '#default_value' => variable_get('openidurl_xrds', ''),
     '#description' => t("This is the OpenID XRDS location (e.g. http://yourname.myopenid.com/xrds)."),
   );
+  $form['openidurl_emitxrds'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Emit XRDS Yadis Response'),
+    '#default_value' => variable_get('openidurl_emitxrds', false),
+    '#description' => t("Respond to XRDS requests with a Yadis document including the OpenID information above.  You probably want to turn this on, UNLESS your drupal site is supporting XRDS requests in a more general way."),
+  );
   return system_settings_form($form);
 };
+
+function _openidurl_response($server = NULL, $delegate = NULL, $xrds = NULL) {
+  if (variable_get('openidurl_emitxrds', false)) {
+    header('Vary: Accept');
+    if (stristr($_SERVER['HTTP_ACCEPT'], 'application/xrds+xml')) {
+      header('Content-Type: application/xrds+xml');
+      print _openidurl_yadis($server, $delegate, $xrds);
+      exit();
+    }
+  }
+  _openidurl_set_html_head($server, $delegate, $xrds);
+}
+
+function _openidurl_yadis($server = NULL, $delegate = NULL, $xrds = NULL) {
+  return <<<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<xrds:XRDS xmlns:xrds="xri://\$xrds" xmlns="xri://\$xrd*(\$v*2.0)"
+    xmlns:openid="http://openid.net/xmlns/1.0">
+  <XRD>
+    <Service priority="50">
+      <Type>http://openid.net/signon/1.0</Type>
+      <URI>$server</URI>
+      <openid:Delegate>$delegate</openid:Delegate>
+    </Service>
+    <Service xmlns="xri://\$xrd*(\$v*2.0)">
+      <Type>http://specs.openid.net/auth/2.0/signon</Type>
+      <URI>$server</URI>
+      <LocalID>$delegate</LocalID>
+    </Service>
+  </XRD>
+</xrds:XRDS>
+
+EOF;
+}
 
 /**
 * Valid permissions for this module
