server type announcements modified to include the "role" of the server:
[kai/samba.git] / source / param / loadparm.c
index ff8ccff99b615f64b86631577234f71d642c6d7e..8f92af90a93ea6c5e2737d93e513ffc38d7dcd15 100644 (file)
@@ -2620,15 +2620,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;
+       }
 }