Description

The sys-admin package is a unified, cross platform replacement for the
Etc module.

Installation

rake test (optional)
rake install

Synopsis

require 'sys/admin'
include Sys

# Yields a User object for each user
Admin.users{ |user|
   p user
}

# Returns an Array of User objects
a = Admin.users

# Yields a Group object for each group
Admin.groups{ |group|
   p group
}

# Returns an Array of Group objects
g = Admin.groups

# Get information about a particular user
p Admin.get_user("nobody")

# Get information about a particular group
p Admin.get_group("adm")

Admin

Admin.get_login

Returns the user name (only) of the current login.

Admin.get_user(name, host=localhost) Admin.get_user(uid, host=localhost, local=true)

Returns a User object based on +name+ or +uid+.

Windows only: you may specify a host from which information is retrieved.
The default is the local machine.  You may also specify whether to
retrieve a local or global account.  The default is local.

Admin.get_group(name, host=localhost, local=true) Admin.get_group(gid, host=localhost, local=true)

Returns a Group object based on +name+ or +uid+.

Windows only: you may specify a host from which information is retrieved.
The default is the local machine.  You can retrieve either a global or
local group, depending on the value of the +local+ argument.

Admin.groups(host=localhost, local=true) Admin.groups(host=localhost, local=true){ |group| … }

In block form, yields a Group object for each user on the system.  In
non-block form, returns an Array of Group objects.

Windows only: you may specify a host from which information is retrieved.
The default is the local machine.  You can retrieve either a global or
local group, depending on the value of the +local+ argument.

Admin.users(host=localhost, local=true) Admin.users(host=localhost, local=true){ |user| … }

In block form, yields a User object for each user on the system.  In
non-block form, returns an Array of User objects.

Windows only: you may specify a host from which information is retrieved.
The default is the local machine.  You can retrieve either a global or
local group, depending on the value of the +local+ argument.

User class

User (Windows)

The User class has the following attributes on MS Windows systems:

* account_type
* caption
* description
* domain
* password
* full_name
* install_date
* name
* sid
* status
* disabled?
* local?
* lockout?
* password_changeable?
* password_expires?
* password_required?

User (Unix)

The User class has the following attributes on Unix systems:

* name
* passwd
* uid
* gid
* dir
* shell
* gecos
* quota
* age
* class
* comment
* change
* expire

Group Classes

Group (Windows)

The Group class has the following attributes on MS Windows systems:

* caption
* description
* domain
* install_date
* name
* sid
* status
* gid
* local?

Group (Unix)

The Group class has the following attributes on Unix systems:

* name
* gid
* members
* passwd

Error Classes

Admin::Error < StandardError

Raised if anything goes wrong with any of the above methods.

Developer’s Notes

MS Windows

The Windows version now uses a win32ole + WMI approach to getting
information.  This means that the WMI service must be running on the
target machine in order to work (which it is, by default).

Note that, by default, local user and group information is retrieved
instead of global.  You probably do NOT want to iterate over global users
or groups because there can be quite a few on your domain.

UNIX

The underlying implementation is similar to core Ruby's Etc implementation.
But, in addition to the different interface, I use the re-entrant version
of the appropriate functions when available.

Future Plans

Add the following methods for UNIX:

* Admin.add_local_user
* Admin.config_local_user
* Admin.delete_local_user
* Admin.add_global_user
* Admin.config_global_user
* Admin.delete_global_user

* Admin.add_local_group
* Admin.config_local_group
* Admin.delete_local_group
* Admin.add_global_group
* Admin.config_global_group
* Admin.delete_global_group

Make the User and Group objects comparable.

Known Bugs

None that I'm aware of. If you find any, please log them on the project
page at http://www.rubyforge.org/projects/sysutils.

License

Ruby's
(C) 2005-2008, Daniel J. Berger
All Rights Reserved

Author

Daniel J. Berger
djberg96 at nospam at gmail dot com
IRC nickname: imperator/mok/rubyhacker1 (freenode)