talloc: use the system pytalloc-util for python3 as well
[sfrench/samba-autobuild/.git] / lib / param / loadparm_server_role.c
index 1abe9b9ddc3c3d8395395db4b18a0500eae75de7..7a6bc7707235985e59276812fd7be02e4ca1ec93 100644 (file)
@@ -26,7 +26,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "includes.h"
-#include "lib/param/loadparm_server_role.h"
+#include "lib/param/loadparm.h"
 #include "libds/common/roles.h"
 
 /*******************************************************************
@@ -41,6 +41,7 @@ static const struct srv_role_tab {
        { ROLE_DOMAIN_MEMBER, "ROLE_DOMAIN_MEMBER" },
        { ROLE_DOMAIN_BDC, "ROLE_DOMAIN_BDC" },
        { ROLE_DOMAIN_PDC, "ROLE_DOMAIN_PDC" },
+       { ROLE_ACTIVE_DIRECTORY_DC, "ROLE_ACTIVE_DIRECTORY_DC" },
        { 0, NULL }
 };
 
@@ -58,43 +59,23 @@ const char* server_role_str(uint32_t role)
 /**
  * Set the server role based on security, domain logons and domain master
  */
-int lp_find_server_role(int server_role, int security, bool domain_logons, bool domain_master)
+int lp_find_server_role(int server_role, int security, int domain_logons, int domain_master)
 {
        int role;
 
        if (server_role != ROLE_AUTO) {
-               return server_role;
+               if (lp_is_security_and_server_role_valid(server_role, security)) {
+                       return server_role;
+               }
        }
 
-       /* If server_role is set to ROLE_AUTO, figure out the correct role */
+       /* If server_role is set to ROLE_AUTO, or conflicted with the
+        * chosen security setting, figure out the correct role */
        role = ROLE_STANDALONE;
 
        switch (security) {
-               case SEC_SHARE:
-                       if (domain_logons) {
-                               DEBUG(0, ("Server's Role (logon server) conflicts with share-level security\n"));
-                       }
-                       break;
-               case SEC_SERVER:
-                       if (domain_logons) {
-                               DEBUG(0, ("Server's Role (logon server) conflicts with server-level security\n"));
-                       }
-                       /* this used to be considered ROLE_DOMAIN_MEMBER but that's just wrong */
-                       role = ROLE_STANDALONE;
-                       break;
                case SEC_DOMAIN:
-                       if (domain_logons) {
-                               DEBUG(1, ("Server's Role (logon server) NOT ADVISED with domain-level security\n"));
-                               role = ROLE_DOMAIN_BDC;
-                               break;
-                       }
-                       role = ROLE_DOMAIN_MEMBER;
-                       break;
                case SEC_ADS:
-                       if (domain_logons) {
-                               role = ROLE_DOMAIN_CONTROLLER;
-                               break;
-                       }
                        role = ROLE_DOMAIN_MEMBER;
                        break;
                case SEC_AUTO:
@@ -126,18 +107,47 @@ int lp_find_security(int server_role, int security)
        }
 
        switch (server_role) {
-       case ROLE_AUTO:
-       case ROLE_STANDALONE:
-               return SEC_USER;
        case ROLE_DOMAIN_MEMBER:
-#if (defined(HAVE_ADS) || _SAMBA_BUILD_ >= 4)
                return SEC_ADS;
-#else
-               return SEC_DOMAIN;
-#endif
+       default:
+               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 (security == SEC_AUTO) {
+               return true;
+       }
+
+       switch (server_role) {
+       case ROLE_AUTO:
+               valid = true;
+               break;
+       case ROLE_DOMAIN_MEMBER:
+               if (security == SEC_ADS || security == SEC_DOMAIN) {
+                       valid = true;
+               }
+               break;
+
+       case ROLE_STANDALONE:
        case ROLE_DOMAIN_PDC:
        case ROLE_DOMAIN_BDC:
+       case ROLE_ACTIVE_DIRECTORY_DC:
+               if (security == SEC_USER) {
+                       valid = true;
+               }
+               break;
+
        default:
-               return SEC_USER;
+               break;
        }
+
+       return valid;
 }