mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
This commit was generated by cvs2svn to compensate for changes in r372,
which included commits to RCS files with non-trunk default branches. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9c5b1986a3
commit
210367ec88
140 changed files with 25635 additions and 14037 deletions
|
|
@ -37,7 +37,7 @@ etc_getlogin(obj)
|
|||
#endif
|
||||
|
||||
if (login)
|
||||
return str_new2(login);
|
||||
return rb_tainted_str_new2(login);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
|
@ -47,34 +47,36 @@ setup_passwd(pwd)
|
|||
struct passwd *pwd;
|
||||
{
|
||||
if (pwd == 0) rb_sys_fail("/etc/passwd");
|
||||
return struct_new(sPasswd,
|
||||
str_new2(pwd->pw_name),
|
||||
str_new2(pwd->pw_passwd),
|
||||
INT2FIX(pwd->pw_uid),
|
||||
INT2FIX(pwd->pw_gid),
|
||||
str_new2(pwd->pw_gecos),
|
||||
str_new2(pwd->pw_dir),
|
||||
str_new2(pwd->pw_shell),
|
||||
return rb_struct_new(sPasswd,
|
||||
rb_tainted_str_new2(pwd->pw_name),
|
||||
rb_tainted_str_new2(pwd->pw_passwd),
|
||||
INT2FIX(pwd->pw_uid),
|
||||
INT2FIX(pwd->pw_gid),
|
||||
#ifdef PW_GECOS
|
||||
rb_tainted_str_new2(pwd->pw_gecos),
|
||||
#endif
|
||||
rb_tainted_str_new2(pwd->pw_dir),
|
||||
rb_tainted_str_new2(pwd->pw_shell),
|
||||
#ifdef PW_CHANGE
|
||||
INT2FIX(pwd->pw_change),
|
||||
INT2FIX(pwd->pw_change),
|
||||
#endif
|
||||
#ifdef PW_QUOTA
|
||||
INT2FIX(pwd->pw_quota),
|
||||
INT2FIX(pwd->pw_quota),
|
||||
#endif
|
||||
#ifdef PW_AGE
|
||||
INT2FIX(pwd->pw_age),
|
||||
INT2FIX(pwd->pw_age),
|
||||
#endif
|
||||
#ifdef PW_CLASS
|
||||
str_new2(pwd->pw_class),
|
||||
rb_tainted_str_new2(pwd->pw_class),
|
||||
#endif
|
||||
#ifdef PW_COMMENT
|
||||
str_new2(pwd->pw_comment),
|
||||
rb_tainted_str_new2(pwd->pw_comment),
|
||||
#endif
|
||||
#ifdef PW_EXPIRE
|
||||
INT2FIX(pwd->pw_expire),
|
||||
INT2FIX(pwd->pw_expire),
|
||||
#endif
|
||||
0 /*dummy*/
|
||||
);
|
||||
0 /*dummy*/
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -96,7 +98,7 @@ etc_getpwuid(argc, argv, obj)
|
|||
uid = getuid();
|
||||
}
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd == 0) Fail("can't find user for %d", uid);
|
||||
if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", uid);
|
||||
return setup_passwd(pwd);
|
||||
#else
|
||||
return Qnil;
|
||||
|
|
@ -112,7 +114,7 @@ etc_getpwnam(obj, nam)
|
|||
|
||||
Check_Type(nam, T_STRING);
|
||||
pwd = getpwnam(RSTRING(nam)->ptr);
|
||||
if (pwd == 0) Fail("can't find user for %s", RSTRING(nam)->ptr);
|
||||
if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s", RSTRING(nam)->ptr);
|
||||
return setup_passwd(pwd);
|
||||
#else
|
||||
return Qnil;
|
||||
|
|
@ -123,10 +125,10 @@ static VALUE
|
|||
etc_passwd(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
#if defined(HAVE_GETPWENT) && !defined(__CYGWIN32__)
|
||||
#if defined(HAVE_GETPWENT)
|
||||
struct passwd *pw;
|
||||
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
setpwent();
|
||||
while (pw = getpwent()) {
|
||||
rb_yield(setup_passwd(pw));
|
||||
|
|
@ -135,7 +137,7 @@ etc_passwd(obj)
|
|||
return obj;
|
||||
}
|
||||
pw = getpwent();
|
||||
if (pw == 0) Fail("can't fetch next -- /etc/passwd");
|
||||
if (pw == 0) rb_raise(rb_eRuntimeError, "can't fetch next -- /etc/passwd");
|
||||
return setup_passwd(pw);
|
||||
#else
|
||||
return Qnil;
|
||||
|
|
@ -150,17 +152,17 @@ setup_group(grp)
|
|||
VALUE mem;
|
||||
char **tbl;
|
||||
|
||||
mem = ary_new();
|
||||
mem = rb_ary_new();
|
||||
tbl = grp->gr_mem;
|
||||
while (*tbl) {
|
||||
ary_push(mem, str_new2(*tbl));
|
||||
rb_ary_push(mem, rb_tainted_str_new2(*tbl));
|
||||
tbl++;
|
||||
}
|
||||
return struct_new(sGroup,
|
||||
str_new2(grp->gr_name),
|
||||
str_new2(grp->gr_passwd),
|
||||
INT2FIX(grp->gr_gid),
|
||||
mem);
|
||||
return rb_struct_new(sGroup,
|
||||
rb_tainted_str_new2(grp->gr_name),
|
||||
rb_tainted_str_new2(grp->gr_passwd),
|
||||
INT2FIX(grp->gr_gid),
|
||||
mem);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -174,7 +176,7 @@ etc_getgrgid(obj, id)
|
|||
|
||||
gid = NUM2INT(id);
|
||||
grp = getgrgid(gid);
|
||||
if (grp == 0) Fail("can't find group for %d", gid);
|
||||
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid);
|
||||
return setup_group(grp);
|
||||
#else
|
||||
return Qnil;
|
||||
|
|
@ -190,7 +192,7 @@ etc_getgrnam(obj, nam)
|
|||
|
||||
Check_Type(nam, T_STRING);
|
||||
grp = getgrnam(RSTRING(nam)->ptr);
|
||||
if (grp == 0) Fail("can't find group for %s", RSTRING(nam)->ptr);
|
||||
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %s", RSTRING(nam)->ptr);
|
||||
return setup_group(grp);
|
||||
#else
|
||||
return Qnil;
|
||||
|
|
@ -204,7 +206,7 @@ etc_group(obj)
|
|||
#ifdef HAVE_GETGRENT
|
||||
struct group *grp;
|
||||
|
||||
if (iterator_p()) {
|
||||
if (rb_iterator_p()) {
|
||||
setgrent();
|
||||
while (grp = getgrent()) {
|
||||
rb_yield(setup_group(grp));
|
||||
|
|
@ -235,32 +237,35 @@ Init_etc()
|
|||
rb_define_module_function(mEtc, "getgrnam", etc_getgrnam, 1);
|
||||
rb_define_module_function(mEtc, "group", etc_group, 0);
|
||||
|
||||
sPasswd = struct_define("Passwd",
|
||||
"name", "passwd", "uid", "gid",
|
||||
"gecos", "dir", "shell",
|
||||
sPasswd = rb_struct_define("Passwd",
|
||||
"name", "passwd", "uid", "gid",
|
||||
#ifdef PW_GECOS
|
||||
"gecos",
|
||||
#endif
|
||||
"dir", "shell",
|
||||
#ifdef PW_CHANGE
|
||||
"change",
|
||||
"change",
|
||||
#endif
|
||||
#ifdef PW_QUOTA
|
||||
"quota",
|
||||
"quota",
|
||||
#endif
|
||||
#ifdef PW_AGE
|
||||
"age",
|
||||
"age",
|
||||
#endif
|
||||
#ifdef PW_CLASS
|
||||
"class",
|
||||
"class",
|
||||
#endif
|
||||
#ifdef PW_COMMENT
|
||||
"comment",
|
||||
"comment",
|
||||
#endif
|
||||
#ifdef PW_EXPIRE
|
||||
"expire",
|
||||
"expire",
|
||||
#endif
|
||||
0);
|
||||
0);
|
||||
rb_global_variable(&sPasswd);
|
||||
|
||||
#ifdef HAVE_GETGRENT
|
||||
sGroup = struct_define("Group", "name", "passwd", "gid", "mem", 0);
|
||||
sGroup = rb_struct_define("Group", "name", "passwd", "gid", "mem", 0);
|
||||
rb_global_variable(&sGroup);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,31 @@
|
|||
require 'mkmf'
|
||||
|
||||
def etc_grep_header(field)
|
||||
f = open("conftest.c", "w")
|
||||
f.print <<EOF
|
||||
#include <pwd.h>
|
||||
EOF
|
||||
f.close
|
||||
begin
|
||||
if xsystem("#{CPP} | egrep #{field}")
|
||||
$defs.push(format("-D%s", field.upcase))
|
||||
end
|
||||
ensure
|
||||
system "rm -f conftest.c"
|
||||
end
|
||||
end
|
||||
|
||||
have_library("sun", "getpwnam") # NIS (== YP) interface for IRIX 4
|
||||
a = have_func("getlogin")
|
||||
b = have_func("getpwent")
|
||||
c = have_func("getgrent")
|
||||
if a or b or c
|
||||
etc_grep_header("pw_gecos")
|
||||
etc_grep_header("pw_change")
|
||||
etc_grep_header("pw_quota")
|
||||
etc_grep_header("pw_age")
|
||||
etc_grep_header("pw_class")
|
||||
etc_grep_header("pw_comment")
|
||||
etc_grep_header("pw_expire")
|
||||
create_makefile("etc")
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue