Index: includes/linkchecker.admin.inc
===================================================================
--- includes/linkchecker.admin.inc	(revision 459623)
+++ includes/linkchecker.admin.inc	(working copy)
@@ -153,6 +153,13 @@
     '#description' => t('By default this list contains the domain names reserved for use in documentation and not available for registration. See <a href="@rfc-2606">RFC 2606</a>, Section 3 for more information. URLs on this list are still extracted, but the link setting <em>Check link status</em> becomes automatically disabled to prevent false alarms. If you change this list you need to clear all link data and re-analyze your content. Otherwise this setting will only affect new links added after the configuration change.', array('@rfc-2606' => 'http://www.rfc-editor.org/rfc/rfc2606.txt')),
     '#wysiwyg' => FALSE,
   );
+  $form['check']['linkchecker_server_authentication_credentials'] = array(
+    '#default_value' => variable_get('linkchecker_server_authentication_credentials', ''),
+    '#type' => 'textarea',
+    '#title' => t('Use the specified credentials for various domains'),
+    '#description' => t('Use the following syntax: &lt;servername&gt;=&lt;user&gt;[:&lt;password&gt;]. (Ex. drupal.org=johndoe or drupal.org=johndoe:password)'),
+    '#wysiwyg' => FALSE,
+  );
 
   $form['error'] = array(
     '#type' => 'fieldset',
@@ -226,6 +233,7 @@
 
 function linkchecker_admin_settings_form_validate($form, &$form_state) {
   $form_state['values']['linkchecker_disable_link_check_for_urls'] = trim($form_state['values']['linkchecker_disable_link_check_for_urls']);
+  $form_state['values']['linkchecker_server_authentication_credentials'] = trim($form_state['values']['linkchecker_server_authentication_credentials']);
   $form_state['values']['linkchecker_ignore_response_codes'] = trim($form_state['values']['linkchecker_ignore_response_codes']);
   $ignore_response_codes = preg_split('/(\r\n?|\n)/', $form_state['values']['linkchecker_ignore_response_codes']);
   foreach ($ignore_response_codes as $ignore_response_code) {
Index: linkchecker.install
===================================================================
--- linkchecker.install	(revision 459623)
+++ linkchecker.install	(working copy)
@@ -34,6 +34,7 @@
   variable_del('linkchecker_check_useragent');
   variable_del('linkchecker_cleanup_links_last');
   variable_del('linkchecker_disable_link_check_for_urls');
+  variable_del('linkchecker_server_authentication_credentials');
   variable_del('linkchecker_extract_from_a');
   variable_del('linkchecker_extract_from_audio');
   variable_del('linkchecker_extract_from_embed');
Index: linkchecker.module
===================================================================
--- linkchecker.module	(revision 459623)
+++ linkchecker.module	(working copy)
@@ -139,11 +139,31 @@
   $check_links_interval = variable_get('linkchecker_check_links_interval', 2419200);
   $useragent = variable_get('linkchecker_check_useragent', 'Drupal (+http://drupal.org/)');
 
+  // Get HTTP Auth credentials, if any...
+  $server_credentials = preg_split('/(\r\n?|\n)/', variable_get('linkchecker_server_authentication_credentials', ''));
+  if (!empty($server_credentials)) {
+    $tmp = array();
+    foreach ($server_credentials as $server_credential) {
+      list($host, $user_pass) = explode("=", $server_credential);
+      $tmp[$host] = $user_pass;
+    }
+    $server_credentials = $tmp;
+  }
+  
   // Get URLs for checking.
   $result = db_query_range("SELECT * FROM {linkchecker_links} WHERE last_checked < %d AND status = %d ORDER BY last_checked, lid ASC", time() - $check_links_interval, 1, 0, $check_links_max_per_cron_run);
   while ($link = db_fetch_object($result)) {
+    $headers = array('User-Agent' => 'User-Agent: ' . $useragent);
+    
+    // Parse the URL to determine if we should pass authentication credentials.
+    $uri = parse_url($link->url);
+    if (!empty($server_credentials) && array_key_exists($uri['host'], $server_credentials)) {
+       $headers['Authorization'] = 'Basic ' . base64_encode($server_credentials[$uri['host']]);
+       //watchdog('linkchecker', 'Using credentials %user_password for site %site.', array('%user_password' => $server_credentials[$uri['host']], '%site' => $uri['host']), WATCHDOG_INFO);
+    }
+  
     // Fetch URL.
-    $response = drupal_http_request($link->url, array('User-Agent' => 'User-Agent: ' . $useragent), $link->method, NULL, 1);
+    $response = drupal_http_request($link->url, $headers, $link->method, NULL, 1);
     _linkchecker_status_handling($link, $response);
 
     if ((timer_read('page') / 1000) > ($max_execution_time / 2)) {
