コード例 #1
0
ファイル: account.cpp プロジェクト: yvanvds/yATools
bool y::ldap::account::load(const data& d) {
  _uidNumber.readFromLdap(d);
  if(_uidNumber().get() == 0) {
    return false;
  }
  
  for(int i = 0; i < d.elms("objectClass"); i++) {
    if(d.getValue("objectClass", i) == "schoolPerson") {
      _hasSchoolPersonClass = true;
      break;
    } 
  }
  
  _uid           .readFromLdap(d);
  _dn            .readFromLdap(d);
  _cn            .readFromLdap(d);
  _sn            .readFromLdap(d);
  _fullName      .readFromLdap(d);
  _homeDir       .readFromLdap(d);
  _wisaID        .readFromLdap(d);
  _wisaName      .readFromLdap(d);
  _mail          .readFromLdap(d);
  _mailAlias     .readFromLdap(d);
  _birthDay      .readFromLdap(d);
  _password      .readFromLdap(d);
  _role          .readFromLdap(d);
  _groupID       .readFromLdap(d);
  _schoolClass   .readFromLdap(d);
  _classChange   .readFromLdap(d);
  _birthPlace    .readFromLdap(d);
  _gender        .readFromLdap(d);
  _adminGroup    .readFromLdap(d);
  _registerID    .readFromLdap(d);
  _nationality   .readFromLdap(d);
  _stemID        .readFromLdap(d);
  _schoolID      .readFromLdap(d);
  _houseNumber   .readFromLdap(d);
  _houseNumberAdd.readFromLdap(d);
  _city          .readFromLdap(d);
  _postalCode    .readFromLdap(d);
  _street        .readFromLdap(d);
  _country       .readFromLdap(d);
  
  if(_role().get() == ROLE::NONE) {
    y::utils::Log().add("a user exists without a valid schoolrole: ");
    y::utils::Log().add(_dn().get());
  }
  if(d.getValue("krbName" ).size()) _hasKrbName  = true;

  TODO(this can be removed later)
  if(_fullName().get() == "System User") {
    string fn = _cn().get();
    fn += " ";
    fn += _sn().get();
    _fullName(FULL_NAME(fn), false);
  }

  _new = false;
  return !_new;
}
コード例 #2
0
ファイル: advmom.cpp プロジェクト: jparal/sat
void CAMCode<B,T,D>::AdvMom ()
{
  CalcE (_B, _Ua, _dnf);

  T ni, dth = T(.5) * _time.Dt ();
  FldVector ui, uf, bi, ei;

  DomainIterator<D> itu, itb, ite;
  _dn.GetDomainIterator (itu, false);
  _B.GetDomainIterator (itb, false);
  _E.GetDomainIteratorAll (ite, true);

  do
  {
    ni = _dn(itu);
    ui = _U (itu);
    uf = _Uf(itu);
    bi = _B (itb);
    CartStencil::Average (_E, ite, ei);

    _U(itu) = uf + dth * (ni*ei + ui % bi);
  }
  while (itu.Next() && itb.Next() && ite.Next());
}
コード例 #3
0
ファイル: account.cpp プロジェクト: yvanvds/yATools
const DN & y::ldap::account::dn() const {
  return _dn();
}
コード例 #4
0
ファイル: account.cpp プロジェクト: yvanvds/yATools
y::ldap::account & y::ldap::account::schoolClass(const SCHOOLCLASS & value) {
  server->getClass(CN(_schoolClass().get())).removeStudent(_dn());
  _schoolClass(value);
  server->getClass(CN(_schoolClass().get())).addStudent(_dn());
  return *this;
}
コード例 #5
0
ファイル: account.cpp プロジェクト: yvanvds/yATools
bool y::ldap::account::save() {
  
  // remove user if needed
  if(flaggedForRemoval() && !dn().get().empty()) {
    if(isStudent()) {
      y::Smartschool().unregisterStudent(*this);
    } else {
      y::Smartschool().deleteUser(*this);
    }    
    y::samba::delUser(*this);
    
    if(isStudent())
    
    return true;
  }
  
  // accounts without DN are not valid
  if(dn().get().empty()) {
    flagForRemoval();
    return false; 
  }
  
  
  // else apply changes
  dataset values(server);
  
  // on first save, some new entries have to be added
  if(!_hasKrbName) {
    // add kerberos objectClass
    data & d = values.New(ADD);
    d.add("type", "objectClass");
    d.add("values", "kerberosSecurityObject");
    
    // add kerberos name (for short mail)
    string krbName(_uid().get());
    krbName += "@";
    krbName += utils::Config().getDomain();
    data & d1 = values.New(ADD);
    d1.add("type", "krbName");
    d1.add("values", krbName);
    _hasKrbName = true;
  }
  
  if(!_hasSchoolPersonClass) {
    data & d = values.New(ADD);
    d.add("type", "objectClass");
    d.add("values", "schoolPerson");
    _hasSchoolPersonClass = true;
  }
  
  _cn.saveToLdap(values);
  _sn.saveToLdap(values);
  _fullName.saveToLdap(values);
  _homeDir.saveToLdap(values);
  _wisaID.saveToLdap(values);
  _wisaName.saveToLdap(values);
  _mail.saveToLdap(values);
  _mailAlias.saveToLdap(values);
  _birthDay.saveToLdap(values);
  _role.saveToLdap(values);
  _groupID.saveToLdap(values);
  _schoolClass.saveToLdap(values);
  _classChange.saveToLdap(values);
  _birthPlace.saveToLdap(values);
  _gender.saveToLdap(values);
  _adminGroup.saveToLdap(values);
  _registerID.saveToLdap(values);
  _nationality.saveToLdap(values);
  _stemID.saveToLdap(values);
  _schoolID.saveToLdap(values);
  _houseNumber.saveToLdap(values);
  _houseNumberAdd.saveToLdap(values);
  _city.saveToLdap(values);
  _postalCode.saveToLdap(values);
  _street.saveToLdap(values);
  _country.saveToLdap(values);
  
  if(_password.changed()) {
    _password.saveToLdap(values);
    
#ifndef DEBUG
    samba::changePassword(_uid().get(), _passwordClearText);
#endif
      
  }
  
  if(values.elms()) {
    bool roleChanged = _role.changed();
    bool classChanged = _schoolClass.changed();
    
    server->modify(_dn(), values);
    
    if(isStaff() || isStudent()) {
      y::Smartschool().saveUser(*this);
      string message("Updating smartschool for user ");
      message += _fullName().get();
      y::utils::Log().add(message);

      // add user to group
      if(isStudent() && classChanged) {
        // this is a student
        y::Smartschool().moveUserToClass(*this, _schoolClass().get());
      } else  if(roleChanged && _role().get() == ROLE::DIRECTOR) {
        y::Smartschool().addUserToGroup(*this, "Directie", false);
      } else if (roleChanged && _role().get() == ROLE::SUPPORT) {
        y::Smartschool().addUserToGroup(*this, "Secretariaat", false);
      } else if (roleChanged && isStaff()) {
        y::Smartschool().addUserToGroup(*this, "Leerkrachten", true);
      }   
    }   
    return true;
  }
  
  if(!_ssPassword.empty()) {
    y::Smartschool().savePassword(*this);
    return true;
  }
  
  return false;
}