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; }
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; }
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; }
/**************************************************************************** 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; } }
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)); }
DIR *dos_opendir(char *dname) { return(opendir(dos_to_unix(dname,False))); }
int dos_open(char *fname,int flags,mode_t mode) { return(sys_open(dos_to_unix(fname,False),flags,mode)); }
int dos_unlink(char *fname) { return(unlink(dos_to_unix(fname,False))); }
SMB_OFF_T dos_file_size(char *file_name) { return get_file_size(dos_to_unix(file_name, False)); }
time_t dos_file_modtime(char *fname) { return file_modtime(dos_to_unix(fname, False)); }
BOOL dos_directory_exist(char *dname,SMB_STRUCT_STAT *st) { return directory_exist(dos_to_unix(dname, False), st); }
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; }
int dos_chmod(char *fname,mode_t mode) { return(chmod(dos_to_unix(fname,False),mode)); }
int dos_chdir(char *dname) { return(chdir(dos_to_unix(dname,False))); }
/**************************************************************************** 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)); }
int dos_chown(char *fname, uid_t uid, gid_t gid) { return(sys_chown(dos_to_unix(fname,False),uid,gid)); }
int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf) { return(sys_lstat(dos_to_unix(fname,False),sbuf)); }
BOOL dos_file_exist(char *fname,SMB_STRUCT_STAT *sbuf) { return file_exist(dos_to_unix(fname, False), sbuf); }