Benjamin Kuit's latest mysql mods. issue with "make proto" needs to be
[samba.git] / source3 / param / loadparm.c
index 49f1c44fcbd225b28726c67489e1124568fbab44..ccb314b2f1c4e860dfa75a849d56b829cf299024 100644 (file)
@@ -126,6 +126,8 @@ typedef struct
   char *szUsernameMap;
   char *szAliasnameMap;
   char *szGroupnameMap;
+  char *szBuiltinnameMap;
+  char *szNTusernameMap;
   char *szCharacterSet;
   char *szLogonScript;
   char *szLogonPath;
@@ -144,11 +146,12 @@ typedef struct
   char *szDomainOtherSIDs;
   char *szDriverFile;
   char *szNameResolveOrder;
+#ifdef WITH_LDAP
   char *szLdapServer;
   char *szLdapSuffix;
-  char *szLdapFilter;
-  char *szLdapRoot;
-  char *szLdapRootPassword; 
+  char *szLdapBindAs;
+  char *szLdapPasswdFile; 
+#endif /* WITH_LDAP */
   char *szPanicAction;
   int max_log_size;
   int mangled_stack;
@@ -228,6 +231,13 @@ typedef struct
   BOOL bNTPipeSupport;
   BOOL bStatCache;
   BOOL bKernelOplocks;
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
+  char *sMysqlDatabase;
+  char *sMysqlTable;
+  char *sMysqlUser;
+  char *sMysqlHost;
+  char *sMysqlPassFile;
+#endif
 } global;
 
 static global Globals;
@@ -517,9 +527,13 @@ static struct parm_struct parm_table[] =
   {"null passwords",   P_BOOL,    P_GLOBAL, &Globals.bNullPasswords,    NULL,   NULL,  0},
   {"password server",  P_STRING,  P_GLOBAL, &Globals.szPasswordServer,  NULL,   NULL,  0},
   {"smb passwd file",  P_STRING,  P_GLOBAL, &Globals.szSMBPasswdFile,   NULL,   NULL,  0},
+#if USE_SMBFILE_DB
   {"smb passgrp file", P_STRING,  P_GLOBAL, &Globals.szSMBPassGroupFile, NULL,   NULL,  0},
+#endif
+#if USE_SMBGROUP_DB
   {"smb group file",   P_STRING,  P_GLOBAL, &Globals.szSMBGroupFile,    NULL,   NULL,  0},
   {"smb alias file",   P_STRING,  P_GLOBAL, &Globals.szSMBAliasFile,    NULL,   NULL,  0},
+#endif
   {"hosts equiv",      P_STRING,  P_GLOBAL, &Globals.szHostsEquiv,      NULL,   NULL,  0},
   {"root directory",   P_STRING,  P_GLOBAL, &Globals.szRootdir,         NULL,   NULL,  0},
   {"root dir",         P_STRING,  P_GLOBAL, &Globals.szRootdir,         NULL,   NULL,  0},
@@ -687,6 +701,8 @@ static struct parm_struct parm_table[] =
 
   {"local group map",   P_STRING, P_GLOBAL, &Globals.szAliasnameMap,     NULL,   NULL,  0},
   {"domain group map",  P_STRING, P_GLOBAL, &Globals.szGroupnameMap,     NULL,   NULL,  0},
+  {"builtin group map", P_STRING, P_GLOBAL, &Globals.szBuiltinnameMap,   NULL,   NULL,  0},
+  {"domain user map",   P_STRING, P_GLOBAL, &Globals.szNTusernameMap,     NULL,   NULL,  0},
   {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout,  NULL,   NULL,  0},
 
   {"Logon Options", P_SEP, P_SEPARATOR},
@@ -734,11 +750,18 @@ static struct parm_struct parm_table[] =
   {"ldap server",      P_STRING,  P_GLOBAL, &Globals.szLdapServer,      NULL,   NULL,  0},
   {"ldap port",        P_INTEGER, P_GLOBAL, &Globals.ldap_port,         NULL,   NULL,  0},
   {"ldap suffix",      P_STRING,  P_GLOBAL, &Globals.szLdapSuffix,      NULL,   NULL,  0},
-  {"ldap filter",      P_STRING,  P_GLOBAL, &Globals.szLdapFilter,      NULL,   NULL,  0},
-  {"ldap root",        P_STRING,  P_GLOBAL, &Globals.szLdapRoot,        NULL,   NULL,  0},
-  {"ldap root passwd", P_STRING,  P_GLOBAL, &Globals.szLdapRootPassword,NULL,   NULL,  0},
+  {"ldap bind as",     P_STRING,  P_GLOBAL, &Globals.szLdapBindAs,      NULL,   NULL,  0},
+  {"ldap passwd file", P_STRING,  P_GLOBAL, &Globals.szLdapPasswdFile,  NULL,   NULL,  0},
 #endif /* WITH_LDAP */
 
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
+  {"MySQL Options", P_SEP, P_SEPARATOR},
+  {"mysql host",       P_STRING, P_GLOBAL, &Globals.sMysqlHost,        NULL,   NULL,  0},
+  {"mysql user",       P_STRING, P_GLOBAL, &Globals.sMysqlUser,        NULL,   NULL,  0},
+  {"mysql pass file",  P_STRING, P_GLOBAL, &Globals.sMysqlPassFile,    NULL,   NULL,  0},
+  {"mysql database",   P_STRING, P_GLOBAL, &Globals.sMysqlDatabase,    NULL,   NULL,  0},
+  {"mysql table",      P_STRING, P_GLOBAL, &Globals.sMysqlTable,       NULL,   NULL,  0},
+#endif /* MYSQL */
 
   {"Miscellaneous Options", P_SEP, P_SEPARATOR},
 
