Unix SMB/Netbios implementation.
Version 1.9.
Tar Extensions
- Copyright (C) Ricky Poulten 1995
+ Copyright (C) Ricky Poulten 1995-1997
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
#include <arpa/inet.h>
#include <rpcsvc/ypclnt.h>
#include <termios.h>
+#include <sys/stropts.h>
#ifndef USE_LIBDES
#include <crypt.h>
#endif /* USE_LIBDES */
BOOL smb_shm_get_usage(int *bytes_free,
int *bytes_used,
int *bytes_overhead);
+smb_shm_offset_t smb_shm_alloc(int size);
+smb_shm_offset_t smb_shm_addr2offset(void *addr);
+smb_shm_offset_t smb_shm_get_userdef_off(void);
/*The following definitions come from smbencrypt.c */
char *readdirname(void *p);
BOOL is_hidden_path(int snum, char *name);
BOOL is_vetoed_name(int snum, char *name);
-BOOL is_in_path(char *name, char *namelist);
BOOL fcntl_lock(int fd,int op,uint32 offset,uint32 count,int type);
int file_lock(char *name,int timeout);
void file_unlock(int fd);
#define COPYBUF_SIZE (8*1024)
/* service-based parameter - files are not visible, but are accessible */
-#define DEFAULT_FILES_TO_HIDE "*/.*"
+#define DEFAULT_FILES_TO_HIDE ".*"
/* _SMB_H */
-/* Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1992-1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
/*
* UFC-crypt: ultra fast crypt(3) implementation
*
- * Copyright (C) 1991, 1992, Free Software Foundation, Inc.
+ * Copyright (C) 1991-1997, Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
return(dname);
}
+/*
+ * Utility function used by is_hidden_path() and is_vetoed_name()
+ * to decide if the last component of a path matches a (possibly
+ * wildcarded) entry in a namelist.
+ */
-BOOL is_hidden_path(int snum, char *name)
-{
- return is_in_path(name, lp_hide_files(snum));
-}
-
-BOOL is_vetoed_name(int snum, char *name)
-{
- return is_in_path(name, lp_veto_files(snum));
-}
-
-BOOL is_in_path(char *name, char *namelist)
+static BOOL is_in_path(char *name, char *namelist)
{
-
+ pstring last_component;
+ char *p;
char *nameptr = namelist;
char *name_end;
DEBUG(5, ("is_in_path: %s list: %s\n", name, namelist));
/* if we have no list it's obviously not in the path */
- if((nameptr == NULL ) || (*nameptr == '\0'))
+ if((nameptr == NULL ) || ((nameptr != NULL) && (*nameptr == '\0')))
{
DEBUG(5,("is_in_path: no name list. return False\n"));
return False;
}
+ /* Get the last component of the unix name. */
+ p = strrchr(name, '/');
+ strncpy(last_component, p ? p : name, sizeof(last_component)-1);
+ last_component[sizeof(last_component)-1] = '\0';
+
/* now, we need to find the names one by one and check them
they can contain spaces and all sorts of stuff so we
separate them with of all things '\' which can never be in a filename
that unix_convert is called before check_path and dos_mode.
unix_convert changes, in the path, all dos '\'s to unix '/'s.
- therefore, users might want to match against '/'s in the path,
- and therefore '\' must be used as the separator.
-
the alternatives are:
1) move all check_path and dos_mode calls to before the
}
/* look for a match. */
- if (mask_match(name, nameptr, case_sensitive, False))
+ if (mask_match(last_component, nameptr, case_sensitive, False))
{
DEBUG(5,("is_in_path: mask match succeeded\n"));
return True;
return False;
}
+BOOL is_hidden_path(int snum, char *name)
+{
+ return is_in_path(name, lp_hide_files(snum));
+}
+
+BOOL is_vetoed_name(int snum, char *name)
+{
+ return is_in_path(name, lp_veto_files(snum));
+}
+
/****************************************************************************
routine to do file locking
****************************************************************************/
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) David Chappell 1996
+ Copyright (C) David Chappell 1996-1997
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
}
DEBUG(1,("%s netbios nameserver version %s started\n",timestring(),VERSION));
- DEBUG(1,("Copyright Andrew Tridgell 1994\n"));
+ DEBUG(1,("Copyright Andrew Tridgell 1994-1997\n"));
get_myname(myhostname,NULL);
NULL, /* szMagicOutput */
NULL, /* szMangledMap */
NULL, /* szVetoFiles */
- DEFAULT_FILES_TO_HIDE, /* szVetoFiles */
+ DEFAULT_FILES_TO_HIDE, /* szHideFiles */
NULL, /* comment */
NULL, /* force user */
NULL, /* force group */
#ifdef SMB_PASSWD
/*
* Unix SMB/Netbios implementation. Version 1.9. SMB parameters and setup
- * Copyright (C) Andrew Tridgell 1992-1995 Modified by Jeremy Allison 1995.
+ * Copyright (C) Andrew Tridgell 1992-1997 Modified by Jeremy Allison 1995.
*
* 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
Unix SMB/Netbios implementation.
Version 1.9.
printcap parsing
- Copyright (C) Karl Auer 1993,1994
+ Copyright (C) Karl Auer 1993-1997
Re-working by Martin Kiff, 1994
+/*
+ Unix SMB/Netbios implementation.
+ Version 1.9.
+ Samba utility functions
+ Copyright (C) Andrew Tridgell 1992-1997
+
+ 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.
+*/
+
/* fork a child process to exec passwd and write to its
* tty to change a users password. This is running as the
* user who is attempting to change the password.
static int findpty(char **slave)
{
int master;
-#ifdef SVR4
+#if defined(SVR4) || defined(SUNOS5)
extern char *ptsname();
-#else
+#else /* defined(SVR4) || defined(SUNOS5) */
static char line[12];
void *dirp;
char *dpname;
-#endif
+#endif /* defined(SVR4) || defined(SUNOS5) */
-#ifdef SVR4
+#if defined(SVR4) || defined(SUNOS5)
if ((master = open("/dev/ptmx", O_RDWR)) >= 1) {
grantpt(master);
unlockpt(master);
*slave = ptsname(master);
return (master);
}
-#else
+#else /* defined(SVR4) || defined(SUNOS5) */
strcpy( line, "/dev/ptyXX" );
dirp = OpenDir(-1, "/dev", True);
}
}
CloseDir(dirp);
-#endif
+#endif /* defined(SVR4) || defined(SUNOS5) */
return (-1);
}
#ifdef USE_SETRES
setresuid(0,0,0);
-#else
+#else /* USE_SETRES */
setuid(0);
-#endif
+#endif /* USE_SETRES */
/* Start new session - gets rid of controlling terminal. */
if (setsid() < 0) {
slavedev));
return(False);
}
-#ifdef SVR4
+#if defined(SVR4) || defined(SUNOS5)
ioctl(slave, I_PUSH, "ptem");
ioctl(slave, I_PUSH, "ldterm");
-#else
+#else /* defined(SVR4) || defined(SUNOS5) */
if (ioctl(slave,TIOCSCTTY,0) <0) {
DEBUG(3,("Error in ioctl call for slave pty\n"));
/* return(False); */
}
-#endif
+#endif /* defined(SVR4) || defined(SUNOS5) */
/* Close master. */
close(master);
#ifdef __FreeBSD__
#include <ufs/ufs/quota.h>
-#else
+#elif AIX
+/* AIX quota patch from Ole Holm Nielsen <ohnielse@fysik.dtu.dk> */
+#include <jfs/quota.h>
+/* AIX 4.X: Rename members of the dqblk structure (ohnielse@fysik.dtu.dk) */
+#define dqb_curfiles dqb_curinodes
+#define dqb_fhardlimit dqb_ihardlimit
+#define dqb_fsoftlimit dqb_isoftlimit
+#else /* !__FreeBSD__ && !AIX */
#include <sys/quota.h>
#include <devnm.h>
#endif
uid_t euser_id;
int r;
struct dqblk D;
-#ifndef __FreeBSD__
+#if !defined(__FreeBSD__) && !defined(AIX)
char dev_disk[256];
struct stat S;
/* find the block device file */
if (setresuid(user_id,-1,-1))
DEBUG(5,("Unable to reset uid to %d\n", user_id));
}
-#else
+#else /* USE_SETRES */
#if defined(__FreeBSD__)
r= quotactl(path,Q_GETQUOTA,euser_id,(char *) &D);
-#else
+#elif defined(AIX)
+ /* AIX has both USER and GROUP quotas:
+ Get the USER quota (ohnielse@fysik.dtu.dk) */
+ r= quotactl(path,QCMD(Q_GETQUOTA,USRQUOTA),euser_id,(char *) &D);
+#else /* !__FreeBSD__ && !AIX */
r=quotactl(Q_GETQUOTA, dev_disk, euser_id, &D);
-#endif
-#endif
+#endif /* !__FreeBSD__ && !AIX */
+#endif /* USE_SETRES */
/* Use softlimit to determine disk space, except when it has been exceeded */
*bsize = 1024;
result |= aHIDDEN;
}
- if (is_hidden_path(SNUM(cnum), path))
+ /* Optimization : Only call is_hidden_path if it's not already
+ hidden. */
+ if (!(result & aHIDDEN) && is_hidden_path(SNUM(cnum), path))
{
result |= aHIDDEN;
}
reopen_logs();
DEBUG(2,("%s smbd version %s started\n",timestring(),VERSION));
- DEBUG(2,("Copyright Andrew Tridgell 1992-1995\n"));
+ DEBUG(2,("Copyright Andrew Tridgell 1992-1997\n"));
#ifndef NO_GETRLIMIT
#ifdef RLIMIT_NOFILE