Method: Sys::Admin.get_user
- Defined in:
-
lib/bsd/sys/admin.rb,
lib/unix/sys/admin.rb,
lib/linux/sys/admin.rb,
lib/sunos/sys/admin.rb,
lib/darwin/sys/admin.rb,
lib/windows/sys/admin.rb
Returns a User object based on either name or uid.
call-seq:
Sys::Admin.get_user(name, = {})
Sys::Admin.get_user(uid, = {})
Looks for usr information based on the options you specify, where the usr argument can be either a user name or a RID.
If a ‘host’ option is specified, information is retrieved from that host. Otherwise, the local host is used.
All other options are converted to WQL statements against the Win32_UserAccount WMI object. See tinyurl.com/by9nvn for a list of possible options.
Examples:
# Get a user by name
Admin.get_user('djberge')
# Get a user by uid
Admin.get_user(100)
# Get a user on a specific domain
Admin.get_user('djberge', :domain => 'TEST')
– The reason for keeping the usr variable as a separate argument instead of rolling it into the options hash was to keep a unified API between the Windows and UNIX versions.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/bsd/sys/admin.rb', line 98 def self.get_user(uid) buf = FFI::MemoryPointer.new(:char, 1024) pbuf = FFI::MemoryPointer.new(PasswdStruct) temp = PasswdStruct.new if uid.is_a?(String) if getpwnam_r(uid, temp, buf, buf.size, pbuf) != 0 raise Error, "getpwnam_r function failed: #{strerror(FFI.errno)}" end else if getpwuid_r(uid, temp, buf, buf.size, pbuf) != 0 raise Error, "getpwuid_r function failed: #{strerror(FFI.errno)}" end end ptr = pbuf.read_pointer if ptr.null? raise Error, "no user found for #{uid}" end pwd = PasswdStruct.new(ptr) get_user_from_struct(pwd) end |