param: Check if server role and security parameters are conflicting
authorAmitay Isaacs <amitay@gmail.com>
Thu, 10 Nov 2011 06:45:28 +0000 (17:45 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 16 Nov 2011 23:34:09 +0000 (00:34 +0100)
lib/param/loadparm.h
lib/param/loadparm_server_role.c

index ecf8f9c6a8391a12dd9de3ccd81a4625e6f79641..a50384d873ccb25a5c9eb31132ba4de83800a4d4 100644 (file)
@@ -136,3 +136,4 @@ struct parm_struct {
 const char* server_role_str(uint32_t role);
 int lp_find_server_role(int server_role, int security, bool domain_logons, bool domain_master);
 int lp_find_security(int server_role, int security);
+bool lp_is_security_and_server_role_valid(int server_role, int security);
index d80ee7e87665265514edb97de0391d45905d15f1..a39d5fa214d6b164167055ce7d2fab976457693a 100644 (file)
@@ -141,3 +141,42 @@ int lp_find_security(int server_role, int security)
                return SEC_USER;
        }
 }
+
+
+/**
+ * Check if server role and security parameters are contradictory
+ */
+bool lp_is_security_and_server_role_valid(int server_role, int security)
+{
+       bool valid = false;
+
+       if (server_role == ROLE_AUTO || security == SEC_AUTO) {
+               return false;
+       }
+
+       switch (server_role) {
+       case ROLE_STANDALONE:
+               if (security == SEC_SHARE || security == SEC_SERVER || security == SEC_USER) {
+                       valid = true;
+               }
+               break;
+
+       case ROLE_DOMAIN_MEMBER:
+               if (security == SEC_ADS || security == SEC_DOMAIN) {
+                       valid = true;
+               }
+               break;
+
+       case ROLE_DOMAIN_PDC:
+       case ROLE_DOMAIN_BDC:
+               if (security == SEC_USER) {
+                       valid = true;
+               }
+               break;
+
+       default:
+               break;
+       }
+
+       return valid;
+}