Allow either user or password to be overridden

Current behavior:
* Default user and default password must be specified;
* Overriding both user and password for a given server is allowed;
* Overriding just the password for a given server is allowed;
* Overriding just the user for a given server gives an error.

New behavior:
* Default user and default password no longer needed.
* If a per-server user and/or password is specified, use it
  (otherwise, use the default).
* If the user and/or password is non-empty, throw the exception.
diff --git a/src/com/google/enterprise/adaptor/ad/AdAdaptor.java b/src/com/google/enterprise/adaptor/ad/AdAdaptor.java
index f334fb5..df96e42 100644
--- a/src/com/google/enterprise/adaptor/ad/AdAdaptor.java
+++ b/src/com/google/enterprise/adaptor/ad/AdAdaptor.java
@@ -41,7 +41,7 @@
 
   private String namespace;
   private String defaultUser;  // used if an AD doesn't override
-  private String defaultPassword;
+  private String defaultPassword;  // likewise
   private List<AdServer> servers = new ArrayList<AdServer>();
   private Map<String, String> localizedStrings;
   private boolean feedBuiltinGroups;
@@ -50,8 +50,8 @@
   public void initConfig(Config config) {
     config.addKey("ad.servers", null);
     config.addKey("adaptor.namespace", "Default");
-    config.addKey("ad.defaultUser", null);
-    config.addKey("ad.defaultPassword", null);
+    config.addKey("ad.defaultUser", "");
+    config.addKey("ad.defaultPassword", "");
     config.addKey("ad.localized.Everyone", "Everyone");
     config.addKey("ad.localized.NTAuthority", "NT Authority");
     config.addKey("ad.localized.Interactive", "Interactive");
@@ -88,19 +88,19 @@
         }
       }
       String principal = singleServerConfig.get("user");
-      String passwd = singleServerConfig.get("password");
-      if (null == principal || principal.isEmpty()) {
+      if (null == principal) {
         principal = defaultUser;
-        if (null == passwd || passwd.isEmpty()) {
-          passwd = defaultPassword;
-        } else {
-          String err = "password without user for " + host;
-          throw new IllegalStateException(err);
-        }
       }
-      if (null == passwd || passwd.isEmpty()) {
-        String err = "no password for " + host;
-        throw new IllegalStateException(err);
+      if (principal.isEmpty()) {
+        throw new IllegalStateException("user not specified for host " + host);
+      }
+      String passwd = singleServerConfig.get("password");
+      if (null == passwd) {
+        passwd = defaultPassword;
+      }
+      if (passwd.isEmpty()) {
+        throw new IllegalStateException("password not specified for host "
+            + host);
       }
       AdServer adServer = new AdServer(method, host, port, principal, passwd);
       servers.add(adServer);