X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=UserNode.c;h=2ced2eb5b88d3f3129173b9b867a0fbf3823d048;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=dbec20f4fd707247808374c980171256f530c34e;hpb=9131885b2bbacfacfd9736724acfa0757643b3a9;p=NeonServV5.git diff --git a/UserNode.c b/UserNode.c index dbec20f..2ced2eb 100644 --- a/UserNode.c +++ b/UserNode.c @@ -1,7 +1,6 @@ #include "UserNode.h" #include "ChanUser.h" -#include "mysqlConn.h" -#include "lang.h" +#include "tools.h" static struct UserNode **userList; @@ -103,6 +102,58 @@ struct UserNode* searchUserByNick(const char *nick) { //case insensitive return NULL; } +int countUsersWithHost(char *host) { + int i, count = 0; + struct UserNode *user; + for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) { + for(user = userList[i]; user; user = user->next) { + if(!strcmp(user->host, host)) { + count++; + } + } + } + return count; +} + +char *getAuthFakehost(char *auth) { + int i; + struct UserNode *user; + for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) { + for(user = userList[i]; user; user = user->next) { + if((user->flags & USERFLAG_ISAUTHED) && !strcmp(user->auth, auth) && isFakeHost(user->host)) { + return user->host; + } + } + } + return NULL; +} + +struct UserNode* getAllUsers(struct UserNode *last) { + if(last == NULL || last->next == NULL) { + int cindex; + if(last == NULL) + cindex = 0; + else + cindex = get_nicklist_entry(last->nick[0]) + 1; + while(userList[cindex] == NULL && cindex <= VALID_NICK_CHARS_FIRST_LEN) + cindex++; + if(cindex > VALID_NICK_CHARS_FIRST_LEN) return NULL; + return userList[cindex]; + } else + return last->next; +} + +int getUserCount() { + int i, count = 0; + struct UserNode *user; + for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) { + for(user = userList[i]; user; user = user->next) { + count++; + } + } + return count; +} + struct UserNode* addUser(const char *nick) { int userListIndex = get_nicklist_entry(*nick); if(userListIndex == -1 || !is_valid_nick(nick)) @@ -197,7 +248,23 @@ struct UserNode* createTempUser(const char *mask) { strcpy(user->ident, &cmask[ii]); ii = i+1; } else if(cmask[i] == '\0') { - if(user == NULL) return NULL; + if(user == NULL) { + //nick only + user = malloc(sizeof(*user)); + if (!user) + { + perror("malloc() failed"); + return NULL; + } + strcpy(user->nick, cmask); + user->created = time(0); + user->ident[0] = 0; + user->host[0] = 0; + user->realname[0] = 0; + user->flags = 0; + user->channel = NULL; + return user; + } strcpy(user->host, &cmask[ii]); } } @@ -262,29 +329,3 @@ void clearTempUsers() { last_user = cuser; } } - - -void load_user_settings(struct UserNode *user) { - if(!(user->flags & USERFLAG_ISAUTHED) || (user->flags & USERFLAG_LOADED_SETTINGS)) - return; - check_mysql(); - MYSQL_RES *res; - MYSQL_ROW row; - printf_mysql_query("SELECT `user_lang`, `user_reply_privmsg`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth)); - res = mysql_use(); - if ((row = mysql_fetch_row(res)) != NULL) { - user->language = get_language_by_tag(row[0]); - if(user->language == NULL) user->language = get_default_language(); - if(strcmp(row[1], "0")) - user->flags |= USERFLAG_REPLY_PRIVMSG; - if(strcmp(row[2], "0")) - user->flags |= USERFLAG_GOD_MODE; - } else - user->language = get_default_language(); - user->flags |= USERFLAG_LOADED_SETTINGS; -} - -int isGodMode(struct UserNode *user) { - load_user_settings(user); - return (user->flags & USERFLAG_GOD_MODE); -}