Makefile: Changed for HPUX10 tidyup.
authorSamba Release Account <samba-bugs@samba.org>
Tue, 19 Aug 1997 19:22:26 +0000 (19:22 +0000)
committerSamba Release Account <samba-bugs@samba.org>
Tue, 19 Aug 1997 19:22:26 +0000 (19:22 +0000)
includes.h: Changed for HPUX10 tidyup.
ipc.c: Fixed bug where getting local server list from NT browsers would
            fail.
nmbsync.c: Fixed bug where getting local server list from NT browsers would
            fail.
proto.h: Changed for crash bug on SCO with USE_MMAP.
quotas.c: Added OSF quotas (patch from Bret Giddings <bret@essex.ac.uk>).
            Rolled back solaris uid change - I think it was wrong.
reply.c: Changed for crash bug on SCO with USE_MMAP.
server.c: Removed Lukes changes. Changed for crash bug on SCO with USE_MMAP.
smb.h: Changed for crash bug on SCO with USE_MMAP.
smbpasswd.c:Fixed crash bug with Lukes changes.
uid.c: Removed Lukes changes.
util.c: Fixed I18N bug with extended char filenames and widelinks = no.
Jeremy (jallison@whistle.com)

source/include/includes.h
source/include/proto.h
source/include/smb.h
source/lib/util.c
source/nmbsync.c
source/smbd/ipc.c
source/smbd/quotas.c
source/smbd/reply.c
source/smbd/server.c
source/smbd/uid.c
source/utils/smbpasswd.c

index 03c2d461e6a7c339bd2bf50ccfe54d950f7f3d88..15a5e74e46971aac88f29fa076abdfd776ba422b 100644 (file)
@@ -541,7 +541,9 @@ char *mktemp(char *); /* No standard include */
 #define NEED_AUTH_PARAMETERS
 #endif
 #define SIGNAL_CAST (void (*)(__harg))
+#ifndef HPUX10 /* This is only needed for HPUX 9.x */
 #define SELECT_CAST (int *)
+#endif /* HPUX10 */
 #define SYSV
 #define USE_WAITPID
 #define WAIT3_CAST2 (int *)
@@ -550,7 +552,7 @@ char *mktemp(char *); /* No standard include */
 #define USE_SETRES
 #define DEFAULT_PRINTING PRINT_HPUX
 #define SIGCLD_IGNORE
-#endif
+#endif /* HPUX */
 
 
 #ifdef SEQUENT
index 0fa4251b8275a09b843b3aea2bd0a52ae589612e..56bdbfe8653d74618839e0eb74074111d2806a57 100644 (file)
@@ -703,8 +703,8 @@ void close_file(int fnum);
 BOOL check_file_sharing(int cnum,char *fname);
 void open_file_shared(int fnum,int cnum,char *fname,int share_mode,int ofun,
                      int mode,int *Access,int *action);
-int seek_file(int fnum,int pos);
-int read_file(int fnum,char *data,int pos,int n);
+int seek_file(int fnum,uint32 pos);
+int read_file(int fnum,char *data,uint32 pos,int n);
 int write_file(int fnum,char *data,int n);
 BOOL become_service(int cnum,BOOL do_chdir);
 int find_service(char *service);
index 2b6888b8a7fc009bb789f8c35faa6b8965cfc4a8..0f2dc018656f0145f63600ae153a0e48d7eb8499 100644 (file)
@@ -314,11 +314,11 @@ typedef struct
   int cnum;
   file_fd_struct *fd_ptr;
   int pos;
-  int size;
+  uint32 size;
   int mode;
   int uid;
   char *mmap_ptr;
-  int mmap_size;
+  uint32 mmap_size;
   write_bmpx_struct *wbmpx_ptr;
   struct timeval open_time;
   BOOL open;
index 9982d105adc727fcffd92af273daf8769aa6c8e3..ca17fbdcb46dcf1531932e7ffda7bd42236e8c80 100644 (file)
@@ -1260,11 +1260,18 @@ int ChDir(char *path)
 ********************************************************************/
 static char *Dumb_GetWd(char *s)
 {
+  char *p;
 #ifdef USE_GETCWD
-    return ((char *)getcwd(s,sizeof(pstring)));
+  p = (char *)getcwd(s,sizeof(pstring));
 #else
-    return ((char *)getwd(s));
+  p = (char *)getwd(s));
 #endif
