clientgen - cli_RNetShareEnum

Bartlomiej Czardybon czar at silesia.pik-net.pl
Mon Apr 27 20:43:56 GMT 1998


Hi.

As I was writing, some days ago, I have written function
cli_RNetShareEnum for clientgen.c.

Here You have this function - it worked for me OK, although I'd like - 
samba_teamer who (if) is going to incorporate it into clientgen.c - 
to take a look at it, and just verify 'by one eye look'
if it is OK for samba team.

Second thing: clientgen seems to lack a function: find_first and
find_next ... (TRANSACT2_FINDFIRST, TRANSACT2_FINDNEXT).

I wanted to port client.c's do_long_dir to clientgen.c, but
in clientgen.c function cli_api uses SMBTrans , while in 
do_long_dir is used SMBTrans2...

So... the port would probably need some more modifications to
clientgen.c than I would like to make, so I ask You dear
samba developers - how to rewrite this function to clientgen.c ?


-- 
Bartlomiej Czardybon, System Administrator, PiK-Net ul. Toszecka 102 Gliwice
voice: +48 32 279-96-00   fax: +48 32 279-96-01
e-mail: czar at pik-net.pl     http://www.silesia.pik-net.pl/~czar BC374-RIPE


------------------- Function cli_RNetShareEnum -----------------------------
--- cut here ---

/****************************************************************************
try and browse available connections on a host
****************************************************************************/
BOOL cli_RNetShareEnum(struct cli_state *cli, void (*fn)(char *, uint32, char *))
{
  char *rparam = NULL;
  char *rdata = NULL;
  char *p;
  int rdrcnt,rprcnt;
  pstring param;
  int count = -1;

  /* now send a SMBtrans command with api RNetShareEnum */
  p = param;
  SSVAL(p,0,0); /* api number */
  p += 2;
  strcpy(p,"WrLeh");
  p = skip_string(p,1);
  strcpy(p,"B13BWz");
  p = skip_string(p,1);
  SSVAL(p,0,1);
  SSVAL(p,2,BUFFER_SIZE);
  p += 4;

  if (cli_api(cli, 
              PTR_DIFF(p,param),
              0, /* data count */ 
              1024, /* mprcount */
              BUFFER_SIZE, /* mdrcount */
              &rprcnt, &rdrcnt,
	      param,NULL,
              &rparam,&rdata))
    {
      int res = SVAL(rparam,0);
      int converter=SVAL(rparam,2);
      int i;
      BOOL long_share_name=False;
      
      if (res == 0)
	{
	  count=SVAL(rparam,4);
	  p = rdata;

	  for (i=0;i<count;i++,p+=20)
	    {
	      char *sname = p;
	      int type = SVAL(p,14);
	      int comment_offset = IVAL(p,16) & 0xFFFF;
	      char *cmnt = comment_offset?(rdata+comment_offset-converter):"";
	      fn(sname, type, cmnt);
	    }
	}
    }
  
  if (rparam) free(rparam);
  if (rdata) free(rdata);

  return(count>0);
}


--- cut here ---


More information about the samba-technical mailing list