extern int account_match(t_account * account, char const * username) { unsigned int namehash; char const * tname; if (!account) { eventlog(eventlog_level_error,"account_match","got NULL account"); return -1; } if (!username) { eventlog(eventlog_level_error,"account_match","got NULL username"); return -1; } if (username[0]=='#') eventlog(eventlog_level_error,"account_match","got old style account name !!!"); /* FIXME: core dump? :> XXXXXX */ namehash = account_hash(username); if (account->namehash==namehash && (tname = account_get_name(account))) { if (strcasecmp(tname,username)==0) { account_unget_name(tname); return 1; } else account_unget_name(tname); } return 0; }
extern t_account * create_vaccount(const char *username, unsigned int uid) { /* this is a modified(?) version of account_create */ t_account * account; account = malloc(sizeof(t_account)); if (!account) { eventlog(eventlog_level_error,"create_vaccount","could not allocate memory for account"); return NULL; } account->attrs = NULL; account->age = 0; CLEAR_FLAGS(account); account->namehash = 0; /* hash it later */ account->uid = 0; account->filename = NULL; /* there is no local account file */ account->bits_state = account_state_unknown; if (username) { if (username[0]!='#') { if (strchr(username,' ')) { eventlog(eventlog_level_error,"create_vaccount","username contains spaces"); account_destroy(account); return NULL; } if (strlen(username)>=MAX_USER_NAME) { eventlog(eventlog_level_error,"create_vaccount","username \"%s\" is too long (%u chars)",username,strlen(username)); account_destroy(account); return NULL; } account_set_strattr(account,"BNET\\acct\\username",username); account->namehash = account_hash(username); } else { if (str_to_uint(&username[1],&account->uid)<0) { eventlog(eventlog_level_warn,"create_vaccount","invalid username \"%s\"",username); } } } account_set_numattr(account,"BNET\\acct\\userid",account->uid); return account; }
extern int account_match(t_account * account, char const * username) { unsigned int userid=0; unsigned int namehash; char const * tname; if (!account) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL account"); return -1; } if (!username) { eventlog(eventlog_level_error,__FUNCTION__,"got NULL username"); return -1; } if (username[0]=='#') if (str_to_uint(&username[1],&userid)<0) userid = 0; if (userid) { if (account->uid==userid) return 1; } else { namehash = account_hash(username); if (account->namehash==namehash && (tname = account_get_name(account))) { if (strcasecmp(tname,username)==0) return 1; } } return 0; }