Пример #1
0
int dos_rename(char *from, char *to)
{
    int rcode;  
    pstring zfrom, zto;

    pstrcpy (zfrom, dos_to_unix (from, False));
    pstrcpy (zto, dos_to_unix (to, False));
    rcode = rename (zfrom, zto);

    if (errno == EXDEV) 
    {
      /* Rename across filesystems needed. */
      rcode = copy_reg (zfrom, zto);        
    }
    return rcode;
}
Пример #2
0
BOOL secrets_fetch_domain_sid(const char *domain, DOM_SID *sid)
{
	DOM_SID *dyn_sid;
	fstring key;
	size_t size;

	slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
	strupper(key);

	dos_to_unix(key);                /* Convert key to unix-codepage */

	dyn_sid = (DOM_SID *)secrets_fetch(key, &size);

	if (dyn_sid == NULL)
		return False;

	if (size != sizeof(DOM_SID))
	{ 
		SAFE_FREE(dyn_sid);
		return False;
	}

	*sid = *dyn_sid;
	SAFE_FREE(dyn_sid);
	return True;
}
Пример #3
0
int dos_mkdir(char *dname,mode_t mode)
{
  int ret = mkdir(dos_to_unix(dname,False),mode);
  if(!ret)
    return(dos_chmod(dname,mode));
  else
    return ret;
}
Пример #4
0
/****************************************************************************
 gets a cleartext password
 ****************************************************************************/
