free (users[i]);
}
- free(users);
+ if (users)
+ free(users);
+
users = NULL;
- me = NULL;
f_num = 0;
}
/* ************************************************************* */
+struct dg_user *
+deep_copy (struct dg_user * src)
+{
+ struct dg_user *dest = malloc(sizeof (struct dg_user));
+
+ dest->username = strdup(src->username);
+ dest->email = strdup(src->email);
+ dest->env = strdup(src->env);
+ dest->password = strdup(src->password);
+ dest->flags = src->flags;
+
+ return dest;
+}
+
void
login ()
{
if ((me_index = userexist (user_buf)) != -1)
{
- me = users[me_index];
+ me = deep_copy(users[me_index]);
error = 0;
}
}
getnstr (buf, 20);
if (userexist (buf) == -1)
error = 0;
+ else
+ error = 1;
for (i = 0; i < strlen (buf); i++)
{
/* NOW we can safely kill this */
freefile ();
+
+ if (me)
+ free(me);
exit (1);
return 1;
void finish ();
char dirname[100];
- snprintf (dirname, 100, "/%s%s%s", LOC_TTYRECDIR, username,
- ttyrec_filename);
+ snprintf (dirname, 100, "%s%s", LOC_TTYRECDIR, username);
if (access(dirname, F_OK) != 0)
mkdir (dirname, 0755);
+ snprintf (dirname, 100, "%s%s/%s", LOC_TTYRECDIR, username, ttyrec_filename);
+
if ((fscript = fopen (dirname, "w")) == NULL)
{
perror (dirname);