+  if(!p)
+    return NULL;
+
+  /* Ensure we always return in dos format. */
+  unix_to_dos(p,True);
+  return p;
 }
 
 
index 97e7e02b2b9271c6823252ed93feab48363515f0..a140b7a1bd49086ffba1d7a45a1ad5b9cd92b98d 100644 (file)
@@ -176,12 +176,14 @@ void sync_browse_lists(struct subnet_record *d, struct work_record *work,
   if (cli_open_sockets(SMB_PORT))
     {
       if (cli_send_login(NULL,NULL,True,True))
-       {
-         add_info(d, work, local_type|SV_TYPE_DOMAIN_ENUM);
-         add_info(d, work, local_type|(SV_TYPE_ALL&
-                      ~(SV_TYPE_DOMAIN_ENUM|SV_TYPE_LOCAL_LIST_ONLY)));
-       }
+      {
+           add_info(d, work, local_type|SV_TYPE_DOMAIN_ENUM);
+        if(local)
+          add_info(d, work, SV_TYPE_LOCAL_LIST_ONLY);
+        else
+          add_info(d, work, SV_TYPE_ALL);
+      }
       
-      close_sockets();
-    }
+    close_sockets();
+  }
 }
index d6d2f289aa48ece3c77f107a29cf59d499dd10a5..e21021c0ac55d938ffcece8deadac1670df03dae 100644 (file)
@@ -991,6 +991,15 @@ static BOOL api_RNetServerEnum(int cnum, uint16 vuid, char *param, char *data,
   if (servertype == SV_TYPE_ALL) 
     servertype &= ~(SV_TYPE_DOMAIN_ENUM|SV_TYPE_LOCAL_LIST_ONLY);
 
+  /* If someone sets SV_TYPE_LOCAL_LIST_ONLY but hasn't set
+     any other bit (they may just set this bit on it's own) they 
+     want all the locally seen servers. However this bit can be 
+     set on its own so set the requested servers to be 
+     ALL - DOMAIN_ENUM. */
+
+  if ((servertype & SV_TYPE_LOCAL_LIST_ONLY) && !(servertype & SV_TYPE_DOMAIN_ENUM)) 
+    servertype = SV_TYPE_ALL & ~(SV_TYPE_DOMAIN_ENUM);
+
   domain_request = ((servertype & SV_TYPE_DOMAIN_ENUM) != 0);
   local_request = ((servertype & SV_TYPE_LOCAL_LIST_ONLY) != 0);
 
index 883c2c050de6e2683d4459e66c99333189683885..d19d386e2732aeba0c4a58efaa42de2ac6d8aff6 100644 (file)
@@ -331,8 +331,8 @@ BOOL disk_quotas(char *path, int *bsize, int *dfree, int *dsize)
   ret = quotactl(Q_GETQUOTA, name, euser_id, &D);
 #endif
 
-  seteuid(euser_id); /* Restore the original uid status. */
-  setuid(user_id);  
+  setuid(user_id); /* Restore the original uid status. */
+  seteuid(euser_id);
 
   if (ret < 0) {
     DEBUG(2,("disk_quotas ioctl (Solaris) failed\n"));
@@ -363,6 +363,47 @@ DEBUG(5,("disk_quotas for path \"%s\" returning  bsize %d, dfree %d, dsize %d\n"
       return(True);
 }
 
+
+#elif defined(OSF1)
+#include <ufs/quota.h>
+
+/****************************************************************************
+try to get the disk space from disk quotas - OFS1 version
+****************************************************************************/
+BOOL disk_quotas(char *path, int *bsize, int *dfree, int *dsize)
+{
+  uid_t user_id, euser_id;
+  int r;
+  struct dqblk D;
+  struct stat S;
+
+  euser_id = geteuid();
+  user_id = getuid();
+
+  setreuid(euser_id, euser_id);
+  r= quotactl(path,QCMD(Q_GETQUOTA, USRQUOTA),euser_id,(char *) &D);
+  if (setreuid(user_id, euser_id) == -1)
+    DEBUG(5,("Unable to reset uid to %d\n", user_id));
+
+  *bsize = DEV_BSIZE;
+
+  if (r)
+      return(False);
+
+  /* Use softlimit to determine disk space, except when it has been exceeded */
+
+  if (D.dqb_bsoftlimit==0)
+    return(False);
+
+  if ((D.dqb_curblocks>D.dqb_bsoftlimit)) {
+    *dfree = 0;
+    *dsize = D.dqb_curblocks;
+  } else {
+    *dfree = D.dqb_bsoftlimit - D.dqb_curblocks;
+    *dsize = D.dqb_bsoftlimit;
+  }
+  return (True);
+}
 #else
 
 #ifdef        __FreeBSD__
index 374a01b665782341540c0829402c3359fd77c775..0216b58c34afea10af93e8ba85397c93b07ea325 100644 (file)
@@ -1374,7 +1374,7 @@ int reply_readbraw(char *inbuf, char *outbuf)
 {
   int cnum,maxcount,mincount,fnum;
   int nread = 0;
-  int startpos;
+  uint32 startpos;
   char *header = outbuf;
   int ret=0;
   int fd;
@@ -1418,7 +1418,7 @@ int reply_readbraw(char *inbuf, char *outbuf)
          Files[fnum].size = size;
       }
 
-      nread = MIN(maxcount,size - startpos);     
+      nread = MIN(maxcount,(int)(size - startpos));      
     }
 
   if (nread < mincount)
@@ -1515,7 +1515,7 @@ int reply_read(char *inbuf,char *outbuf)
   int cnum,numtoread,fnum;
   int nread = 0;
   char *data;
-  int startpos;
+  uint32 startpos;
   int outsize = 0;
   
   cnum = SVAL(inbuf,smb_tid);
@@ -3081,7 +3081,7 @@ int reply_readbmpx(char *inbuf,char *outbuf,int length,int bufsize)
   int nread = -1;
   int total_read;
   char *data;
-  int32 startpos;
+  uint32 startpos;
   int outsize, mincount, maxcount;
   int max_per_packet;
   int tcount;
@@ -3152,7 +3152,7 @@ int reply_writebmpx(char *inbuf,char *outbuf)
   int cnum,numtowrite,fnum;
   int nwritten = -1;
   int outsize = 0;
-  int32 startpos;
+  uint32 startpos;
   int tcount, write_through, smb_doff;
   char *data;
   
index 35774c0a43aca3ef781d00c2b0649b5267835141..3d5b75794b18261319d10216faeb95af98408bbc 100644 (file)
@@ -1704,20 +1704,21 @@ void open_file_shared(int fnum,int cnum,char *fname,int share_mode,int ofun,
 /****************************************************************************
 seek a file. Try to avoid the seek if possible
 ****************************************************************************/
-int seek_file(int fnum,int pos)
+int seek_file(int fnum,uint32 pos)
 {
-  int offset = 0;
+  uint32 offset = 0;
   if (Files[fnum].print_file && POSTSCRIPT(Files[fnum].cnum))
     offset = 3;
 
-  Files[fnum].pos = lseek(Files[fnum].fd_ptr->fd,pos+offset,SEEK_SET) - offset;
+  Files[fnum].pos = (int)(lseek(Files[fnum].fd_ptr->fd,pos+offset,SEEK_SET) 
+                                  - offset);
   return(Files[fnum].pos);
 }
 
 /****************************************************************************
 read from a file
 ****************************************************************************/
-int read_file(int fnum,char *data,int pos,int n)
+int read_file(int fnum,char *data,uint32 pos,int n)
 {
   int ret=0,readret;
 
@@ -1733,7 +1734,7 @@ int read_file(int fnum,char *data,int pos,int n)
 #if USE_MMAP
   if (Files[fnum].mmap_ptr)
     {
-      int num = MIN(n,Files[fnum].mmap_size-pos);
+      int num = MIN(n,(int)(Files[fnum].mmap_size-pos));
       if (num > 0)
        {
          memcpy(data,Files[fnum].mmap_ptr+pos,num);
@@ -2541,22 +2542,25 @@ int make_connection(char *service,char *user,char *password, int pwlen, char *de
   pcon->ngroups = 0;
   pcon->groups = NULL;
 
-  /* Find all the groups this uid is in and store them. Used by become_user() */
-  setup_groups(pcon->user,pcon->uid,pcon->gid,&pcon->ngroups,&pcon->igroups,&pcon->groups);
+  if (!IS_IPC(cnum))
+    {
+      /* Find all the groups this uid is in and store them. Used by become_user() */
+      setup_groups(pcon->user,pcon->uid,pcon->gid,&pcon->ngroups,&pcon->igroups,&pcon->groups);
       
-  /* check number of connections */
-  if (!claim_connection(cnum,
+      /* check number of connections */
+      if (!claim_connection(cnum,
                            lp_servicename(SNUM(cnum)),
                            lp_max_connections(SNUM(cnum)),False))
-  {
-    DEBUG(1,("too many connections - rejected\n"));
-    return(-8);
-  }  
+       {
+         DEBUG(1,("too many connections - rejected\n"));
+         return(-8);
+       }  
 
-  if (lp_status(SNUM(cnum)))
-    claim_connection(cnum,"STATUS.",MAXSTATUS,first_connection);
+      if (lp_status(SNUM(cnum)))
+       claim_connection(cnum,"STATUS.",MAXSTATUS,first_connection);
 
-  first_connection = False;
+      first_connection = False;
+    } /* IS_IPC */
 
   pcon->open = True;
 
@@ -2574,13 +2578,13 @@ int make_connection(char *service,char *user,char *password, int pwlen, char *de
     {
       DEBUG(0,("Can't become connected user!\n"));
       pcon->open = False;
-      yield_connection(cnum,
+      if (!IS_IPC(cnum)) {
+       yield_connection(cnum,
                         lp_servicename(SNUM(cnum)),
                         lp_max_connections(SNUM(cnum)));
-      if (lp_status(SNUM(cnum))) yield_connection(cnum,"STATUS.",MAXSTATUS);
-      {
-        return(-1);
+       if (lp_status(SNUM(cnum))) yield_connection(cnum,"STATUS.",MAXSTATUS);
       }
+      return(-1);
     }
 
   if (ChDir(pcon->connectpath) != 0)
@@ -2589,13 +2593,13 @@ int make_connection(char *service,char *user,char *password, int pwlen, char *de
               pcon->connectpath,strerror(errno)));
       pcon->open = False;
       unbecome_user();
-      yield_connection(cnum,
+      if (!IS_IPC(cnum)) {
+       yield_connection(cnum,
                         lp_servicename(SNUM(cnum)),
                         lp_max_connections(SNUM(cnum)));
-      if (lp_status(SNUM(cnum))) yield_connection(cnum,"STATUS.",MAXSTATUS);
-      {
-        return(-5);      
+       if (lp_status(SNUM(cnum))) yield_connection(cnum,"STATUS.",MAXSTATUS);
       }
+      return(-5);      
     }
 
   string_set(&pcon->origpath,pcon->connectpath);
@@ -3420,7 +3424,7 @@ void exit_server(char *reason)
   DEBUG(2,("Closing connections\n"));
   for (i=0;i<MAX_CONNECTIONS;i++)
     if (Connections[i].open)
-      close_cnum(i,-1);
+      close_cnum(i,(uint16)-1);
 #ifdef DFS_AUTH
   if (dcelogin_atmost_once)
     dfs_unlogin();
index 4ffdb0923e30a4a3618bfac826b563c2c58922a2..cdc4e474c61e8489f413c7c811f4500bc7ef703c 100644 (file)
@@ -253,10 +253,12 @@ BOOL become_user(int cnum, uint16 vuid)
       if (!become_gid(gid)) return(False);
 
 #ifndef NO_SETGROUPS      
+      if (!IS_IPC(cnum)) {
        /* groups stuff added by ih/wreu */
        if (current_user.ngroups > 0)
          if (setgroups(current_user.ngroups,current_user.groups)<0)
            DEBUG(0,("setgroups call failed!\n"));
+      }
 #endif
 
       if (!Connections[cnum].admin_user && !become_uid(uid))
index 7a4a1e2cdb8d7333c8d524356039083d48321c7e..161555d52cc2939aa440cc69f9918580d22a0872 100644 (file)
@@ -269,7 +269,7 @@ static void usage(char *name)
     if ((argv[1][0] == '-') && (argv[1][1] == 'a'))
       add_user = True;
 
-    if(add_user && (argc < 2 || argc > 4))
+    if(add_user && (argc <= 2 || argc > 4))
       usage(argv[0]);
 
     /* root can specify password on command-line */
@@ -338,7 +338,7 @@ static void usage(char *name)
 
     p = getpass("Retype new SMB password:");
 
-    if (strcmp(p, new_passwd))
+    if (strncmp(p, new_passwd, sizeof(fstring)-1))
     {
       fprintf(stderr, "%s: Mismatch - password unchanged.\n", argv[0]);
       exit(1);