mirror of
https://github.com/ChronosX88/psyced.git
synced 2024-11-10 04:21:02 +00:00
98 lines
2.3 KiB
C
98 lines
2.3 KiB
C
// $Id: legal.c,v 1.18 2008/07/26 10:54:31 lynx Exp $ // vim:syntax=lpc
|
|
#include <net.h>
|
|
|
|
// legal nickname/placename test..
|
|
varargs string legal_name(string name, int place) {
|
|
int i;
|
|
string n = name;
|
|
|
|
//PT(("legal_name(%O) in %O\n", n, ME))
|
|
if (shutdown_in_progress) {
|
|
P1(("not legal_name for %O: shutdown in progress\n", n))
|
|
return 0;
|
|
}
|
|
if (!n || n == "") {
|
|
P1(("not legal_name: %O is empty\n", n))
|
|
return 0; // "somebody";
|
|
}
|
|
#ifdef MAX_NAME_LEN
|
|
if (strlen(n) > MAX_NAME_LEN) {
|
|
P1(("not legal_name: %O exceeds MAX_NAME_LEN\n", n))
|
|
return 0;
|
|
}
|
|
#endif
|
|
// this saves applet/user from malfunction!
|
|
if (index("!=-0123456789", n[0]) != -1) {
|
|
P1(("not legal_name: %O has !=- as first char.\n", n))
|
|
return 0;
|
|
}
|
|
|
|
string nick;
|
|
if (place && sscanf(name, "~%s#updates", nick))
|
|
n = nick;
|
|
|
|
string chars = "\
|
|
abcdefghijklmnopqrstuvwxyz\
|
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
|
0123456789_-=+";
|
|
|
|
for (i=strlen(n)-1; i>=0; i--) {
|
|
if (index(chars, n[i]) == -1) {
|
|
P1(("not legal_name: %O has ill char at %d (%O).\n",
|
|
n, i, n[i]))
|
|
return 0;
|
|
}
|
|
}
|
|
return name;
|
|
}
|
|
|
|
array(string) legal_password(string pw, string nick) {
|
|
int i;
|
|
|
|
if (shutdown_in_progress)
|
|
return ({ "_failure_server_shutdown",
|
|
"Sorry, server is being shut down.\n" });
|
|
|
|
if (!stringp(pw) || strlen(pw) < 3)
|
|
return ({ "_error_illegal_password_size",
|
|
"That password is too short.\n" });
|
|
|
|
if (index(pw, '<') != -1 || index(pw, '>') != -1 ||
|
|
index(pw, ' ') != -1)
|
|
return ({ "_error_illegal_password_characters",
|
|
"Password contains illegal characters.\n" });
|
|
|
|
if (nick && strstr(lower_case(pw), lower_case(nick), 0) != -1)
|
|
return ({ "_error_illegal_password_username",
|
|
"That password contains your nickname.\n" });
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* check for legal PSYC keyword (var or mc names), see specs */
|
|
#ifndef legal_keyword // inline variant is better of course
|
|
int legal_keyword(string n) {
|
|
# if __EFUN_DEFINED__(regreplace)
|
|
# include <regexp.h>
|
|
string t = regmatch(n, "[^_0-9A-Za-z]");
|
|
P1(("legal_keyword(%O) says %O\n", n, t))
|
|
return !t;
|
|
# else
|
|
int i;
|
|
|
|
for (i=strlen(n)-1; i>=0; i--) {
|
|
if (index("_\
|
|
abcdefghijklmnopqrstuvwxyz\
|
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
|
0123456789", n[i]) == -1) {
|
|
P1(("not legal_keyword: %O has ill char at %d (%O).\n",
|
|
n, i, n[i]))
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
# endif
|
|
}
|
|
#endif
|
|
|