mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-07-20 15:44:53 +00:00
now possible for SOGo to change the sambaNTPassword/sambaLMPassword
This commit is contained in:
+63
-21
@@ -1,6 +1,6 @@
|
||||
/* LDAPSource.m - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2007-2014 Inverse inc.
|
||||
* Copyright (C) 2007-2015 Inverse inc.
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -50,7 +50,6 @@ static Class NSStringK;
|
||||
stringByReplacingString: @"'" withString: @"\\'"] \
|
||||
stringByReplacingString: @"%" withString: @"%%"]
|
||||
|
||||
|
||||
@implementation LDAPSource
|
||||
|
||||
+ (void) initialize
|
||||
@@ -113,6 +112,7 @@ static Class NSStringK;
|
||||
|
||||
searchAttributes = nil;
|
||||
passwordPolicy = NO;
|
||||
updateSambaNTLMPasswords = NO;
|
||||
|
||||
kindField = nil;
|
||||
multipleBookingsField = nil;
|
||||
@@ -245,6 +245,9 @@ static Class NSStringK;
|
||||
if ([udSource objectForKey: @"passwordPolicy"])
|
||||
passwordPolicy = [[udSource objectForKey: @"passwordPolicy"] boolValue];
|
||||
|
||||
if ([udSource objectForKey: @"updateSambaNTLMPasswords"])
|
||||
updateSambaNTLMPasswords = [[udSource objectForKey: @"updateSambaNTLMPasswords"] boolValue];
|
||||
|
||||
ASSIGN(MSExchangeHostname, [udSource objectForKey: @"MSExchangeHostname"]);
|
||||
}
|
||||
|
||||
@@ -598,6 +601,40 @@ static Class NSStringK;
|
||||
return [NSString stringWithFormat: @"{%@}%@", _userPasswordAlgorithm, pass];
|
||||
}
|
||||
|
||||
- (BOOL) _ldapModifyAttribute: (NSString *) theAttribute
|
||||
withValue: (NSString *) theValue
|
||||
userDN: (NSString *) theUserDN
|
||||
password: (NSString *) theUserPassword
|
||||
connection: (NGLdapConnection *) bindConnection
|
||||
{
|
||||
NGLdapModification *mod;
|
||||
NGLdapAttribute *attr;
|
||||
NSArray *changes;
|
||||
|
||||
BOOL didChange;
|
||||
|
||||
attr = [[NGLdapAttribute alloc] initWithAttributeName: theAttribute];
|
||||
[attr addStringValue: theValue];
|
||||
|
||||
mod = [NGLdapModification replaceModification: attr];
|
||||
|
||||
changes = [NSArray arrayWithObject: mod];
|
||||
|
||||
if ([bindConnection bindWithMethod: @"simple"
|
||||
binddn: theUserDN
|
||||
credentials: theUserPassword])
|
||||
{
|
||||
didChange = [bindConnection modifyEntryWithDN: theUserDN
|
||||
changes: changes];
|
||||
}
|
||||
else
|
||||
didChange = NO;
|
||||
|
||||
RELEASE(attr);
|
||||
|
||||
return didChange;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
@@ -651,12 +688,8 @@ static Class NSStringK;
|
||||
{
|
||||
// We don't use a password policy - we simply use
|
||||
// a modify-op to change the password
|
||||
NGLdapModification *mod;
|
||||
NGLdapAttribute *attr;
|
||||
NSArray *changes;
|
||||
NSString* encryptedPass;
|
||||
|
||||
attr = [[NGLdapAttribute alloc] initWithAttributeName: @"userPassword"];
|
||||
|
||||
if ([_userPasswordAlgorithm isEqualToString: @"none"])
|
||||
{
|
||||
encryptedPass = newPassword;
|
||||
@@ -665,24 +698,33 @@ static Class NSStringK;
|
||||
{
|
||||
encryptedPass = [self _encryptPassword: newPassword];
|
||||
}
|
||||
if(encryptedPass != nil)
|
||||
|
||||
if (encryptedPass != nil)
|
||||
{
|
||||
[attr addStringValue: encryptedPass];
|
||||
mod = [NGLdapModification replaceModification: attr];
|
||||
changes = [NSArray arrayWithObject: mod];
|
||||
*perr = PolicyNoError;
|
||||
|
||||
if ([bindConnection bindWithMethod: @"simple"
|
||||
binddn: userDN
|
||||
credentials: oldPassword])
|
||||
{
|
||||
didChange = [bindConnection modifyEntryWithDN: userDN
|
||||
changes: changes];
|
||||
}
|
||||
else
|
||||
didChange = NO;
|
||||
didChange = [self _ldapModifyAttribute: @"userPassword"
|
||||
withValue: encryptedPass
|
||||
userDN: userDN
|
||||
password: oldPassword
|
||||
connection: bindConnection];
|
||||
}
|
||||
}
|
||||
|
||||
// We must check if we must update the Samba NT/LM password hashes
|
||||
if (didChange && updateSambaNTLMPasswords)
|
||||
{
|
||||
[self _ldapModifyAttribute: @"sambaNTPassword"
|
||||
withValue: [newPassword asNTHash]
|
||||
userDN: userDN
|
||||
password: newPassword
|
||||
connection: bindConnection];
|
||||
|
||||
[self _ldapModifyAttribute: @"sambaLMPassword"
|
||||
withValue: [newPassword asLMHash]
|
||||
userDN: userDN
|
||||
password: newPassword
|
||||
connection: bindConnection];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user