Module: ActiveSambaLdap::SambaAccountEntry

Included in:
Computer, User
Defined in:
lib/active_samba_ldap/samba_account_entry.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

DOMAIN_ADMIN_RID =

from source/include/rpc_misc.c in Samba

0x000001F4
DOMAIN_GUEST_RID =
0x000001F5
DOMAIN_ADMIN_NAME =

from source/rpc_server/srv_util.c in Samba

"Administrator"
DOMAIN_GUEST_NAME =
"Guest"
WELL_KNOWN_RIDS =
[]
WELL_KNOWN_NAMES =
[]
FAR_FUTURE_TIME =

FAR_FUTURE_TIME = Time.parse(“2050/01/01”).to_i.to_s

Time.parse("2038/01/18").to_i.to_s
ACCOUNT_FLAGS_RE =
/\A\[([NDHTUMWSLXI ]+)\]\z/

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
6
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 3

def self.included(base)
  super
  base.extend(ClassMethods)
end

Instance Method Details

#can_change_password?Boolean

Returns:

  • (Boolean)


169
170
171
172
173
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 169

def can_change_password?
  assert_samba_available
  samba_pwd_can_change.nil? or
    Time.at(samba_pwd_can_change.to_i) <= Time.now
end

#change_samba_password(password) ⇒ Object



152
153
154
155
156
157
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 152

def change_samba_password(password)
  assert_samba_available
  self.samba_lm_password = Samba::Encrypt.lm_hash(password)
  self.samba_nt_password = Samba::Encrypt.ntlm_hash(password)
  self.samba_pwd_last_set = Time.now.to_i.to_s
end

#change_sid(rid, allow_non_unique = false) ⇒ Object



140
141
142
143
144
145
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 140

def change_sid(rid, allow_non_unique=false)
  assert_samba_available
  sid = "#{self.class.configuration[:sid]}-#{rid}"
  # check_unique_sid_number(sid) unless allow_non_unique
  self.samba_sid = sid
end

#change_uid_number(uid, allow_non_unique = false) ⇒ Object



127
128
129
130
131
132
133
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 127

def change_uid_number(uid, allow_non_unique=false)
  result = super
  return result unless samba_available?

  rid = self.class.uid2rid(uid_number.to_s)
  change_sid(rid, allow_non_unique)
end

#change_uid_number_by_rid(rid, allow_non_unique = false) ⇒ Object



135
136
137
138
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 135

def change_uid_number_by_rid(rid, allow_non_unique=false)
  assert_samba_available
  change_uid_number(self.class.rid2uid(rid), allow_non_unique)
end

#disableObject



205
206
207
208
209
210
211
212
213
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 205

def disable
  assert_samba_available
  flags = ""
  if ACCOUNT_FLAGS_RE =~ samba_acct_flags.to_s
    flags = $1
    return if /D/ =~ flags
  end
  self.samba_acct_flags = "[D#{flags}]"
end

#disable_forcing_password_changeObject



186
187
188
189
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 186

def disable_forcing_password_change
  assert_samba_available
  self.samba_pwd_must_change = FAR_FUTURE_TIME
end

#disable_password_changeObject



164
165
166
167
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 164

def disable_password_change
  assert_samba_available
  self.samba_pwd_can_change = FAR_FUTURE_TIME
end

#disabled?Boolean

Returns:

  • (Boolean)


220
221
222
223
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 220

def disabled?
  assert_samba_available
  (/D/ =~ samba_acct_flags.to_s) ? true : false
end

#enableObject



198
199
200
201
202
203
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 198

def enable
  assert_samba_available
  if /D/ =~ samba_acct_flags.to_s
    self.samba_acct_flags = samba_acct_flags.gsub(/D/, '')
  end
end

#enable_forcing_password_changeObject



175
176
177
178
179
180
181
182
183
184
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 175

def enable_forcing_password_change
  assert_samba_available
  self.samba_pwd_must_change = "0"
  if /X/ =~ samba_acct_flags.to_s
    self.samba_acct_flags = samba_acct_flags.sub(/X/, '')
  end
  if samba_pwd_last_set.to_i.zero?
    self.samba_pwd_last_set = FAR_FUTURE_TIME
  end
end

#enable_password_changeObject



159
160
161
162
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 159

def enable_password_change
  assert_samba_available
  self.samba_pwd_can_change = "0"
end

#enabled?Boolean

Returns:

  • (Boolean)


215
216
217
218
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 215

def enabled?
  assert_samba_available
  !disabled?
end

#fill_default_values(options = {}) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 86

def fill_default_values(options={})
  result = super
  return result unless samba_available?

  self.samba_logon_time ||= "0"
  self.samba_logoff_time ||= FAR_FUTURE_TIME
  self.samba_kickoff_time ||= nil

  password = options["password"]
  change_samba_password(password) if password
  self.samba_lm_password ||= "XXX"
  self.samba_nt_password ||= "XXX"
  self.samba_pwd_last_set ||= "0"

   = samba_acct_flags.nil?
  self.samba_acct_flags ||= 

  can_change_password = options["can_change_password"]
  if can_change_password
    self.enable_password_change
  elsif  or can_change_password == false
    self.disable_password_change
  end

  must_change_password = options["must_change_password"]
  if must_change_password
    self.enable_forcing_password_change
  elsif  or must_change_password == false
    self.disable_forcing_password_change
  end

   = options["enable"]
  if 
    self.enable
  elsif  or  == false
    self.disable
  end

  self
end

#must_change_password?Boolean

Returns:

  • (Boolean)


191
192
193
194
195
196
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 191

def must_change_password?
  assert_samba_available
  !(/X/ =~ samba_acct_flags.to_s or
    samba_pwd_must_change.nil? or
    Time.at(samba_pwd_must_change.to_i) > Time.now)
end

#ridObject



147
148
149
150
# File 'lib/active_samba_ldap/samba_account_entry.rb', line 147

def rid
  assert_samba_available
  Integer(samba_sid.split(/-/).last)
end