1
0
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:
Jeremy Allison 1998-11-25 21:17:20 +00:00
parent 59d4087160
commit bfc38ff872
27 changed files with 2015 additions and 829 deletions

View File

@ -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
View File

@ -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
])

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -601,6 +601,10 @@ extern int errno;
#endif
#endif
#ifndef PRINTCAP_NAME
#define PRINTCAP_NAME "/etc/printcap"
#endif
#ifndef SIGCLD
#define SIGCLD SIGCHLD
#endif

View File

@ -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
View 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);
}

View File

@ -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++;

View File

@ -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 */

View File

@ -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];

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}
/*******************************************************************

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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);
}

View File

@ -553,7 +553,7 @@ static void usage(char *pname)
so set our umask to 0 */
umask(0);
GetWd(OriginalDir);
dos_GetWd(OriginalDir);
init_uid();

View File

@ -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

View File

@ -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;