[evolvis-commits] r11611: Refactored usergroup.php cronjob and splitted in two ( created homedirs.php cronjob) ↵

mirabilos at evolvis.org mirabilos at evolvis.org
Thu Feb 24 18:20:18 CET 2011


Author: mirabilos
Date: 2011-02-24 18:20:18 +0100 (Thu, 24 Feb 2011)
New Revision: 11611

Added:
   trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/homedirs.php
Modified:
   trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/crontab.in
   trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/usergroup.php
Log:
Refactored usergroup.php cronjob and splitted in two (created homedirs.php cronjob)


Modified: trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/crontab.in
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/crontab.in	2011-02-24 17:20:17 UTC (rev 11610)
+++ trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/crontab.in	2011-02-24 17:20:18 UTC (rev 11611)
@@ -3,6 +3,10 @@
 #
 10 * * * * $PHP $GFORGE/plugins/scmcvs/cronjobs/usergroup.php
 #
+#       Create the user and group home directories
+#
+25 * * * * $PHP $GFORGE/plugins/scmcvs/cronjobs/homedirs.php
+#
 #       Upload the SSH key files
 #
 15 * * * * $PHP $GFORGE/plugins/scmcvs/cronjobs/ssh_create.php

Added: trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/homedirs.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/homedirs.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/homedirs.php	2011-02-24 17:20:18 UTC (rev 11611)
@@ -0,0 +1,187 @@
+<?php
+/**
+ * GForge Cron Job
+ *
+ * The rest Copyright 2002-2005 (c) GForge Team
+ * http://gforge.org/
+ *
+ * @version   $Id$
+ *
+ * This file is part of GForge.
+ *
+ * GForge 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.
+ *
+ * GForge 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 GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+This file creates blank user home directories and 
+creates a group home directory with a template in it.
+
+#
+# * hosts
+#
+<VirtualHost 192.168.1.5>
+	ServerName gforge.company.com
+	ServerAlias *.gforge.company.com
+	VirtualDocumentRoot /home/groups/%1/htdocs
+	VirtualScriptAlias /home/groups/%1/cgi-bin
+
+	<Directory /home/groups>
+		Options Indexes FollowSymlinks
+		AllowOverride All
+		order allow,deny
+		allow from all
+
+	</Directory>
+	LogFormat "%h %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" gforge
+	CustomLog "|/usr/local/sbin/cronolog /home/groups/%1/logs/%Y/%m/%d/gforge.log" gforge
+	# Ensure that we don't try to use SSL on SSL Servers
+	<IfModule apache_ssl.c>
+		SSLDisable
+	</IfModule>
+</VirtualHost> 
+*/
+require_once('squal_pre.php');
+require ('common/include/cron_utils.php');
+
+define('USER_DEFAULT_GROUP','users');
+
+if (!isset($groupdir_prefix)) {		// this should be set in local.inc
+	$groupdir_prefix = '/home/groups';
+}
+
+if (!is_dir($groupdir_prefix)) {
+	@mkdir($groupdir_prefix);
+}
+
+$res = db_query("SELECT distinct users.user_name,users.unix_pw,users.user_id
+	FROM users,user_group,groups
+	WHERE users.user_id=user_group.user_id 
+	AND user_group.group_id=groups.group_id
+	AND groups.status='A'
+	AND user_group.cvs_flags IN ('0','1')
+	AND users.status='A'
+	ORDER BY user_id ASC");
+$err .= db_error();
+$users    =& util_result_column_to_array($res,'user_name');
+
+$group_res = db_query("SELECT unix_group_name, (is_public=1 AND enable_anonscm=1 AND type_id=1) AS enable_pserver FROM groups WHERE status='A' AND type_id='1'");
+$err .= db_error();
+$groups = util_result_column_to_array($group_res,'unix_group_name');
+
+
+//
+//	this is where we give a user a home
+//
+foreach($users as $user) {
+	if (is_dir("/home/".$user)) {
+		
+	} else {
+		@mkdir("/home/".$user);
+	}
+	system("chown $user:".USER_DEFAULT_GROUP." /home/".$user);
+}
+
+
+//
+//	Create home dir for groups
+//
+foreach($groups as $group) {
+
+	//create an FTP upload dir for this project
+	if ($sys_use_ftpuploads) { 
+		if (!is_dir($sys_ftp_upload_dir.'/'.$group)) {
+			@mkdir($sys_ftp_upload_dir.'/'.$group); 
+		}
+	}
+
+	if (is_dir($groupdir_prefix."/".$group)) {
+
+	} else {
+		@mkdir($groupdir_prefix."/".$group);
+		@mkdir($groupdir_prefix."/".$group."/htdocs");
+		@mkdir($groupdir_prefix."/".$group."/cgi-bin");
+		$g =& group_get_object_by_name($group);
+		
+
+		//
+		//	Read in the template file
+		//
+		$fo=fopen(dirname(__FILE__).'/default_page.php','r');
+		$contents = '';
+		if (!$fo) {
+			$err .= 'Default Page Not Found';
+		} else {
+			while (!feof($fo)) {
+    			$contents .= fread($fo, 8192);
+			}
+			fclose($fo);
+		}
+		//
+		//	Change some defaults in the template file
+		//
+		//$contents=str_replace('<domain>',$sys_default_domain,$contents);
+		//$contents=str_replace('<project_description>',$g->getDescription(),$contents);
+		//$contents=str_replace('<project_name>',$g->getPublicName(),$contents);
+		//$contents=str_replace('<group_id>',$g->getID(),$contents);
+		//$contents=str_replace('<group_name>',$g->getUnixName(),$contents);
+
+		//
+		//	Write the file back out to the project home dir
+		//
+		$fw=fopen($groupdir_prefix."/".$group."/htdocs/index.php",'w');
+		fwrite($fw,$contents);
+		fclose($fw);
+		
+	}
+	/*$resgroupadmin=db_query("SELECT u.user_name FROM users u,user_group ug,groups g
+		WHERE u.user_id=ug.user_id 
+		AND ug.group_id=g.group_id 
+		AND g.unix_group_name='$group'
+		AND ug.admin_flags='A'
+		AND u.status='A'");
+	if (!$resgroupadmin || db_numrows($resgroupadmin) < 1) {
+		//group has no members, so cannot create dir
+	} else {
+		$user=db_result($resgroupadmin,0,'user_name');
+		system("chown -R $user:$group $groupdir_prefix/$group");
+	}*/
+	system("chown -R $sys_apache_user:$sys_apache_group $groupdir_prefix/$group");
+}
+
+//
+// Move CVS trees for deleted groups
+//
+$res8 = db_query("SELECT unix_group_name FROM deleted_groups WHERE isdeleted = 0;");
+$err .= db_error();
+$rows	 = db_numrows($res8);
+for($k = 0; $k < $rows; $k++) {
+	$deleted_group_name = db_result($res8,$k,'unix_group_name');
+
+	if(!is_dir($cvsdir_prefix."/.deleted"))
+		system("mkdir ".$cvsdir_prefix."/.deleted");
+		
+	system("mv -f $cvsdir_prefix/$deleted_group_name/ $cvsdir_prefix/.deleted/");
+	system("chown -R root:root $cvsdir_prefix/.deleted/$deleted_group_name");
+	system("chmod -R o-rwx $cvsdir_prefix/.deleted/$deleted_group_name");
+	
+	
+	$res9 = db_query("UPDATE deleted_groups set isdeleted = 1 WHERE unix_group_name = '$deleted_group_name';" );
+	$err .= db_error();
+}
+
+
+cron_entry(25,$err);
+
+?>


Property changes on: trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/homedirs.php
___________________________________________________________________
Added: svn:executable
   + *

Modified: trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/usergroup.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/usergroup.php	2011-02-24 17:20:17 UTC (rev 11610)
+++ trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmcvs/cronjobs/usergroup.php	2011-02-24 17:20:18 UTC (rev 11611)
@@ -26,47 +26,8 @@
  */
 
 /*
-
-NOTE - THIS SQL CAN BE USED ON A SEPARATED CVS SERVER TO GRANT ONLY THE NECESSARY PERMS
-
-
-CREATE USER cvsuser WITH ENCRYPTED PASSWORD 'password';
-
-GRANT SELECT ON groups, plugins, group_plugin, users, user_group, deleted_groups TO cvsuser;
-GRANT INSERT, UPDATE ON deleted_groups TO cvsuser;
-GRANT ALL ON stats_cvs_group, stats_cvs_user TO cvsuser;
-
-*/
-
-/*
-
 This file creates user / group permissions by editing 
 the /etc/passwd /etc/shadow and /etc/group files
-
-It also creates blank user home directories and 
-creates a group home directory with a template in it.
-
-#
-# * hosts
-#
-<VirtualHost 192.168.1.5>
-ServerName gforge.company.com
-ServerAlias *.gforge.company.com
-VirtualDocumentRoot /home/groups/%1/htdocs
-VirtualScriptAlias /home/groups/%1/cgi-bin
-<Directory /home/groups>
-Options Indexes FollowSymlinks
-AllowOverride All
-order allow,deny
-allow from all
-</Directory>
-LogFormat "%h %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" gforge
-CustomLog "|/usr/local/sbin/cronolog /home/groups/%1/logs/%Y/%m/%d/gforge.log" gforge
-# Ensure that we don't try to use SSL on SSL Servers
- <IfModule apache_ssl.c>
- SSLDisable
- </IfModule>
-</VirtualHost> 
 */
 require_once('squal_pre.php');
 require ('common/include/cron_utils.php');
@@ -75,26 +36,8 @@
 //	Default values for the script
 //
 define('DEFAULT_SHELL','/bin/cvssh.pl'); //use /bin/grap for cvs-only
-define('USER_ID_ADD',10000);
-define('GROUP_ID_ADD',50000);
-define('USER_DEFAULT_GROUP','users');
 define('FILE_EXTENSION','.new'); // use .new when testing
 
-if (!file_exists('/etc/passwd.org')) {
-	echo "passwd.org missing";
-	exit;
-}
-
-if (!file_exists('/etc/shadow.org')) {
-	echo "shadow.org missing";
-	exit;
-}
-
-if (!file_exists('/etc/group.org')) {
-	echo "group.org missing";
-	exit;
-}
-
 if (util_is_root_dir($groupdir_prefix)) {
 	$err .=  "Error! groupdir_prefix Points To Root Directory!";
 	echo $err;
@@ -106,299 +49,231 @@
 //	Get the users' unix_name and password out of the database
 //   ONLY USERS WITH CVS READ AND COMMIT PRIVS ARE ADDED
 //
-$res = db_query("SELECT distinct users.user_name,users.unix_pw,users.user_id 
+$res = db_query("SELECT distinct users.user_name,users.unix_pw,users.unix_uid,users.unix_gid,users.user_id
 	FROM users,user_group,groups
 	WHERE users.user_id=user_group.user_id 
 	AND user_group.group_id=groups.group_id
 	AND groups.status='A'
 	AND user_group.cvs_flags IN ('0','1')
 	AND users.status='A'
-	ORDER BY user_id ASC");
+	ORDER BY users.user_id ASC");
+$err .= db_error();
 
-$users    =& util_result_column_to_array($res,'user_name');
-$user_ids =& util_result_column_to_array($res,'user_id');
+$gforge_users    =& util_result_column_to_array($res,'user_name');
+$user_unix_uids =& util_result_column_to_array($res,'unix_uid');
+$user_unix_gids =& util_result_column_to_array($res,'unix_gid');
 $user_pws =& util_result_column_to_array($res,'unix_pw');
 
-//
-//	Get anonymous pserver users
-//
-$res7=db_query("SELECT unix_group_name FROM groups WHERE status='A' AND is_public='1' AND enable_anonscm='1' AND type_id='1';");
-$err .= db_error();
-$rows = db_numrows($res7);
-for($k = 0; $k < $rows; $k++) {
-	$pserver_anon[db_result($res7,$k,'unix_group_name')]=',anonymous';
-}
+// Create the entries for the GForge users
+$gforge_lines = array();
 
-//
-//	Read in the "default" users
-//
-$h = fopen("/etc/passwd.org","r");
-$passwdcontents = fread($h,filesize("/etc/passwd.org"));
-fclose($h);
-$passwdlines = explode("\n",$passwdcontents);
+// user description is something like "MyGForge user"
+$user_description = preg_replace('/[^[:alnum:] -_]/', '', $sys_name);
+$user_description .= " user";
 
-//
-//	Write the "default" users to a temp file
-//
-$h2 = fopen("/etc/passwd".FILE_EXTENSION,"w");
-for($k = 0; $k < count($passwdlines); $k++) {
-	$passwdline = explode(":",$passwdlines[$k]);
-	$def_users[$passwdline[0]]=1;
-	fwrite($h2,$passwdlines[$k]."\n");
+for ($i=0; $i < count($gforge_users); $i++) {
+	$username = $gforge_users[$i];
+	$user_unix_uid = $user_unix_uids[$i];
+	$user_unix_gid = $user_unix_gids[$i];
+	$shell = DEFAULT_SHELL;
+	$unix_passwd = $user_pws[$i];
+	
+	$line_passwd =	$username.":x:".$user_unix_uid.":".$user_unix_gid.":".
+					$user_description.":/home/".$username.":".$shell;
+	$line_shadow = $username.":".$unix_passwd.":12090:0:99999:7:::";
+	
+	$gforge_lines_passwd[] = $line_passwd;
+	$gforge_lines_shadow[] = $line_shadow;
+	
 }
 
-//
-//	Now append the users from the gforge database
-//
-for($i = 0; $i < count($users); $i++) {
+/*************************************************************************
+ * Step 1: Process /etc/passwd
+ *************************************************************************/
 
-	if ($def_users[$users[$i]]) {
+// Read the passwd file line by line
+$passwd_orig = file("/etc/passwd", "r");
 
-		//this username was already existing in the "default" file
-
+// Now write the file with the gforge users at the end
+$passwd = fopen("/etc/passwd".FILE_EXTENSION, "w");
+$etc_users = array();
+for ($i=0; $i < count($passwd_orig); $i++) {
+	$line = trim($passwd_orig[$i]);
+	// Skip the GForge users (will be written later)
+	if (preg_match("/^[[:blank:]]*#GFORGEBEGIN/", $line)) {
+		do {
+			$i++;
+			$line = trim($passwd_orig[$i]);
+		} while ($i < count($passwd_orig) && !preg_match("/^[[:blank:]]*#GFORGEEND/", $line));
+		
+		// Got to end of file (shouldn't happen, means #GFORGEEND wasn't found on file
+		if ($i >= (count($passwd_orig)-1)) break;
+		
+		// read next line
+		$i++;
+		$line = trim($passwd_orig[$i]);
+	}
+	
+	$entries = explode(":", $line);
+	if (!empty($entries[0])) {
+		$username = $entries[0];
+		$etc_users[] = $username;		// this is currently not used, but it may be used in the future
+		if (!in_array($username, $gforge_users)) {
+			// write the user only if it's not a gforge user
+			fwrite($passwd, $line."\n");
+		}
 	} else {
-
-		$line = $users[$i] . ":x:" . ($user_ids[$i] + USER_ID_ADD) . ":" . 
-			($user_ids[$i] + USER_ID_ADD) . "::/home/$users[$i]:".DEFAULT_SHELL."\n";
-		fwrite($h2,$line);
-
+		// blank line or comment
+		fwrite($passwd, $line."\n");
 	}
-
 }
-fclose($h2);
 
+/*************************************************************************
+ * Step 2: Process /etc/shadow
+ *************************************************************************/
 
+// Read the shadow file line by line
+$passwd_orig = file("/etc/shadow", "r");
 
-//
-//	this is where we add users to /etc/shadow
-//
-$h3 = fopen("/etc/shadow.org","r");
-$shadowcontents = fread($h3,filesize("/etc/shadow.org"));
-fclose($h3);
-$shadowlines = explode("\n",$shadowcontents);
-
-//
-//	Write the "default" shadow to a temp file
-//
-$h4 = fopen("/etc/shadow".FILE_EXTENSION,"w");
-for($k = 0; $k < count($shadowlines); $k++) {
-    $shadowline = explode(":",$shadowlines[$k]);
-    $def_shadow[$shadowline[0]]=1;
-    fwrite($h4,$shadowlines[$k]."\n");
+// Now write the file with the gforge users at the end
+$shadow = fopen("/etc/shadow".FILE_EXTENSION, "w");
+for ($i=0; $i < count($passwd_orig); $i++) {
+	$line = trim($passwd_orig[$i]);
+	// Skip the GForge users (will be written later)
+	if (preg_match("/^[[:blank:]]*#GFORGEBEGIN/", $line)) {
+		do {
+			$i++;
+			$line = trim($passwd_orig[$i]);
+		} while ($i < count($passwd_orig) && !preg_match("/^[[:blank:]]*#GFORGEEND/", $line));
+		
+		// Got to end of file (shouldn't happen, means #GFORGEEND wasn't found on file
+		if ($i >= (count($passwd_orig)-1)) break;
+		
+		// read next line
+		$i++;
+		$line = trim($passwd_orig[$i]);
+	}
+	
+	$entries = explode(":", $line);
+	if (!empty($entries[0])) {
+		$username = $entries[0];
+		if (!in_array($username, $gforge_users)) {
+			// write the user only if it's not a gforge user
+			fwrite($shadow, $line."\n");
+		}
+	} else {
+		// blank line or comment
+		fwrite($shadow, $line."\n");
+	}
 }
 
-//
-//  Now append the users from the gforge database
-//
-for($i = 0; $i < count($users); $i++) {
 
-    if ($def_shadow[$users[$i]]) {
+/*************************************************************************
+ * Step 3: Write the GForge users to /etc/passwd and /etc/shadow
+ *************************************************************************/
 
-	//this username was already existing in the "default" file
-
-    } else {
-
-		$line = $users[$i] . ":" . $user_pws[$i] . ":12090:0:99999:7:::\n";
-		fwrite($h4,$line);
-
-	}
-
+// now write the GForge users
+fwrite($passwd, "#GFORGEBEGIN\n");
+fwrite($shadow, "#GFORGEBEGIN\n");
+assert(count($gforge_lines_passwd) == count($gforge_lines_shadow));
+for ($i=0; $i < count($gforge_lines_passwd); $i++) {
+	$line_passwd = $gforge_lines_passwd[$i];
+	$line_shadow = $gforge_lines_shadow[$i];
+	
+	fwrite($passwd, $line_passwd."\n");
+	fwrite($shadow, $line_shadow."\n");
 }
+fwrite($passwd, "#GFORGEEND\n");
+fwrite($shadow, "#GFORGEEND\n");
 
-fclose($h4);
 
-//
-//	Read the groups from the "default" file
-//
-$h5 = fopen("/etc/group.org","r");
-$groupcontents = fread($h5,filesize("/etc/group.org"));
-fclose($h5);
-$grouplines = explode("\n",$groupcontents);
+fclose($passwd);
+fclose($shadow);
 
-//
-//	Write the "default" groups to a temp file
-//
-$h6 = fopen("/etc/group".FILE_EXTENSION,"w");
-for($k = 0; $k < count($grouplines); $k++) {
-    $groupline = explode(":",$grouplines[$k]);
-    $def_group[$groupline[0]]=1;
-    fwrite($h6,$grouplines[$k]."\n");
-}
+/*************************************************************************
+ * Step 4: Parse /etc/group
+ *************************************************************************/
+$group_orig = file("/etc/group");
+$group = fopen("/etc/group".FILE_EXTENSION, "w");
 
-//
 //	Add the groups from the gforge database
-//
-$group_res=db_query("SELECT group_id,unix_group_name FROM groups WHERE status='A' AND type_id='1'");
+$group_res = db_query("SELECT group_id, unix_group_name, unix_gid, (is_public=1 AND enable_anonscm=1 AND type_id=1) AS enable_pserver FROM groups WHERE status='A' AND type_id='1'");
+$err .= db_error();
 for($i = 0; $i < db_numrows($group_res); $i++) {
-    $groups[] = db_result($group_res,$i,'unix_group_name');
-    $gids[db_result($group_res,$i,'unix_group_name')]=db_result($group_res,$i,'group_id')+GROUP_ID_ADD;
+    $gforge_groups[] = db_result($group_res,$i,'unix_group_name');
+    $gids[db_result($group_res,$i,'unix_group_name')] = db_result($group_res,$i,'unix_gid');
 }
 
-for($i = 0; $i < count($groups); $i++) {
-
-	if ($def_group[$groups[$i]]) {
-
-		//this groupname was already existing in the "default" file
-
-	} else {
-
-		$line = $groups[$i] . ":x:" . ($gids[$groups[$i]]) . ":";
-
-
-		/* we need to get the project object to check if a project
-		 * has a private CVS repository - in which case we need to add
-		 * the apache user to the group so that ViewCVS can be used
-		 */
-		 
-		$gid = db_result($group_res, $i, 'group_id');
-		$project = &group_get_object($gid);
+for ($i=0; $i < count($group_orig); $i++) {
+	$line = trim($group_orig[$i]);
+	// Skip the GForge groups (will be written later)
+	if (preg_match("/^[[:blank:]]*#GFORGEBEGIN/", $line)) {
+		do {
+			$i++;
+			$line = trim($passwd_orig[$i]);
+		} while ($i < count($passwd_orig) && !preg_match("/^[:blank:]*#GFORGEEND/", $line));
 		
-		$resusers=db_query("SELECT user_name 
-			FROM users,user_group,groups 
-			WHERE groups.group_id=user_group.group_id 
-			AND users.user_id=user_group.user_id
-			AND user_group.cvs_flags IN ('0','1')
-			AND users.status='A'
-			AND groups.unix_group_name='$groups[$i]'");
-			
-		$gmembers =& util_result_column_to_array($resusers,'user_name');
+		// Got to end of file (shouldn't happen, means #GFORGEEND wasn't found on file
+		if ($i >= (count($passwd_orig)-1)) break;
 		
-		$group_name = $groups[$i];
-		if (!($project->enableAnonSCM())) {
-			if (!$gmembers) {
-				//if there´s not a user in $gmembers, remove the initial "," from pserver_anon
-				if ($pserver_anon[$groups[$i]]) {
-					$this_anon = ltrim($pserver_anon[$groups[$i]],",");
-					$line .= $this_anon . "," . $sys_apache_user . "\n";
-				} else {
-					$line .= $sys_apache_user . "\n"; // only the apache user then?
-				}
-			} else {
-				$line .= implode(',',$gmembers) . $pserver_anon[$groups[$i]] . "," . $sys_apache_user . "\n";
-			}
-		} else {
-			if (!$gmembers) {
-				//if there´s not a user in $gmembers, remove the initial "," from pserver_anon
-				if ($pserver_anon[$groups[$i]]) {
-					$this_anon = ltrim($pserver_anon[$groups[$i]],",");
-					$line .= $this_anon . "\n";
-				} else {
-					$line .= "\n"; //no users
-				}
-			} else {
-				$line .= implode(',',$gmembers) . $pserver_anon[$groups[$i]] . "\n";
-			}
-		}
-		
-		fwrite($h6, $line);
-
+		// read next line
+		$i++;
+		$line = trim($passwd_orig[$i]);
 	}
-
-}
-
-fclose($h6);
-
-//
-//	this is where we give a user a home
-//
-foreach($users as $user) {
-	if (is_dir("/home/".$user)) {
-		
+	
+	$entries = explode(":", $line);
+	if (!empty($entries[0])) {
+		$groupname = $entries[0];
+		if (!in_array($groupname, $gforge_groups)) {
+			// write the user only if it's not a gforge user
+			fwrite($group, $line."\n");
+		}
 	} else {
-		@mkdir("/home/".$user);
-//		system("chown $user:".USER_DEFAULT_GROUP." /home/".$user);
+		// blank line or comment
+		fwrite($group, $line."\n");
 	}
-	system("chown $user:".USER_DEFAULT_GROUP." /home/".$user);
 }
 
+// Now write the GForge groups
+fwrite($group, "#GFORGEBEGIN\n");
 
-//
-//	Create home dir for groups
-//
-foreach($groups as $group) {
+for ($i = 0; $i < count($gforge_groups); $i++) {
+	$group_name = $gforge_groups[$i];
+	$unix_gid = $gids[$group_name];
+	
+	$line = $group_name.":x:".$unix_gid.":";
+	
+	/* we need to get the project object to check if a project
+	 * has a private CVS repository - in which case we need to add
+	 * the apache user to the group so that ViewCVS can be used
+	 */
+	 
+	$group_id = db_result($group_res, $i, 'group_id');
+	$project = &group_get_object($group_id);
+	$enable_pserver = (db_result($group_res, $i, 'enable_pserver') == 't');	
 
-	//create an FTP upload dir for this project
-	if ($sys_use_ftpuploads) { 
-		if (!is_dir($sys_ftp_upload_dir.'/'.$group)) {
-			@mkdir($sys_ftp_upload_dir.'/'.$group); 
-		}
+	$resusers = db_query("SELECT user_name 
+		FROM users,user_group,groups 
+		WHERE groups.group_id=user_group.group_id 
+		AND users.user_id=user_group.user_id
+		AND user_group.cvs_flags IN ('0','1')
+		AND users.status='A'
+		AND groups.unix_group_name='".$group_name."'");
+	$gmembers = util_result_column_to_array($resusers,'user_name');
+	if ($enable_pserver) $gmembers[] = 'anonymous';
+	if (!$project->enableAnonSCM()) {
+		$gmembers[] = $sys_apache_user;
 	}
-
-	if (is_dir($groupdir_prefix."/".$group)) {
-
-	} else {
-		@mkdir($groupdir_prefix."/".$group);
-		@mkdir($groupdir_prefix."/".$group."/htdocs");
-		@mkdir($groupdir_prefix."/".$group."/cgi-bin");
-		$g =& group_get_object_by_name($group);
-		
-
-		//
-		//	Read in the template file
-		//
-		$fo=fopen('default_page.php','r');
-		$contents = '';
-		if (!$fo) {
-			$err .= 'Default Page Not Found';
-		} else {
-			while (!feof($fo)) {
-    			$contents .= fread($fo, 8192);
-			}
-			fclose($fo);
-		}
-		//
-		//	Change some defaults in the template file
-		//
-		//$contents=str_replace('<domain>',$sys_default_domain,$contents);
-		//$contents=str_replace('<project_description>',$g->getDescription(),$contents);
-		//$contents=str_replace('<project_name>',$g->getPublicName(),$contents);
-		//$contents=str_replace('<group_id>',$g->getID(),$contents);
-		//$contents=str_replace('<group_name>',$g->getUnixName(),$contents);
-
-		//
-		//	Write the file back out to the project home dir
-		//
-		$fw=fopen($groupdir_prefix."/".$group."/htdocs/index.php",'w');
-		fwrite($fw,$contents);
-		fclose($fw);
-		
-	}
-	/*$resgroupadmin=db_query("SELECT u.user_name FROM users u,user_group ug,groups g
-		WHERE u.user_id=ug.user_id 
-		AND ug.group_id=g.group_id 
-		AND g.unix_group_name='$group'
-		AND ug.admin_flags='A'
-		AND u.status='A'");
-	if (!$resgroupadmin || db_numrows($resgroupadmin) < 1) {
-		//group has no members, so cannot create dir
-	} else {
-		$user=db_result($resgroupadmin,0,'user_name');
-		system("chown -R $user:$group $groupdir_prefix/$group");
-	}*/
-	system("chown -R $sys_apache_user:$sys_apache_group $groupdir_prefix/$group");
-}
-
-//
-//	Move CVS trees for deleted groups
-//
-$res8=db_query("SELECT unix_group_name FROM deleted_groups WHERE isdeleted = 0;");
-$err .= db_error();
-$rows	 = db_numrows($res8);
-for($k = 0; $k < $rows; $k++) {
-	$deleted_group_name = db_result($res8,$k,'unix_group_name');
-
-	if(!is_dir($cvsdir_prefix."/.deleted"))
-		system("mkdir ".$cvsdir_prefix."/.deleted");
-		
-	system("mv -f $cvsdir_prefix/$deleted_group_name/ $cvsdir_prefix/.deleted/");
-	system("chown -R root:root $cvsdir_prefix/.deleted/$deleted_group_name");
-	system("chmod -R o-rwx $cvsdir_prefix/.deleted/$deleted_group_name");
 	
+	$line .= implode(',', $gmembers);
 	
-	$res9 = db_query("UPDATE deleted_groups set isdeleted = 1 WHERE unix_group_name = '$deleted_group_name';" );
-	$err .= db_error();
+	fwrite($group, $line."\n");
+		
 }
 
+fwrite($group, "#GFORGEEND\n");
+fclose($group);
+
 cron_entry(16,$err);
 
 ?>



More information about the evolvis-commits mailing list