added srvsvc basic pipe, straight from paul's code. does NETSHAREENUM
authorLuke Leighton <lkcl@samba.org>
Wed, 15 Oct 1997 16:51:03 +0000 (16:51 +0000)
committerLuke Leighton <lkcl@samba.org>
Wed, 15 Oct 1997 16:51:03 +0000 (16:51 +0000)
and NETSERVERGETINFO.
(This used to be commit 96b17b829fc787c15cd366eca604c09d68b5b900)

source3/include/proto.h
source3/include/smb.h
source3/smbd/ipc.c
source3/smbd/pipes.c

index 1ed8539ab59dc2bde29f44ce7b644053c0966425..6baa945e8b92eedc599262d24caa31f8e5ee0f98 100644 (file)
@@ -654,6 +654,10 @@ BOOL api_LsarpcTNP(int cnum,int uid, char *param,char *data,
                     int mdrcnt,int mprcnt,
                     char **rdata,char **rparam,
                     int *rdata_len,int *rparam_len);
+BOOL api_srvsvcTNP(int cnum,int uid, char *param,char *data,
+                    int mdrcnt,int mprcnt,
+                    char **rdata,char **rparam,
+                    int *rdata_len,int *rparam_len);
 
 /*The following definitions come from  pipeutil.c  */
 
index 8e34b0635966d4bb2ae9df67269d062ad7f141ce..c733f2952104308b28f06110e203e6ffa33c2448 100644 (file)
@@ -293,6 +293,9 @@ typedef fstring string;
 #define LSA_LOOKUPNAMES     0xFD
 #define LSA_SAMLOGOFF       0xFC
 
+/* srvsvc pipe */
+#define NETSERVERGETINFO 0x15
+#define NETSHAREENUM     0x0f
 
 /* 32 bit time (sec) since 01jan1970 - cifs6.txt, section 3.5, page 30 */
 typedef struct time_info
index 468d34e157f11761fc39c11ddb0bf0009486d84c..c29e8656b17934a93f4c12f8bd82767bfb17716f 100644 (file)
@@ -2764,8 +2764,10 @@ struct
   {
 #ifdef NTDOMAIN
     { "SetNmdPpHndState",      "lsarpc",       1,      api_LsarpcSNPHS },
+    { "SetNmdPpHndState",      "srvsvc",       1,      api_LsarpcSNPHS },
     { "SetNmdPpHndState",      "NETLOGON",     1,      api_LsarpcSNPHS },
     { "TransactNmPipe",        "lsarpc",       0x26,   api_ntLsarpcTNP },
+    { "TransactNmPipe",        "srvsvc",       0x26,   api_srvsvcTNP },
     { "TransactNmPipe",        "NETLOGON",     0x26,   api_netlogrpcTNP },
 #else
     { "SetNmdPpHndState",      "lsarpc",       1,      api_LsarpcSNPHS },
index 91ca69c02264ee95b046e590c5bb78143e0bdabc..bf53fa84bc25ff0fb5d7584a5f033919a474d648 100644 (file)
@@ -55,6 +55,7 @@ char * known_pipes [] =
   "lsarpc",
 #if NTDOMAIN
   "NETLOGON",
+  "srvsvc",
 #endif
   NULL
 };
@@ -362,3 +363,84 @@ BOOL api_LsarpcTNP(int cnum,int uid, char *param,char *data,
   }
   return(True);
 }
+
+BOOL api_srvsvcTNP(int cnum,int uid, char *param,char *data,
+                    int mdrcnt,int mprcnt,
+                    char **rdata,char **rparam,
+                    int *rdata_len,int *rparam_len)
+{
+  uint16 opnum;
+  char *q;
+  int pkttype;
+  extern pstring myname;
+  char *servername;
+  uint32 level;
+
+  opnum = SVAL(data,22);
+
+  pkttype = CVAL(data, 2);
+  if (pkttype == 0x0b) /* RPC BIND */
+  {
+    DEBUG(4,("srvsvc rpc bind %x\n",pkttype));
+    LsarpcTNP1(data,rdata,rdata_len);
+    return True;
+  }
+
+  DEBUG(4,("srvsvc TransactNamedPipe op %x\n",opnum));
+  initrpcreply(data, *rdata);
+  DEBUG(4,("srvsvc LINE %d\n",__LINE__));
+  get_myname(myname,NULL);
+  switch (opnum)
+  {
+    case NETSHAREENUM:
+      q = data + 0x18;
+      servername = q + 16;
+      q = skip_unicode_string(servername,1);
+      if (strlen(unistr(servername)) % 2 == 0)
+      q += 2;
+     level = IVAL(q, 0); q += 4;
+      /* ignore the rest for the moment */
+      q = *rdata + 0x18;
+      SIVAL(q, 0, level); q += 4;
+      SIVAL(q, 0, 1); q += 4; /* switch value */
+      SIVAL(q, 0, 2); q += 4;
+      SIVAL(q, 0, 2); q += 4; /* number of entries */
+      SIVAL(q, 0, 2); q += 4;
+      endrpcreply(data, *rdata, q-*rdata, 0, rdata_len);
+      break;
+    case NETSERVERGETINFO:
+    {
+      UNISTR2 uni_str;
+      q = data + 0x18;
+      servername = q + 16;
+      q = skip_unicode_string(servername,1);
+      if (strlen(unistr(servername)) % 2 == 0)
+       q += 2;
+    level = IVAL(q, 0); q += 4;
+     /* ignore the rest for the moment */
+      q = *rdata + 0x18;
+      SIVAL(q, 0, 101); q += 4; /* switch value */
+      SIVAL(q, 0, 2); q += 4; /* bufptr */
+      SIVAL(q, 0, 0x1f4); q += 4; /* platform id */
+      SIVAL(q, 0, 2); q += 4; /* bufptr for name */
+      SIVAL(q, 0, 5); q += 4; /* major version */
+      SIVAL(q, 0, 4); q += 4; /* minor version == 5.4 */
+      SIVAL(q, 0, 0x4100B); q += 4; /* type */
+      SIVAL(q, 0, 2); q += 4; /* comment */
+      make_unistr2(&uni_str, myname, strlen(myname));
+      q = smb_io_unistr2(False, &uni_str, q, *rdata, 4, 0);
+
+      make_unistr2(&uni_str, lp_serverstring(), strlen(lp_serverstring()));
+      q = smb_io_unistr2(False, &uni_str, q, *rdata, 4, 0);
+
+      q = align_offset(q, *rdata, 4);
+
+      endrpcreply(data, *rdata, q-*rdata, 0, rdata_len);
+      break;
+    }
+    default:
+      DEBUG(4, ("srvsvc, unknown code: %lx\n", opnum));
+  }
+  return(True);
+}
+