Example #1
0
File: ct_msg.c Project: Lopo/Lotos
void send_icqpage(UR_OBJECT user, char *inpstr)
{
	char fname[FNAME_LEN], icqnum[ICQ_LEN+1], subj[100], addr[100];
	int on;
	UR_OBJECT ur;
	FILE *fp;

	if (word_count<3) {
		write_usage(user, "%s <user>/<ICQ#> <text>", command_table[ICQPAGE].name);
		return;
		}
	icqnum[0]='\0';
	if (is_number(word[1])) strncpy(icqnum, word[1], ICQ_LEN);
	else {
		if (!(ur=get_user_name(user, word[1]))) {
			if (!(ur=create_user())) {
				vwrite_user(user, "%s: nemozem vytvorit docasny user objekt.\n", syserror);
				write_syslog(ERRLOG, 1, "Unable to create temp user object in send_icqpage()\n");
				return;
				}
			strcpy(ur->name, word[1]);
			if (!load_user_details(ur)) {
				write_user(user, nosuchuser);
				destruct_user(ur);
				destructed=0;
				return;
				}
			on=0;
			}
		else on=1;
		strcpy(icqnum, ur->icq);
		if (!on) {
			destruct_user(ur);
			destructed=0;
			}
		}
	if (icqnum[0]=='\0') {
		write_user(user, "sprava neposlana, chybne alebo nezistitelne ICQ cislo\n");
		return;
		}
	sprintf(fname, "%s/%s.icq", TEMPFILES, user->name);
	if (!(fp=fopen(fname, "w"))) {
		write_user(user, "nemozem vytvorit docasny subor pre spravu\n");
		write_syslog(ERRLOG, 1, "unable to open file in send_icqpage()\n");
		return;
		}
	fprintf(fp, icq_page_email);
	fprintf(fp, "%s\n", remove_first(inpstr));
	fclose(fp);
	sprintf(addr, "*****@*****.**", icqnum);
	sprintf(subj, "ICQ page from %s", user->name);
	send_email(addr, subj, fname);
	write_user(user, "sprava bola odoslana\n");
}
Example #2
0
File: adds.c Project: Lopo/Lotos
void com_nick_grm(UR_OBJECT user)
{
	UR_OBJECT u;
	int on;

	set_crash();
	if ((word_count<2) || (user->level<GOD)) {
		u=user;
		on=1;
		}
	else {
		if (!(u=get_user(word[1]))) {
			if ((u=create_user())==NULL) {
				vwrite_user(user,"%s: nemozem vytvorit docasny user objekt.\n",syserror);
				write_syslog(ERRLOG,1,"Unable to create temporary user object in examine().\n");
				return;
				}
			strcpy(u->name,word[1]);
			if (!load_user_details(u)) {
				write_user(user,nosuchuser);
				destruct_user(u);
				destructed=0;
				return;
				}
			on=0;
			}
		else on=1;
		}
	vwrite_user(user, "2. p - G: %s\n", u->nameg);
	vwrite_user(user, "3. p - D: %s\n", u->named);
	vwrite_user(user, "4. p - A: %s\n", u->namea);
	vwrite_user(user, "6. p - L: %s\n", u->namel);
	vwrite_user(user, "7. p - I: %s\n", u->namei);
	vwrite_user(user, "privl. pre muzsky rod : %s\n", u->namex);
	vwrite_user(user, "privl. pre zensky rod : %s\n", u->namey);
	vwrite_user(user, "privl. pre stredny rod: %s\n", u->namez);
	if (!on) {
		destruct_user(u);
		destructed=0;
		}
	return;
}
Example #3
0
File: boots.c Project: Lopo/Lotos
/*** Get all users from the user directories and add them to the user lists.
     If verbose mode is on, then attempt to get date string as well
     ***/
void process_users(void)
{
	char name[USER_NAME_LEN+3];
	DIR *dirp;
	struct dirent *dp;
	UR_OBJECT u;

	set_crash();
/* open the directory file up */
dirp=opendir(USERFILES);
if (dirp==NULL) {
  fprintf(stderr,"Lotos: Directory open failure in process_users().\n");
  boot_exit(12);
  }
if ((u=create_user())==NULL) {
  fprintf(stderr,"Lotos: Create user failure in process_users().\n");
  (void) closedir(dirp);
  boot_exit(17);
  }
/* count up how many files in the directory - this include . and .. */
while((dp=readdir(dirp))!=NULL) {
  if (!strcmp(dp->d_name,".") || !strcmp(dp->d_name,"..")) continue;
  if (strstr(dp->d_name,".D")) {
    strcpy(name,dp->d_name);
    name[strlen(name)-2]='\0';
    strcpy(u->name,name);
    if (load_user_details(u)) {
      add_user_node(u->name,u->level);
      if (u->level>=WIZ) add_wiz_node(u->name,u->level);
      add_user_date_node(u->name,u->date);
      } /* end if */
    else {
      fprintf(stderr,"Lotos: Could not load userfile for '%s' in process_users().\n",name);
      (void) closedir(dirp);
      boot_exit(18);
      }
    } /* end if */
  reset_user(u);
  } /* end while */
	destruct_user(u);
	closedir(dirp);
}
Example #4
0
/*
 * retrieve_user() and done_retrieve() by Ardant ([email protected])
 * basically the above two functions rolled into one easy function
 * modified to allow for NULL user object
 */
