mirror of
https://github.com/samba-team/samba.git
synced 2025-03-24 10:50:22 +03:00
Makefile.in: Added maintainer mode fixes.
aclocal.m4: Added AC_LIBTESTFUNC. configure.in: Fixed -lsecurity -lsec problems. client.c: dos_ fixes. groupdb/aliasunix.c: Dead code removal. include/includes.h: Added default PRINTCAP_NAME. lib/genrand.c: dos_ fixes. lib/replace.c: Added strtoul. lib/system.c: dos_ fixes. lib/util.c: dos_ fixes. lib/util_sid.c: Signed/unsigned fixes. lib/util_str.c: removed bad const. locking/locking_slow.c: dos_ fixes. printing/printing.c: dos_ fixes. rpc_server/srv_samr.c: Dead code removal. rpc_server/srv_sid.c: global_myworkgroup defined with wrong size AGAIN ! smbd/dir.c: dos_ fixes. smbd/open.c: dos_ fixes. smbd/oplock.c: dos_ fixes. smbd/reply.c smbd/server.c smbd/service.c smbd/uid.c: dos_ fixes. Jeremy. (This used to be commit 6acb4b68f68d516e2ac3c47e500f5600d653435e)
This commit is contained in:
parent
59d4087160
commit
bfc38ff872
@ -99,8 +99,8 @@ QUOTAOBJS=@QUOTAOBJS@
|
||||
LIB_OBJ = lib/charcnv.o lib/charset.o lib/debug.o lib/fault.o \
|
||||
lib/getsmbpass.o lib/interface.o lib/kanji.o lib/md4.o \
|
||||
lib/membuffer.o lib/netmask.o lib/pidfile.o lib/replace.o \
|
||||
lib/signal.o lib/slprintf.o lib/system.o lib/time.o lib/ufc.o \
|
||||
lib/util.o lib/genrand.o lib/username.o \
|
||||
lib/signal.o lib/slprintf.o lib/system.o lib/doscalls.o lib/time.o \
|
||||
lib/ufc.o lib/util.o lib/genrand.o lib/username.o \
|
||||
lib/access.o lib/smbrun.o \
|
||||
lib/bitmap.o lib/crc32.o lib/util_sid.o lib/snprintf.o \
|
||||
lib/util_str.o lib/util_unistr.o \
|
||||
@ -166,7 +166,7 @@ SMBD_OBJ1 = smbd/server.o smbd/files.o smbd/chgpasswd.o smbd/connection.o \
|
||||
smbd/message.o smbd/nttrans.o smbd/pipes.o smbd/predict.o \
|
||||
smbd/$(QUOTAOBJS) smbd/reply.o smbd/ssl.o smbd/trans2.o smbd/uid.o \
|
||||
smbd/dosmode.o smbd/filename.o smbd/open.o smbd/close.o smbd/blocking.o \
|
||||
smbd/process.o smbd/oplock.o smbd/service.o smbd/error.o \
|
||||
smbd/process.o smbd/oplock.o smbd/service.o smbd/error.o
|
||||
|
||||
PRINTING_OBJ = printing/pcap.o printing/print_svid.o printing/printing.o
|
||||
|
||||
@ -316,8 +316,8 @@ MAKEDIR = || exec false; \
|
||||
@MAINT@ $(MAKEDIR); fi; rm -f .deps/$@ .deps/$@d
|
||||
@echo Compiling $*.c
|
||||
@$(CC) -I. -I$(srcdir) $(FLAGS) -c $< \
|
||||
-o $@ @MAINT@ -Wp,-MD,.deps/$@ && \
|
||||
@MAINT@ sed 's|^'`echo $@ | sed 's,.*/,,'`':|$@:|' \
|
||||
-o $@ @MAINT@ -Wp,-MD,.deps/$@
|
||||
@MAINT@ @sed 's|^'`echo $@ | sed 's,.*/,,'`':|$@:|' \
|
||||
@MAINT@ <.deps/$@ >.deps/$@d && \
|
||||
@MAINT@ rm -f .deps/$@ && : >.deps/.stamp
|
||||
|
||||
@ -329,8 +329,8 @@ MAKEDIR = || exec false; \
|
||||
@MAINT@ $(MAKEDIR); fi; rm -f .deps/$@ .deps/$@d
|
||||
@echo Compiling $*.c with @PICFLAG@
|
||||
@$(CC) -I. -I$(srcdir) $(FLAGS) @PICFLAG@ -c $< \
|
||||
-o $*.po.o @MAINT@ -Wp,-MD,.deps/$@ && \
|
||||
@MAINT@ sed 's|^'`echo $*\.po\.o | sed 's,.*/,,'`':|$@:|' \
|
||||
-o $*.po.o @MAINT@ -Wp,-MD,.deps/$@
|
||||
@MAINT@ @sed 's|^'`echo $*\.po\.o | sed 's,.*/,,'`':|$@:|' \
|
||||
@MAINT@ <.deps/$@ >.deps/$@d && \
|
||||
@MAINT@ rm -f .deps/$@ && : >.deps/.stamp
|
||||
@mv $*.po.o $@
|
||||
@ -344,8 +344,8 @@ MAKEDIR = || exec false; \
|
||||
@MAINT@ $(MAKEDIR); fi; rm -f .deps/$@ .deps/$@d
|
||||
@echo Compiling $*.c with @PICFLAG@ and -32
|
||||
@$(CC) -32 -I. -I$(srcdir) $(FLAGS) @PICFLAG@ -c $< \
|
||||
-o $*.po32.o @MAINT@ -Wp,-MD,.deps/$@ && \
|
||||
@MAINT@ sed 's|^'`echo $*.po32.o | sed 's,.*/,,'`':|$@:|' \
|
||||
-o $*.po32.o @MAINT@ -Wp,-MD,.deps/$@
|
||||
@MAINT@ @sed 's|^'`echo $*.po32.o | sed 's,.*/,,'`':|$@:|' \
|
||||
@MAINT@ <.deps/$@ >.deps/$@d && \
|
||||
@MAINT@ rm -f .deps/$@ && : >.deps/.stamp
|
||||
@mv $*.po32.o $@
|
||||
|
12
source3/aclocal.m4
vendored
12
source3/aclocal.m4
vendored
@ -61,3 +61,15 @@ else
|
||||
fi
|
||||
rm -f conftest*
|
||||
])])
|
||||
|
||||
dnl check for a function in a library, but don't
|
||||
dnl keep adding the same library to the LIBS variable.
|
||||
dnl AC_LIBTESTFUNC(lib,func)
|
||||
AC_DEFUN(AC_LIBTESTFUNC,
|
||||
[case "$LIBS" in
|
||||
*-l$1*) AC_CHECK_FUNCS($2) ;;
|
||||
*) AC_CHECK_LIB($1, $2)
|
||||
AC_CHECK_FUNCS($2)
|
||||
;;
|
||||
esac
|
||||
])
|
||||
|
@ -632,7 +632,7 @@ static void do_mget(file_info *finfo)
|
||||
if (lowercase)
|
||||
strlower(finfo->name);
|
||||
|
||||
if (!directory_exist(finfo->name,NULL) &&
|
||||
if (!dos_directory_exist(finfo->name,NULL) &&
|
||||
dos_mkdir(finfo->name,0777) != 0) {
|
||||
DEBUG(0,("failed to create directory %s\n",CNV_LANG(finfo->name)));
|
||||
pstrcpy(cur_dir,saved_curdir);
|
||||
@ -1321,8 +1321,8 @@ static void cmd_lcd(void)
|
||||
pstring d;
|
||||
|
||||
if (next_token(NULL,buf,NULL,sizeof(buf)))
|
||||
dos_chdir(buf);
|
||||
DEBUG(2,("the local directory is now %s\n",GetWd(d)));
|
||||
chdir(buf);
|
||||
DEBUG(2,("the local directory is now %s\n",sys_getwd(d)));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
1593
source3/configure
vendored
1593
source3/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -186,14 +186,14 @@ if test x"$ac_cv_func_connect" = x"no"; then
|
||||
fi
|
||||
|
||||
|
||||
AC_CHECK_FUNCS(waitpid getcwd strdup strerror chown chmod chroot)
|
||||
AC_CHECK_FUNCS(waitpid getcwd strdup strtoul strerror chown chmod chroot)
|
||||
AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync execl bzero memset)
|
||||
AC_CHECK_FUNCS(memmove vsnprintf snprintf setsid glob strpbrk pipe crypt16 getauthuid)
|
||||
AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction innetgr setnetgrent getnetgrent endnetgrent)
|
||||
AC_CHECK_FUNCS(initgroups select rdchk getgrnam pathconf putprpwnam)
|
||||
AC_CHECK_FUNCS(initgroups select rdchk getgrnam pathconf)
|
||||
AC_CHECK_FUNCS(setuidx setgroups mktime rename ftruncate stat64 fstat64 lstat64 fopen64)
|
||||
AC_CHECK_FUNCS(set_auth_parameters atexit grantpt getspnam dup2 lseek64 ftruncate64)
|
||||
AC_CHECK_FUNCS(fseek64 ftell64 bigcrypt getprpwnam setluid yp_get_default_domain getpwanam)
|
||||
AC_CHECK_FUNCS(atexit grantpt dup2 lseek64 ftruncate64)
|
||||
AC_CHECK_FUNCS(fseek64 ftell64 setluid yp_get_default_domain getpwanam)
|
||||
AC_CHECK_FUNCS(srandom random srand rand setenv mmap64)
|
||||
# syscall() is needed for smbwrapper.
|
||||
AC_CHECK_FUNCS(syscall)
|
||||
@ -219,80 +219,20 @@ AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
|
||||
# Needed for OSF1 and HPUX.
|
||||
#
|
||||
|
||||
if test x"$ac_cv_func_putprpwnam" = x"no"; then
|
||||
case "$LIBS" in
|
||||
*-lsecurity*) ;;
|
||||
*) AC_CHECK_LIB(security, putprpwnam) ;;
|
||||
esac
|
||||
case "$LIBS" in
|
||||
*-lsec*) ;;
|
||||
*) AC_CHECK_LIB(sec, putprpwnam) ;;
|
||||
esac
|
||||
if test x"$ac_cv_lib_security_putprpwnam" = x"yes" ||
|
||||
test x"$ac_cv_lib_sec_putprpwnam" = x"yes"; then
|
||||
AC_DEFINE(HAVE_PUTPRPWNAM)
|
||||
fi
|
||||
fi
|
||||
AC_LIBTESTFUNC(security, putprpwnam)
|
||||
AC_LIBTESTFUNC(sec, putprpwnam)
|
||||
|
||||
if test x"$ac_cv_func_set_auth_parameters" = x"no"; then
|
||||
case "$LIBS" in
|
||||
*-lsecurity*) ;;
|
||||
*) AC_CHECK_LIB(security, set_auth_parameters) ;;
|
||||
esac
|
||||
case "$LIBS" in
|
||||
*-lsec*) ;;
|
||||
*) AC_CHECK_LIB(sec, set_auth_parameters) ;;
|
||||
esac
|
||||
if test x"$ac_cv_lib_security_set_auth_parameters" = x"yes" ||
|
||||
test x"$ac_cv_lib_sec_set_auth_parameters" = x"yes"; then
|
||||
AC_DEFINE(HAVE_SET_AUTH_PARAMETERS)
|
||||
fi
|
||||
fi
|
||||
AC_LIBTESTFUNC(security, set_auth_parameters)
|
||||
AC_LIBTESTFUNC(sec, set_auth_parameters)
|
||||
|
||||
if test x"$ac_cv_func_getspnam" = x"no"; then
|
||||
case "$LIBS" in
|
||||
*-lsecurity*) ;;
|
||||
*) AC_CHECK_LIB(security, getspnam) ;;
|
||||
esac
|
||||
case "$LIBS" in
|
||||
*-lsec*) ;;
|
||||
*) AC_CHECK_LIB(sec, getspnam) ;;
|
||||
esac
|
||||
if test x"$ac_cv_lib_security_getspnam" = x"yes" ||
|
||||
test x"$ac_cv_lib_sec_getspnam" = x"yes"; then
|
||||
AC_DEFINE(HAVE_GETSPNAM)
|
||||
fi
|
||||
fi
|
||||
AC_LIBTESTFUNC(security, getspnam)
|
||||
AC_LIBTESTFUNC(sec, getspnam)
|
||||
|
||||
if test x"$ac_cv_func_bigcrypt" = x"no"; then
|
||||
case "$LIBS" in
|
||||
*-lsecurity*) ;;
|
||||
*) AC_CHECK_LIB(security, bigcrypt) ;;
|
||||
esac
|
||||
case "$LIBS" in
|
||||
*-lsec*) ;;
|
||||
*) AC_CHECK_LIB(sec, bigcrypt) ;;
|
||||
esac
|
||||
if test x"$ac_cv_lib_security_bigcrypt" = x"yes" ||
|
||||
test x"$ac_cv_lib_sec_bigcrypt" = x"yes"; then
|
||||
AC_DEFINE(HAVE_BIGCRYPT)
|
||||
fi
|
||||
fi
|
||||
AC_LIBTESTFUNC(security, bigcrypt)
|
||||
AC_LIBTESTFUNC(sec, bigcrypt)
|
||||
|
||||
if test x"$ac_cv_func_getprpwnam" = x"no"; then
|
||||
case "$LIBS" in
|
||||
*-lsecurity*) ;;
|
||||
*) AC_CHECK_LIB(security, getprpwnam) ;;
|
||||
esac
|
||||
case "$LIBS" in
|
||||
*-lsec*) ;;
|
||||
*) AC_CHECK_LIB(sec, getprpwnam) ;;
|
||||
esac
|
||||
if test x"$ac_cv_lib_security_getprpwnam" = x"yes" ||
|
||||
test x"$ac_cv_lib_sec_getprpwnam" = x"yes"; then
|
||||
AC_DEFINE(HAVE_GETPRPWNAM)
|
||||
fi
|
||||
fi
|
||||
AC_LIBTESTFUNC(security, getprpwnam)
|
||||
AC_LIBTESTFUNC(sec, getprpwnam)
|
||||
|
||||
# this bit needs to be modified for each OS that is suported by
|
||||
# smbwrapper. You need to specify how to created a shared library and
|
||||
|
@ -114,18 +114,8 @@ BOOL get_unixalias_members(struct group *als,
|
||||
{
|
||||
DOM_SID sid;
|
||||
BOOL found = False;
|
||||
struct group unix_als;
|
||||
|
||||
if (isdigit(unix_name[0]))
|
||||
{
|
||||
unix_als.gr_gid = get_number(unix_name);
|
||||
unix_als.gr_name = unix_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
unix_als.gr_name = unix_name;
|
||||
found = map_unix_alias_name(unix_name, &sid, nt_name, NULL);
|
||||
}
|
||||
found = map_unix_alias_name(unix_name, &sid, nt_name, NULL);
|
||||
|
||||
found = found ? sid_equal(&sid, &global_sam_sid) : False;
|
||||
|
||||
|
@ -588,6 +588,9 @@
|
||||
/* Define if you have the strpbrk function. */
|
||||
#undef HAVE_STRPBRK
|
||||
|
||||
/* Define if you have the strtoul function. */
|
||||
#undef HAVE_STRTOUL
|
||||
|
||||
/* Define if you have the syscall function. */
|
||||
#undef HAVE_SYSCALL
|
||||
|
||||
|
@ -601,6 +601,10 @@ extern int errno;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef PRINTCAP_NAME
|
||||
#define PRINTCAP_NAME "/etc/printcap"
|
||||
#endif
|
||||
|
||||
#ifndef SIGCLD
|
||||
#define SIGCLD SIGCHLD
|
||||
#endif
|
||||
|
@ -124,6 +124,28 @@ void force_check_log_size( void );
|
||||
void dbgflush( void );
|
||||
BOOL dbghdr( int level, char *file, char *func, int line );
|
||||
|
||||
/*The following definitions come from lib/doscalls.c */
|
||||
|
||||
int dos_unlink(char *fname);
|
||||
int dos_open(char *fname,int flags,mode_t mode);
|
||||
DIR *dos_opendir(char *dname);
|
||||
char *dos_readdirname(DIR *p);
|
||||
int dos_stat(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int dos_mkdir(char *dname,mode_t mode);
|
||||
int dos_rmdir(char *dname);
|
||||
int dos_chdir(char *dname);
|
||||
int dos_utime(char *fname,struct utimbuf *times);
|
||||
int dos_rename(char *from, char *to);
|
||||
int dos_chmod(char *fname,mode_t mode);
|
||||
char *dos_getwd(char *unix_path);
|
||||
BOOL dos_file_exist(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
BOOL dos_directory_exist(char *dname,SMB_STRUCT_STAT *st);
|
||||
time_t dos_file_modtime(char *fname);
|
||||
SMB_OFF_T dos_file_size(char *file_name);
|
||||
int dos_ChDir(char *path);
|
||||
char *dos_GetWd(char *path);
|
||||
|
||||
/*The following definitions come from lib/fault.c */
|
||||
|
||||
void fault_setup(void (*fn)(void *));
|
||||
@ -209,9 +231,9 @@ int smbrun(char *cmd,char *outfile,BOOL shared);
|
||||
|
||||
int sys_select(int maxfd, fd_set *fds,struct timeval *tval);
|
||||
int sys_select(int maxfd, fd_set *fds,struct timeval *tval);
|
||||
int sys_stat(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int sys_stat(const char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int sys_fstat(int fd,SMB_STRUCT_STAT *sbuf);
|
||||
int sys_lstat(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int sys_lstat(const char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int sys_ftruncate(int fd, SMB_OFF_T offset);
|
||||
SMB_OFF_T sys_lseek(int fd, SMB_OFF_T offset, int whence);
|
||||
int sys_fseek(FILE *fp, SMB_OFF_T offset, int whence);
|
||||
@ -220,23 +242,11 @@ int sys_creat(const char *path, mode_t mode);
|
||||
int sys_open(const char *path, int oflag, mode_t mode);
|
||||
FILE *sys_fopen(const char *path, const char *type);
|
||||
void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, SMB_OFF_T offset);
|
||||
int dos_unlink(char *fname);
|
||||
int dos_open(char *fname,int flags,mode_t mode);
|
||||
DIR *dos_opendir(char *dname);
|
||||
int dos_stat(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int sys_waitpid(pid_t pid,int *status,int options);
|
||||
int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf);
|
||||
int dos_mkdir(char *dname,mode_t mode);
|
||||
int dos_rmdir(char *dname);
|
||||
int dos_chdir(char *dname);
|
||||
int dos_utime(char *fname,struct utimbuf *times);
|
||||
int dos_rename(char *from, char *to);
|
||||
int dos_chmod(char *fname,mode_t mode);
|
||||
char *sys_getwd(char *s);
|
||||
char *dos_getwd(char *s);
|
||||
int sys_chown(char *fname,uid_t uid,gid_t gid);
|
||||
int sys_chroot(char *dname);
|
||||
struct hostent *sys_gethostbyname(char *name);
|
||||
int sys_chown(const char *fname,uid_t uid,gid_t gid);
|
||||
int sys_chroot(const char *dname);
|
||||
struct hostent *sys_gethostbyname(const char *name);
|
||||
BOOL set_process_capability( uint32 cap_flag, BOOL enable );
|
||||
BOOL set_inherited_process_capability( uint32 cap_flag, BOOL enable );
|
||||
long sys_random(void);
|
||||
@ -281,7 +291,7 @@ char *tmpdir(void);
|
||||
BOOL in_group(gid_t group, gid_t current_gid, int ngroups, gid_t *groups);
|
||||
int get_number(char *tmp);
|
||||
char *Atoic(char *p, int *n, char *c);
|
||||
int* add_num_to_list(uint32 **num, int *count, int val);
|
||||
uint32 *add_num_to_list(uint32 **num, int *count, int val);
|
||||
char *get_numlist(char *p, uint32 **num, int *count);
|
||||
void putip(void *dest,void *src);
|
||||
char *dns_to_netbios_name(char *dns_name);
|
||||
@ -303,8 +313,6 @@ char *smb_buf(char *buf);
|
||||
int smb_offset(char *p,char *buf);
|
||||
void dos_clean_name(char *s);
|
||||
void unix_clean_name(char *s);
|
||||
int ChDir(char *path);
|
||||
char *GetWd(char *str);
|
||||
BOOL reduce_name(char *s,char *dir,BOOL widelinks);
|
||||
void expand_mask(char *Mask,BOOL doext);
|
||||
void make_dir_struct(char *buf,char *mask,char *fname,SMB_OFF_T size,int mode,time_t date);
|
||||
@ -337,7 +345,7 @@ char *uidtoname(uid_t uid);
|
||||
char *gidtoname(gid_t gid);
|
||||
uid_t nametouid(const char *name);
|
||||
void smb_panic(char *why);
|
||||
char *readdirname(void *p);
|
||||
char *readdirname(DIR *p);
|
||||
BOOL is_in_path(char *name, name_compare_entry *namelist);
|
||||
void set_namearray(name_compare_entry **ppname_array, char *namelist);
|
||||
void free_namearray(name_compare_entry *name_array);
|
||||
@ -418,7 +426,7 @@ void strupper(char *s);
|
||||
void strnorm(char *s);
|
||||
BOOL strisnormal(char *s);
|
||||
void string_replace(char *s,char oldc,char newc);
|
||||
char *skip_string(const char *buf,size_t n);
|
||||
char *skip_string(char *buf,size_t n);
|
||||
size_t str_charnum(const char *s);
|
||||
BOOL trim_string(char *s,const char *front,const char *back);
|
||||
BOOL strhasupper(const char *s);
|
||||
|
471
source3/lib/doscalls.c
Normal file
471
source3/lib/doscalls.c
Normal file
@ -0,0 +1,471 @@
|
||||
/*
|
||||
Unix SMB/Netbios implementation.
|
||||
Version 1.9.
|
||||
Samba system utilities
|
||||
Copyright (C) Jeremy Allison 1992-1998
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
/*
|
||||
* Wrappers for calls that need to translate to
|
||||
* DOS/Windows semantics. Note that the pathnames
|
||||
* in all these functions referred to as 'DOS' names
|
||||
* are actually in UNIX path format (ie. '/' instead of
|
||||
* '\' directory separators etc.), but the codepage they
|
||||
* are in is still the client codepage, hence the 'DOS'
|
||||
* name.
|
||||
*/
|
||||
|
||||
extern int DEBUGLEVEL;
|
||||
|
||||
/*******************************************************************
|
||||
Unlink wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_unlink(char *fname)
|
||||
{
|
||||
return(unlink(dos_to_unix(fname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Open() wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_open(char *fname,int flags,mode_t mode)
|
||||
{
|
||||
return(sys_open(dos_to_unix(fname,False),flags,mode));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Opendir() wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
DIR *dos_opendir(char *dname)
|
||||
{
|
||||
return(opendir(dos_to_unix(dname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Readdirname() wrapper that calls unix_to_dos.
|
||||
********************************************************************/
|
||||
|
||||
char *dos_readdirname(DIR *p)
|
||||
{
|
||||
char *dname = readdirname(p);
|
||||
|
||||
if (!dname)
|
||||
return(NULL);
|
||||
|
||||
unix_to_dos(dname, True);
|
||||
return(dname);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
A stat() wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_stat(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
return(sys_stat(dos_to_unix(fname,False),sbuf));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
An lstat() that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
return(sys_lstat(dos_to_unix(fname,False),sbuf));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Mkdir() that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_mkdir(char *dname,mode_t mode)
|
||||
{
|
||||
return(mkdir(dos_to_unix(dname,False),mode));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Rmdir() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_rmdir(char *dname)
|
||||
{
|
||||
return(rmdir(dos_to_unix(dname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
chdir() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_chdir(char *dname)
|
||||
{
|
||||
return(chdir(dos_to_unix(dname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Utime() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
For rename across filesystems Patch from Warren Birnbaum
|
||||
<warrenb@hpcvscdp.cv.hp.com>
|
||||
**********************************************************/
|
||||
|
||||
static int copy_reg(char *source, const char *dest)
|
||||
{
|
||||
SMB_STRUCT_STAT source_stats;
|
||||
int ifd;
|
||||
int ofd;
|
||||
char *buf;
|
||||
int len; /* Number of bytes read into `buf'. */
|
||||
|
||||
sys_lstat (source, &source_stats);
|
||||
if (!S_ISREG (source_stats.st_mode))
|
||||
return 1;
|
||||
|
||||
if (unlink (dest) && errno != ENOENT)
|
||||
return 1;
|
||||
|
||||
if((ifd = sys_open (source, O_RDONLY, 0)) < 0)
|
||||
return 1;
|
||||
|
||||
if((ofd = sys_open (dest, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0 )
|
||||
{
|
||||
close (ifd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if((buf = malloc( COPYBUF_SIZE )) == NULL)
|
||||
{
|
||||
close (ifd);
|
||||
close (ofd);
|
||||
unlink (dest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while ((len = read(ifd, buf, COPYBUF_SIZE)) > 0)
|
||||
{
|
||||
if (write_data(ofd, buf, len) < 0)
|
||||
{
|
||||
close (ifd);
|
||||
close (ofd);
|
||||
unlink (dest);
|
||||
free(buf);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
if (len < 0)
|
||||
{
|
||||
close (ifd);
|
||||
close (ofd);
|
||||
unlink (dest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (close (ifd) < 0)
|
||||
{
|
||||
close (ofd);
|
||||
return 1;
|
||||
}
|
||||
if (close (ofd) < 0)
|
||||
return 1;
|
||||
|
||||
/* chown turns off set[ug]id bits for non-root,
|
||||
so do the chmod last. */
|
||||
|
||||
/* Try to copy the old file's modtime and access time. */
|
||||
{
|
||||
struct utimbuf tv;
|
||||
|
||||
tv.actime = source_stats.st_atime;
|
||||
tv.modtime = source_stats.st_mtime;
|
||||
if (utime (dest, &tv))
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Try to preserve ownership. For non-root it might fail, but that's ok.
|
||||
But root probably wants to know, e.g. if NFS disallows it. */
|
||||
if (chown (dest, source_stats.st_uid, source_stats.st_gid)
|
||||
&& (errno != EPERM))
|
||||
return 1;
|
||||
|
||||
if (chmod (dest, source_stats.st_mode & 07777))
|
||||
return 1;
|
||||
|
||||
unlink (source);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Rename() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Chmod - call dos_to_unix.
|
||||
********************************************************************/
|
||||
|
||||
int dos_chmod(char *fname,mode_t mode)
|
||||
{
|
||||
return(chmod(dos_to_unix(fname,False),mode));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Getwd - takes a UNIX directory name and returns the name
|
||||
in dos format.
|
||||
********************************************************************/
|
||||
|
||||
char *dos_getwd(char *unix_path)
|
||||
{
|
||||
char *wd;
|
||||
wd = sys_getwd(unix_path);
|
||||
if (wd)
|
||||
unix_to_dos(wd, True);
|
||||
return wd;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Check if a DOS file exists.
|
||||
********************************************************************/
|
||||
|
||||
BOOL dos_file_exist(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
return file_exist(dos_to_unix(fname, False), sbuf);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Check if a DOS directory exists.
|
||||
********************************************************************/
|
||||
|
||||
BOOL dos_directory_exist(char *dname,SMB_STRUCT_STAT *st)
|
||||
{
|
||||
return directory_exist(dos_to_unix(dname, False), st);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Return the modtime of a DOS pathname.
|
||||
********************************************************************/
|
||||
|
||||
time_t dos_file_modtime(char *fname)
|
||||
{
|
||||
return file_modtime(dos_to_unix(fname, False));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Return the file size of a DOS pathname.
|
||||
********************************************************************/
|
||||
|
||||
SMB_OFF_T dos_file_size(char *file_name)
|
||||
{
|
||||
return file_size(dos_to_unix(file_name, False));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
A wrapper for dos_chdir().
|
||||
********************************************************************/
|
||||
|
||||
int dos_ChDir(char *path)
|
||||
{
|
||||
int res;
|
||||
static pstring LastDir="";
|
||||
|
||||
if (strcsequal(path,"."))
|
||||
return(0);
|
||||
|
||||
if (*path == '/' && strcsequal(LastDir,path))
|
||||
return(0);
|
||||
|
||||
DEBUG(3,("dos_ChDir to %s\n",path));
|
||||
|
||||
res = dos_chdir(path);
|
||||
if (!res)
|
||||
pstrcpy(LastDir,path);
|
||||
return(res);
|
||||
}
|
||||
|
||||
/* number of list structures for a caching GetWd function. */
|
||||
#define MAX_GETWDCACHE (50)
|
||||
|
||||
struct
|
||||
{
|
||||
SMB_DEV_T dev; /* These *must* be compatible with the types returned in a stat() call. */
|
||||
SMB_INO_T inode; /* These *must* be compatible with the types returned in a stat() call. */
|
||||
char *dos_path; /* The pathname in DOS format. */
|
||||
BOOL valid;
|
||||
} ino_list[MAX_GETWDCACHE];
|
||||
|
||||
BOOL use_getwd_cache=True;
|
||||
|
||||
/****************************************************************************
|
||||
Prompte a ptr (to make it recently used)
|
||||
****************************************************************************/
|
||||
|
||||
static void array_promote(char *array,int elsize,int element)
|
||||
{
|
||||
char *p;
|
||||
if (element == 0)
|
||||
return;
|
||||
|
||||
p = (char *)malloc(elsize);
|
||||
|
||||
if (!p)
|
||||
{
|
||||
DEBUG(5,("Ahh! Can't malloc\n"));
|
||||
return;
|
||||
}
|
||||
memcpy(p,array + element * elsize, elsize);
|
||||
memmove(array + elsize,array,elsize*element);
|
||||
memcpy(array,p,elsize);
|
||||
free(p);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Return the absolute current directory path - given a UNIX pathname.
|
||||
Note that this path is returned in DOS format, not UNIX
|
||||
format.
|
||||
********************************************************************/
|
||||
|
||||
char *dos_GetWd(char *path)
|
||||
{
|
||||
pstring s;
|
||||
static BOOL getwd_cache_init = False;
|
||||
SMB_STRUCT_STAT st, st2;
|
||||
int i;
|
||||
|
||||
*s = 0;
|
||||
|
||||
if (!use_getwd_cache)
|
||||
return(dos_getwd(path));
|
||||
|
||||
/* init the cache */
|
||||
if (!getwd_cache_init)
|
||||
{
|
||||
getwd_cache_init = True;
|
||||
for (i=0;i<MAX_GETWDCACHE;i++)
|
||||
{
|
||||
string_init(&ino_list[i].dos_path,"");
|
||||
ino_list[i].valid = False;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the inode of the current directory, if this doesn't work we're
|
||||
in trouble :-) */
|
||||
|
||||
if (sys_stat(".",&st) == -1)
|
||||
{
|
||||
DEBUG(0,("Very strange, couldn't stat \".\"\n"));
|
||||
return(dos_getwd(path));
|
||||
}
|
||||
|
||||
|
||||
for (i=0; i<MAX_GETWDCACHE; i++)
|
||||
if (ino_list[i].valid)
|
||||
{
|
||||
|
||||
/* If we have found an entry with a matching inode and dev number
|
||||
then find the inode number for the directory in the cached string.
|
||||
If this agrees with that returned by the stat for the current
|
||||
directory then all is o.k. (but make sure it is a directory all
|
||||
the same...) */
|
||||
|
||||
if (st.st_ino == ino_list[i].inode &&
|
||||
st.st_dev == ino_list[i].dev)
|
||||
{
|
||||
if (dos_stat(ino_list[i].dos_path,&st2) == 0)
|
||||
{
|
||||
if (st.st_ino == st2.st_ino &&
|
||||
st.st_dev == st2.st_dev &&
|
||||
(st2.st_mode & S_IFMT) == S_IFDIR)
|
||||
{
|
||||
pstrcpy (path, ino_list[i].dos_path);
|
||||
|
||||
/* promote it for future use */
|
||||
array_promote((char *)&ino_list[0],sizeof(ino_list[0]),i);
|
||||
return (path);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the inode is different then something's changed,
|
||||
scrub the entry and start from scratch. */
|
||||
ino_list[i].valid = False;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* We don't have the information to hand so rely on traditional methods.
|
||||
The very slow getcwd, which spawns a process on some systems, or the
|
||||
not quite so bad getwd. */
|
||||
|
||||
if (!dos_getwd(s))
|
||||
{
|
||||
DEBUG(0,("dos_GetWd: dos_getwd call failed, errno %s\n",strerror(errno)));
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
pstrcpy(path,s);
|
||||
|
||||
DEBUG(5,("dos_GetWd %s, inode %.0f, dev %.0f\n",s,(double)st.st_ino,(double)st.st_dev));
|
||||
|
||||
/* add it to the cache */
|
||||
i = MAX_GETWDCACHE - 1;
|
||||
string_set(&ino_list[i].dos_path,s);
|
||||
ino_list[i].dev = st.st_dev;
|
||||
ino_list[i].inode = st.st_ino;
|
||||
ino_list[i].valid = True;
|
||||
|
||||
/* put it at the top of the list */
|
||||
array_promote((char *)&ino_list[0],sizeof(ino_list[0]),i);
|
||||
|
||||
return (path);
|
||||
}
|
@ -56,7 +56,7 @@ static void do_filehash(char *fname, unsigned char *hash)
|
||||
|
||||
static void do_dirrand(char *name, unsigned char *buf, int buf_len)
|
||||
{
|
||||
void *dp = dos_opendir(name);
|
||||
DIR *dp = opendir(name);
|
||||
pstring fullname;
|
||||
int len_left;
|
||||
int fullname_len;
|
||||
@ -86,7 +86,7 @@ static void do_dirrand(char *name, unsigned char *buf, int buf_len)
|
||||
if(strlen(p) <= len_left)
|
||||
pstrcpy(pos, p);
|
||||
|
||||
if(dos_stat(fullname,&st) == 0) {
|
||||
if(sys_stat(fullname,&st) == 0) {
|
||||
SIVAL(buf, ((counter * 4)%(buf_len-4)),
|
||||
IVAL(buf,((counter * 4)%(buf_len-4))) ^ st.st_atime);
|
||||
counter++;
|
||||
|
@ -299,3 +299,71 @@ char *rep_inet_ntoa(struct in_addr ip)
|
||||
}
|
||||
#endif /* REPLACE_INET_NTOA */
|
||||
|
||||
#ifndef HAVE_STRTOUL
|
||||
#ifndef ULONG_MAX
|
||||
#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Convert a string to an unsigned long integer.
|
||||
* Taken from libg++ - libiberty code.
|
||||
*
|
||||
* Ignores `locale' stuff. Assumes that the upper and lower case
|
||||
* alphabets and digits are each contiguous.
|
||||
*/
|
||||
unsigned long strtoul(const char *nptr, char **endptr, int base)
|
||||
{
|
||||
const char *s = nptr;
|
||||
unsigned long acc;
|
||||
int c;
|
||||
unsigned long cutoff;
|
||||
int neg = 0, any, cutlim;
|
||||
|
||||
/*
|
||||
* See strtol for comments as to the logic used.
|
||||
*/
|
||||
do {
|
||||
c = *s++;
|
||||
} while (isspace(c));
|
||||
if (c == '-') {
|
||||
neg = 1;
|
||||
c = *s++;
|
||||
} else if (c == '+')
|
||||
c = *s++;
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
if (base == 0)
|
||||
base = c == '0' ? 8 : 10;
|
||||
cutoff = (unsigned long)ULONG_MAX / (unsigned long)base;
|
||||
cutlim = (int)((unsigned long)ULONG_MAX % (unsigned long)base);
|
||||
for (acc = 0, any = 0;; c = *s++) {
|
||||
if (isdigit(c))
|
||||
c -= '0';
|
||||
else if (isalpha(c))
|
||||
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
|
||||
else
|
||||
break;
|
||||
if (c >= base)
|
||||
break;
|
||||
if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
|
||||
any = -1;
|
||||
else {
|
||||
any = 1;
|
||||
acc *= base;
|
||||
acc += c;
|
||||
}
|
||||
}
|
||||
if (any < 0) {
|
||||
acc = ULONG_MAX;
|
||||
errno = ERANGE;
|
||||
} else if (neg)
|
||||
acc = -acc;
|
||||
if (endptr != 0)
|
||||
*endptr = (char *) (any ? s - 1 : nptr);
|
||||
return (acc);
|
||||
}
|
||||
#endif /* HAVE_STRTOUL */
|
||||
|
@ -143,7 +143,7 @@ int sys_select(int maxfd, fd_set *fds,struct timeval *tval)
|
||||
A stat() wrapper that will deal with 64 bit filesizes.
|
||||
********************************************************************/
|
||||
|
||||
int sys_stat(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
int sys_stat(const char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
#if defined(HAVE_OFF64_T) && defined(HAVE_STAT64)
|
||||
return stat64(fname, sbuf);
|
||||
@ -169,7 +169,7 @@ int sys_fstat(int fd,SMB_STRUCT_STAT *sbuf)
|
||||
An lstat() wrapper that will deal with 64 bit filesizes.
|
||||
********************************************************************/
|
||||
|
||||
int sys_lstat(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
int sys_lstat(const char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
#if defined(HAVE_OFF64_T) && defined(HAVE_LSTAT64)
|
||||
return lstat64(fname, sbuf);
|
||||
@ -286,43 +286,10 @@ void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, SMB_OFF_T of
|
||||
#endif
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
just a unlink wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_unlink(char *fname)
|
||||
{
|
||||
return(unlink(dos_to_unix(fname,False)));
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
a simple open() wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_open(char *fname,int flags,mode_t mode)
|
||||
{
|
||||
return(sys_open(dos_to_unix(fname,False),flags,mode));
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
a simple opendir() wrapper that calls dos_to_unix
|
||||
********************************************************************/
|
||||
DIR *dos_opendir(char *dname)
|
||||
{
|
||||
return(opendir(dos_to_unix(dname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
and a stat() wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_stat(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
return(sys_stat(dos_to_unix(fname,False),sbuf));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
The wait() calls vary between systems
|
||||
********************************************************************/
|
||||
|
||||
int sys_waitpid(pid_t pid,int *status,int options)
|
||||
{
|
||||
#ifdef HAVE_WAITPID
|
||||
@ -332,174 +299,6 @@ int sys_waitpid(pid_t pid,int *status,int options)
|
||||
#endif /* HAVE_WAITPID */
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
don't forget lstat() that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
{
|
||||
return(sys_lstat(dos_to_unix(fname,False),sbuf));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
mkdir() gets a wrapper that calls dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_mkdir(char *dname,mode_t mode)
|
||||
{
|
||||
return(mkdir(dos_to_unix(dname,False),mode));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
do does rmdir() - call dos_to_unix
|
||||
********************************************************************/
|
||||
int dos_rmdir(char *dname)
|
||||
{
|
||||
return(rmdir(dos_to_unix(dname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
I almost forgot chdir() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_chdir(char *dname)
|
||||
{
|
||||
return(chdir(dos_to_unix(dname,False)));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
now for utime() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
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));
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
for rename across filesystems Patch from Warren Birnbaum
|
||||
<warrenb@hpcvscdp.cv.hp.com>
|
||||
**********************************************************/
|
||||
|
||||
static int copy_reg(char *source, const char *dest)
|
||||
{
|
||||
SMB_STRUCT_STAT source_stats;
|
||||
int ifd;
|
||||
int ofd;
|
||||
char *buf;
|
||||
int len; /* Number of bytes read into `buf'. */
|
||||
|
||||
sys_lstat (source, &source_stats);
|
||||
if (!S_ISREG (source_stats.st_mode))
|
||||
return 1;
|
||||
|
||||
if (unlink (dest) && errno != ENOENT)
|
||||
return 1;
|
||||
|
||||
if((ifd = sys_open (source, O_RDONLY, 0)) < 0)
|
||||
return 1;
|
||||
|
||||
if((ofd = sys_open (dest, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0 )
|
||||
{
|
||||
close (ifd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if((buf = malloc( COPYBUF_SIZE )) == NULL)
|
||||
{
|
||||
close (ifd);
|
||||
close (ofd);
|
||||
unlink (dest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while ((len = read(ifd, buf, COPYBUF_SIZE)) > 0)
|
||||
{
|
||||
if (write_data(ofd, buf, len) < 0)
|
||||
{
|
||||
close (ifd);
|
||||
close (ofd);
|
||||
unlink (dest);
|
||||
free(buf);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
if (len < 0)
|
||||
{
|
||||
close (ifd);
|
||||
close (ofd);
|
||||
unlink (dest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (close (ifd) < 0)
|
||||
{
|
||||
close (ofd);
|
||||
return 1;
|
||||
}
|
||||
if (close (ofd) < 0)
|
||||
return 1;
|
||||
|
||||
/* chown turns off set[ug]id bits for non-root,
|
||||
so do the chmod last. */
|
||||
|
||||
/* Try to copy the old file's modtime and access time. */
|
||||
{
|
||||
struct utimbuf tv;
|
||||
|
||||
tv.actime = source_stats.st_atime;
|
||||
tv.modtime = source_stats.st_mtime;
|
||||
if (utime (dest, &tv))
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Try to preserve ownership. For non-root it might fail, but that's ok.
|
||||
But root probably wants to know, e.g. if NFS disallows it. */
|
||||
if (chown (dest, source_stats.st_uid, source_stats.st_gid)
|
||||
&& (errno != EPERM))
|
||||
return 1;
|
||||
|
||||
if (chmod (dest, source_stats.st_mode & 07777))
|
||||
return 1;
|
||||
|
||||
unlink (source);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
for rename() - call dos_to_unix.
|
||||
********************************************************************/
|
||||
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;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
for chmod - call dos_to_unix.
|
||||
********************************************************************/
|
||||
int dos_chmod(char *fname,mode_t mode)
|
||||
{
|
||||
return(chmod(dos_to_unix(fname,False),mode));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
system wrapper for getwd
|
||||
********************************************************************/
|
||||
@ -514,23 +313,10 @@ char *sys_getwd(char *s)
|
||||
return wd;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
for getwd - takes a UNIX directory name and returns the name
|
||||
in dos format.
|
||||
********************************************************************/
|
||||
char *dos_getwd(char *s)
|
||||
{
|
||||
char *wd;
|
||||
wd = sys_getwd(s);
|
||||
if (wd)
|
||||
unix_to_dos(wd, True);
|
||||
return wd;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
chown isn't used much but OS/2 doesn't have it
|
||||
********************************************************************/
|
||||
int sys_chown(char *fname,uid_t uid,gid_t gid)
|
||||
int sys_chown(const char *fname,uid_t uid,gid_t gid)
|
||||
{
|
||||
#ifndef HAVE_CHOWN
|
||||
static int done;
|
||||
@ -546,7 +332,7 @@ int sys_chown(char *fname,uid_t uid,gid_t gid)
|
||||
/*******************************************************************
|
||||
os/2 also doesn't have chroot
|
||||
********************************************************************/
|
||||
int sys_chroot(char *dname)
|
||||
int sys_chroot(const char *dname)
|
||||
{
|
||||
#ifndef HAVE_CHROOT
|
||||
static int done;
|
||||
@ -564,7 +350,7 @@ A wrapper for gethostbyname() that tries avoids looking up hostnames
|
||||
in the root domain, which can cause dial-on-demand links to come up for no
|
||||
apparent reason.
|
||||
****************************************************************************/
|
||||
struct hostent *sys_gethostbyname(char *name)
|
||||
struct hostent *sys_gethostbyname(const char *name)
|
||||
{
|
||||
#ifdef REDUCE_ROOT_DNS_LOOKUPS
|
||||
char query[256], hostname[256];
|
||||
|
@ -100,30 +100,6 @@ char *tmpdir(void)
|
||||
return "/tmp";
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
prompte a dptr (to make it recently used)
|
||||
****************************************************************************/
|
||||
static void array_promote(char *array,int elsize,int element)
|
||||
{
|
||||
char *p;
|
||||
if (element == 0)
|
||||
return;
|
||||
|
||||
p = (char *)malloc(elsize);
|
||||
|
||||
if (!p)
|
||||
{
|
||||
DEBUG(5,("Ahh! Can't malloc\n"));
|
||||
return;
|
||||
}
|
||||
memcpy(p,array + element * elsize, elsize);
|
||||
memmove(array + elsize,array,elsize*element);
|
||||
memcpy(array,p,elsize);
|
||||
free(p);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
determine whether we are in the specified group
|
||||
****************************************************************************/
|
||||
@ -189,7 +165,7 @@ char *Atoic(char *p, int *n, char *c)
|
||||
return p;
|
||||
}
|
||||
|
||||
int* add_num_to_list(uint32 **num, int *count, int val)
|
||||
uint32 *add_num_to_list(uint32 **num, int *count, int val)
|
||||
{
|
||||
(*num) = Realloc((*num), ((*count)+1) * sizeof(uint32));
|
||||
if ((*num) == NULL)
|
||||
@ -201,6 +177,7 @@ int* add_num_to_list(uint32 **num, int *count, int val)
|
||||
|
||||
return (*num);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
reads a list of numbers
|
||||
*************************************************************************/
|
||||
@ -383,7 +360,7 @@ BOOL file_exist(char *fname,SMB_STRUCT_STAT *sbuf)
|
||||
SMB_STRUCT_STAT st;
|
||||
if (!sbuf) sbuf = &st;
|
||||
|
||||
if (dos_stat(fname,sbuf) != 0)
|
||||
if (sys_stat(fname,sbuf) != 0)
|
||||
return(False);
|
||||
|
||||
return(S_ISREG(sbuf->st_mode));
|
||||
@ -396,7 +373,7 @@ time_t file_modtime(char *fname)
|
||||
{
|
||||
SMB_STRUCT_STAT st;
|
||||
|
||||
if (dos_stat(fname,&st) != 0)
|
||||
if (sys_stat(fname,&st) != 0)
|
||||
return(0);
|
||||
|
||||
return(st.st_mtime);
|
||||
@ -412,7 +389,7 @@ BOOL directory_exist(char *dname,SMB_STRUCT_STAT *st)
|
||||
|
||||
if (!st) st = &st2;
|
||||
|
||||
if (dos_stat(dname,st) != 0)
|
||||
if (sys_stat(dname,st) != 0)
|
||||
return(False);
|
||||
|
||||
ret = S_ISDIR(st->st_mode);
|
||||
@ -428,7 +405,8 @@ SMB_OFF_T file_size(char *file_name)
|
||||
{
|
||||
SMB_STRUCT_STAT buf;
|
||||
buf.st_size = 0;
|
||||
dos_stat(file_name,&buf);
|
||||
if(sys_stat(file_name,&buf) != 0)
|
||||
return (SMB_OFF_T)-1;
|
||||
return(buf.st_size);
|
||||
}
|
||||
|
||||
@ -451,8 +429,6 @@ char *attrib_string(uint16 mode)
|
||||
return(attrstr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
make a file into unix format
|
||||
****************************************************************************/
|
||||
@ -667,141 +643,6 @@ void unix_clean_name(char *s)
|
||||
trim_string(s,NULL,"/..");
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
a wrapper for the normal chdir() function
|
||||
********************************************************************/
|
||||
int ChDir(char *path)
|
||||
{
|
||||
int res;
|
||||
static pstring LastDir="";
|
||||
|
||||
if (strcsequal(path,".")) return(0);
|
||||
|
||||
if (*path == '/' && strcsequal(LastDir,path)) return(0);
|
||||
DEBUG(3,("chdir to %s\n",path));
|
||||
res = dos_chdir(path);
|
||||
if (!res)
|
||||
pstrcpy(LastDir,path);
|
||||
return(res);
|
||||
}
|
||||
|
||||
/* number of list structures for a caching GetWd function. */
|
||||
#define MAX_GETWDCACHE (50)
|
||||
|
||||
struct
|
||||
{
|
||||
SMB_DEV_T dev; /* These *must* be compatible with the types returned in a stat() call. */
|
||||
SMB_INO_T inode; /* These *must* be compatible with the types returned in a stat() call. */
|
||||
char *text; /* The pathname in DOS format. */
|
||||
BOOL valid;
|
||||
} ino_list[MAX_GETWDCACHE];
|
||||
|
||||
BOOL use_getwd_cache=True;
|
||||
|
||||
/*******************************************************************
|
||||
return the absolute current directory path - given a UNIX pathname.
|
||||
Note that this path is returned in DOS format, not UNIX
|
||||
format.
|
||||
********************************************************************/
|
||||
char *GetWd(char *str)
|
||||
{
|
||||
pstring s;
|
||||
static BOOL getwd_cache_init = False;
|
||||
SMB_STRUCT_STAT st, st2;
|
||||
int i;
|
||||
|
||||
*s = 0;
|
||||
|
||||
if (!use_getwd_cache)
|
||||
return(dos_getwd(str));
|
||||
|
||||
/* init the cache */
|
||||
if (!getwd_cache_init)
|
||||
{
|
||||
getwd_cache_init = True;
|
||||
for (i=0;i<MAX_GETWDCACHE;i++)
|
||||
{
|
||||
string_init(&ino_list[i].text,"");
|
||||
ino_list[i].valid = False;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the inode of the current directory, if this doesn't work we're
|
||||
in trouble :-) */
|
||||
|
||||
if (dos_stat(".",&st) == -1)
|
||||
{
|
||||
DEBUG(0,("Very strange, couldn't stat \".\"\n"));
|
||||
return(dos_getwd(str));
|
||||
}
|
||||
|
||||
|
||||
for (i=0; i<MAX_GETWDCACHE; i++)
|
||||
if (ino_list[i].valid)
|
||||
{
|
||||
|
||||
/* If we have found an entry with a matching inode and dev number
|
||||
then find the inode number for the directory in the cached string.
|
||||
If this agrees with that returned by the stat for the current
|
||||
directory then all is o.k. (but make sure it is a directory all
|
||||
the same...) */
|
||||
|
||||
if (st.st_ino == ino_list[i].inode &&
|
||||
st.st_dev == ino_list[i].dev)
|
||||
{
|
||||
if (dos_stat(ino_list[i].text,&st2) == 0)
|
||||
{
|
||||
if (st.st_ino == st2.st_ino &&
|
||||
st.st_dev == st2.st_dev &&
|
||||
(st2.st_mode & S_IFMT) == S_IFDIR)
|
||||
{
|
||||
pstrcpy (str, ino_list[i].text);
|
||||
|
||||
/* promote it for future use */
|
||||
array_promote((char *)&ino_list[0],sizeof(ino_list[0]),i);
|
||||
return (str);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the inode is different then something's changed,
|
||||
scrub the entry and start from scratch. */
|
||||
ino_list[i].valid = False;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* We don't have the information to hand so rely on traditional methods.
|
||||
The very slow getcwd, which spawns a process on some systems, or the
|
||||
not quite so bad getwd. */
|
||||
|
||||
if (!dos_getwd(s))
|
||||
{
|
||||
DEBUG(0,("Getwd failed, errno %s\n",strerror(errno)));
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
pstrcpy(str,s);
|
||||
|
||||
DEBUG(5,("GetWd %s, inode %d, dev %x\n",s,(int)st.st_ino,(int)st.st_dev));
|
||||
|
||||
/* add it to the cache */
|
||||
i = MAX_GETWDCACHE - 1;
|
||||
string_set(&ino_list[i].text,s);
|
||||
ino_list[i].dev = st.st_dev;
|
||||
ino_list[i].inode = st.st_ino;
|
||||
ino_list[i].valid = True;
|
||||
|
||||
/* put it at the top of the list */
|
||||
array_promote((char *)&ino_list[0],sizeof(ino_list[0]),i);
|
||||
|
||||
return (str);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
reduce a file name, removing .. elements and checking that
|
||||
it is below dir in the heirachy. This uses GetWd() and so must be run
|
||||
@ -809,6 +650,7 @@ on the system that has the referenced file system.
|
||||
|
||||
widelinks are allowed if widelinks is true
|
||||
********************************************************************/
|
||||
|
||||
BOOL reduce_name(char *s,char *dir,BOOL widelinks)
|
||||
{
|
||||
#ifndef REDUCE_PATHS
|
||||
@ -850,22 +692,22 @@ BOOL reduce_name(char *s,char *dir,BOOL widelinks)
|
||||
if (!p)
|
||||
return(True);
|
||||
|
||||
if (!GetWd(wd))
|
||||
if (!dos_GetWd(wd))
|
||||
{
|
||||
DEBUG(0,("couldn't getwd for %s %s\n",s,dir));
|
||||
return(False);
|
||||
}
|
||||
|
||||
if (ChDir(dir) != 0)
|
||||
if (dos_ChDir(dir) != 0)
|
||||
{
|
||||
DEBUG(0,("couldn't chdir to %s\n",dir));
|
||||
return(False);
|
||||
}
|
||||
|
||||
if (!GetWd(dir2))
|
||||
if (!dos_GetWd(dir2))
|
||||
{
|
||||
DEBUG(0,("couldn't getwd for %s\n",dir));
|
||||
ChDir(wd);
|
||||
dos_ChDir(wd);
|
||||
return(False);
|
||||
}
|
||||
|
||||
@ -879,16 +721,16 @@ BOOL reduce_name(char *s,char *dir,BOOL widelinks)
|
||||
*p = '/';
|
||||
}
|
||||
|
||||
if (ChDir(base_name) != 0)
|
||||
if (dos_ChDir(base_name) != 0)
|
||||
{
|
||||
ChDir(wd);
|
||||
dos_ChDir(wd);
|
||||
DEBUG(3,("couldn't chdir for %s %s basename=%s\n",s,dir,base_name));
|
||||
return(False);
|
||||
}
|
||||
|
||||
if (!GetWd(newname))
|
||||
if (!dos_GetWd(newname))
|
||||
{
|
||||
ChDir(wd);
|
||||
dos_ChDir(wd);
|
||||
DEBUG(2,("couldn't get wd for %s %s\n",s,dir2));
|
||||
return(False);
|
||||
}
|
||||
@ -900,13 +742,13 @@ BOOL reduce_name(char *s,char *dir,BOOL widelinks)
|
||||
}
|
||||
|
||||
{
|
||||
int l = strlen(dir2);
|
||||
size_t l = strlen(dir2);
|
||||
if (dir2[l-1] == '/')
|
||||
l--;
|
||||
|
||||
if (strncmp(newname,dir2,l) != 0)
|
||||
{
|
||||
ChDir(wd);
|
||||
dos_ChDir(wd);
|
||||
DEBUG(2,("Bad access attempt? s=%s dir=%s newname=%s l=%d\n",s,dir2,newname,l));
|
||||
return(False);
|
||||
}
|
||||
@ -922,7 +764,7 @@ BOOL reduce_name(char *s,char *dir,BOOL widelinks)
|
||||
pstrcpy(s,newname);
|
||||
}
|
||||
|
||||
ChDir(wd);
|
||||
dos_ChDir(wd);
|
||||
|
||||
if (strlen(s) == 0)
|
||||
pstrcpy(s,"./");
|
||||
@ -2536,7 +2378,7 @@ void smb_panic(char *why)
|
||||
/*******************************************************************
|
||||
a readdir wrapper which just returns the file name
|
||||
********************************************************************/
|
||||
char *readdirname(void *p)
|
||||
char *readdirname(DIR *p)
|
||||
{
|
||||
struct dirent *ptr;
|
||||
char *dname;
|
||||
@ -2560,7 +2402,6 @@ char *readdirname(void *p)
|
||||
{
|
||||
static pstring buf;
|
||||
memcpy(buf, dname, NAMLEN(ptr)+1);
|
||||
unix_to_dos(buf, True);
|
||||
dname = buf;
|
||||
}
|
||||
|
||||
|
@ -39,11 +39,11 @@ char *sid_to_string(pstring sidstr_out, DOM_SID *sid)
|
||||
(sid->id_auth[3] << 16) +
|
||||
(sid->id_auth[2] << 24);
|
||||
|
||||
slprintf(sidstr_out, sizeof(pstring) - 1, "S-%d-%d", sid->sid_rev_num, ia);
|
||||
slprintf(sidstr_out, sizeof(pstring) - 1, "S-%u-%lu", (unsigned int)sid->sid_rev_num, (unsigned long)ia);
|
||||
|
||||
for (i = 0; i < sid->num_auths; i++)
|
||||
{
|
||||
slprintf(subauth, sizeof(subauth)-1, "-%u", sid->sub_auths[i]);
|
||||
slprintf(subauth, sizeof(subauth)-1, "-%lu", (unsigned long)sid->sub_auths[i]);
|
||||
pstrcat(sidstr_out, subauth);
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ BOOL string_to_sid(DOM_SID *sidout, char *sidstr)
|
||||
}
|
||||
|
||||
/* Get the revision number. */
|
||||
sidout->sid_rev_num = atoi(tok);
|
||||
sidout->sid_rev_num = (uint8)strtoul(tok,NULL,10);
|
||||
|
||||
if (!next_token(&p, tok, "-", sizeof(tok))) {
|
||||
DEBUG(0,("string_to_sid: Sid %s is not in a valid format.\n", sidstr));
|
||||
@ -84,7 +84,7 @@ BOOL string_to_sid(DOM_SID *sidout, char *sidstr)
|
||||
}
|
||||
|
||||
/* identauth in decimal should be < 2^32 */
|
||||
ia = atoi(tok);
|
||||
ia = (uint32)strtoul(tok,NULL,10);
|
||||
|
||||
/* NOTE - the ia value is in big-endian format. */
|
||||
sidout->id_auth[0] = 0;
|
||||
@ -104,7 +104,7 @@ BOOL string_to_sid(DOM_SID *sidout, char *sidstr)
|
||||
* are converted to little-endian when linearized onto the wire.
|
||||
*/
|
||||
uint32 rid = (uint32)strtoul(tok, NULL, 10);
|
||||
DEBUG(50,("string_to_sid: tok: %s rid 0x%x\n", tok, rid));
|
||||
DEBUG(50,("string_to_sid: tok: %s rid 0x%lx\n", tok, (unsigned long)rid));
|
||||
sid_append_rid(sidout, rid);
|
||||
}
|
||||
|
||||
|
@ -458,11 +458,11 @@ void string_replace(char *s,char oldc,char newc)
|
||||
/*******************************************************************
|
||||
skip past some strings in a buffer
|
||||
********************************************************************/
|
||||
char *skip_string(const char *buf,size_t n)
|
||||
char *skip_string(char *buf,size_t n)
|
||||
{
|
||||
while (n--)
|
||||
buf += strlen(buf) + 1;
|
||||
return((char *)buf);
|
||||
return(buf);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
|
@ -973,7 +973,7 @@ share ode system
|
||||
static int slow_share_forall(void (*fn)(share_mode_entry *, char *))
|
||||
{
|
||||
int i, count=0;
|
||||
void *dir;
|
||||
DIR *dir;
|
||||
char *s;
|
||||
share_mode_entry e;
|
||||
|
||||
|
@ -110,7 +110,7 @@ void print_file(connection_struct *conn, files_struct *file)
|
||||
|
||||
*syscmd = 0;
|
||||
|
||||
if (file_size(file->fsp_name) <= 0) {
|
||||
if (dos_file_size(file->fsp_name) <= 0) {
|
||||
DEBUG(3,("Discarding null print job %s\n",file->fsp_name));
|
||||
dos_unlink(file->fsp_name);
|
||||
return;
|
||||
|
@ -811,12 +811,11 @@ static void samr_reply_lookup_ids(SAMR_Q_LOOKUP_IDS *q_u,
|
||||
else if (sid_equal(&dom_sid, &usr_sid))
|
||||
{
|
||||
DOMAIN_GRP *mem_grp = NULL;
|
||||
BOOL ret;
|
||||
|
||||
DEBUG(5,("lookup on Domain SID\n"));
|
||||
|
||||
become_root(True);
|
||||
ret = getusergroupsnam(sam_pass->smb_name, &mem_grp, &num_rids);
|
||||
getusergroupsnam(sam_pass->smb_name, &mem_grp, &num_rids);
|
||||
unbecome_root(True);
|
||||
|
||||
num_rids = MIN(num_rids, MAX_SAM_ENTRIES);
|
||||
@ -1392,10 +1391,9 @@ static void samr_reply_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u,
|
||||
if (status == 0x0)
|
||||
{
|
||||
DOMAIN_GRP *mem_grp = NULL;
|
||||
BOOL ret;
|
||||
|
||||
become_root(True);
|
||||
ret = getusergroupsnam(sam_pass->smb_name, &mem_grp, &num_groups);
|
||||
getusergroupsnam(sam_pass->smb_name, &mem_grp, &num_groups);
|
||||
unbecome_root(True);
|
||||
|
||||
gids = NULL;
|
||||
|
@ -66,7 +66,7 @@ DOM_SID global_sid_S_1_1; /* everyone */
|
||||
DOM_SID global_sid_S_1_3; /* */
|
||||
DOM_SID global_sid_S_1_5; /* NT Authority */
|
||||
|
||||
extern pstring global_myworkgroup;
|
||||
extern fstring global_myworkgroup;
|
||||
/* extern fstring global_member_dom_name; */
|
||||
|
||||
static struct sid_name_map_info
|
||||
|
@ -518,7 +518,7 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto)
|
||||
{
|
||||
Dir *dirp;
|
||||
char *n;
|
||||
void *p = dos_opendir(name);
|
||||
DIR *p = dos_opendir(name);
|
||||
int used=0;
|
||||
|
||||
if (!p) return(NULL);
|
||||
@ -530,7 +530,7 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto)
|
||||
dirp->pos = dirp->numentries = dirp->mallocsize = 0;
|
||||
dirp->data = dirp->current = NULL;
|
||||
|
||||
while ((n = readdirname(p)))
|
||||
while ((n = dos_readdirname(p)))
|
||||
{
|
||||
int l = strlen(n)+1;
|
||||
|
||||
|
@ -550,7 +550,7 @@ static void mmap_open_file(files_struct *fsp)
|
||||
#if WITH_MMAP
|
||||
/* mmap it if read-only */
|
||||
if (!fsp->can_write) {
|
||||
fsp->mmap_size = file_size(fsp->fsp_name);
|
||||
fsp->mmap_size = dos_file_size(fsp->fsp_name);
|
||||
if (fsp->mmap_size < MAX_MMAP_SIZE) {
|
||||
fsp->mmap_ptr = (char *)sys_mmap(NULL,fsp->mmap_size,
|
||||
PROT_READ,MAP_SHARED,fsp->fd_ptr->fd,(SMB_OFF_T)0);
|
||||
@ -727,7 +727,7 @@ void open_file_shared(files_struct *fsp,connection_struct *conn,char *fname,int
|
||||
int deny_mode = GET_DENY_MODE(share_mode);
|
||||
BOOL allow_share_delete = GET_ALLOW_SHARE_DELETE(share_mode);
|
||||
SMB_STRUCT_STAT sbuf;
|
||||
BOOL file_existed = file_exist(fname,&sbuf);
|
||||
BOOL file_existed = dos_file_exist(fname,&sbuf);
|
||||
BOOL share_locked = False;
|
||||
BOOL fcbopen = False;
|
||||
int token;
|
||||
|
@ -665,7 +665,7 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, struct timeval *tval)
|
||||
*/
|
||||
saved_conn = fsp->conn;
|
||||
saved_vuid = current_user.vuid;
|
||||
GetWd(saved_dir);
|
||||
dos_GetWd(saved_dir);
|
||||
unbecome_user();
|
||||
/* Save the chain fnum. */
|
||||
file_chain_save();
|
||||
@ -749,7 +749,7 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, struct timeval *tval)
|
||||
exit_server("unable to re-become user");
|
||||
}
|
||||
/* Including the directory. */
|
||||
ChDir(saved_dir);
|
||||
dos_ChDir(saved_dir);
|
||||
|
||||
/* Restore the chain fnum. */
|
||||
file_chain_restore();
|
||||
|
@ -809,7 +809,7 @@ int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
|
||||
if(VALID_STAT(st))
|
||||
ok = S_ISDIR(st.st_mode);
|
||||
else
|
||||
ok = directory_exist(name,NULL);
|
||||
ok = dos_directory_exist(name,NULL);
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
@ -944,7 +944,7 @@ int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
|
||||
mode = SVAL(inbuf,smb_vwv0);
|
||||
mtime = make_unix_date3(inbuf+smb_vwv1);
|
||||
|
||||
if (VALID_STAT_OF_DIR(st) || directory_exist(fname,NULL))
|
||||
if (VALID_STAT_OF_DIR(st) || dos_directory_exist(fname,NULL))
|
||||
mode |= aDIR;
|
||||
if (check_name(fname,conn))
|
||||
ok = (file_chmod(conn,fname,mode,NULL) == 0);
|
||||
@ -1757,7 +1757,7 @@ int reply_unlink(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
|
||||
if (can_delete(directory,conn,dirtype) && !dos_unlink(directory))
|
||||
count++;
|
||||
if (!count)
|
||||
exists = file_exist(directory,NULL);
|
||||
exists = dos_file_exist(directory,NULL);
|
||||
} else {
|
||||
void *dirptr = NULL;
|
||||
char *dname;
|
||||
@ -3274,7 +3274,7 @@ int rename_internals(connection_struct *conn,
|
||||
/*
|
||||
* NT SMB specific flag - rename can overwrite
|
||||
* file with the same name so don't check for
|
||||
* file_exist().
|
||||
* dos_file_exist().
|
||||
*/
|
||||
if(resolve_wildcards(directory,newname) &&
|
||||
can_rename(directory,conn) &&
|
||||
@ -3283,7 +3283,7 @@ int rename_internals(connection_struct *conn,
|
||||
} else {
|
||||
if (resolve_wildcards(directory,newname) &&
|
||||
can_rename(directory,conn) &&
|
||||
!file_exist(newname,NULL) &&
|
||||
!dos_file_exist(newname,NULL) &&
|
||||
!dos_rename(directory,newname))
|
||||
count++;
|
||||
}
|
||||
@ -3291,8 +3291,8 @@ int rename_internals(connection_struct *conn,
|
||||
DEBUG(3,("rename_internals: %s doing rename on %s -> %s\n",(count != 0) ? "succeeded" : "failed",
|
||||
directory,newname));
|
||||
|
||||
if (!count) exists = file_exist(directory,NULL);
|
||||
if (!count && exists && file_exist(newname,NULL)) {
|
||||
if (!count) exists = dos_file_exist(directory,NULL);
|
||||
if (!count && exists && dos_file_exist(newname,NULL)) {
|
||||
exists = True;
|
||||
error = ERRrename;
|
||||
}
|
||||
@ -3333,8 +3333,8 @@ int rename_internals(connection_struct *conn,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!replace_if_exists && file_exist(destname,NULL)) {
|
||||
DEBUG(6,("file_exist %s\n", destname));
|
||||
if (!replace_if_exists && dos_file_exist(destname,NULL)) {
|
||||
DEBUG(6,("dos_file_exist %s\n", destname));
|
||||
error = 183;
|
||||
continue;
|
||||
}
|
||||
@ -3408,7 +3408,7 @@ static BOOL copy_file(char *src,char *dest1,connection_struct *conn, int ofun,
|
||||
pstrcat(dest,p);
|
||||
}
|
||||
|
||||
if (!file_exist(src,&st))
|
||||
if (!dos_file_exist(src,&st))
|
||||
return(False);
|
||||
|
||||
fsp1 = file_new();
|
||||
@ -3501,7 +3501,7 @@ int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
|
||||
unix_convert(name,conn,0,&bad_path1,NULL);
|
||||
unix_convert(newname,conn,0,&bad_path2,NULL);
|
||||
|
||||
target_is_directory = directory_exist(newname,NULL);
|
||||
target_is_directory = dos_directory_exist(newname,NULL);
|
||||
|
||||
if ((flags&1) && target_is_directory) {
|
||||
return(ERROR(ERRDOS,ERRbadfile));
|
||||
@ -3511,7 +3511,7 @@ int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
|
||||
return(ERROR(ERRDOS,ERRbadpath));
|
||||
}
|
||||
|
||||
if ((flags&(1<<5)) && directory_exist(name,NULL)) {
|
||||
if ((flags&(1<<5)) && dos_directory_exist(name,NULL)) {
|
||||
/* wants a tree copy! XXXX */
|
||||
DEBUG(3,("Rejecting tree copy\n"));
|
||||
return(ERROR(ERRSRV,ERRerror));
|
||||
@ -3538,7 +3538,7 @@ int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
|
||||
if (resolve_wildcards(directory,newname) &&
|
||||
copy_file(directory,newname,conn,ofun,
|
||||
count,target_is_directory)) count++;
|
||||
if (!count) exists = file_exist(directory,NULL);
|
||||
if (!count) exists = dos_file_exist(directory,NULL);
|
||||
} else {
|
||||
void *dirptr = NULL;
|
||||
char *dname;
|
||||
@ -3613,7 +3613,7 @@ int reply_setdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
|
||||
if (strlen(newdir) == 0) {
|
||||
ok = True;
|
||||
} else {
|
||||
ok = directory_exist(newdir,NULL);
|
||||
ok = dos_directory_exist(newdir,NULL);
|
||||
if (ok) {
|
||||
string_set(&conn->connectpath,newdir);
|
||||
}
|
||||
|
@ -553,7 +553,7 @@ static void usage(char *pname)
|
||||
so set our umask to 0 */
|
||||
umask(0);
|
||||
|
||||
GetWd(OriginalDir);
|
||||
dos_GetWd(OriginalDir);
|
||||
|
||||
init_uid();
|
||||
|
||||
|
@ -54,8 +54,8 @@ BOOL become_service(connection_struct *conn,BOOL do_chdir)
|
||||
snum = SNUM(conn);
|
||||
|
||||
if (do_chdir &&
|
||||
ChDir(conn->connectpath) != 0 &&
|
||||
ChDir(conn->origpath) != 0) {
|
||||
dos_ChDir(conn->connectpath) != 0 &&
|
||||
dos_ChDir(conn->origpath) != 0) {
|
||||
DEBUG(0,("chdir (%s) failed\n",
|
||||
conn->connectpath));
|
||||
return(False);
|
||||
@ -430,7 +430,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ChDir(conn->connectpath) != 0) {
|
||||
if (dos_ChDir(conn->connectpath) != 0) {
|
||||
DEBUG(0,("Can't change directory to %s (%s)\n",
|
||||
conn->connectpath,strerror(errno)));
|
||||
unbecome_user();
|
||||
@ -453,9 +453,9 @@ connection_struct *make_connection(char *service,char *user,char *password, int
|
||||
{
|
||||
pstring s;
|
||||
pstrcpy(s,conn->connectpath);
|
||||
GetWd(s);
|
||||
dos_GetWd(s);
|
||||
string_set(&conn->connectpath,s);
|
||||
ChDir(conn->connectpath);
|
||||
dos_ChDir(conn->connectpath);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -54,7 +54,7 @@ void init_uid(void)
|
||||
current_user.conn = NULL;
|
||||
current_user.vuid = UID_FIELD_INVALID;
|
||||
|
||||
ChDir(OriginalDir);
|
||||
dos_ChDir(OriginalDir);
|
||||
}
|
||||
|
||||
|
||||
@ -303,7 +303,7 @@ BOOL unbecome_user(void )
|
||||
if (!current_user.conn)
|
||||
return(False);
|
||||
|
||||
ChDir(OriginalDir);
|
||||
dos_ChDir(OriginalDir);
|
||||
|
||||
if (initial_uid == 0)
|
||||
{
|
||||
@ -336,7 +336,7 @@ BOOL unbecome_user(void )
|
||||
current_user.uid = initial_uid;
|
||||
current_user.gid = initial_gid;
|
||||
|
||||
if (ChDir(OriginalDir) != 0)
|
||||
if (dos_ChDir(OriginalDir) != 0)
|
||||
DEBUG( 0, ( "chdir(%s) failed in unbecome_user\n", OriginalDir ) );
|
||||
|
||||
DEBUG(5,("unbecome_user now uid=(%d,%d) gid=(%d,%d)\n",
|
||||
@ -366,7 +366,7 @@ void become_root(BOOL save_dir)
|
||||
DEBUG(0,("ERROR: become root depth is non zero\n"));
|
||||
}
|
||||
if (save_dir)
|
||||
GetWd(become_root_dir);
|
||||
dos_GetWd(become_root_dir);
|
||||
|
||||
current_user_saved = current_user;
|
||||
become_root_depth = 1;
|
||||
@ -415,7 +415,7 @@ void unbecome_root(BOOL restore_dir)
|
||||
}
|
||||
|
||||
if (restore_dir)
|
||||
ChDir(become_root_dir);
|
||||
dos_ChDir(become_root_dir);
|
||||
|
||||
current_user = current_user_saved;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user