PHP Class Passwd

Just for fun, I wrote a short simple class to parse the Linux “passwd” file. The class has functions to return the content in either html or text for the command line. The difference being one has “<br />” statements and the other has “\n” for new lines. The class also contains a function to search for a user, and a function to delete a user.

/**
 * Class is used to read, search, and manipulate linux passwd file.
 *
 * @author  Tully Rankin
 * @website www.tullyrankin.com
 */
class ReadPasswd {
    private $file;
    private $fileData;
    private $error;

    /*
     * Initialize the class and add contents of
     * the password file into the variable file.
     */
    function __construct($file) {
        try{
            if (is_file($file))
            {
                $this->fileData = file($file);
                $this->file = $file;
            }
            else
            {
                throw new Exception(“Couldn’t open file.”);
            }
        } catch (Exception $e) {
            $this->error[] = $e->getMessage();
        }
    }
   
    /*
     * Returns string of all rows of data from the passwd file.
     * Use this file if your trying to display in the browser.
     *
     * @type Public
     * @return String
     */
    public function getAllHTML() {
        foreach ($this->fileData as $content)
        {
            $temp = explode(‘:’, $content);
            $output .= “<b>Username:  {$temp[0]} </b><br />”;
            $output .= “Validation: {$temp[1]} <br />”;
            $output .= “User Identifier: {$temp[2]} <br />”;
            $output .= “Group Identifier: {$temp[3]} <br />”;
            $output .= “Gecos Field: {$temp[4]} <br />”;
            $output .= “Home Directory: {$temp[5]} <br />”;
            $output .= “Shell: {$temp[6]} <br />”;
            $output .= “<br />”;
        }
        return $output;
    }
   
    /*
     * Returns string of all rows of data from the passwd file. This is
     * used if running the command from the command line.
     *
     * @type Public
     * @return String
     */
    public function getAllCLI() {
        foreach ($this->fileData as $content)
        {
            $temp = explode(‘:’, $content);
            $output .= “Username: {$temp[0]} \n”;
            $output .= “Validation: {$temp[1]} \n”;
            $output .= “User Identifier: {$temp[2]} \n”;
            $output .= “Group Identifier: {$temp[3]} \n”;
            $output .= “Gecos Field: {$temp[4]} \n”;
            $output .= “Home Directory: {$temp[5]} \n”;
            $output .= “Shell: {$temp[6]} \n”;
            $output .= “\n”;
        }
        return $output;
    }
   
    /*
     * Searches for a user. Will return an array with
     * the users credentials unless the second param is set.
     * If true is set on the second parameter then the function
     * will withold add the the user information to the returned array.
     *
     * @type Public
     * @params String, Boolean
     * @return Array
     */
    public function searchUser($user,$data=0) {
        try{
            $data = array();
            if (is_string($user))
            {
                foreach($this->fileData as $line)
                {
                    $temp = explode(‘:’, $line);
                    if (in_array($user,$temp))
                    {
                        if ($data) return 1;
                        $data['username'] = $temp[0];
                        $data['validation'] = $temp[1];
                        $data['user_identifier'] = $temp[2];
                        $data['group_identifier'] = $temp[3];
                        $data['gecos'] = $temp[4];
                        $data['home_directory'] = $temp[5];
                        $data['shell'] = $temp[6];
                    }
         &
nbsp;      }
            }
            else
            {
                throw new Exception(‘A search error has occured.’);
            }
        } catch (Exception $e) {
            $this->error[] = $e->getMessage();
        }
    return $data;
    }
   
    /*
     * Getter for Error Exception Array
     * @type Public
     * @return Array
     */
    public function getError() {
        return $this->error;
    }
   
    /*
     * Removes user from passwd file
     * @type public
     * @return Boolean
     */
    public function deleteUser($user) {
        try{
            if ($this->searchUser($user,1))
            {
                foreach ($this->fileData as $line)
                {
                    $lines = explode(“:”,$line);
                    if (!in_array($user,$lines))
                    {
                        $final .= $line;
                    }
                }
                if(!file_put_contents($this->file,$final))
                {
                    throw new Exception(“Could not delete user.”);
                }
            }
            else
            {
                throw new Exception(“User doesn’t exist.”);
            }
        } catch (Exception $e) {
            echo $this->error[] = $e->getMessage();
        }
    }   
}