UR_OBJECT
retrieve_user(UR_OBJECT user, const char *name)
{
  UR_OBJECT u;
  UD_OBJECT entry, last;
  int found;
  size_t len;

  len = strlen(name);
  last = NULL;
  found = 0;
  *text = '\0';
  for (entry = first_user_entry; entry; entry = entry->next) {
    if (!strncasecmp(entry->name, name, len)) {
      if (strlen(entry->name) == len) {
        break;
      }
      /* FIXME: Bounds checking */
      strcat(text, found++ % 8 ? "  " : "\n  ");
      strcat(text, entry->name);
      last = entry;
    }
  }
  if (entry) {
    found = 1;
    last = entry;
  }
  if (found > 1) {
    if (user) {
      vwrite_user(user,
                  "\n~FR~OLName is not unique. \"~FT%s~RS~FR~OL\" also matches:\n",
                  name);
      vwrite_user(user, "   %s\n\n", text);
    }
    retrieve_user_type = 0;
    *text = '\0';
    return NULL;
  }
  *text = '\0';
  if (!found) {
    if (user) {
      write_user(user, nosuchuser);
    }
    retrieve_user_type = 0;
    return NULL;
  }
  u = get_user(last->name);
  if (u) {
    retrieve_user_type = 1;
    return u;
  }
  u = create_user();
  if (!u) {
    sprintf(text, "%s: unable to create temporary user object.\n", syserror);
    if (user) {
      write_user(user, text);
    }
    write_syslog(SYSLOG, 1, text);
    *text = '\0';
    retrieve_user_type = 0;
    return NULL;
  }
  strcpy(u->name, last->name);
  if (!load_user_details(u)) {
    destruct_user(u);
    destructed = 0;
    if (user) {
      write_user(user, nosuchuser);
    }
    retrieve_user_type = 0;
    return NULL;
  }
  retrieve_user_type = 2;
  return u;
}
Example #5
0
File: email.c Project: Lopo/Lotos
/*** send smail to the email ccount ***/
void forward_email(char *name, char *from, char *message)
{
	FILE *fp;
	UR_OBJECT u;
	char fname[FNAME_LEN];
	int on=0;

	set_crash();
if (!amsys->forwarding) return;
if ((u=get_user(name))) {
  on=1;
  goto SKIP;
  }
/* Have to create temp user if not logged on to check if email verified, etc */
if ((u=create_user())==NULL) {
  write_syslog(ERRLOG,1,"Unable to create temporary user object in forward_email().\n");
  return;
  }
strcpy(u->name,name);
if (!load_user_details(u)) {
  destruct_user(u);
  destructed=0;
  return;
  }
on=0;
SKIP:
	if (!u->mail_verified) {
		if (!on) {
			destruct_user(u);
			destructed=0;
			}
		return;
		}
	if (!u->autofwd){
		if (!on) {
			destruct_user(u);
			destructed=0;
			}
		return;
		} 

sprintf(fname,"%s/%s.FWD",MAILSPOOL,u->name);
if (!(fp=fopen(fname,"w"))) {
  write_syslog(SYSLOG,0,"Unable to open forward mail file in set_forward_email()\n");
  return;
  }
fprintf(fp,"From: %s\n",reg_sysinfo[TALKERNAME]);
fprintf(fp,"To: %s <%s>\n\n",u->name,u->email);
from=colour_com_strip(from);
fputs(from,fp);
fputs("\n",fp);
message=colour_com_strip(message);
fputs(message,fp);
fputs("\n\n",fp);
fputs(talker_signature,fp);
fclose(fp);
send_email(u->email, "Auto-forward of smail", fname);
write_syslog(SYSLOG,1,"%s had mail sent to their email address.\n",u->name);
if (!on) {
  destruct_user(u);
  destructed=0;
  }
return;
}
Example #6
0
/*
 * Delete a user
 */
