Added info level 1005 to netsharegetinfo (is the share a DFS root)
authorShirish Kalele <kalele@samba.org>
Fri, 28 Apr 2000 18:36:47 +0000 (18:36 +0000)
committerShirish Kalele <kalele@samba.org>
Fri, 28 Apr 2000 18:36:47 +0000 (18:36 +0000)
Added dfs_server announcement in set_default_server_announce_type()

source/include/rpc_srvsvc.h
source/include/smb.h
source/param/loadparm.c
source/rpc_parse/parse_srv.c
source/rpc_server/srv_srvsvc.c

index 78949a7a7d99a56b4992508541c725f48c618c89..96961cbd2fc463b70b15687d4759a18661d9b692 100644 (file)
@@ -305,6 +305,12 @@ typedef struct share_info_2_info
 
 } SRV_SHARE_INFO_2;
 
+/* SRV_SHARE_INFO_1005 */
+typedef struct share_info_1005_info
+{
+  uint32 dfs_root_flag; 
+} SRV_SHARE_INFO_1005;
+
 /* SRV_SHARE_INFO_CTR */
 typedef struct srv_share_info_ctr_info
 {
@@ -373,7 +379,7 @@ typedef struct r_net_share_get_info_info
        union {
                SRV_SHARE_INFO_1 info1;
                SRV_SHARE_INFO_2 info2;
-
+               SRV_SHARE_INFO_1005 info1005;
        } share;
 
        uint32 status;
index 78d17aaa3d4bf91ef622339c249de559e99a87ec..ee14466cf7ff268decbef4e10d402d2213beda43 100644 (file)
@@ -1412,6 +1412,7 @@ char *strdup(char *s);
 #define SV_TYPE_SERVER_OSF          0x00100000
 #define SV_TYPE_SERVER_VMS          0x00200000
 #define SV_TYPE_WIN95_PLUS          0x00400000
+#define SV_TYPE_DFS_SERVER         0x00800000
 #define SV_TYPE_ALTERNATE_XPORT     0x20000000  
 #define SV_TYPE_LOCAL_LIST_ONLY     0x40000000  
 #define SV_TYPE_DOMAIN_ENUM         0x80000000
index cc5a51c6c66a42b87948b0dfbc7371526a05db77..ff19f34a0e94665cea8748436bf7f541ef84a965 100644 (file)
@@ -2946,6 +2946,7 @@ static void set_default_server_announce_type(void)
   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 |= (lp_host_msdfs() ? SV_TYPE_DFS_SERVER : 0);
 }
 
 
index 8997b05e0b75a2713275eac56cf7a74bf3d7a3c5..6eeae80cfc26fe0e2eac2073b7dcb8f2280f0445 100644 (file)
@@ -201,6 +201,27 @@ static BOOL srv_io_share_info2(char *desc, SH_INFO_2 *sh2, prs_struct *ps, int d
        return True;
 }
 
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+static BOOL srv_io_share_info1005(char* desc, SRV_SHARE_INFO_1005* sh1005,
+                                 prs_struct* ps, int depth)
+{
+  if(sh1005 == NULL)
+    return False;
+
+  prs_debug(ps, depth, desc, "srv_io_share_info1005");
+  depth++;
+
+  if(!prs_align(ps))
+    return False;
+
+  if(!prs_uint32("dfs_root_flag", ps, depth, &sh1005->dfs_root_flag))
+    return False;
+
+  return True;
+}   
+
 /*******************************************************************
  Reads or writes a structure.
 ********************************************************************/
@@ -527,8 +548,12 @@ BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_
                                return False;
 
                        break;
+               case 1005:
+                       if(!srv_io_share_info1005("", &r_n->share.info1005, 
+                                                 ps, depth))
+                                return False;                  
                default:
-                       DEBUG(5,("%s no share info at switch_value %d\n",
+                       DEBUG(5,("%s no share info at switch_value %d\n",
                                 tab_depth(depth), r_n->switch_value));
                        break;
                }
index 51ba7e8a8f7b8228dfe4ce3273a9ff6572846f52..bb2083e28af3a58b3e81f8fa99b76dbbcb3ccfba 100644 (file)
@@ -90,6 +90,20 @@ static void init_srv_share_info_2(SRV_SHARE_INFO_2 *sh2, int snum)
        init_srv_share_info2_str(&sh2->info_2_str, net_name, remark, path, passwd);
 }
 
+/***************************************************************************
+ Fill in a share info level 1005 structure.
+ ***************************************************************************/
+static void init_srv_share_info_1005(SRV_SHARE_INFO_1005* sh1005, int snum)
+{
+       sh1005->dfs_root_flag = 0;
+
+#ifdef MS_DFS
+       if(lp_host_msdfs() && *lp_dfsmap(snum) && lp_dfsmap_loaded(snum))
+               sh1005->dfs_root_flag = 3;
+#endif
+
+}
+
 /*******************************************************************
  Fill in a share info structure.
  ********************************************************************/
@@ -235,6 +249,9 @@ static void init_srv_r_net_share_get_info(SRV_R_NET_SHARE_GET_INFO *r_n,
                case 2:
                        init_srv_share_info_2(&r_n->share.info2, snum);
                        break;
+               case 1005:
+                       init_srv_share_info_1005(&r_n->share.info1005, snum);
+                       break;
                default:
                        DEBUG(5,("init_srv_net_share_get_info: unsupported switch value %d\n", info_level));
                        status = 0xC0000000 | NT_STATUS_INVALID_INFO_CLASS;