@@ -819,9 +842,13 @@ static void init_globals(void)
   DEBUG(3,("Initialising global parameters\n"));
 
   string_set(&Globals.szSMBPasswdFile, SMB_PASSWD_FILE);
+#if USE_SMBFILE_DB
   string_set(&Globals.szSMBPassGroupFile, SMB_PASSGRP_FILE);
+#endif
+#if USE_SMBGROUP_DB
   string_set(&Globals.szSMBGroupFile, SMB_GROUP_FILE);
   string_set(&Globals.szSMBAliasFile, SMB_ALIAS_FILE);
+#endif
   string_set(&Globals.szPasswdChat,"*old*password* %o\\n *new*password* %n\\n *new*password* %n\\n *changed*");
   string_set(&Globals.szWorkGroup, WORKGROUP);
   string_set(&Globals.szPasswdProgram, PASSWD_PROGRAM);
@@ -911,15 +938,20 @@ static void init_globals(void)
 
 #ifdef WITH_SSL
   Globals.sslVersion = SMB_SSL_V23;
-  Globals.sslHostsRequire = NULL;
-  Globals.sslHostsResign = NULL;
-  Globals.sslCaCertDir = NULL;
-  Globals.sslCaCertFile = NULL;
-  Globals.sslCert = NULL;
-  Globals.sslPrivKey = NULL;
-  Globals.sslClientCert = NULL;
-  Globals.sslClientPrivKey = NULL;
-  Globals.sslCiphers = NULL;
+
+  /*
+   * Most of the next variables should be string_set!
+   */
+
+  string_set(&Globals.sslHostsRequire, NULL);
+  string_set(&Globals.sslHostsResign, NULL);
+  string_set(&Globals.sslCaCertDir, NULL);
+  string_set(&Globals.sslCaCertFile, NULL);
+  string_set(&Globals.sslCert, NULL);
+  string_set(&Globals.sslPrivKey, NULL);
+  string_set(&Globals.sslClientCert, NULL);
+  string_set(&Globals.sslClientPrivKey, NULL);
+  string_set(&Globals.sslCiphers, NULL);
   Globals.sslEnabled = False;
   Globals.sslReqClientCert = False;
   Globals.sslReqServerCert = False;
@@ -954,6 +986,14 @@ static void init_globals(void)
    */
   Globals.bKernelOplocks = True;
 
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
+  string_set(&Globals.sMysqlHost,"localhost");
+  string_set(&Globals.sMysqlUser,"root");
+  string_set(&Globals.sMysqlPassFile,NULL);
+  string_set(&Globals.sMysqlDatabase,"samba");
+  string_set(&Globals.sMysqlTable,"smbpasswd");
+#endif
+
   /*
    * This must be done last as it checks the value in 
    * client_code_page.
@@ -1101,9 +1141,13 @@ FN_GLOBAL_STRING(lp_logfile,&Globals.szLogFile)
 FN_GLOBAL_STRING(lp_smbrun,&Globals.szSmbrun)
 FN_GLOBAL_STRING(lp_configfile,&Globals.szConfigFile)
 FN_GLOBAL_STRING(lp_smb_passwd_file,&Globals.szSMBPasswdFile)
+#if USE_SMBFILE_DB
 FN_GLOBAL_STRING(lp_smb_passgrp_file,&Globals.szSMBPassGroupFile)
+#endif
+#if USE_SMBGROUP_DB
 FN_GLOBAL_STRING(lp_smb_group_file,&Globals.szSMBGroupFile)
 FN_GLOBAL_STRING(lp_smb_alias_file,&Globals.szSMBAliasFile)
+#endif
 FN_GLOBAL_STRING(lp_serverstring,&Globals.szServerString)
 FN_GLOBAL_STRING(lp_printcapname,&Globals.szPrintcapname)
 FN_GLOBAL_STRING(lp_lockdir,&Globals.szLockDir)
@@ -1120,6 +1164,8 @@ FN_GLOBAL_STRING(lp_workgroup,&Globals.szWorkGroup)
 FN_GLOBAL_STRING(lp_username_map,&Globals.szUsernameMap)
 FN_GLOBAL_STRING(lp_aliasname_map,&Globals.szAliasnameMap)
 FN_GLOBAL_STRING(lp_groupname_map,&Globals.szGroupnameMap)
+FN_GLOBAL_STRING(lp_builtinname_map,&Globals.szBuiltinnameMap)
+FN_GLOBAL_STRING(lp_ntusrname_map,&Globals.szNTusernameMap)
 FN_GLOBAL_STRING(lp_logon_script,&Globals.szLogonScript) 
 FN_GLOBAL_STRING(lp_logon_path,&Globals.szLogonPath) 
 FN_GLOBAL_STRING(lp_logon_drive,&Globals.szLogonDrive) 
@@ -1138,9 +1184,8 @@ FN_GLOBAL_STRING(lp_panic_action,&Globals.szPanicAction)
 #ifdef WITH_LDAP
 FN_GLOBAL_STRING(lp_ldap_server,&Globals.szLdapServer);
 FN_GLOBAL_STRING(lp_ldap_suffix,&Globals.szLdapSuffix);
-FN_GLOBAL_STRING(lp_ldap_filter,&Globals.szLdapFilter);
-FN_GLOBAL_STRING(lp_ldap_root,&Globals.szLdapRoot);
-FN_GLOBAL_STRING(lp_ldap_rootpasswd,&Globals.szLdapRootPassword);
+FN_GLOBAL_STRING(lp_ldap_bind_as,&Globals.szLdapBindAs);
+FN_GLOBAL_STRING(lp_ldap_passwd_file,&Globals.szLdapPasswdFile);
 #endif /* WITH_LDAP */
 
 #ifdef WITH_SSL
