Date: Mon, 27 Apr 1998 22:43:56 +0200 From: Bartlomiej Czardybon <czar@silesia.pik-net.pl> To: samba-technical@samba.anu.edu.au Subject: clientgen - cli_RNetShareEnum
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@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 ---