package hackers_git import ( p "nslcd_proto" "nslcd_proto/util" ) func (o *Hackers) Shadow_ByName(cred p.Ucred, req p.Request_Shadow_ByName) p.Shadow_Enumerator { o.lock.RLock() defer o.lock.RUnlock() if cred.Uid != 0 { return util.Shadow_Ø{} } uid := o.name2uid(req.Name) passwd := o.users[uid].passwd shadow := p.Shadow{ Name: passwd.Name, PwHash: passwd.PwHash, LastChangeDate: -1, MinDays: -1, MaxDays: -1, WarnDays: -1, InactDays: -1, ExpireDate: -1, Flag: -1, } return util.New_Shadow_List([]p.Shadow{shadow}) } type allShadowEnumerator struct { uids []int32 backend *Hackers done bool } func (e *allShadowEnumerator) GetNext() (*p.Shadow, error) { if len(e.uids) > 0 { passwd := e.backend.users[e.uids[0]].passwd shadow := p.Shadow{ Name: passwd.Name, PwHash: passwd.PwHash, LastChangeDate: -1, MinDays: -1, MaxDays: -1, WarnDays: -1, InactDays: -1, ExpireDate: -1, Flag: -1, } e.uids = e.uids[1:] return &shadow, nil } if len(e.uids) == 0 && !e.done { e.done = true e.backend.lock.RUnlock() } return nil, nil } func (o *allShadowEnumerator) GenericGetNext() (n *interface{}, err error) { a, err := o.GetNext() if a != nil { b := (interface{})(*a) n = &b } return } func (o *Hackers) Shadow_All(cred p.Ucred, req p.Request_Shadow_All) p.Shadow_Enumerator { if cred.Uid != 0 { return util.Shadow_Ø{} } o.lock.RLock() e := allShadowEnumerator{ uids: make([]int32, len(o.users)), backend: o, done: false, } i := uint(0) for uid, _ := range o.users { e.uids[i] = uid i++ } return &e }