From 25eae02948b40667495fbb021dd130180180a05e Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Tue, 8 Jul 1997 16:54:44 +0000 Subject: Makefile: Added AIX targets from Ole Holm Nielsen chgpasswd.c: Added Samba/GPL notice (for obvious reasons). clitar.c: Updated Copyright date to include 1997 (for obvious reasons). getsmbpass.c: Updated Copyright date to include 1997 (for obvious reasons). includes.h: Added stropts for solaris. loadparm.c: Changed comment for hide files option. nameconf.c: Updated Copyright date to include 1997 (for obvious reasons). nmbd.c: Updated Copyright date to include 1997 (for obvious reasons). pcap.c: Updated Copyright date to include 1997 (for obvious reasons). proto.h: Re-added accidentaly deleted smb_shm_ calls. quotas.c: Added AIX quota patch from Ole Holm Nielsen server.c: Optimization on calling is_hidden_path. Updated Copyrights. smb.h: Changed DEFAULT_FILES_TO_HIDE from "*/.*" to ".*". smbpass.c: Updated Copyright date to include 1997 (for obvious reasons). ufc.c: Updated Copyright date to include 1997 (for obvious reasons). util.c: Added last component code to is_in_path(). Jeremy (jallison@whistle.com) (This used to be commit 9385ae1005f13c8ed51f1319e3949b5c8571e62d) --- source3/smbd/chgpasswd.c | 43 ++++++++++++++++++++++++++++++++----------- source3/smbd/quotas.c | 23 +++++++++++++++++------ source3/smbd/server.c | 6 ++++-- 3 files changed, 53 insertions(+), 19 deletions(-) (limited to 'source3/smbd') diff --git a/source3/smbd/chgpasswd.c b/source3/smbd/chgpasswd.c index 79ea66253d..6063f2aac8 100644 --- a/source3/smbd/chgpasswd.c +++ b/source3/smbd/chgpasswd.c @@ -1,3 +1,24 @@ +/* + 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. @@ -38,22 +59,22 @@ extern int DEBUGLEVEL; 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); @@ -73,7 +94,7 @@ static int findpty(char **slave) } } CloseDir(dirp); -#endif +#endif /* defined(SVR4) || defined(SUNOS5) */ return (-1); } @@ -87,9 +108,9 @@ static int dochild(int master,char *slavedev, char *name, char *passwordprogram) #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) { @@ -103,15 +124,15 @@ static int dochild(int master,char *slavedev, char *name, char *passwordprogram) 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); diff --git a/source3/smbd/quotas.c b/source3/smbd/quotas.c index e6a6f61568..262eea3100 100644 --- a/source3/smbd/quotas.c +++ b/source3/smbd/quotas.c @@ -367,7 +367,14 @@ DEBUG(5,("disk_quotas for path \"%s\" returning bsize %d, dfree %d, dsize %d\n" #ifdef __FreeBSD__ #include -#else +#elif AIX +/* AIX quota patch from Ole Holm Nielsen */ +#include +/* 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 #include #endif @@ -380,7 +387,7 @@ BOOL disk_quotas(char *path, int *bsize, int *dfree, int *dsize) 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 */ @@ -401,13 +408,17 @@ BOOL disk_quotas(char *path, int *bsize, int *dfree, int *dsize) 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; diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 0361c5aa46..768c7c71bc 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -224,7 +224,9 @@ int dos_mode(int cnum,char *path,struct stat *sbuf) 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; } @@ -4189,7 +4191,7 @@ static void usage(char *pname) 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 -- cgit