Changeset 4809

Show
Ignore:
Timestamp:
05/31/07 00:04:20 (1 year ago)
Author:
morris
Message:

When we're reloading accounts for all users, we can't be certain an account has been loaded for everyone if they're in the login phase

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wired/trunk/wired/accounts.c

    r4786 r4809  
    5151static void                                                     wd_accounts_reload_account_with_user(wi_string_t *); 
    5252static void                                                     wd_accounts_reload_account_with_group(wi_string_t *); 
    53 static void                                                     wd_accounts_reload_account_for_user(wd_user_t *); 
     53static void                                                     wd_accounts_reload_account_for_user(wd_account_t *, wd_user_t *); 
    5454static void                                                     wd_accounts_sreply_privileges(wd_user_t *); 
    5555static void                                                     wd_accounts_copy_privileges(wd_account_t *, wd_account_t *); 
     
    506506        wi_enumerator_t         *enumerator; 
    507507        wd_user_t                       *user; 
     508        wd_account_t            *account; 
    508509         
    509510        wi_hash_rdlock(wd_users); 
     
    511512        enumerator = wi_hash_data_enumerator(wd_users); 
    512513 
    513         while((user = wi_enumerator_next_data(enumerator))) 
    514                 wd_accounts_reload_account_for_user(user); 
     514        while((user = wi_enumerator_next_data(enumerator))) { 
     515                account = wd_user_account(user); 
     516                 
     517                if(account) 
     518                        wd_accounts_reload_account_for_user(account, user); 
     519        } 
    515520 
    516521        wi_hash_unlock(wd_users); 
     
    571576                account = wd_user_account(user); 
    572577                 
    573                 if(wi_is_equal(account->name, name)) 
    574                         wd_accounts_reload_account_for_user(user); 
     578                if(account && wi_is_equal(account->name, name)) 
     579                        wd_accounts_reload_account_for_user(account, user); 
    575580        } 
    576581 
     
    592597                account = wd_user_account(user); 
    593598                 
    594                 if(wi_is_equal(account->group, name)) 
    595                         wd_accounts_reload_account_for_user(user); 
     599                if(account && wi_is_equal(account->group, name)) 
     600                        wd_accounts_reload_account_for_user(account, user); 
    596601        } 
    597602 
     
    601606 
    602607 
    603 static void wd_accounts_reload_account_for_user(wd_user_t *user) { 
    604         wd_account_t    *account, *new_account; 
     608static void wd_accounts_reload_account_for_user(wd_account_t *account, wd_user_t *user) { 
     609        wd_account_t    *new_account; 
    605610        wi_boolean_t    admin, new_admin; 
    606611         
    607         account = wd_user_account(user); 
    608612        new_account = wd_accounts_read_user_and_group(account->name); 
    609613         
    610         if(!account) 
     614        if(!new_account) 
    611615                return; 
    612616