@@ -1307,6 +1352,13 @@ FN_LOCAL_INTEGER(lp_printing,iPrinting)
 
 FN_LOCAL_CHAR(lp_magicchar,magic_char)
 
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
+FN_GLOBAL_STRING(lp_mysql_host,&Globals.sMysqlHost)
+FN_GLOBAL_STRING(lp_mysql_user,&Globals.sMysqlUser)
+FN_GLOBAL_STRING(lp_mysql_passfile,&Globals.sMysqlPassFile)
+FN_GLOBAL_STRING(lp_mysql_db,&Globals.sMysqlDatabase)
+FN_GLOBAL_STRING(lp_mysql_table,&Globals.sMysqlTable)
+#endif
 
 
 /* local prototypes */
@@ -2598,15 +2650,64 @@ char *volume_label(int snum)
 ********************************************************************/
 static void set_default_server_announce_type(void)
 {
-  default_server_announce = (SV_TYPE_WORKSTATION | SV_TYPE_SERVER |
-                              SV_TYPE_SERVER_UNIX | SV_TYPE_PRINTQ_SERVER);
-  if(lp_announce_as() == ANNOUNCE_AS_NT)
-    default_server_announce |= (SV_TYPE_SERVER_NT | SV_TYPE_NT);
-  else if(lp_announce_as() == ANNOUNCE_AS_WIN95)
-    default_server_announce |= SV_TYPE_WIN95_PLUS;
-  else if(lp_announce_as() == ANNOUNCE_AS_WFW)
-    default_server_announce |= SV_TYPE_WFW;
-  default_server_announce |= (lp_time_server() ? SV_TYPE_TIME_SOURCE : 0);
+       default_server_announce = 0;
+       default_server_announce |= SV_TYPE_WORKSTATION;
+       default_server_announce |= SV_TYPE_SERVER;
+       default_server_announce |= SV_TYPE_SERVER_UNIX;
+       default_server_announce |= SV_TYPE_PRINTQ_SERVER;
+
+       switch (lp_announce_as())
+       {
+               case ANNOUNCE_AS_NT:
+               {
+                       default_server_announce |= SV_TYPE_SERVER_NT;
+                       default_server_announce |= SV_TYPE_NT;
+                       break;
+               }
+               case ANNOUNCE_AS_WIN95:
+               {
+                       default_server_announce |= SV_TYPE_WIN95_PLUS;
+                       break;
+               }
+               case ANNOUNCE_AS_WFW:
+               {
+                       default_server_announce |= SV_TYPE_WFW;
+                       break;
+               }
+               default:
+               {
+                       break;
+               }
+       }
+
+       switch (lp_server_role())
+       {
+               case ROLE_DOMAIN_MEMBER:
+               {
+                       default_server_announce |= SV_TYPE_DOMAIN_MEMBER;
+                       break;
+               }
+               case ROLE_DOMAIN_PDC:
+               {
+                       default_server_announce |= SV_TYPE_DOMAIN_CTRL;
+                       break;
+               }
+               case ROLE_DOMAIN_BDC:
+               {
+                       default_server_announce |= SV_TYPE_DOMAIN_BAKCTRL;
+                       break;
+               }
+               case ROLE_DOMAIN_NONE:
+               default:
+               {
+                       break;
+               }
+       }
+
+       if (lp_time_server())
+       {
+               default_server_announce |= SV_TYPE_TIME_SOURCE;
+       }
 }
 
 
@@ -2756,9 +2857,9 @@ int lp_server_role(void)
                {
                        if (lp_domain_logons())
                        {
-                               return ROLE_DOMAIN_BDC;
+                               return ROLE_DOMAIN_PDC;
                        }
-                       return ROLE_DOMAIN_PDC;
+                       return ROLE_DOMAIN_NONE;
                }
                default:
                {