Module: Etc
- Defined in:
- etc.c
Constant Summary collapse
- Passwd =
sPasswd
- Group =
sGroup
Class Method Summary collapse
-
.endgrent ⇒ Object
Ends the process of scanning through the /etc/group file begun by getgrent, and closes the file.
-
.endpwent ⇒ Object
Ends the process of scanning through the /etc/passwd file begun with getpwent, and closes the file.
-
.getgrent ⇒ Object
Returns an entry from the /etc/group file.
-
.getgrgid ⇒ Object
Returns information about the group with specified integer group id (gid), as found in /etc/group.
-
.getgrnam ⇒ Object
Returns information about the group with specified String name, as found in /etc/group.
-
.getlogin ⇒ Object
Returns the short user name of the currently logged in user.
-
.getpwent ⇒ Object
Returns an entry from the /etc/passwd file.
-
.getpwnam ⇒ Object
Returns the /etc/passwd information for the user with specified login name.
-
.getpwuid ⇒ Object
Returns the /etc/passwd information for the user with specified integer user id (uid).
-
.group ⇒ Object
Provides a convenient Ruby iterator which executes a block for each entry in the /etc/group file.
-
.passwd ⇒ Object
Provides a convenient Ruby iterator which executes a block for each entry in the /etc/passwd file.
-
.setgrent ⇒ Object
Resets the process of reading the /etc/group file, so that the next call to getgrent will return the first entry again.
-
.setpwent ⇒ Object
Resets the process of reading the /etc/passwd file, so that the next call to getpwent will return the first entry again.
-
.sysconfdir ⇒ Object
Returns system configuration directory.
-
.systmpdir ⇒ Object
Returns system temporary directory.
Class Method Details
.endgrent ⇒ Object
Ends the process of scanning through the /etc/group file begun by getgrent, and closes the file.
518 519 520 521 522 523 524 525 |
# File 'etc.c', line 518
static VALUE
etc_endgrent(VALUE obj)
{
#ifdef HAVE_GETGRENT
endgrent();
#endif
return Qnil;
}
|
.endpwent ⇒ Object
Ends the process of scanning through the /etc/passwd file begun with getpwent, and closes the file.
280 281 282 283 284 285 286 287 |
# File 'etc.c', line 280
static VALUE
etc_endpwent(VALUE obj)
{
#ifdef HAVE_GETPWENT
endpwent();
#endif
return Qnil;
}
|
.getgrent ⇒ Object
Returns an entry from the /etc/group file. The first time it is called it opens the file and returns the first entry; each successive call returns the next entry, or nil if the end of the file has been reached.
To close the file when processing is complete, call endgrent.
Each entry is returned as a Struct::Group:
-
Group#name contains the name of the group as a String.
-
Group#passwd contains the encrypted password as a String. An 'x' is returned if password access to the group is not available; an empty string is returned if no password is needed to obtain membership of the group.
-
Group#gid contains the group's numeric ID as an integer.
-
Group#mem is an Array of Strings containing the short login names of the members of the group.
547 548 549 550 551 552 553 554 555 556 557 558 |
# File 'etc.c', line 547
static VALUE
etc_getgrent(VALUE obj)
{
#ifdef HAVE_GETGRENT
struct group *gr;
if (gr = getgrent()) {
return setup_group(gr);
}
#endif
return Qnil;
}
|
.getgrgid ⇒ Object
Returns information about the group with specified integer group id (gid), as found in /etc/group.
The information is returned as a Struct::Group; see getgrent above for details.
e.g. Etc.getgrgid(100) -> #<struct Struct::Group name="users", passwd="x", gid=100, mem=["meta", "root"]>
361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 |
# File 'etc.c', line 361
static VALUE
etc_getgrgid(int argc, VALUE *argv, VALUE obj)
{
#ifdef HAVE_GETGRENT
VALUE id;
gid_t gid;
struct group *grp;
rb_secure(4);
if (rb_scan_args(argc, argv, "01", &id) == 1) {
gid = NUM2GIDT(id);
}
else {
gid = getgid();
}
grp = getgrgid(gid);
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", (int)gid);
return setup_group(grp);
#else
return Qnil;
#endif
}
|
.getgrnam ⇒ Object
Returns information about the group with specified String name, as found in /etc/group.
The information is returned as a Struct::Group; see getgrent above for details.
e.g. Etc.getgrnam('users') -> #<struct Struct::Group name="users", passwd="x", gid=100, mem=["meta", "root"]>
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 |
# File 'etc.c', line 394
static VALUE
etc_getgrnam(VALUE obj, VALUE nam)
{
#ifdef HAVE_GETGRENT
struct group *grp;
rb_secure(4);
SafeStringValue(nam);
grp = getgrnam(RSTRING_PTR(nam));
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %s", RSTRING_PTR(nam));
return setup_group(grp);
#else
return Qnil;
#endif
}
|
.getlogin ⇒ Object
Returns the short user name of the currently logged in user. Unfortunately, it is often rather easy to fool getlogin(). Avoid getlogin() for security-related purposes.
e.g.
Etc.getlogin -> 'guest'
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'etc.c', line 50
static VALUE
etc_getlogin(VALUE obj)
{
char *login;
rb_secure(4);
#ifdef HAVE_GETLOGIN
login = getlogin();
if (!login) login = getenv("USER");
#else
login = getenv("USER");
#endif
if (login)
return rb_tainted_str_new2(login);
return Qnil;
}
|
.getpwent ⇒ Object
Returns an entry from the /etc/passwd file. The first time it is called it opens the file and returns the first entry; each successive call returns the next entry, or nil if the end of the file has been reached.
To close the file when processing is complete, call endpwent.
Each entry is returned as a Struct::Passwd:
-
Passwd#name contains the short login name of the user as a String.
-
Passwd#passwd contains the encrypted password of the user as a String. an 'x' is returned if shadow passwords are in use. An '*' is returned if the user cannot log in using a password.
-
Passwd#uid contains the integer user ID (uid) of the user.
-
Passwd#gid contains the integer group ID (gid) of the user's primary group.
-
Passwd#gecos contains a longer String description of the user, such as a full name. Some Unix systems provide structured information in the gecos field, but this is system-dependent.
-
Passwd#dir contains the path to the home directory of the user as a String.
-
Passwd#shell contains the path to the login shell of the user as a String.
315 316 317 318 319 320 321 322 323 324 325 326 |
# File 'etc.c', line 315
static VALUE
etc_getpwent(VALUE obj)
{
#ifdef HAVE_GETPWENT
struct passwd *pw;
if (pw = getpwent()) {
return setup_passwd(pw);
}
#endif
return Qnil;
}
|
.getpwnam ⇒ Object
Returns the /etc/passwd information for the user with specified login name.
The information is returned as a Struct::Passwd; see getpwent above for details.
e.g. * Etc.getpwnam('root') -> #<struct Struct::Passwd name="root", passwd="x", uid=0, gid=0, gecos="root",dir="/root", shell="/bin/bash">
157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'etc.c', line 157
static VALUE
etc_getpwnam(VALUE obj, VALUE nam)
{
#ifdef HAVE_GETPWENT
struct passwd *pwd;
SafeStringValue(nam);
pwd = getpwnam(RSTRING_PTR(nam));
if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s", RSTRING_PTR(nam));
return setup_passwd(pwd);
#else
return Qnil;
#endif
}
|
.getpwuid ⇒ Object
Returns the /etc/passwd information for the user with specified integer user id (uid).
The information is returned as a Struct::Passwd; see getpwent above for details.
e.g. * Etc.getpwuid(0) -> #<struct Struct::Passwd name="root", passwd="x", uid=0, gid=0, gecos="root",dir="/root", shell="/bin/bash">
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'etc.c', line 126
static VALUE
etc_getpwuid(int argc, VALUE *argv, VALUE obj)
{
#if defined(HAVE_GETPWENT)
VALUE id;
rb_uid_t uid;
struct passwd *pwd;
rb_secure(4);
if (rb_scan_args(argc, argv, "01", &id) == 1) {
uid = NUM2UIDT(id);
}
else {
uid = getuid();
}
pwd = getpwuid(uid);
if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", (int)uid);
return setup_passwd(pwd);
#else
return Qnil;
#endif
}
|
.group ⇒ Object
Provides a convenient Ruby iterator which executes a block for each entry in the /etc/group file.
The code block is passed an Struct::Group struct; see getgrent above for details.
Example:
require 'etc'
Etc.group {|g|
puts g.name + ": " + g.mem.join(', ')
}
458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 |
# File 'etc.c', line 458
static VALUE
etc_group(VALUE obj)
{
#ifdef HAVE_GETGRENT
struct group *grp;
rb_secure(4);
if (rb_block_given_p()) {
each_group();
}
else if (grp = getgrent()) {
return setup_group(grp);
}
#endif
return Qnil;
}
|
.passwd ⇒ Object
Provides a convenient Ruby iterator which executes a block for each entry in the /etc/passwd file.
The code block is passed an Struct::Passwd struct; see getpwent above for details.
Example:
require 'etc'
Etc.passwd {|u|
puts u.name + " = " + u.gecos
}
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'etc.c', line 220
static VALUE
etc_passwd(VALUE obj)
{
#ifdef HAVE_GETPWENT
struct passwd *pw;
rb_secure(4);
if (rb_block_given_p()) {
each_passwd();
}
else if (pw = getpwent()) {
return setup_passwd(pw);
}
#endif
return Qnil;
}
|
.setgrent ⇒ Object
Resets the process of reading the /etc/group file, so that the next call to getgrent will return the first entry again.
506 507 508 509 510 511 512 513 |
# File 'etc.c', line 506
static VALUE
etc_setgrent(VALUE obj)
{
#ifdef HAVE_GETGRENT
setgrent();
#endif
return Qnil;
}
|
.setpwent ⇒ Object
Resets the process of reading the /etc/passwd file, so that the next call to getpwent will return the first entry again.
268 269 270 271 272 273 274 275 |
# File 'etc.c', line 268
static VALUE
etc_setpwent(VALUE obj)
{
#ifdef HAVE_GETPWENT
setpwent();
#endif
return Qnil;
}
|
.sysconfdir ⇒ Object
Returns system configuration directory.
571 572 573 574 575 576 577 578 579 |
# File 'etc.c', line 571
static VALUE
etc_sysconfdir(VALUE obj)
{
#ifdef _WIN32
return rb_w32_special_folder(CSIDL_COMMON_APPDATA);
#else
return rb_filesystem_str_new_cstr(SYSCONFDIR);
#endif
}
|
.systmpdir ⇒ Object
Returns system temporary directory.
584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 |
# File 'etc.c', line 584
static VALUE
etc_systmpdir(void)
{
VALUE tmpdir;
#ifdef _WIN32
WCHAR path[_MAX_PATH];
UINT len = rb_w32_system_tmpdir(path, numberof(path));
if (!len) return Qnil;
tmpdir = rb_w32_conv_from_wchar(path, rb_filesystem_encoding());
#else
tmpdir = rb_filesystem_str_new_cstr("/tmp");
#endif
FL_UNSET(tmpdir, FL_TAINT|FL_UNTRUSTED);
return tmpdir;
}
|