Skip to content
Commits on Source (4)
......@@ -57,7 +57,7 @@ endif
# info strings, do not edit.
DEFS:= -DBUILD_DATE=\"$(shell date +%Y%m%d)\"
DEFS+= -DBUILD_USER=\"$(shell whoami | awk -f $(DEPTH)capitalise.awk)\"
DEFS+= -DBUILD_USER=\"$(shell whoami | sed 's/^./\u&/')\"
DEFS+= -DVER_MAJ=\"$(VERSION_MAJOR)\"
DEFS+= -DVER_MIN=\"$(VERSION_MINOR)\"
DEFS+= -DVER_TWK=\"$(VERSION_TWEAK)\"
......
{
print(toupper(substr($1, 1, 1)) substr($1, 2))
}
......@@ -197,7 +197,7 @@ int add_msg(int folnum, struct user *user, int replyto)
get_str(new->to,NAMESIZE);
strncpy(t,new->to,NAMESIZE);
strip_name(t);
if (is_private(fol,user) && !is_old(t, &usr))
if (is_private(fol,user) && !user_exists(t, &usr))
{
printf(_("Message must be addressed to an existing user.\n"));
free(fol);
......@@ -217,7 +217,7 @@ int add_msg(int folnum, struct user *user, int replyto)
{
printf(_("Send to: "));
get_str(new->to,SUBJECTSIZE);
if (is_private(fol,user) && !is_old(new->to, &usr))
if (is_private(fol,user) && !user_exists(new->to, &usr))
{
printf(_("Message must be addressed to an existing user.\n"));
free(fol);
......
......@@ -15,6 +15,8 @@
#include <time.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <util.h>
#include "talker_privs.h"
#include "special.h"
#include "incoming.h"
......@@ -145,7 +147,7 @@ void edit_user(const char *args, const char *name)
struct user u;
struct person *usr = &u.record;
if (!is_old(name, &u))
if (!user_exists(name, &u))
{
printf(_("Username %s not found.\n"),name);
return;
......@@ -411,7 +413,7 @@ void edit_user(const char *args, const char *name)
char answer[10];
struct user uu;
if (is_old(username, &uu))
if (user_exists(username, &uu))
{
/* it exists, so is it the right person */
if (u.posn != uu.posn)
......@@ -774,7 +776,7 @@ void mesg_edit(const char *args, struct folder *folder, int msgno, struct user *
{
int fd, text;
struct Header head;
char *buff;
_autofree char *buff = NULL;
fd = open_folder_index(folder, FOL_LIVE, O_RDWR, 0);
if (fd < 0)
......@@ -936,7 +938,6 @@ void mesg_edit(const char *args, struct folder *folder, int msgno, struct user *
Unlock_File(fd);
close(fd);
close(text);
free(buff);
}
void time_on(long u)
......
......@@ -288,8 +288,8 @@ static JSBool js_input(JSContext *cx, unsigned int argc, jsval *vp)
size_t ucs2_length, prompt_length, line_length;
const jschar *ucs2_string;
int conv_error;
char *prompt=NULL, *line;
_autofree char *prompt = NULL;
_autofree char *line = NULL;
if(argc > 0) {
if(JSVAL_IS_STRING(argv[0])) {
......@@ -303,8 +303,6 @@ static JSBool js_input(JSContext *cx, unsigned int argc, jsval *vp)
conv_error=convert_string_charset((char *)ucs2_string, "UCS-2", ucs2_length*sizeof(jschar), prompt, "LOCAL//TRANSLIT", prompt_length, NULL, NULL, NULL, NULL, NULL);
if(conv_error<0) {
fprintf(stderr, "js_input: convert_string_charset failed with error: %d\n", conv_error);
free(prompt);
prompt=NULL;
}
}
} else {
......@@ -322,8 +320,6 @@ static JSBool js_input(JSContext *cx, unsigned int argc, jsval *vp)
js_start_timeout();
busy--;
free(prompt);
line_length = sizeof(jschar) * (strlen(line) + 1);
// likewise as this has come straight from a readline we need a convert from local charset
......
......@@ -468,7 +468,7 @@ int main(int argc, char **argv)
b=(char *)getmylogin();
if (b!=NULL)
{
if (is_old(b, user))
if (user_exists(b, user))
list_new_items(user,true);
}else
printf(_("Username not permitted.\n"));
......@@ -480,7 +480,7 @@ int main(int argc, char **argv)
if (b!=NULL)
{
/* try and load user - if ok, view since info */
if (is_old(b, user))
if (user_exists(b, user))
{
/* view since */
list_users_since(user->record.lastlogout);
......@@ -536,7 +536,7 @@ int main(int argc, char **argv)
{
const char *name = argv[msguser_num];
if (!is_old(name, user))
if (!user_exists(name, user))
{
fprintf(stderr,_("%s: User %s not found.\n"), argv[0], name);
exit(-1);
......@@ -559,7 +559,7 @@ int main(int argc, char **argv)
fprintf(stderr,_("%s: Folder %s not found.\n"), argv[0], foldname);
exit(-1);
}
if (!is_old(folduser, user))
if (!user_exists(folduser, user))
{
fprintf(stderr,_("%s: User %s not found.\n"), argv[0], folduser);
exit(-1);
......
......@@ -5,6 +5,8 @@
#include <unistd.h>
#include <string.h>
#include <stdarg.h>
#include <util.h>
#include "talker_privs.h"
#include "special.h"
#include "ipc.h"
......@@ -19,16 +21,18 @@ extern struct user * const user;
void send_mesg(char *from, const char *to, char *text, int wiz)
{
char buff[MAXTEXTLENGTH];
struct user *usr;
_autofree struct user *usr = calloc(1, sizeof(*usr));
usr = user_get(to);
if (! usr) {
if (usr == NULL) {
perror("calloc");
return;
}
if (!user_exists(to, usr)) {
printf(_("User does not exist.\n"));
return;
}
if (! u_reg(usr)) {
printf(_("%s is not registered.\n"),to);
free(usr);
return;
}
if (u_mesg(usr)) {
......@@ -36,12 +40,9 @@ void send_mesg(char *from, const char *to, char *text, int wiz)
printf(_("%s has msg off, writing anyway.\n"),to);
} else {
printf(_("%s has turned messages off.\n"),to);
free(usr);
return;
}
}
free(usr);
snprintf(buff, MAXTEXTLENGTH, "*** %s: %s", from, text);
if (ipc_send_to_username(to, IPC_WIZ, buff) <= 0) {
printf(_("User not logged on.\n"));
......
......@@ -118,6 +118,7 @@ void moderate(void)
if ((foo=read(tmptext,text,head.size))<head.size)
{
printf(_("only %d of %d bytes read.\n"),foo,head.size);
free(text);
return;
}
display_article(&head,tmptext);
......
......@@ -575,8 +575,6 @@ void c_topten(CommandList *cm, int argc, const char **argv, char *args)
{
struct listing *head=NULL;
struct Header hdr;
struct listing *lnew;
struct listing *ptr;
struct folder folder;
int file;
int count;
......@@ -594,7 +592,7 @@ void c_topten(CommandList *cm, int argc, const char **argv, char *args)
if ((file = open_folder_index(&folder, FOL_LIVE, O_RDONLY, 0)) < 0)
return;
lnew=(struct listing *)malloc(sizeof(*lnew));
while(read(file,&hdr,sizeof(hdr))>0)
{
struct listing *listing = head;
......@@ -608,12 +606,12 @@ void c_topten(CommandList *cm, int argc, const char **argv, char *args)
}
else
{
struct listing *lnew = calloc(1, sizeof(*lnew));
strcpy(lnew->name,hdr.from);
lnew->count=1;
lnew->size=hdr.size;
lnew->next=head;
head=lnew;
lnew=(struct listing *)malloc(sizeof(*lnew));
}
}
head=Sort(head);
......@@ -621,12 +619,13 @@ void c_topten(CommandList *cm, int argc, const char **argv, char *args)
printf("Top posters in folder %s\n", folder.name);
printf("In order of Total size of text posted.\n");
ptr=head;
count=2;
while (ptr!=NULL)
while (head != NULL)
{
printf("Name: %*s %3d Msgs. %5d bytes (%2.1fK)\n",NAMESIZE,ptr->name,ptr->count,ptr->size,ptr->size/1024.0);
ptr=ptr->next;
struct listing *l;
printf("Name: %*s %3d Msgs. %5d bytes (%2.1fK)\n", NAMESIZE, head->name,
head->count, head->size, head->size/1024.0);
count++;
if (count>=screen_height-2)
{
......@@ -636,6 +635,9 @@ void c_topten(CommandList *cm, int argc, const char **argv, char *args)
if (*buff=='q' || *buff=='Q') exit(0);
count=0;
}
l = head;
head = head->next;
free(l);
}
}
......
......@@ -74,6 +74,7 @@ void display_article(struct Header *tmp, int datafile)
{
printf("Failed to read entire data entry");
perror("read data");
free(buff);
return;
}
if (!remote)
......
......@@ -5,6 +5,7 @@
#include <readline/readline.h>
#include <sqlite.h>
#include <util.h>
#include "uri.h"
#include "sqlite.h"
#include "talker.h"
......@@ -232,9 +233,13 @@ void uri_list(int argc, const char **argv, int wiz)
{
char *username = NULL; // default is to display everyone's uris
int number = 10; // default is to display 10 uris
struct user *list_user = NULL;
_autofree struct user *list_user = calloc(1, sizeof(*list_user));
char c;
if (list_user == NULL) {
perror("calloc");
return;
}
if(argc == 1) // just '.uri list'
{
username = user->record.name;
......@@ -266,7 +271,7 @@ void uri_list(int argc, const char **argv, int wiz)
}
}
else if( (list_user = user_get(argv[1])) != NULL) // is a real user
else if (user_exists(argv[1], list_user))
{
username = list_user->record.name;
if(argc==3)
......@@ -275,21 +280,18 @@ void uri_list(int argc, const char **argv, int wiz)
{
if(number < 1)
{
free(list_user);
printf(".uri list %s - can't list <1 uris\n", argv[1]);
return;
}
}
else
{
free(list_user);
printf(".uri list %s - last parameter was not a positive integer\n", argv[1]);
return;
}
}
if(argc>3)
{
free(list_user);
printf(".uri list %s - too many parameters\n", argv[1]);
return;
}
......@@ -323,10 +325,6 @@ void uri_list(int argc, const char **argv, int wiz)
}
uri_list_display(number, username);
if(list_user) {
free(list_user);
}
}
// checks an id supplied to uri_delete/nsfw etc. is valid or creates an id if the user specified 'last'
......
......@@ -301,7 +301,7 @@ void login_ok(struct user *usr, int *autochat)
int okay;
do{
get_login(name, *autochat);
if(is_old(name, usr))
if(user_exists(name, usr))
okay=old_usr(usr);
else
okay=new_usr(name, usr);
......
......@@ -132,23 +132,9 @@ static int user_find_name(const char *name, struct user *user, int *found)
return 0;
}
int is_old(const char *name, struct user *usr)
int user_exists(const char *name, struct user *usr)
{
int found;
return !user_find_name(name, usr, &found) && found;
}
/*
* Get the user DB record for a named user
* Returns a malloc()ed record, or NULL on error.
*/
struct user *user_get(const char *name)
{
struct user *usr;
usr = calloc(1, sizeof(*usr));
if (usr != NULL && is_old(name, usr))
return usr;
return NULL;
}
......@@ -85,8 +85,7 @@ extern int fetch_first_user(int fd, struct user *user);
extern int fetch_next_user(int fd, struct user *user);
extern void update_user(struct user *user);
extern int update_user_fd(int fd, struct user *user);
extern int is_old(const char *name, struct user *user);
extern struct user* user_get(const char *name);
extern int user_exists(const char *name, struct user *user);
#define for_each_user(userp, fd, status) \
for((status) = fetch_first_user((fd), (userp)); \
......
......@@ -125,10 +125,8 @@ int main(int argc, char ** argv)
if ((p=strchr(rawpw,'\n'))!=NULL) *p=0;
}
/* fetch the user record */
if (!is_old(username, user)) {
if (!user_exists(username, user)) {
if (autocreate) {
/* user doesnt exist, create them */
create_user(user, username, rawpw);
} else {
printf("User '%s' not found.\n", username);
......
=================
== BUGS/NEEDED ==
=================
Rooms
------
Code
-----
Help
-----
===========
== IDEAS ==
===========
Rooms
------
- If anyone wishes to start, there are some links for new areas around:
* 614: Tunnel down to the sea. needs a nice half-way room with a stream
and quartz roof - for reference material see the Ulgo caves in the
Belgariad by David Eddings :)
* 21: Path around the south of the manor, heads over downlands to the
sea cliffs - plan to do a nice walk here, beaches, a path down,
and some form of link to the above tunnel
* 1026: Hidden path behind waterfall would be nice. perhaps linking up
to the smugglers tunnel, and catacombs below cmc's house
* 410: Catacombs below cmc's house
* 442: Continue the lane northwards
* 37: The Gatehouse/Lodge
* 470: The hole
* 422: Continue the lane southwards
* 20: The wall, lawn etc.. all need doing
* 6000: Perhaps more on the milliways universe?
- There needs to be some catacombs system designed - would be nice to have
everything turn you around so you have to use left, right, forwards and
backwards, and depending on the direction you just came from these mean
different things - AKA the Discworld MUD UU Library.
- The beaches, cliffs, and downlands all need designing, with maybe a
lighthouse, boathouse, and even the ability to sail elsewhere.
Code
-----
- Add 'option lists' for extra tab-completion styles in scripts:
Allow to be added using 'binds' in .mwrc
Eg:
option-list bw black white
defines keyword 'bw' to contain 'black' and 'white'
option-list uname [usernames] dom
defines keyword 'uname' to be the list 'usernames' + 'dom'
- Add 'useralias' to check for alternative usernames
* add command 'useralias <username> <new alias>'
- this will not allow you to create an alias of a username
that doesnt exist
- this will not allow you to create an alias that is the
same as a user that already exists
- any useralias checks that fail will remove themselves from
the useralias list (ie, user has been deleted)
add command 'removeuseralias <alias>'
- this will not allow you to unalias an alias that does not
exist
* add alias listings to the end of 'part_who' (main.c)
* add alias listings to the end of 'part_who_talk' (main.c)
* add alias check to line 672 of script_inst.c in user ignore test
(ie, if cant find user, check for user alias first, and try again)
* add alias check to line 1544 of script_inst.c in 'ison' user check
(ie, if is_old fails, check for alias and is_old that too)
* add alias check to line 813 of talker.c, in 't_ignore' user check
(ie, if is_old fails, check for alias and is_old that too)
* add alias check for unignore, and qunignore in talker.c and
script_inst.c respectively (see previous lines for ignores)
* add alias check to line 1699 of talker.c (talk_sendto) in
username stricmp. (+lines 1705, 1708)
* same for talk_single, sendipc and sendrpc in talker.c
* same for 'get_pid' and 'get_user_pid' in who.c
* arg.. and in all the other places where usernames are used
*****************************************************************
*** COME UP WITH A FUNCTION THAT WILL CHANGE TEXT TO AN ALIAS ***
*** eg, 'CheckUserName(char *szInput, char *szOutput)' ***
*** will return the aliased name, or if not found, the same ***
*** name in output. therefore, any username checks just need ***
*** to run this at the beginning!!! :) ***
*****************************************************************
- Text output preprocessing - need to run a script from any send routine
(such as sayto, talk etc...)
* 'outputevent' script command to bind an output event function
* any outputevent function can use 'SAY' etc.. to send text out
* use 'OUTPUT OFF' to suppress normal sending of text
* will only be able to work on normal talker output - not RAW, SAYTO etc..
* MUST BE ABLE TO STOP CONSTANT REDIRECTION WITH SCRIPTS. ie, if a script
uses a SAY, then that SAY must *not* be handled by the output script
or infinite loops will occur
- Get '!user timeout <user>' to automatically set the special 'T' flag
too? This needs discussion, because currently this allows for
current-process timeout changes, without it being persistent.
- Need to add 'time events' to MUD. eg, "Someone walks past whistling",
"You hear some church bells ring XXX o'clock", and "It begins to snow".
These would obviously have to be room/distance dependant.
Help
-----