Crossfire Server, Trunk
login.c File Reference
#include "global.h"
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "define.h"
#include "loader.h"
#include "output_file.h"
#include "spells.h"
#include "sproto.h"
#include "server.h"
+ Include dependency graph for login.c:

Go to the source code of this file.

Functions

void check_login (object *op, const char *password)
 
int check_name (player *me, const char *name)
 
static void copy_file (const char *filename, FILE *fpout)
 
void delete_character (const char *name)
 
void destroy_object (object *op)
 
void emergency_save (int flag)
 
int save_player (object *op, int flag)
 
int verify_player (const char *name, char *password)
 
static void wrong_password (object *op)
 

Detailed Description

Player login/logout/save functions.

Definition in file login.c.

Function Documentation

◆ check_login()

void check_login ( object op,
const char *  password 
)

Actually login a player, load from disk and such.

Parameters
opplayer.
passwordif not NULL, the uncrypted password the user entered. If NULL, no password check is done, coming from the account code which already does authentication.
Todo:
describe connect/login/logout/disconnect process.

Definition at line 522 of file login.c.

References add_string(), pl::bed_x, pl::bed_y, pl::bowtype, buf, liv::Cha, check_password(), check_path(), CLEAR_FLAG, liv::Con, confirm_password(), containers, disinfect::count, liv::Dex, pl::digestion, draw_ext_info(), draw_ext_info_format(), enter_player_maplevel(), esrv_add_spells(), esrv_new_player(), esrv_send_inventory(), esrv_send_pickup(), EVENT_LOGIN, events_execute_global_event(), npc_dialog::filename, final_free_player(), first_map_path, first_player, fix_object(), FLAG_FRIENDLY, FLAG_NO_FIX_PLAYER, FLAG_REMOVED, FLAG_USE_ARMOUR, FLAG_USE_SHIELD, FORCE, pl::gen_grace, pl::gen_hp, pl::gen_sp, has_been_loaded(), pl::has_directory, socket_struct::host, i18n_get_language_by_code(), if(), liv::Int, is_dragon_pl(), key_inventory, keyrings, kill_player(), knowledge_send_known(), pl::language, leave(), legal_range(), pl::levgrace, pl::levhp, pl::levsp, link_player_skills(), pl::listening, llevDebug, llevError, llevInfo, LO_NEWFILE, load_object(), Settings::localdir, LOG(), login_check_shutdown(), pl::maplevel, MAX_BUF, pl::mode, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_LOGIN, MSG_TYPE_ADMIN_PLAYER, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_SUCCESS, obj::name, pl::name_changed, NDI_ALL, NDI_DK_ORANGE, NDI_UNIQUE, pl::next, pl::no_shout, Ns_Dead, pl::ob, object_find_by_type_and_arch_name(), object_remove(), object_reset(), object_sum_weight(), object_update_speed(), give::op, pl::orig_stats, pl::partial_commands, pl::party, party_confirm_password(), party_find(), party_form(), party_join(), party_rejoin_always, party_rejoin_no, party_set_password(), party_struct::partyname, pl::password, pl::peaceful, pl::petmode, altar_valkyrie::pl, PLAYER, player_set_own_title(), player_set_state(), Settings::playerdir, liv::Pow, PROFILE_BEGIN, PROFILE_END, pticks, QUERY_FLAG, quest_send_initial_states(), range_none, pl::rejoin_party, remove_unpaid_objects(), Settings::reset_loc_time, save_player(), pl::savebed_map, Settings::search_items, pl::search_str, set_dragon_name(), SET_FLAG, Settings::set_title, settings, pl::shoottype, pl::socket, pl::spellparam, ST_PLAYING, pl::state, liv::Str, strdup_local, strlcpy(), pl::ticks_played, pl::title, TRUE, pl::unapply, unapply_always, unapply_never, unapply_nochoice, pl::unarmed_skill, pl::usekeys, autojail::value, liv::Wis, and wrong_password().

Referenced by account_play_cmd(), and receive_player_password().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ check_name()

int check_name ( player me,
const char *  name 
)

Ensure player's name is valid.

Parameters
meplayer to report to.
namename to check.
Return values
0invalid name.
1valid name.

Definition at line 181 of file login.c.

References draw_ext_info(), draw_ext_info_format(), MAX_NAME, curse_on_apply::me, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_LOGIN, give::name, NDI_UNIQUE, and playername_ok().

Referenced by receive_player_name().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ copy_file()

static void copy_file ( const char *  filename,
FILE *  fpout 
)
static

Copy a file.

Parameters
filenamesource file.
fpoutwhere to copy to.

Definition at line 466 of file login.c.

References buf, npc_dialog::filename, llevError, LOG(), and MAX_BUF.

Referenced by save_player().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delete_character()

void delete_character ( const char *  name)

Totally deletes a character. The contents of its directory are effectively totally removed. Used when a player 'quits' the game, or dies on a server with permadeath and no resurrect.

Parameters
nameplayer to delete.