void
delete_user(UR_OBJECT user, int this_user)
{
    char name[USER_NAME_LEN + 1];
    UR_OBJECT u;

    if (this_user) {
        /*
         * User structure gets destructed in disconnect_user(), need to keep a
         * copy of the name
         */
        strcpy(name, user->name);
        write_user(user, "\n~FR~LI~OLACCOUNT DELETED!\n");
        vwrite_room_except(user->room, user, "~OL~LI%s commits suicide!\n",
                user->name);
        write_syslog(SYSLOG, 1, "%s SUICIDED.\n", name);
        disconnect_user(user);
        clean_files(name);
        rem_user_node(name);
        return;
    }
    if (word_count < 2) {
        write_user(user, "Usage: nuke <user>\n");
        return;
    }
    *word[1] = toupper(*word[1]);
    if (!strcmp(word[1], user->name)) {
        write_user(user,
                "Trying to delete yourself is the eleventh sign of madness.\n");
        return;
    }
    if (get_user(word[1])) {
        /* Safety measure just in case. Will have to .kill them first */
        write_user(user,
                "You cannot delete a user who is currently logged on.\n");
        return;
    }
    u = create_user();
    if (!u) {
        vwrite_user(user, "%s: unable to create temporary user object.\n",
                syserror);
        write_syslog(SYSLOG | ERRLOG, 0,
                "ERROR: Unable to create temporary user object in delete_user().\n");
        return;
    }
    strcpy(u->name, word[1]);
    if (!load_user_details(u)) {
        write_user(user, nosuchuser);
        destruct_user(u);
        destructed = 0;
        return;
    }
    if (u->level >= user->level) {
        write_user(user,
                "You cannot delete a user of an equal or higher level than yourself.\n");
        destruct_user(u);
        destructed = 0;
        return;
    }
    clean_files(u->name);
    rem_user_node(u->name);
    vwrite_user(user, "\07~FR~OL~LIUser %s deleted!\n", u->name);
    write_syslog(SYSLOG, 1, "%s DELETED %s.\n", user->name, u->name);
    destruct_user(u);
    destructed = 0;
}
Example #7
0
/*
 * read all the user files to check if a user exists
 */
void
recount_users(UR_OBJECT user, char *inpstr)
{
    char filename[80], *s;
    DIR *dirp;
    FILE *fp;
    struct dirent *dp;
    UD_OBJECT entry, next;
    UR_OBJECT u;
    int incorrect, correct, added, removed;

    if (!user->misc_op) {
        user->misc_op = 17;
        write_user(user,
                "~OL~FRWARNING:~RS This process may take some time if you have a lot of user accounts.\n");
        write_user(user,
                "         This should only be done if there are no, or minimal, users currently\n         logged on.\n");
        write_user(user, "\nDo you wish to continue (y|n)? ");
        return;
    }
    user->misc_op = 0;
    if (tolower(*inpstr) != 'y') {
        return;
    }
    write_user(user,
            "\n+----------------------------------------------------------------------------+\n");
    incorrect = correct = added = removed = 0;
    write_user(user, "~OLRecounting all of the users...\n");
    /* First process the files to see if there are any to add to the directory listing */
    write_user(user, "Processing users to add...");
    u = create_user();
    if (!u) {
        write_user(user, "ERROR: Cannot create user object.\n");
        write_syslog(SYSLOG | ERRLOG, 1,
                "ERROR: Cannot create user object in recount_users().\n");
        return;
    }
    /* open the directory file up */
    dirp = opendir(USERFILES);
    if (!dirp) {
        write_user(user, "ERROR: Failed to open userfile directory.\n");
        write_syslog(SYSLOG | ERRLOG, 1,
                "ERROR: Directory open failure in recount_users().\n");
        return;
    }
    /* count up how many files in the directory - this include . and .. */
    for (dp = readdir(dirp); dp; dp = readdir(dirp)) {
        s = strchr(dp->d_name, '.');
        if (!s || strcmp(s, ".D")) {
            continue;
        }
        *u->name = '\0';
        strncat(u->name, dp->d_name, (size_t) (s - dp->d_name));
        for (entry = first_user_entry; entry; entry = next) {
            next = entry->next;
            if (!strcmp(u->name, entry->name)) {
                break;
            }
        }
        if (!entry) {
            if (load_user_details(u)) {
                add_user_node(u->name, u->level);
                write_syslog(SYSLOG, 0,
                        "Added new user node for existing user \"%s\"\n",
                        u->name);
                ++added;
                reset_user(u);
            }
            /* FIXME: Probably ought to warn about this case */
        } else {
            ++correct;
        }
    }
    closedir(dirp);
    destruct_user(u);
    /*
     * Now process any nodes to remove the directory listing.  This may
     * not be optimal to do one loop to add and then one to remove, but
     * it is the best way I can think of doing it right now at 4:27am!
     */
    write_user(user, "\nProcessing users to remove...");
    for (entry = first_user_entry; entry; entry = next) {
        next = entry->next;
        sprintf(filename, "%s/%s.D", USERFILES, entry->name);
        fp = fopen(filename, "r");
        if (!fp) {
            ++removed;
            --correct;
            write_syslog(SYSLOG, 0,
                    "Removed user node for \"%s\" - user file does not exist.\n",
                    entry->name);
            rem_user_node(entry->name);
        } else {
            fclose(fp);
        }
    }
    write_user(user,
            "\n+----------------------------------------------------------------------------+\n");
    vwrite_user(user,
            "Checked ~OL%d~RS user%s.  ~OL%d~RS node%s %s added, and ~OL%d~RS node%s %s removed.\n",
            added + removed + correct, PLTEXT_S(added + removed + correct),
            added, PLTEXT_S(added), PLTEXT_WAS(added), removed,
            PLTEXT_S(removed), PLTEXT_WAS(removed));
    if (incorrect) {
        write_user(user, "See the system log for further details.\n");
    }
    write_user(user,
            "+----------------------------------------------------------------------------+\n");
}