diff options
Diffstat (limited to 'etc.c')
-rw-r--r-- | etc.c | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/etc.c b/etc.c deleted file mode 100644 index 130592ec78..0000000000 --- a/etc.c +++ /dev/null @@ -1,193 +0,0 @@ -/************************************************ - - etc.c - - - $Author: matz $ - $Date: 1995/01/10 10:42:32 $ - created at: Tue Mar 22 18:39:19 JST 1994 - -************************************************/ - -#include "ruby.h" -#include <pwd.h> -#include <grp.h> - -char *getlogin(); - -static VALUE -Fetc_getlogin(obj) - VALUE obj; -{ - char *login = getlogin(); - - if (login) - return str_new2(login); - return Qnil; -} - -static VALUE -setup_passwd(pwd) - struct passwd *pwd; -{ - if (pwd == Qnil) rb_sys_fail("/etc/passwd"); - return struct_new("passwd", - "name", str_new2(pwd->pw_name), - "passwd", str_new2(pwd->pw_passwd), - "uid", INT2FIX(pwd->pw_uid), - "gid", INT2FIX(pwd->pw_gid), - "gecos", str_new2(pwd->pw_gecos), - "dir", str_new2(pwd->pw_dir), - "shell", str_new2(pwd->pw_shell), -#ifdef PW_CHANGE - "change", INT2FIX(pwd->pw_change), -#endif -#ifdef PW_QUOTA - "quota", INT2FIX(pwd->pw_quota), -#endif -#ifdef PW_AGE - "age", INT2FIX(pwd->pw_age), -#endif -#ifdef PW_CLASS - "class", str_new2(pwd->pw_class), -#endif -#ifdef PW_COMMENT - "comment", str_new2(pwd->pw_comment), -#endif -#ifdef PW_EXPIRE - "expire", INT2FIX(pwd->pw_expire), -#endif - Qnil); -} - -static VALUE -Fetc_getpwuid(argc, argv, obj) - int argc; - VALUE *argv; - VALUE obj; -{ - VALUE id; - int uid; - struct passwd *pwd; - - if (rb_scan_args(argc, argv, "01", &id) == 1) { - uid = NUM2INT(id); - } - else { - uid = getuid(); - } - pwd = getpwuid(uid); - if (pwd == Qnil) Fail("can't find user for %d", uid); - return setup_passwd(pwd); -} - -static VALUE -Fetc_getpwnam(obj, nam) - VALUE obj, nam; -{ - struct passwd *pwd; - - Check_Type(nam, T_STRING); - pwd = getpwnam(RSTRING(nam)->ptr); - if (pwd == Qnil) Fail("can't find user for %s", RSTRING(nam)->ptr); - return setup_passwd(pwd); -} - -static VALUE -Fetc_passwd(obj) - VALUE obj; -{ - struct passwd *pw; - - if (iterator_p()) { - setpwent(); - while (pw = getpwent()) { - rb_yield(setup_passwd(pw)); - } - endpwent(); - return obj; - } - pw = getpwent(); - if (pw == Qnil) Fail("can't fetch next -- /etc/passwd"); - return setup_passwd(pw); -} - -static VALUE -setup_group(grp) - struct group *grp; -{ - VALUE mem; - char **tbl; - - mem = ary_new(); - tbl = grp->gr_mem; - while (*tbl) { - ary_push(mem, str_new2(*tbl)); - tbl++; - } - return struct_new("group", - "name", str_new2(grp->gr_name), - "passwd", str_new2(grp->gr_passwd), - "gid", INT2FIX(grp->gr_gid), - "mem", mem, - Qnil); -} - -static VALUE -Fetc_getgrgid(obj, id) - VALUE obj, id; -{ - int gid; - struct group *grp; - - gid = NUM2INT(id); - grp = getgrgid(gid); - if (grp == Qnil) Fail("can't find group for %d", gid); - return setup_group(grp); -} - -static VALUE -Fetc_getgrnam(obj, nam) - VALUE obj, nam; -{ - struct group *grp; - - Check_Type(nam, T_STRING); - grp = getgrnam(RSTRING(nam)->ptr); - if (grp == Qnil) Fail("can't find group for %s", RSTRING(nam)->ptr); - return setup_group(grp); -} - -static VALUE -Fetc_group(obj) - VALUE obj; -{ - struct group *grp; - - if (iterator_p()) { - setgrent(); - while (grp = getgrent()) { - rb_yield(setup_group(grp)); - } - endgrent(); - return obj; - } - return setup_group(getgrent()); -} - -VALUE M_Etc; - -Init_Etc() -{ - M_Etc = rb_define_module("Etc"); - rb_extend_object(M_Etc, M_Etc); - - rb_define_method(M_Etc, "getlogin", Fetc_getlogin, 0); - - rb_define_method(M_Etc, "getpwuid", Fetc_getpwuid, -1); - rb_define_method(M_Etc, "getpwnam", Fetc_getpwnam, 1); - rb_define_method(M_Etc, "passwd", Fetc_passwd, 0); - - rb_define_method(M_Etc, "getgrgid", Fetc_getgrgid, 1); - rb_define_method(M_Etc, "getgrnam", Fetc_getgrnam, 1); - rb_define_method(M_Etc, "group", Fetc_group, 0); -} |