userinfo.c-Dateireferenz

#include "/secure/master.h"
#include "/sys/files.h"
Include-Abhängigkeitsdiagramm für userinfo.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define P_GUILD_DEFAULT_SPELLBOOK   "guild_sb"
#define GUILDMASTER   "/secure/gildenmaster"
#define PLAYERSHELLS

Funktionen

public varargs string * QueryWizardsForUID (string uid, int recursive)
public void ResetUIDAliase ()
public varargs string * QueryUIDAlias (string alias, int rec)
public varargs string * QueryUIDsForWizard (string wizuid, int recursive)
public string * AddWizardForUID (string uid, string wizuid)
public string * RemoveWizardFromUID (string uid, string wizuid)
void RemoveFromCache (string user)
int clear_cache ()
int ResetUIDCache ()
string list_late_players ()
int check_late_player (string str)
public mixed * show_cache ()
public int find_userinfo (string user)
public mixed * get_userinfo (string user)
public string query_player_object (string name)
public int good_password (string str, string name)
public string get_wiz_name (string file)
public int get_wiz_level (string user)
public int query_wiz_level (mixed player)
public string secure_savefile (string name)
public string secure_isavefile (string name)
int update_wiz_level (string user, int lev)
int update_ep (string user, string ep_neu)
int update_ek (string user, string ek_neu)
int update_mq (string user, string mq_neu)
int update_ektips (string user, string ek_neu)
int update_fptips (string user, string fp_neu)
string query_ep (string user)
string query_ek (string user)
string query_mq (string user)
string query_ektips (string user)
string query_fptips (string user)
int set_player_object (string user, string objectname)
int update_password (string old, string new)
int delete_player (string passwd, string real_name)
public mapping get_all_players ()
protected void create ()
void update_late_players ()
protected mixed * get_full_userinfo (string user)
protected void save_userinfo (string user)
protected void set_domains (string player, string *domains)
protected void set_guilds (string player, string *guilds)
protected void _cleanup_uinfo ()
private string * ExpandUIDAlias (string alias, int rec)

Variablen

nosave mapping userlist
string name
string password
string ektips
string fptips
int level
string shell
int creation_date
string ep
string ek
string mq
string * domains
string * guilds
string * uidstotakecare
nosave string * lateplayers
nosave private mapping userids = ([])
nosave private mapping uidaliase = ([])

Makro-Dokumentation

#define GUILDMASTER   "/secure/gildenmaster"

Definiert in Zeile 88 der Datei userinfo.c.

Wird benutzt von austreten(), beitreten(), create() und ExpandUIDAlias().

#define P_GUILD_DEFAULT_SPELLBOOK   "guild_sb"

Definiert in Zeile 86 der Datei userinfo.c.

Wird benutzt von AddSpell(), create() und ExpandUIDAlias().

#define PLAYERSHELLS
Wert:
({"/std/shells/darkelf", "/std/shells/dwarf", \
    "/std/shells/elf", "/std/shells/feline", "/std/shells/hobbit", \
    "/std/shells/human" })

Definiert in Zeile 641 der Datei userinfo.c.


Dokumentation der Funktionen

protected void _cleanup_uinfo (  ) 

Definiert in Zeile 927 der Datei userinfo.c.

00928 {
00929     mixed users;
00930     int i;
00931         
00932     for (users=m_indices(userlist),i=sizeof(users)-1; i>=0;i--)
00933         if ((time()-userlist[users[i],USER_TOUCH]) > 1800
00934             && !funcall(symbol_function('find_player/*'*/),users[i]))
00935             efun::m_delete(userlist,users[i]);
00936 }

public string* AddWizardForUID ( string  uid,
string  wizuid 
)

Definiert in Zeile 209 der Datei userinfo.c.

