#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <gdbm.h> #include <time.h> #include <errno.h> #include "kernel.h" int main(void) { PERSONA p; GDBM_FILE dbf; datum in; datum key; datum nextkey; FILE *dumpf; dbf = gdbm_open(DATA_DIR UAF_RAND, sizeof(PERSONA), GDBM_READER, S_IRUSR|S_IWUSR,0); if (dbf != NULL) { if ((dumpf = fopen(DATA_DIR "users_dump","w")) == NULL) perror("FILE: open()"); else { gdbm_reorganize(dbf); key = gdbm_firstkey(dbf); while(key.dptr != NULL) { in = gdbm_fetch(dbf,key); bcopy(in.dptr,&p,sizeof(PERSONA)); nextkey = gdbm_nextkey(dbf,key); if (p.p_name != '\0') { fprintf(dumpf,"%s\n" /* Idname */ "%s\n" /* Name */ "%s\n" /* Title */ "%s\n" /* Email */ "%s\n" /* Password */ "%s\n" /* Prompt */ "%s\n", /* Last host */ p.p_idname, p.p_name,p.p_title,p.p_email, p.p_passwd, p.p_prompt,p.p_lasthost); fprintf(dumpf,"%ld %d %d %d %d %d %d %d %d\n", p.p_home,p.p_score, p.p_strength, p.p_damage, p.p_armor, p.p_vlevel, p.p_level, p.p_wimpy, p.p_pager); fprintf(dumpf,"0x%08lx:0x%08lx:0x%08lx\n", p.p_sflags.b1, p.p_sflags.b2, p.p_sflags.b3); fprintf(dumpf,"0x%08lx:0x%08lx:0x%08lx\n", p.p_pflags.b1, p.p_pflags.b2, p.p_pflags.b3); fprintf(dumpf,"0x%08lx:0x%08lx:0x%08lx\n", p.p_mask.b1, p.p_mask.b2, p.p_mask.b3); fprintf(dumpf,"0x%08lx:0x%08lx %ld %ld\n", p.p_quests.h, p.p_quests.l, p.p_last_on, p.p_id); fprintf(dumpf,"%d %d %d %d\n", p.p_killed, p.p_died, p.p_questpoints, p.p_losses); } if (key.dptr != NULL) free(key.dptr); if (in.dptr != NULL) free(in.dptr); key = nextkey; } fclose(dumpf); } gdbm_close(dbf); } else perror("GDBM: open()"); }