void pwd_get_cleartext(struct pwd_info *pwd, char *clr)
{
	if (pwd->cleartext)
	{
		fstrcpy(clr, pwd->password);
		dos_to_unix(clr, True);
	}
	else
	{
		clr[0] = 0;
	}
}
Пример #5
0
int dos_utime(char *fname,struct utimbuf *times)
{
  /* if the modtime is 0 or -1 then ignore the call and
     return success */
  if (times->modtime == (time_t)0 || times->modtime == (time_t)-1)
    return 0;
  
  /* if the access time is 0 or -1 then set it to the modtime */
  if (times->actime == (time_t)0 || times->actime == (time_t)-1)
    times->actime = times->modtime;
   
  return(utime(dos_to_unix(fname,False),times));
}
Пример #6
0
DIR *dos_opendir(char *dname)
{
  return(opendir(dos_to_unix(dname,False)));
}
Пример #7
0
int dos_open(char *fname,int flags,mode_t mode)
{
  return(sys_open(dos_to_unix(fname,False),flags,mode));
}
Пример #8
0
int dos_unlink(char *fname)
{
  return(unlink(dos_to_unix(fname,False)));
}
Пример #9
0
SMB_OFF_T dos_file_size(char *file_name)
{
  return get_file_size(dos_to_unix(file_name, False));
}
Пример #10
0
time_t dos_file_modtime(char *fname)
{
  return file_modtime(dos_to_unix(fname, False));
}
Пример #11
0
BOOL dos_directory_exist(char *dname,SMB_STRUCT_STAT *st)
{
  return directory_exist(dos_to_unix(dname, False), st);
}
Пример #12
0
BOOL cli_session_setup(struct cli_state *cli,
		       char *_user,
		       char *pass, int passlen,
		       char *ntpass, int ntpasslen, char *_workgroup)
{
	fstring pword, ntpword;
	fstring user;
	fstring workgroup;
	uint8 protocol;
	SMB_HDR hdr;

	Q_SESSION_SETUP_ANDX qw;
	R_SESSION_SETUP_ANDX rw;
	Q_SESSION_SETUP_ANDX_D qd;
	R_SESSION_SETUP_ANDX_D rd;

	ZERO_STRUCT(qw);
	ZERO_STRUCT(rw);
	ZERO_STRUCT(qd);
	ZERO_STRUCT(rd);

	ZERO_STRUCT(pword);
	ZERO_STRUCT(ntpword);

	if (!smb_get_protocol(cli->hnd, &protocol))
		return False;

	if (protocol < PROTOCOL_LANMAN1)
		return True;

	if (passlen > sizeof(pword) - 1 || ntpasslen > sizeof(ntpword) - 1)
	{
		return False;
	}

	if (((passlen == 0) || (passlen == 1)) && (pass[0] == '\0'))
	{
		/* Null session connect. */
		pword[0] = '\0';
		ntpword[0] = '\0';
		passlen = 1;
		_user = "";
	}
	else if ((cli->sec_mode & 2) && passlen != 24)
	{
		/*
		 * Encrypted mode needed, and non encrypted password supplied.
		 */
		passlen = 24;
		ntpasslen = 24;
		fstrcpy(pword, pass);
		unix_to_dos(pword, True);
		fstrcpy(ntpword, ntpass);;
		unix_to_dos(ntpword, True);
		SMBencrypt((uchar *) pword, (uchar *) cli->cryptkey,
			   (uchar *) pword);
		SMBNTencrypt((uchar *) ntpword, (uchar *) cli->cryptkey,
			     (uchar *) ntpword);
	}
	else if ((cli->sec_mode & 2) && passlen == 24)
	{
		/*
		 * Encrypted mode needed, and encrypted password supplied.
		 */
		memcpy(pword, pass, passlen);
		if (ntpasslen == 24)
		{
			memcpy(ntpword, ntpass, ntpasslen);
		}
		else
		{
			fstrcpy(ntpword, "");
			ntpasslen = 0;
		}
	}
	else
	{
		/*
		 * Plaintext mode needed, assume plaintext supplied.
		 */
		fstrcpy(pword, pass);
		unix_to_dos(pword, True);
		fstrcpy(ntpword, "");
		ntpasslen = 0;
	}

	/* if in share level security then don't send a password now */
	if (!(cli->sec_mode & 1))
	{
		fstrcpy(pword, "");
		passlen = 1;
		fstrcpy(ntpword, "");
		ntpasslen = 1;
	}

	fstrcpy(user, _user);
	fstrcpy(workgroup, _workgroup);

	/* send a session setup command */

	if (protocol < PROTOCOL_NT1)
	{
		Q_SESSION_SETUP_ANDX_D_10 *q10 = &qd.ctr.q10;
		Q_SESSION_SETUP_ANDX_10 *qs = &qw.ctr.q10;
		qw.wcount = 10;
		qd.wcount = 10;

		qs->andx.cmd = 0xff;
		qs->bufsize = cli->max_xmit;
		qs->max_mpx = 2;
		qs->vc = 1;
		qs->sess_key = cli->sesskey;
		qs->pwlen = passlen;

		q10->password = pword;
		q10->pwlen = passlen;
		smbstr_initA(&q10->user, user, 0);
		smbstr_initA(&q10->domain, workgroup, 0);
		smbstr_initA(&q10->os, "Unix", 0);
		smbstr_initA(&q10->server, "Samba", 0);
		smbstr_initA(&q10->pad1, "", 0);
		smbstr_initA(&q10->pad2, "", 0);
	}
	else
	{
		Q_SESSION_SETUP_ANDX_D_13 *q13 = &qd.ctr.q13;
		Q_SESSION_SETUP_ANDX_13 *qs = &qw.ctr.q13;

		qw.wcount = 13;
		qd.wcount = 13;

		qs->andx.cmd = 0xff;
		qs->bufsize = CLI_BUFFER_SIZE;
		qs->max_mpx = 2;
		smb_get_pid(cli->hnd, &qs->vc);
		qs->sess_key = cli->sesskey;
		qs->pwlen = passlen;
		qs->upwlen = ntpasslen;
		qs->capabilities = 0;

		q13->password = pword;
		q13->upassword = ntpword;
		q13->pwlen = passlen;
		q13->upwlen = ntpasslen;

		smbstr_initA(&q13->user, user, 0);
		smbstr_initA(&q13->domain, workgroup, 0);
		smbstr_initA(&q13->os, "Unix", 0);
		smbstr_initA(&q13->server, "Samba", 0);
		smbstr_initA(&q13->pad1, "", 0);
		smbstr_initA(&q13->pad2, "", 0);
	}

	cli->nterr = cli_SMBsesssetupX(cli->hnd, &qw, &rw, &qd, &rd, NULL, NULL);
	if (cli->nterr != 0)
		return False;

	if (!smb_get_hdr(cli->hnd, &hdr))
		return False;

	/*
	 * Save off some of the connected server
	 * info.
	 */
	if (protocol >= PROTOCOL_NT1 && rw.wcount == 3)
	{
		R_SESSION_SETUP_ANDX_D_3 *sd = &rd.ctr.d3;

		fstrcpy(cli->server_os, smbstrA(&sd->os));
		fstrcpy(cli->server_type, smbstrA(&sd->server));
		fstrcpy(cli->server_domain, smbstrA(&sd->domain));
	}

	fstrcpy(cli->user_name, user);
	dos_to_unix(cli->user_name, True);

	return True;
}
Пример #13
0
int dos_chmod(char *fname,mode_t mode)
{
  return(chmod(dos_to_unix(fname,False),mode));
}
Пример #14
0
int dos_chdir(char *dname)
{
  return(chdir(dos_to_unix(dname,False)));
}
Пример #15
0
/****************************************************************************
wrap it to get filenames right
****************************************************************************/
SMB_BIG_UINT sys_disk_free(char *path, BOOL small_query, 
                           SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
{
	return(disk_free(dos_to_unix(path,False),small_query, bsize,dfree,dsize));
}
Пример #16
0
int dos_chown(char *fname, uid_t uid, gid_t gid)
{
  return(sys_chown(dos_to_unix(fname,False),uid,gid));
}
Пример #17
0
int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf)
{
  return(sys_lstat(dos_to_unix(fname,False),sbuf));
}
Пример #18
0
BOOL dos_file_exist(char *fname,SMB_STRUCT_STAT *sbuf)
{
  return file_exist(dos_to_unix(fname, False), sbuf);
}