00209                                                           {
00210     if (!stringp(wizuid) || !strlen(wizuid)
00211         || !IS_LEARNER(wizuid))
00212         return(({}));
00213 
00214     //Zugriff nur als EM oder jemand, der fuer die UID zustaendig ist.
00215     if ( funcall(symbol_function('secure_level)) < ARCH_LVL 
00216         && member(
00217             QueryUIDsForWizard(funcall(symbol_function('secure_euid))),
00218             uid) == -1)
00219         return(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]);
00220 
00221     if (!pointerp(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]))
00222         //Array neu anlegen
00223         userlist[wizuid,USER_UIDS_TO_TAKE_CARE]=({uid});
00224     else {
00225         //Ein Array schon vorhanden
00226         if (member(userlist[wizuid,USER_UIDS_TO_TAKE_CARE],uid)==-1)
00227             //uid nicht drin
00228             userlist[wizuid,USER_UIDS_TO_TAKE_CARE]=
00229               userlist[wizuid,USER_UIDS_TO_TAKE_CARE]+({uid});
00230     }
00231     save_userinfo(wizuid);
00232     // aus dem UID-Alias-Cache werfen
00233     efun::m_delete(uidaliase, wizuid);
00234     // Aufruf, um userids und uidaliase zu aktualisieren
00235     QueryUIDsForWizard(wizuid);
00236     return(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]);
00237 }

int check_late_player ( string  str  ) 

Definiert in Zeile 325 der Datei userinfo.c.

Benutzt lateplayers.

Wird benutzt von logon2().

00326 {
00327   if(!lateplayers || !str || str=="")
00328   {
00329     return 0;
00330   }
00331   
00332   if(member(lateplayers,str)!=-1)
00333   {
00334     return 1;
00335   }
00336   
00337   return 0;
00338 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

int clear_cache (  ) 

Definiert in Zeile 281 der Datei userinfo.c.

00281                   {
00282   userlist=m_allocate(0,widthof(userlist));
00283   update_late_players();
00284   return 1;
00285 }

protected void create (  ) 

Definiert in Zeile 804 der Datei userinfo.c.

00805 {
00806   userlist=m_allocate(0,12);
00807   update_late_players();
00808 }

int delete_player ( string  passwd,
string  real_name 
)

Definiert in Zeile 748 der Datei userinfo.c.

Benutzt find_userinfo(), get_wiz_level(), LEARNER_LVL, LIBSAVEDIR, m_delete(), MAILDIR, P_SECOND, password, PO, SECUREDIR, SEER_LVL, TBanishName(), TI, TO, TP, update_password(), USER_PASSWORD und userlist.

Wird benutzt von self_delete2().

00749 {
00750   int wlevel;
00751   string part_filename;
00752 
00753   if (!PO || PO!=TP || PO!=TI || real_name != getuid(PO) ||
00754       !find_userinfo(real_name))
00755     return 0;
00756   mixed erstie=(mixed)this_interactive()->QueryProp(P_SECOND);
00757   password = userlist[real_name,USER_PASSWORD];
00758   wlevel = get_wiz_level(real_name);
00759   if (!update_password(passwd, passwd)) return 0;
00760 
00761   // Spielpausen aufheben (sonst kann man als Spieler nen Namen sperren).
00762   TBanishName(real_name, 0);
00763 
00764   part_filename="/"+real_name[0..0]+"/"+real_name+".o";
00765   rm("/"SECUREDIR"/save"+part_filename);
00766   rm("/"LIBSAVEDIR"/"+part_filename);
00767   rm("/"MAILDIR"/"+part_filename);
00768   
00769   efun::m_delete(userlist,real_name);
00770   
00771   if (wlevel >= LEARNER_LVL)
00772     TO->BanishName(real_name, "So hiess mal ein Magier hier");
00773   else if (wlevel >= SEER_LVL)
00774     TO->BanishName(real_name, "So hiess mal ein Seher hier");
00775   
00776   funcall( symbol_function('log_file), "USERDELETE",
00777            sprintf("%s: %s %s(%s)\n",
00778                    ctime(time()),real_name,
00779                    (stringp(erstie)?sprintf("[Erstie: %s] ",erstie):""),
00780                    query_ip_number(TI)));
00781 
00782   return 1;
00783 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

private string* ExpandUIDAlias ( string  alias,
int  rec 
)

Definiert in Zeile 946 der Datei userinfo.c.

Benutzt __MAX_MAPPING_KEYS__, DOMAINDIR, find_userinfo(), FSIZE_DIR, guild, GUILDDIR, GUILDID, GUILDMASTER, P_GUILD_DEFAULT_SPELLBOOK, PROJECTDIR, QueryUIDsForWizard(), uidaliase und uids.

00946                                                       {
00947   
00948   string *uids=({});
00949 
00950   // Regionsname?
00951   if (file_size("/"DOMAINDIR"/"+alias) == FSIZE_DIR) {
00952     //generelle Pseudo-UID 'd.region' und 'region' fuer geloeschte
00953     //Magier dieser Region
00954     uids += ({DOMAINDIR"."+alias, alias});
00955     //alle Magier-Verzeichnisse ermitteln:
00956     string tmpdir="/"DOMAINDIR"/"+alias+"/";
00957     foreach(string dir: (get_dir(tmpdir+"*") || ({}))
00958                           - ({".","..",".svn"})) {
00959       // schauen, obs nen (sichtbares) Verzeichnis ist und ob der Magier
00960       // existiert. Letzteres aber nur, falls die Rekursionstiefe min. 100
00961       // ist, da beim Nachschauen eines Magiers mit (mehreren)
00962       // RM-Posten, der in der Region RMs aus anderen Regionen hat, leicht
00963       // Rekursionstiefen von 20 (*4) auftreten koennen, wenn noch gar
00964       // keine UIDs im Cache sind (find_userinfo() ruft indirekt diese
00965       // Funktion).
00966       if (dir[0]!='.' 
00967           && file_size(tmpdir+dir) == FSIZE_DIR
00968 #if __MAX_RECURSION__ > 99
00969           && find_userinfo(dir)
00970 #endif
00971           )
00972           uids += ({DOMAINDIR"."+alias+"."+dir});
00973     }
00974   }
00975   // Gildenname?
00976   else if (GUILDMASTER->ValidGuild(alias)) {
00977       uids += ({GUILDID"."+alias});
00978       //hat die Gilde ein Projektverzeichnis?
00979       if (file_size("/"PROJECTDIR"/"+alias) == FSIZE_DIR) {
00980           uids += ({PROJECTDIR"."+alias});
00981       }
00982       // jetzt haben dummerweise die Spellbooks meist nicht den gleichen
00983       // Namen wie die Gilde. D.h. die Gilde muss nun noch nach dem
00984       // Namen des Spellbooks gefragt werden, weil dessen UID nicht
00985       // unbedingt gleich dem der Gilde ist. *seufz*
00986       string spbook;
00987       object guild;
00988       catch(guild=load_object(GUILDDIR"/"+alias));
00989       if (objectp(guild) 
00990           && (strlen(spbook=(string)
00991                  guild->QueryProp(P_GUILD_DEFAULT_SPELLBOOK)))
00992                 && spbook!=alias)
00993           uids += ({GUILDID"."+spbook});
00994   }
00995   // Spieler/Magier-UID?
00996   else if (find_userinfo(alias)) {
00997     // wenn rec > 0, wird eine Spieler-UID als Alias aufgefasst und zu seinen
00998     // UIDs expandiert. Hierbei erfolgt aber nur eine Rekursion.
00999     if (!rec) uids = QueryUIDsForWizard(alias, 1);
01000     else uids = ({alias});
01001   }
01002   // Projektkrams? -> alle Subdirs von /p/ ausser /p/service selber.
01003   else if (alias==PROJECTDIR) {
01004     foreach(string dir: (get_dir("/"PROJECTDIR"/*") || ({}))
01005                          - ({".","..",".svn","service"})) {
01006       if (dir[0]!='.' &&
01007           file_size("/"PROJECTDIR"/"+dir) == FSIZE_DIR)
01008           uids += ({PROJECTDIR"."+dir});
01009     }
01010   }
01011   // p.service? -> Alle Subdirs von /p/service.
01012   else if (alias==PROJECTDIR".service") {
01013     foreach(string dir: (get_dir("/"PROJECTDIR"/service/*") || ({}))
01014                          - ({".","..",".svn"})) {
01015       if (dir[0]!='.' &&
01016           file_size("/"PROJECTDIR"/service/"+dir) == FSIZE_DIR)
01017           uids += ({PROJECTDIR".service."+dir});
01018     }
01019   }
01020   // wenn nix zutrifft -> unexpandiert zurueckgeben
01021   else
01022     uids = ({alias});
01023 
01024   // im Cache vermerken
01025   if (sizeof(uidaliase) >= __MAX_MAPPING_KEYS__)
01026       uidaliase=m_allocate(1);
01027   // auch vermerken, wenn keine UIDs ermittelt wurden.
01028   uidaliase += ([alias: uids]);
01029   return uids;
01030 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public int find_userinfo ( string  user  ) 

Definiert in Zeile 346 der Datei userinfo.c.

Benutzt __MAX_MAPPING_KEYS__, __MAX_MAPPING_SIZE__, creation_date, domains, ek, ektips, ep, file(), fptips, guilds, i, LEARNER_LVL, level, mq, password, QueryUIDsForWizard(), restore_object(), secure_savefile(), shell, uidstotakecare, USER_LEVEL, USER_TOUCH und userlist.

Wird benutzt von add_domain_master(), add_guild_master(), advance_wizlevel(), delete_player(), domain_master(), ExpandUIDAlias(), get_userinfo(), get_wiz_level(), guild_master(), query_ek(), query_ektips(), query_ep(), query_fptips(), query_mq(), query_player_object(), QueryWizardsForUID(), remove_domain_master(), remove_guild_master(), set_player_object(), update_ek(), update_ektips(), update_ep(), update_fptips(), update_mq(), update_password() und update_wiz_level().

00346                                       {
00347   string file;
00348   int i;
00349   if (!stringp(user) || !strlen(user) 
00350       || member(user,' ')!=-1 || member(user,':')!=-1)
00351     return 0;
00352   if (!member(userlist,user)) {
00353       //erstmal schauen, ob wir mit einem neuen Eintrag nicht die max.
00354       //Mapping-Groessen ueberschreiten, wenn ja, einen Eintrag loeschen
00355       //BTW: widthof()+1 ist richtig so.
00356       //BTW2: Ich hoffe, die max. Arraygroesse ist immer gross genug, sollte 
00357       //sie aber sein bei ner Mappingbreite von 10.
00358       // BTW3: Dieses Rausloeschen von einem Eintrag bei Erreichen der Grenze
00359       // erhoeht die benoetigten Ticks fuer diese Funktion um das 5-6fache und
00360       // die noetige Zeit um das 70fache. Daher wird der Cache bei Erreichen
00361       // der Grenze jetzt einfach geloescht.
00362       if ( ( (i=sizeof(userlist)+1) >= __MAX_MAPPING_KEYS__) 
00363           || (( i * (widthof(userlist)+1)) >
00364                  __MAX_MAPPING_SIZE__))    
00365           //efun::m_delete(userlist,m_indices(userlist)[0]);
00366           userlist=m_allocate(1,widthof(userlist));
00367 
00368       // Usersavefile finden
00369       if ((file=secure_savefile(user))=="") {
00370         // User gibt es nicht, aber Anfrage cachen
00371           userlist+=([user: "NP"; -1; ({}); "LOCKED"; -1; time(); ""; ""; "";
00372           ({});"";""; 0 ]);
00373           return 0;
00374       }
00375       password="";
00376       ep="";
00377       ek="";
00378       mq="";
00379       guilds=({});
00380       ektips="";
00381       fptips="";
00382       uidstotakecare=0;
00383       if (!restore_object(file)) return 0;
00384       userlist+=([user: password; level; domains; shell; creation_date; 
00385           time();ep; ek; mq; guilds; ektips; fptips; uidstotakecare]);
00386       // die speziellen UIDs, fuer die dieser Magier zustaendig ist, ermitten
00387       // und gleichzeitig im entsprechenden Mapping fuers Reverse-Loopup
00388       // speichern.
00389       if (level >= LEARNER_LVL)
00390         QueryUIDsForWizard(user);
00391   }
00392   userlist[user,USER_TOUCH]=time();
00393   if (userlist[user,USER_LEVEL]==-1) return 0;
00394   return 1;
00395 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public mapping get_all_players (  ) 

Definiert in Zeile 788 der Datei userinfo.c.

00788                                  {
00789   string *dirs=({"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
00790       "p","q","r","s","t","u","v","w","x","y","z"});
00791   mapping allplayer=([]);
00792   string *tmp;
00793   foreach(string dir: dirs) {
00794     tmp=get_dir("/secure/save/"+dir+"/*")
00795       + get_dir("/secure/save_inactive/"+dir+"/*")
00796       - ({".","..",".KEEP",".svn"});
00797     allplayer[dir] = map(tmp,function string (string fn) 
00798                      { return explode(fn,".")[0]; } );
00799   }
00800   return allplayer;
00801 }

protected mixed* get_full_userinfo ( string  user  ) 

Definiert in Zeile 835 der Datei userinfo.c.

Wird benutzt von advance_wizlevel() und CheckPasswd().

00835                                                 {
00836   if(!user||user=="")
00837     return 0;
00838   user=explode(user,".")[0];
00839   if (!member(userlist,user) && !find_userinfo(user))
00840     return 0;
00841 
00842   return({user,userlist[user,USER_PASSWORD],userlist[user,USER_LEVEL],
00843       userlist[user,USER_DOMAIN], userlist[user,USER_OBJECT],
00844       userlist[user,USER_CREATION_DATE], 0, 0, userlist[user,USER_GUILD],
00845       userlist[user,USER_EKTIPS],userlist[user,USER_FPTIPS],
00846       userlist[user,USER_UIDS_TO_TAKE_CARE]});
00847 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public mixed* get_userinfo ( string  user  ) 

Definiert in Zeile 398 der Datei userinfo.c.

Benutzt find_userinfo(), USER_CREATION_DATE, USER_DOMAIN, USER_EKTIPS, USER_FPTIPS, USER_GUILD, USER_LEVEL, USER_OBJECT, USER_UIDS_TO_TAKE_CARE und userlist.

Wird benutzt von add_domain_master(), add_guild_master(), domain_master(), guild_master(), remove_domain_master(), remove_guild_master() und Validate().

00398                                         {
00399   if(!user||user=="")
00400     return 0;
00401   user=explode(user,".")[0];
00402   if (!member(userlist,user) && !find_userinfo(user))
00403     return 0;
00404 
00405   if (userlist[user,USER_LEVEL]==-1) return 0;
00406 
00407   return({user,"##"+user,userlist[user,USER_LEVEL],
00408       userlist[user,USER_DOMAIN], userlist[user,USER_OBJECT],
00409       userlist[user,USER_CREATION_DATE], 0, 0,
00410       userlist[user,USER_GUILD],
00411       userlist[user,USER_EKTIPS],userlist[user,USER_FPTIPS],
00412       userlist[user,USER_UIDS_TO_TAKE_CARE]});
00413 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public int get_wiz_level ( string  user  ) 

Definiert in Zeile 491 der Datei userinfo.c.

Benutzt find_userinfo(), USER_LEVEL und userlist.

Wird benutzt von add_domain_master(), delete_player(), FtpAccess(), query_wiz_level() und valid_write().

00491                                       {
00492   if (user && find_userinfo(user)) 
00493     return userlist[user,USER_LEVEL];
00494   //return 0 if no user given (return type needed)
00495   return(0);
00496 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public string get_wiz_name ( string  file  ) 

Definiert in Zeile 486 der Datei userinfo.c.

Benutzt creator_file().

00486                                         {
00487     return creator_file(file);
00488 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public int good_password ( string  str,
string  name 
)

Definiert in Zeile 424 der Datei userinfo.c.

Benutzt i, QueryBanished() und secure_savefile().

Wird benutzt von update_password().

00425 {
00426     string rts;
00427     int i, n;
00428 
00429     if ( str[0] == '!' ){
00430         tell_object( this_player() || this_object(), "Ein Ausrufungszeichen "
00431                      "('!') als erster Buchstabe des Passwortes wuerde zu\n"
00432                      "Problemen fuehren. Such Dir bitte ein anderes Passwort "
00433                      "aus.\n" );
00434         return 0;
00435     }
00436 
00437     if ( strlen(str) < 6 ){
00438         tell_object( this_player() || this_object(),
00439                      "Das Passwort muss wenigstens 6 Zeichen lang sein.\n" );
00440         return 0;
00441     }
00442 
00443     str = lower_case(str);
00444     rts = "";
00445 
00446     // Zahlen/Sonderzeichen am Anfang oder Ende des Passwortes
00447     // (z.B. "merlin99") sind nicht wirklich einfallsreich.
00448     while ( strlen(str) && (str[0] > 'z' || str[0] < 'a') ){
00449         rts += str[0..0];
00450         str = str[1..];
00451     }
00452 
00453     while ( strlen(str) && (str[<1] > 'z' || str[<1] < 'a') ){
00454         rts += str[<1..];
00455         str = str[0..<2];
00456     }
00457 
00458     // Anzahl unterschiedlicher Zeichen merken, die herausgeschnitten wurden
00459     n = sizeof( mkmapping(efun::explode( rts, "" )) );
00460     rts = "";
00461 
00462     for ( i = strlen(str); i--; )
00463         rts += str[i..i];
00464 
00465     // Eigener Name als Passwort bzw. eigener Name rueckwaerts
00466     if ( str == lower_case(name) || rts == lower_case(name) ||
00467          // Name eines anderen Mudders (Erstie?)
00468          secure_savefile(str) != "" || secure_savefile(rts) != "" ||
00469          // Name von der Banish-Liste
00470          QueryBanished(str) || QueryBanished(rts) ||
00471          // Name eines vorhandenen NPC o.ae.
00472          funcall( symbol_function( 'find_living/*'*/ ), str ) ||
00473          funcall( symbol_function( 'find_living/*'*/ ), rts ) ||
00474          // Zuwenig verschiedene Zeichen
00475          sizeof( mkmapping(efun::explode( str, "" )) ) + n < 4 ){
00476         tell_object( this_player() || this_object(),
00477                      "Das Passwort waere zu einfach zu erraten. Nimm bitte "
00478                      "ein anderes.\n" );
00479         return 0;
00480     }
00481 
00482     return 1;
00483 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

string list_late_players (  ) 

Definiert in Zeile 302 der Datei userinfo.c.

Benutzt i und lateplayers.

00303 {
00304   string ret;
00305   int size,i;
00306   
00307   ret= "************************************\n";
00308   ret+="*       Verstorbene Spieler        *\n";
00309   ret+="************************************\n";
00310   
00311   if(!lateplayers || (size=sizeof(lateplayers))==0)
00312   {
00313     return ret;
00314   }
00315   
00316   for(i=0;i<size;i++)
00317   {
00318     ret+=lateplayers[i]+"\n";
00319   }
00320   
00321   return ret;
00322 }

string query_ek ( string  user  ) 

Definiert in Zeile 614 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, USER_EK und userlist.

00614                              {
00615   if (getuid(PO) != ROOTID) return 0;
00616   if (!find_userinfo(user)) return 0;
00617   return userlist[user,USER_EK];
00618 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

string query_ektips ( string  user  ) 

Definiert in Zeile 628 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, USER_EKTIPS und userlist.

00628                                  {
00629   if (getuid(PO) != ROOTID) return 0;
00630   if (!find_userinfo(user)) return 0;
00631   return userlist[user,USER_EKTIPS];
00632 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

string query_ep ( string  user  ) 

Definiert in Zeile 607 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, USER_EP und userlist.

00607                              {
00608   if (getuid(PO) != ROOTID) return 0;
00609   if (!find_userinfo(user)) return 0;
00610   return userlist[user,USER_EP];
00611 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

string query_fptips ( string  user  ) 

Definiert in Zeile 635 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, USER_FPTIPS und userlist.

00635                                  {
00636   if (getuid(PO) != ROOTID) return 0;
00637   if (!find_userinfo(user)) return 0;
00638   return userlist[user,USER_FPTIPS];
00639 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

string query_mq ( string  user  ) 

Definiert in Zeile 621 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, USER_MQ und userlist.

00621                              {
00622   if (getuid(PO) != ROOTID) return 0;
00623   if (!find_userinfo(user)) return 0;
00624   return userlist[user,USER_MQ];
00625 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public string query_player_object ( string  name  ) 

Definiert in Zeile 416 der Datei userinfo.c.

Benutzt find_userinfo(), USER_OBJECT, userentry und userlist.

Wird benutzt von renew_player_object().

00417 {
00418   mixed *userentry;
00419   if( !find_userinfo(name) ) return "";
00420   return userlist[name,USER_OBJECT];
00421 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

int query_wiz_level ( mixed  player  ) 

Definiert in Zeile 499 der Datei userinfo.c.

Wird benutzt von __auswerten(), _query_info(), _set_earmuffs(), actions(), allowed(), befoerdere(), call_out_info(), check(), check_arch(), command_me(), CommandScan(), create_wizard(), do_mail(), finger_single(), format_paths(), get_domain_homes(), HitFunc(), is_greater(), is_wiz_level_ge(), is_wiz_level_lt(), logaccess(), Message(), scan(), search_for_path(), secure(), security(), set_max_guests(), sponsoring(), stat(), valid_read(), valid_write() und WizLevel().

00500 {
00501     if ( objectp(player) && query_once_interactive(player) )
00502         return get_wiz_level( getuid(player) );
00503     else {
00504         // erstmal UID ermitteln, falls Objekt
00505         //if (objectp(player))
00506         //    player=getuid(player);
00507         if ( stringp(player) ) {
00508             if( player[0..1]==DOMAINDIR"." ) return 25;
00509             if( player[0..5]==GUILDID"." ) 
00510                 return WIZLVLS[GUILDID];
00511             if( player[0..1]==PROJECTDIR"." ) return 21;
00512             // die alte Loesung mit || verhaelt sich falsch, wenn ein UID ne
00513             // spezielle ist, der Level 0 zugeordnet wurde und es einen
00514             // Spieler mit diesem namen gibt.
00515             if (member(WIZLVLS,player)) 
00516                 return(WIZLVLS[player]);
00517             return get_wiz_level(player);
00518         }
00519     }
00520     return 0;
00521 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public varargs string* QueryUIDAlias ( string  alias,
int  rec 
)

Definiert in Zeile 105 der Datei userinfo.c.

00105                                                             {
00106   string *uids;
00107   if (!stringp(alias) || !strlen(alias))
00108       return ({});
00109   // Wen im cache, gehts schnell.
00110   if (member(uidaliase, alias))
00111       uids = uidaliase[alias];
00112   else
00113       uids = ExpandUIDAlias(alias, rec);
00114 
00115   if (extern_call())
00116     return copy(uids);
00117   
00118   return(uids);
00119 }

public varargs string* QueryUIDsForWizard ( string  wizuid,
int  recursive 
)

Definiert in Zeile 126 der Datei userinfo.c.

Wird benutzt von access_check(), ExpandUIDAlias() und find_userinfo().

00126                                                                         {
00127     string *uids, *tmp, *uidstoadd;
00128     int i;
00129 
00130     if (!stringp(wizuid) || !strlen(wizuid) || !IS_LEARNER(wizuid))
00131         return(({}));
00132 
00133     if (!find_userinfo(wizuid))
00134         return(({}));
00135 
00136     uidstoadd=({}); //diese werden hinterher in userids gespeichert.
00137 
00138     // als erstes die ratebaren UIDs. ;-)
00139     uids=({wizuid});
00140     // Regionen ermitteln, wo wizuid ein Verzeichnis hat und entsprechende
00141     // UIDs anhaengen:
00142     foreach(string region: get_domain_homes(wizuid)) {
00143         uids+=({ sprintf(DOMAINDIR".%s.%s",region,wizuid) });
00144     }
00145     // Verzeichnis in /p/service?
00146     if (file_size(PROJECTDIR"/service/"+wizuid) == FSIZE_DIR)
00147         uids+=({PROJECTDIR".service."+wizuid});
00148 
00149     // Gildenchef?
00150     if (pointerp(userlist[wizuid,USER_GUILD])) {
00151         foreach(string gilde: userlist[wizuid,USER_GUILD]) {
00152           uidstoadd += QueryUIDAlias(gilde);
00153         }
00154     }
00155     // Regionsmagier?
00156     if (pointerp(userlist[wizuid,USER_DOMAIN])) {
00157         foreach(string domain: userlist[wizuid,USER_DOMAIN]) {
00158             //generelle Pseudo-UID 'd.region' und 'region' fuer geloeschte
00159             //Magier dieser Region vormerken, um sie hinterher fuers
00160             //Reverse-Lookup ins uid-Mapping zu schreiben.
00161             string *pseudo=({DOMAINDIR"."+domain, domain});
00162             uidstoadd += pseudo;
00163             // Rest macht QueryUIDAlias, dabei aber die von der Funktion
00164             // ebenfalls gelieferten Pseudo-UIDs wieder abziehen.
00165             uids += QueryUIDAlias(domain) - pseudo;
00166         }
00167     }
00168     // jetzt noch nachgucken, fuer welche UIDs dieser Magier explizit noch
00169     // zustaendig ist.
00170     if (pointerp(userlist[wizuid,USER_UIDS_TO_TAKE_CARE])) {
00171     // dies koennte etwas a la "region" oder "anderermagier" sein, d.h. dieser
00172     // Magier ist fuer alle UIDs von 'andermagier' auch zustaendig. Daher muss
00173     // jedes davon durch QueryUIDAlias() (was im Falle von Spielern wiederum
00174     // QueryUIDsForWizard() ruft, aber die Rekursion im Falle von Spielern ist
00175     // auf 1 begrenzt).
00176         foreach(string uid2: userlist[wizuid,USER_UIDS_TO_TAKE_CARE]) {        
00177             uidstoadd += QueryUIDAlias(uid2, recursive);
00178         }
00179     }
00180 
00181     // so, in uidstoadd stehen UIDs drin, die nicht Magiername selber,
00182     // d.region.magier oder p.service.magier sind und bei welchen folglich das
00183     // Mapping UIDs-nach-Magier nur mit einer Liste moeglich ist. In die
00184     // werden die uids nun eingetragen. (z.B. d.region)
00185     if (sizeof(uidstoadd)) {
00186         // genug Platz in userids? Sonst welche rauswerfen. :-/ 
00187         // (besser als bug) TODO: Auf 10k begrenzen -> max Arraygroesse!
00188         if ( sizeof(userids)+(i=sizeof(uidstoadd))               
00189             >= __MAX_MAPPING_KEYS__) {
00190             foreach(string tmpuid: m_indices(userids)[0..i])        
00191               efun::m_delete(userids,tmpuid);  
00192         }
00193         foreach(string tmpuid: uidstoadd) {  
00194             if (member(userids,tmpuid)) {  
00195                 //User dem Array hinzufuegen, wenn noch nicht drin.
00196                 if (member(userids[tmpuid],wizuid)==-1)
00197                     userids[tmpuid]=userids[tmpuid]+({wizuid});              
00198             }
00199             //sonst neuen Eintragen hinzufuegen            
00200             else
00201                 m_add(userids,tmpuid,({wizuid}));          
00202         }
00203     } // Ende spez. uids speichern
00204     
00205     return(uids+uidstoadd);
00206 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public varargs string* QueryWizardsForUID ( string  uid,
int  recursive 
)

Definiert in Zeile 34 der Datei userinfo.c.

Benutzt find_userinfo(), QueryWizardsForUID() und userids.

Wird benutzt von QueryWizardsForUID().

00034                                                                      {
00035 
00036     if (!stringp(uid) || !strlen(uid))
00037         return(({}));
00038 
00039     string *tolookup=({uid}); //diese spaeter in userids nachgucken.
00040     string *wizards=({});
00041     // Schauen, was automatisch ermittelt werden kann.
00042     string *parts=explode(uid,".");
00043     switch(sizeof(parts)) {
00044          case 3:
00045           // z.B. d.region.magier und p.service.magier
00046           if (find_userinfo(parts[2]))
00047               //Magier existiert, reinschreiben.
00048               wizards+=({parts[2]});
00049           if (parts[0]=="d")
00050               // d.region noch nachgucken (RMs)
00051               tolookup=({implode(parts[0..1],".")});
00052           break;
00053         //case 2:
00054           // GUILD.gilde, p.project, d.region
00055           // koennen nur in userids nachgeguckt werden (s.u. tolookup)
00056           // muessen da als GUILD.*, d.* und p.* drinstehen!
00057         case 1:
00058           // kein Punkt drin. Entweder Magier-ID oder spezielle ID
00059           // (letztere wird unten noch per tolookup nachgeguckt)
00060           if (find_userinfo(parts[0]))
00061               wizards+=({parts[0]});
00062           break;
00063     }
00064     // jetzt in userids nachschlagen
00065     foreach(uid: tolookup) {
00066         if (member(userids,uid))
00067             wizards+=userids[uid];
00068     }
00069     // so. Nun kann es aber noch sein, dass in userids sowas wie
00070     // "d.wald.atamur":({atamur}) und "atamur":({"rumata"}) drinsteht, also
00071     // ein Magier sozusagen fuer Kram eines anderen verantwortlich ist. D.h.
00072     // nochmal durch QueryWizardsForUID() schicken (das ist dann allerdings nicht
00073     // weiter rekursiv).
00074     if (!recursive) {
00075       foreach(uid: wizards) {
00076         //es ist moeglich, in der Schleife wizards zu vergroessern, ohne dass
00077         //es Einfluss auf die Schleife hat.        
00078         wizards += QueryWizardsForUID(uid, 1) - ({uid});
00079       }
00080     }
00081     return(m_indices(mkmapping(wizards)));
00082 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void RemoveFromCache ( string  user  ) 

Definiert in Zeile 276 der Datei userinfo.c.

00276                                   {
00277   efun::m_delete(userlist,user);
00278 }

public string* RemoveWizardFromUID ( string  uid,
string  wizuid 
)

Definiert in Zeile 240 der Datei userinfo.c.

00240                                                               {
00241     if (!stringp(wizuid) || !strlen(wizuid)
00242         || !find_userinfo(wizuid))
00243         return(({}));
00244 
00245     //Zugriff nur als EM oder jemand, der fuer die UID zustaendig ist.
00246     if ( funcall(symbol_function('secure_level)) < ARCH_LVL 
00247         && member(
00248             QueryUIDsForWizard(funcall(symbol_function('secure_euid))),
00249             uid)==-1)
00250         return copy(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]);
00251 
00252     // jetzt muss diese wizuid aus allen UIDs in userids geloescht werden, die
00253     // sie bisher enthalten. Hierzu sollte QueryUIDAlias die potentiell
00254     // drinstehenden UIDs liefern.
00255     foreach(string tuid: QueryUIDAlias(wizuid,0)) {
00256         if (member(userids, tuid) &&
00257             member(userids[tuid],wizuid)!=-1 )
00258             userids[tuid] -= ({wizuid});
00259     }
00260     // wenn es eine UID war, fuer die der Magier explizit zustaendig war,
00261     // entsprechend loeschen. Sonst ist hier Ende.
00262     if (!pointerp(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]))
00263         return ({});
00264     if (member(userlist[wizuid,USER_UIDS_TO_TAKE_CARE],uid)==-1)
00265         return copy(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]);
00266 
00267     // Jetzt aus userlist loeschen.
00268     userlist[wizuid,USER_UIDS_TO_TAKE_CARE] -= ({uid});
00269     save_userinfo(wizuid);
00270     // und userids/uidaliase aktualisieren.
00271     QueryUIDsForWizard(wizuid);
00272     return copy(userlist[wizuid,USER_UIDS_TO_TAKE_CARE]);
00273 }

public void ResetUIDAliase (  ) 

Definiert in Zeile 91 der Datei userinfo.c.

00091                              {
00092   // RM+ duerfen den Cache loeschen (wenn sie z.B. nen neues Verzeichnis
00093   // angelegt haben.)
00094   if (extern_call() 
00095       && funcall(symbol_function('secure_level)) < LORD_LVL)
00096       return;
00097 
00098   uidaliase=([]);
00099 }

int ResetUIDCache (  ) 

Definiert in Zeile 290 der Datei userinfo.c.

00290                     {
00291   // da diese Funktion auch das UID<->Magier-Lookup loescht, darf das nicht
00292   // jeder rufen.
00293   if (extern_call() &&
00294       funcall(symbol_function('secure_level)) < ELDER_LVL)
00295       return -1;
00296   userids=([]);
00297   clear_cache();
00298   return 1;
00299 }

protected void save_userinfo ( string  user  ) 

Definiert in Zeile 850 der Datei userinfo.c.

Wird benutzt von set_player_object(), update_ek(), update_ektips(), update_ep(), update_fptips(), update_mq(), update_password() und update_wiz_level().

00850                                           {
00851   if(!user||user=="")
00852     return;
00853   user=explode(user,".")[0];
00854   if (!member(userlist,user)) return;
00855   name = user;
00856   level = userlist[name,USER_LEVEL];
00857   domains = userlist[name,USER_DOMAIN];
00858   shell = userlist[name,USER_OBJECT];
00859   password = userlist[name,USER_PASSWORD];
00860   creation_date = userlist[name,USER_CREATION_DATE];
00861   if (!creation_date) creation_date = -1;
00862   ep = userlist[name,USER_EP];
00863   if (!ep) ep="";
00864   ek = userlist[name,USER_EK];
00865   if (!ek) ek="";
00866   mq = userlist[name,USER_MQ];
00867   if (!mq) mq="";
00868   guilds = userlist[name,USER_GUILD];
00869   ektips=userlist[name,USER_EKTIPS];
00870   if(!ektips) ektips="";
00871   fptips=userlist[name,USER_FPTIPS];
00872   if(!fptips) fptips="";
00873   uidstotakecare=userlist[name,USER_UIDS_TO_TAKE_CARE];
00874 
00875   if (save_object(SECURESAVEPATH+name[0..0]+"/"+name) != 0) {
00876     // autsch. Buggen damit dieser moeglichst schnell auffaellt, dass hier
00877     // Savefiles in /secure/save/ nicht geschrieben wurden.
00878     raise_error(sprintf(
00879           "Savefile %O konnte nicht erstellt werden!\n",
00880           SECURESAVEPATH+name[0..0]+"/"+name));
00881   }
00882   // Savefile aus save_inactive loeschen
00883   string inactive = secure_isavefile(user);
00884   if (stringp(inactive) && strlen(inactive))
00885       rm("/"+inactive);
00886 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public string secure_isavefile ( string  name  ) 

Definiert in Zeile 537 der Datei userinfo.c.

Wird benutzt von load_player_object().

00538 {
00539   if(!name||name=="")
00540     return "";
00541   name=explode(name,".")[0];
00542   if (file_size("secure/save_inactive/"+name[0..0]+"/"+name+".o")>=0)
00543     return "secure/save_inactive/"+name[0..0]+"/"+name;
00544   return "";
00545 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public string secure_savefile ( string  name  ) 

Definiert in Zeile 524 der Datei userinfo.c.

Benutzt SECURESAVEPATH.

Wird benutzt von find_userinfo(), good_password(), logon2() und new_logon().

00525 {
00526   if(!name||name=="")
00527     return "";
00528   name=explode(name,".")[0];
00529   if (file_size(SECURESAVEPATH+name[0..0]+"/"+name+".o")>=0)
00530     return SECURESAVEPATH+name[0..0]+"/"+name;
00531   else if (file_size("secure/save_inactive/"+name[0..0]+"/"+name+".o")>=0)
00532     return "secure/save_inactive/"+name[0..0]+"/"+name;
00533   return "";
00534 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

protected void set_domains ( string  player,
string *  domains 
)

Definiert in Zeile 889 der Datei userinfo.c.

Wird benutzt von add_domain_master() und remove_domain_master().

00890 {
00891   // wenn der Magier jetzt Domains nicht mehr hat, muessen die aus 'userids'
00892   // entfernt werden, das uebernimmt RemoveWizardFromUID().
00893   if (pointerp(userlist[player, USER_DOMAIN])) {
00894     string *removeduids=
00895       ((string*)userlist[player, USER_DOMAIN] | domains) - domains;
00896     foreach(string uid: removeduids)
00897       RemoveWizardFromUID(uid, player);
00898   }
00899   // gecachtes Alias fuer player loeschen
00900   efun::m_delete(uidaliase,player);
00901   userlist[player, USER_DOMAIN]=domains;
00902   save_userinfo(player);
00903   // UID-zu-Magier-Mapping aktualisieren
00904   QueryUIDsForWizard(player);
00905 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

protected void set_guilds ( string  player,
string *  guilds 
)

Definiert in Zeile 908 der Datei userinfo.c.

Wird benutzt von add_guild_master() und remove_guild_master().

00909 {
00910   // wenn der Magier jetzt Gilden nicht mehr hat, muessen die aus 'userids'
00911   // entfernt werden, das uebernimmt RemoveWizardFromUID().
00912   if (pointerp(userlist[player, USER_GUILD])) {
00913     string *removeduids=
00914       ((string*)userlist[player, USER_GUILD] | guilds) - guilds;
00915     foreach(string uid: removeduids)
00916       RemoveWizardFromUID(uid, player);
00917   }
00918   // gecachtes Alias fuer player loeschen
00919   efun::m_delete(uidaliase,player);
00920   userlist[player, USER_GUILD]=guilds;
00921   save_userinfo(player);
00922   // UID-zu-Magier-Mapping aktualisieren
00923   QueryUIDsForWizard(player);
00924 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

int set_player_object ( string  user,
string  objectname 
)

Definiert in Zeile 646 der Datei userinfo.c.

Benutzt _get_path(), ARCH_LVL, find_userinfo(), path, ROOTID, save_userinfo(), strftime(), USER_OBJECT und userlist.

Wird benutzt von create_wizard().

00647 {
00648     mixed *path;
00649     string prev;
00650 
00651     // nur EM und ROOT duerfen die Shell eines Charakters aendern
00652     if ( (funcall(symbol_function('secure_level/*'*/)) < ARCH_LVL) &&
00653          (!previous_object() || getuid(previous_object()) != ROOTID) ){
00654         return -1;
00655     }
00656 
00657     if ( objectname == "" )
00658         objectname = 0;
00659 
00660     if ( !stringp(user) || user == "" )
00661         return -6;
00662 
00663     if ( !stringp(objectname) ){
00664         if ( !find_userinfo(user) )
00665             return -4;
00666 
00667         userlist[user, USER_OBJECT] = 0;
00668         save_userinfo(user);
00669         return 1;
00670     }
00671 
00672     if ( catch(load_object(objectname);publish) ) {
00673         write( "Fehler in " + objectname + "!\n" );
00674         return -2;
00675     }
00676 
00677     objectname = _get_path( objectname, 0 );
00678     path = (efun::explode( objectname, "/" ) - ({ "", 0 }));
00679 
00680     if ( sizeof(path) < 3 || path[0] != "std" || path[1] != "shells" )
00681         return -3;
00682 
00683     if ( !find_userinfo(user) )
00684         return -4;
00685 
00686     prev = userlist[user, USER_OBJECT];
00687     userlist[user, USER_OBJECT] = objectname;
00688     save_userinfo(user);
00689 
00690     // Loggen, falls die Aenderung nicht von Login beim Anlegen des Chars
00691     // erfolgt.
00692     if (load_name(this_interactive()) != "/secure/login"
00693         || prev != "") {
00694       if (prev == "") prev ="<keine>";
00695       funcall( symbol_function('log_file), "ARCH/SHELL_AENDERUNGEN",
00696         sprintf( "%s: %O aendert die Shell von %s von %s auf %s (PO: %O)\n",
00697           funcall(symbol_function('strftime),"%Y%m%d-%H%M%S",time()), 
00698           this_interactive(), capitalize(user), prev, objectname,
00699           previous_object()) );
00700     }
00701 
00702     return 1;
00703 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public mixed* show_cache (  ) 

Definiert in Zeile 341 der Datei userinfo.c.

Benutzt userlist.

00341                            {
00342     return m_indices(userlist);
00343 }

int update_ek ( string  user,
string  ek_neu 
)

Definiert in Zeile 571 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, save_userinfo(), USER_EK und userlist.

00571                                          {
00572   if (getuid(PO) != ROOTID) return 0;
00573   if (!find_userinfo(user)) return 0;
00574   userlist[user,USER_EK] = ek_neu;
00575   save_userinfo(user);
00576   return 1;
00577 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

int update_ektips ( string  user,
string  ek_neu 
)

Definiert in Zeile 589 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, save_userinfo(), USER_EKTIPS und userlist.

00589                                              {
00590   if (getuid(PO) != ROOTID) return 0;
00591   if (!find_userinfo(user)) return 0;
00592   userlist[user,USER_EKTIPS] = ek_neu;
00593   save_userinfo(user);
00594   return 1;
00595 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

int update_ep ( string  user,
string  ep_neu 
)

Definiert in Zeile 562 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, save_userinfo(), USER_EP und userlist.

00562                                          {
00563   if (getuid(PO) != ROOTID) return 0;
00564   if (!find_userinfo(user)) return 0;
00565   userlist[user,USER_EP] = ep_neu;
00566   save_userinfo(user);
00567   return 1;
00568 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

int update_fptips ( string  user,
string  fp_neu 
)

Definiert in Zeile 598 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, save_userinfo(), USER_FPTIPS und userlist.

00598                                              {
00599   if (getuid(PO) != ROOTID) return 0;
00600   if (!find_userinfo(user)) return 0;
00601   userlist[user,USER_FPTIPS] = fp_neu;
00602   save_userinfo(user);
00603   return 1;
00604 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

void update_late_players (  ) 

Definiert in Zeile 811 der Datei userinfo.c.

00811                            {
00812   string read;
00813   string *tmp;
00814   
00815   lateplayers=0;
00816   
00817   read=read_file("/secure/LATE_PLAYERS");
00818   if(!read || read=="")
00819   {
00820     return;
00821   }
00822   
00823   tmp=explode(read,"\n");
00824   if(!sizeof(tmp))
00825   {
00826     return;
00827   }         
00828   
00829   lateplayers=tmp; 
00830 }

int update_mq ( string  user,
string  mq_neu 
)

Definiert in Zeile 580 der Datei userinfo.c.

Benutzt find_userinfo(), PO, ROOTID, save_userinfo(), USER_MQ und userlist.

00580                                          {
00581   if (getuid(PO) != ROOTID) return 0;
00582   if (!find_userinfo(user)) return 0;
00583   userlist[user,USER_MQ] = mq_neu;
00584   save_userinfo(user);
00585   return 1;
00586 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

int update_password ( string  old,
string  new 
)

Definiert in Zeile 706 der Datei userinfo.c.

Benutzt crypt, find_userinfo(), good_password(), PO, save_userinfo(), user, USER_PASSWORD und userlist.

Wird benutzt von delete_player().

00707 {
00708     string user;
00709 
00710     // nanu, kein user?
00711     if ( !find_userinfo(user = getuid(PO)) )
00712         return 0;
00713 
00714     // wenn das neue PW unterschiedlich ist, schauen, ob das neue PW ok ist.
00715     if ( old != new && !good_password( new, user ) )
00716         return 0;
00717 
00718     string pwhash = userlist[user, USER_PASSWORD];
00719     string oldpwhash;
00720     if (strlen(pwhash) > 13) {
00721         // MD5-Hash
00722         oldpwhash = md5_crypt(old, pwhash);
00723     }
00724     else if (strlen(pwhash) > 2) {
00725         // Crypt-Hash
00726         oldpwhash = crypt(old, pwhash[0..1]);
00727     }
00728 
00729     // wenn es einen PW-hash gibt, also ein PW gesetzt wird, muss der Hash von
00730     // old mit dem pwhash uebereinstimmen. Leerer Hash oder gar kein Hash
00731     // erlaubt jedes beliebige PW.
00732     if ( stringp(pwhash) && strlen(pwhash) && pwhash != oldpwhash)
00733         return 0;
00734     // an dieser Stelle stimmt 'old' wohl mit dem gesetzten Passwort ueberein.
00735     // Wenn allerdings die Funktion mit old==new aufgerufen wurde, wird hier
00736     // nur 1 zurueckgeben und sonst an sich nix gemacht. Kann nicht weiter
00737     // oben schon gemacht werden, die Shells dies als PW-Pruefung nutzen.
00738     // *seufz*
00739     if (old == new) return 1;
00740 
00741     // dann mal neu setzen
00742     userlist[ user, USER_PASSWORD ] = md5_crypt( new, 0 );
00743     save_userinfo(user);
00744     return 1;
00745 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

int update_wiz_level ( string  user,
int  lev 
)

Definiert in Zeile 551 der Datei userinfo.c.

Benutzt find_userinfo(), ob(), PO, ROOTID, save_userinfo(), USER_LEVEL und userlist.

Wird benutzt von add_domain_master() und advance_wizlevel().

00551                                           {
00552   object ob;
00553 
00554   if (getuid(PO) != ROOTID && extern_call()) return 0;
00555   if (!find_userinfo(user)) return 0;
00556   userlist[user,USER_LEVEL] = lev;
00557   save_userinfo(user);
00558   return 1;
00559 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:


Variablen-Dokumentation

Definiert in Zeile 18 der Datei userinfo.c.

string* domains

Definiert in Zeile 20 der Datei userinfo.c.

string ek

Definiert in Zeile 19 der Datei userinfo.c.

string ektips

Definiert in Zeile 14 der Datei userinfo.c.

string ep

Definiert in Zeile 19 der Datei userinfo.c.

string fptips

Definiert in Zeile 15 der Datei userinfo.c.

string * guilds

Definiert in Zeile 20 der Datei userinfo.c.

nosave string* lateplayers

Definiert in Zeile 21 der Datei userinfo.c.

Wird benutzt von check_late_player() und list_late_players().

int level

Definiert in Zeile 16 der Datei userinfo.c.

string mq

Definiert in Zeile 19 der Datei userinfo.c.

string name

Definiert in Zeile 13 der Datei userinfo.c.

string password

Definiert in Zeile 13 der Datei userinfo.c.

string shell

Definiert in Zeile 17 der Datei userinfo.c.

nosave private mapping uidaliase = ([])

Definiert in Zeile 29 der Datei userinfo.c.

Wird benutzt von ExpandUIDAlias().

string * uidstotakecare

Definiert in Zeile 20 der Datei userinfo.c.

nosave private mapping userids = ([])

Definiert in Zeile 25 der Datei userinfo.c.

Wird benutzt von QueryWizardsForUID().

nosave mapping userlist
Erzeugt am Thu Jun 3 14:41:38 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3