SPROGS = bin/smbd bin/nmbd bin/swat
PROGS1 = bin/smbclient bin/smbspool bin/testparm bin/testprns bin/smbstatus bin/smbcontrol @RUNPROG@
-PROGS2 = bin/smbpasswd bin/make_smbcodepage bin/make_unicodemap bin/rpcclient @WRAP@ @WRAP32@
+PROGS2 = bin/smbpasswd bin/make_smbcodepage bin/make_unicodemap bin/rpcclient bin/smbcacls @WRAP@ @WRAP32@
MPROGS = @MPROGS@
PROGS = $(PROGS1) $(PROGS2) $(MPROGS) bin/nmblookup bin/make_printerdef bin/pdbedit
BOOL cli_mkdir(struct cli_state *cli, char *dname);
BOOL cli_rmdir(struct cli_state *cli, char *dname);
int cli_nt_create(struct cli_state *cli, char *fname, uint32 DesiredAccess);
-int cli_nt_create_uni(struct cli_state *cli, char *fname, uint32 DesiredAccess);
int cli_open(struct cli_state *cli, char *fname, int flags, int share_mode);
BOOL cli_close(struct cli_state *cli, int fnum);
BOOL cli_lock(struct cli_state *cli, int fnum,
int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
void (*fn)(file_info *, const char *, void *), void *state);
int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *));
+ void (*fn)(file_info *, const char *, void *), void *state);
/*The following definitions come from libsmb/climessage.c */
uint32 capabilities;
capabilities = CAP_NT_SMBS;
- if (cli->use_level_II_oplocks)
+ if (cli->use_level_II_oplocks) {
capabilities |= CAP_LEVEL_II_OPLOCKS;
- if (getenv("USE_UNICODE") &&
- (cli->capabilities & CAP_UNICODE)) {
+ }
+ if (cli->capabilities & CAP_UNICODE) {
capabilities |= CAP_UNICODE;
}
set_message(cli->outbuf,13,0,True);
cli->max_xmit = MIN(cli->max_xmit, CLI_BUFFER_SIZE);
- /* this ensures cli_use_unicode is setup - delete this call later (tridge) */
- cli_setup_packet(cli);
+ /* a way to force ascii SMB */
+ if (getenv("CLI_FORCE_ASCII")) {
+ cli->capabilities &= ~CAP_UNICODE;
+ }
return True;
}
return True;
}
-int cli_use_unicode = 0;
-
/****************************************************************************
setup basics in a outgoing packet
****************************************************************************/
void cli_setup_packet(struct cli_state *cli)
{
- static int initialised;
-
- /* the USE_UNICODE check will be deleted once our client side unicode
- support is complete (tridge) */
- if (!initialised) {
- initialised = 1;
- if (getenv("USE_UNICODE")) cli_use_unicode = 1;
- }
-
cli->rap_error = 0;
cli->nt_error = 0;
SSVAL(cli->outbuf,smb_pid,cli->pid);
uint16 flags2;
SCVAL(cli->outbuf,smb_flg,0x8);
flags2 = FLAGS2_LONG_PATH_COMPONENTS;
- if (cli_use_unicode && cli->capabilities & CAP_UNICODE) {
+ if (cli->capabilities & CAP_UNICODE) {
flags2 |= FLAGS2_UNICODE_STRINGS;
}
SSVAL(cli->outbuf,smb_flg2, flags2);
return SVAL(cli->inbuf,smb_vwv2 + 1);
}
-/****************************************************************************
-open a file
-****************************************************************************/
-int cli_nt_create_uni(struct cli_state *cli, char *fname, uint32 DesiredAccess)
-{
- pstring uni;
- char *p;
-
- memset(cli->outbuf,'\0',smb_size);
- memset(cli->inbuf,'\0',smb_size);
-
- set_message(cli->outbuf,24,0,True);
-
- CVAL(cli->outbuf,smb_com) = SMBntcreateX;
- SSVAL(cli->outbuf,smb_tid,cli->cnum);
- cli_setup_packet(cli);
-
- SSVAL(cli->outbuf,smb_vwv0,0xFF);
- if (cli->use_oplocks)
- SIVAL(cli->outbuf,smb_ntcreate_Flags, REQUEST_OPLOCK|REQUEST_BATCH_OPLOCK);
- else
- SIVAL(cli->outbuf,smb_ntcreate_Flags, 0);
- SIVAL(cli->outbuf,smb_ntcreate_RootDirectoryFid, 0x0);
- SIVAL(cli->outbuf,smb_ntcreate_DesiredAccess, DesiredAccess);
- SIVAL(cli->outbuf,smb_ntcreate_FileAttributes, 0x0);
- SIVAL(cli->outbuf,smb_ntcreate_ShareAccess, 0x03);
- SIVAL(cli->outbuf,smb_ntcreate_CreateDisposition, 0x01);
- SIVAL(cli->outbuf,smb_ntcreate_CreateOptions, 0x0);
- SIVAL(cli->outbuf,smb_ntcreate_ImpersonationLevel, 0x02);
- SSVAL(cli->outbuf,smb_ntcreate_NameLength, strlen(fname) * 2);
-
- p = smb_buf(cli->outbuf);
- p++; /* Alignment */
- pstrcpy(uni, fname);
- unix_to_dos(uni, True);
- p += dos_struni2(p, uni, (strlen(fname) + 1) * 2) * 2;
- cli_setup_bcc(cli, p);
- cli_send_smb(cli);
- if (!cli_receive_smb(cli)) {
- return -1;
- }
-
- if (CVAL(cli->inbuf,smb_rcls) != 0) {
- return -1;
- }
-
- return SVAL(cli->inbuf,smb_vwv2 + 1);
-}
-
-
/****************************************************************************
open a file
WARNING: if you open with O_WRONLY then getattrE won't work!
but should otherwise not be used
****************************************************************************/
int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *))
+ void (*fn)(file_info *, const char *, void *), void *state)
{
char *p;
int received = 0;
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- if (first)
- set_message(cli->outbuf,2,5 + strlen(mask),True);
- else
- set_message(cli->outbuf,2,5 + 21,True);
+ set_message(cli->outbuf,2,0,True);
- CVAL(cli->outbuf,smb_com) = SMBffirst;
+ CVAL(cli->outbuf,smb_com) = SMBsearch;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
p = smb_buf(cli->outbuf);
*p++ = 4;
- if (first)
- pstrcpy(p,mask);
- else
- pstrcpy(p,"");
- p += strlen(p) + 1;
-
+ p += clistr_push(cli, p, first?mask:"", -1, CLISTR_TERMINATE|CLISTR_CONVERT);
*p++ = 5;
if (first) {
SSVAL(p,0,0);
+ p += 2;
} else {
SSVAL(p,0,21);
p += 2;
memcpy(p,status,21);
+ p += 21;
}
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) break;
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,2,5 + 21,True);
+ set_message(cli->outbuf,2,0,True);
CVAL(cli->outbuf,smb_com) = SMBfclose;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
SSVAL(p, 0, 21);
p += 2;
memcpy(p,status,21);
+ p += 21;
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
DEBUG(0,("Error closing search: %s\n",smb_errstr(cli->inbuf)));
for (p=dirlist,i=0;i<num_received;i++) {
file_info finfo;
p += interpret_short_filename(p,&finfo);
- fn(&finfo, Mask);
+ fn(&finfo, Mask, state);
}
if (dirlist) free(dirlist);
#include "includes.h"
-/* we will delete this variable once our client side unicode support is complete */
-extern int cli_use_unicode;
-
/****************************************************************************
copy a string from a char* src to a unicode or ascii
dos code page destination choosing unicode or ascii based on the
len++;
}
- if ((flags & CLISTR_ASCII) || !cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) {
+ if ((flags & CLISTR_ASCII) || !(cli->capabilities & CAP_UNICODE)) {
/* the server doesn't want unicode */
safe_strcpy(dest, src, dest_len);
len = strlen(dest);
{
int len = strlen(src);
if (flags & CLISTR_TERMINATE) len++;
- if (!(flags & CLISTR_ASCII) && cli_use_unicode && (cli->capabilities & CAP_UNICODE)) len *= 2;
+ if (!(flags & CLISTR_ASCII) && (cli->capabilities & CAP_UNICODE)) len *= 2;
if (!(flags & CLISTR_ASCII) && dest && clistr_align(cli, PTR_DIFF(cli->outbuf, dest))) {
len++;
if (src_len > 0) src_len--;
}
- if (!cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) {
+ if (!(cli->capabilities & CAP_UNICODE)) {
/* the server doesn't want unicode */
if (flags & CLISTR_TERMINATE) {
safe_strcpy(dest, src, dest_len);
if (src_len > 0) src_len--;
}
- if (!cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) {
+ if (!(cli->capabilities & CAP_UNICODE)) {
return strlen(src);
}
return strlen_w(src);
****************************************************************************/
int clistr_align(struct cli_state *cli, int offset)
{
- if (!cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) return 0;
+ if (!(cli->capabilities & CAP_UNICODE)) return 0;
return offset & 1;
}
/* find the name of the server ... */
if (!name_status_find(0, rem_ip, server)) {
-
- fprintf(stderr, "Could not get the name of local master browser ...\n");
errno = EINVAL;
return -1;
-
}
/*
/*cli_get_backup_server(my_netbios_name, server, buserver, sizeof(buserver)); */
if (!name_status_find(0, rem_ip, buserver)) {
-
- fprintf(stderr, "Could not get name of local master browser ...\n");
errno = EPERM; /* FIXME, is this correct */
return -1;
-
}
/*