move setup_groups() into password.c so that swat can link without
authorAndrew Tridgell <tridge@samba.org>
Thu, 12 Mar 1998 02:43:46 +0000 (02:43 +0000)
committerAndrew Tridgell <tridge@samba.org>
Thu, 12 Mar 1998 02:43:46 +0000 (02:43 +0000)
including server.o
(This used to be commit 67bb8835c76e3efc43de55493971fe2402c0d709)

source3/smbd/password.c
source3/smbd/server.c

index b422dda36c56b93f65d2dfc78e179b3c4f61f4af..212d931e87784b43c00738ab4e5e4b5c072ba3d3 100644 (file)
@@ -147,6 +147,92 @@ char *validated_username(uint16 vuid)
   return(vuser->name);
 }
 
+
+/****************************************************************************
+Setup the groups a user belongs to.
+****************************************************************************/
+int setup_groups(char *user, int uid, int gid, int *p_ngroups, 
+                int **p_igroups, gid_t **p_groups,
+         int **p_attrs)
+{
+  if (-1 == initgroups(user,gid))
+    {
+      if (getuid() == 0)
+       {
+         DEBUG(0,("Unable to initgroups!\n"));
+         if (gid < 0 || gid > 16000 || uid < 0 || uid > 16000)
+           DEBUG(0,("This is probably a problem with the account %s\n",user));
+       }
+    }
+  else
+    {
+      int i,ngroups;
+      int *igroups;
+      int *attrs;
+      gid_t grp = 0;
+      ngroups = getgroups(0,&grp);
+      if (ngroups <= 0)
+        ngroups = 32;
+      igroups = (int *)malloc(sizeof(int)*ngroups);
+      attrs   = (int *)malloc(sizeof(int)*ngroups);
+      for (i=0;i<ngroups;i++)
+      {
+        attrs  [i] = 0x7; /* XXXX don't know what NT user attributes are yet! */
+        igroups[i] = 0x42424242;
+      }
+      ngroups = getgroups(ngroups,(gid_t *)igroups);
+
+      if (igroups[0] == 0x42424242)
+        ngroups = 0;
+
+      *p_ngroups = ngroups;
+      *p_attrs   = attrs;
+
+      /* The following bit of code is very strange. It is due to the
+         fact that some OSes use int* and some use gid_t* for
+         getgroups, and some (like SunOS) use both, one in prototypes,
+         and one in man pages and the actual code. Thus we detect it
+         dynamically using some very ugly code */
+      if (ngroups > 0)
+        {
+         /* does getgroups return ints or gid_t ?? */
+         static BOOL groups_use_ints = True;
+
+         if (groups_use_ints && 
+             ngroups == 1 && 
+             SVAL(igroups,2) == 0x4242)
+           groups_use_ints = False;
+         
+          for (i=0;groups_use_ints && i<ngroups;i++)
+            if (igroups[i] == 0x42424242)
+             groups_use_ints = False;
+             
+          if (groups_use_ints)
+          {
+             *p_igroups = igroups;
+             *p_groups = (gid_t *)igroups;       
+          }
+          else
+          {
+             gid_t *groups = (gid_t *)igroups;
+             igroups = (int *)malloc(sizeof(int)*ngroups);
+             for (i=0;i<ngroups;i++)
+          {
+               igroups[i] = groups[i];
+          }
+             *p_igroups = igroups;
+             *p_groups = (gid_t *)groups;
+           }
+       }
+      DEBUG(3,("%s is in %d groups\n",user,ngroups));
+      for (i=0;i<ngroups;i++)
+        DEBUG(3,("%d ",igroups[i]));
+      DEBUG(3,("\n"));
+    }
+  return 0;
+}
+
+
 /****************************************************************************
 register a uid/name pair as being valid and that a valid password
 has been given. vuid is biased by an offset. This allows us to
index 7bce748878e232ce41394c317fd43b846d18a351..3c54f388fec61603ff642c4ebee432bc45c2c946 100644 (file)
@@ -3300,89 +3300,6 @@ static int sig_hup()
   return(0);
 }
 
-/****************************************************************************
-Setup the groups a user belongs to.
-****************************************************************************/
-int setup_groups(char *user, int uid, int gid, int *p_ngroups, 
-                int **p_igroups, gid_t **p_groups,
-         int **p_attrs)
-{
-  if (-1 == initgroups(user,gid))
-    {
-      if (getuid() == 0)
-       {
-         DEBUG(0,("Unable to initgroups!\n"));
-         if (gid < 0 || gid > 16000 || uid < 0 || uid > 16000)
-           DEBUG(0,("This is probably a problem with the account %s\n",user));
-       }
-    }
-  else
-    {
-      int i,ngroups;
-      int *igroups;
-      int *attrs;
-      gid_t grp = 0;
-      ngroups = getgroups(0,&grp);
-      if (ngroups <= 0)
-        ngroups = 32;
-      igroups = (int *)malloc(sizeof(int)*ngroups);
-      attrs   = (int *)malloc(sizeof(int)*ngroups);
-      for (i=0;i<ngroups;i++)
-      {
-        attrs  [i] = 0x7; /* XXXX don't know what NT user attributes are yet! */
-        igroups[i] = 0x42424242;
-      }
-      ngroups = getgroups(ngroups,(gid_t *)igroups);
-
-      if (igroups[0] == 0x42424242)
-        ngroups = 0;
-
-      *p_ngroups = ngroups;
-      *p_attrs   = attrs;
-
-      /* The following bit of code is very strange. It is due to the
-         fact that some OSes use int* and some use gid_t* for
-         getgroups, and some (like SunOS) use both, one in prototypes,
-         and one in man pages and the actual code. Thus we detect it
-         dynamically using some very ugly code */
-      if (ngroups > 0)
-        {
-         /* does getgroups return ints or gid_t ?? */
-         static BOOL groups_use_ints = True;
-
-         if (groups_use_ints && 
-             ngroups == 1 && 
-             SVAL(igroups,2) == 0x4242)
-           groups_use_ints = False;
-         
-          for (i=0;groups_use_ints && i<ngroups;i++)
-            if (igroups[i] == 0x42424242)
-             groups_use_ints = False;
-             
-          if (groups_use_ints)
-          {
-             *p_igroups = igroups;
-             *p_groups = (gid_t *)igroups;       
-          }
-          else
-          {
-             gid_t *groups = (gid_t *)igroups;
-             igroups = (int *)malloc(sizeof(int)*ngroups);
-             for (i=0;i<ngroups;i++)
-          {
-               igroups[i] = groups[i];
-          }
-             *p_igroups = igroups;
-             *p_groups = (gid_t *)groups;
-           }
-       }
-      DEBUG(3,("%s is in %d groups\n",user,ngroups));
-      for (i=0;i<ngroups;i++)
-        DEBUG(3,("%d ",igroups[i]));
-      DEBUG(3,("\n"));
-    }
-  return 0;
-}
 
 /****************************************************************************
   make a connection to a service