+struct UserNode* createTempUser(const char *nick) {
+ int already_on_list = 0;
+ struct UserNode *user = NULL;
+ if(!is_valid_nick(nick)) {
+ return NULL;
+ }
+ for(user = userList[TEMPUSER_LIST_INDEX]; user; user = user->next) {
+ if(!stricmp(user->nick, nick)) {
+ already_on_list = 1;
+ break;
+ }
+ }
+ if(!user) {
+ user = malloc(sizeof(*user));
+ if (!user) {
+ printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
+ return NULL;
+ }
+ user->ident[0] = 0;
+ user->host[0] = 0;
+ user->ip = NULL;
+ user->realname[0] = 0;
+ user->flags = 0;
+ user->channel = NULL;
+ user->usermode = 0;
+ user->last_who = 0;
+ } else
+ user->flags &= ~USERFLAG_FREETMPUSER;
+ user->created = time(0);
+ if(user->created - user->last_who > REWHO_TIMEOUT)
+ user->flags &= ~USERFLAG_ISAUTHED; //remove authed flag (security reasons)
+ strcpy(user->nick, nick);
+ if(!already_on_list) {
+ SYNCHRONIZE(cache_sync);
+ user->next = userList[TEMPUSER_LIST_INDEX];
+ userList[TEMPUSER_LIST_INDEX] = user;
+ DESYNCHRONIZE(cache_sync);
+ }
+ return user;
+}
+
+struct UserNode* createTempUserMask(const char *mask) {