Definition at line 88 of file login.c.

References buf, Settings::localdir, MAX_BUF, give::name, Settings::playerdir, remove_directory(), and settings.

Referenced by key_confirm_quit(), and kill_player_permadeath().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ destroy_object()

void destroy_object ( object op)

Recursively object_free_drop_inventory() op and its inventory.

Parameters
opobject to totally object_free_drop_inventory().
Todo:
trash that function

Definition at line 209 of file login.c.

References FLAG_REMOVED, object_free_drop_inventory(), object_remove(), give::op, and QUERY_FLAG.

Referenced by save_player(), and trap_disarm().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ emergency_save()

void emergency_save ( int  flag)

Save all players.

Parameters
flagif non zero, it means that we want to try and save everyone, but keep the game running. Thus, we don't want to free any information.

Definition at line 41 of file login.c.

References draw_ext_info(), first_map_path, first_player, hiscore_check(), llevError, llevInfo, LOG(), obj::map, pl::maplevel, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_LOADSAVE, obj::name, NDI_UNIQUE, pl::next, pl::ob, altar_valkyrie::pl, save_player(), trying_emergency_save, nlohmann::detail::void(), obj::x, and obj::y.

+ Here is the call graph for this function:

◆ save_player()

int save_player ( object op,
int  flag 
)

Saves a player to disk.

Parameters
opplayer to save.
flagif is set, it's only backup, ie dont remove objects from inventory. If BACKUP_SAVE_AT_HOME is set, and the flag is set, then the player will be saved at the emergency save location.
Returns
non zero if successful.

Definition at line 230 of file login.c.

References account_char_add(), account_char_save(), socket_struct::account_chars, account_get_account_for_char(), account_link(), socket_struct::account_name, pl::bed_x, pl::bed_y, pl::bowtype, liv::Cha, checksum(), CLEAR_FLAG, liv::Con, copy_file(), destroy_object(), liv::Dex, pl::digestion, draw_ext_info(), draw_ext_info_format(), Settings::emergency_mapname, esrv_send_inventory(), npc_dialog::filename, FLAG_NO_FIX_PLAYER, FLAG_WIZ, pl::gen_grace, pl::gen_hp, pl::gen_sp, i18n_get_language_code(), liv::Int, key_inventory, keyrings, knowledge_first_player_save(), pl::language, pl::levgrace, pl::levhp, pl::levsp, pl::listening, llevDebug, llevError, Settings::localdir, LOG(), make_path_to_file(), MAX_BUF, MAX_SKILLS, MIN, pl::mode, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_LOADSAVE, obj::name, pl::name_changed, NDI_ALL_DMS, NDI_RED, NDI_UNIQUE, pl::no_shout, pl::ob, of_close(), of_open(), give::op, pl::orig_stats, pl::partial_commands, pl::party, party_get_password(), party_struct::partyname, pl::password, pl::peaceful, pl::petmode, pets_terminate_all(), PLAYER, player_get_own_title(), player_has_own_title(), Settings::playerdir, liv::Pow, PROFILE_BEGIN, PROFILE_END, QUERY_FLAG, quest_first_player_save(), range_none, pl::rejoin_party, SAVE_ERROR_OK, SAVE_FLAG_NO_REMOVE, SAVE_FLAG_SAVE_UNPAID, SAVE_MODE, save_object(), pl::savebed_map, SET_FLAG, Settings::set_title, settings, pl::shoottype, pl::socket, ST_GET_PARTY_PASSWORD, ST_PLAYING, pl::state, liv::Str, tempnam_secure(), pl::ticks_played, Settings::tmpdir, TRUE, pl::unapply, unapply_never, unapply_nochoice, pl::unarmed_skill, pl::usekeys, and liv::Wis.

Referenced by account_play_cmd(), apply_savebed(), check_login(), command_kick2(), command_save(), do_server(), drop_object(), emergency_save(), enter_exit(), kill_player_not_permadeath(), kill_player_permadeath(), player_changer_type_process(), and process_players1().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ verify_player()

int verify_player ( const char *  name,
char *  password 
)

This verify that a character of name exits, and that it matches password.

Parameters
nameplayer name.
passwordplayer's password, not encrypted.
Return values
0there is match.
1no such player.
2incorrect password.

Definition at line 111 of file login.c.

References buf, check_password(), first_player, llevDebug, llevError, Settings::localdir, LOG(), MAX_BUF, give::name, obj::name, pl::next, pl::ob, Settings::playerdir, and settings.

Referenced by account_add_player_cmd(), and create_player_cmd().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ wrong_password()

static void wrong_password ( object op)
static

Simple function to print errors when password is not correct, and reinitialise the name.

Parameters
opplayer.

Definition at line 487 of file login.c.

References draw_ext_info(), FREE_AND_COPY, get_name(), llevInfo, LOG(), MAX_PASSWORD_FAILURES, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_LOGIN, NDI_UNIQUE, Ns_Dead, and give::op.

Referenced by check_login().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: