Added clencode and cldecode to safe escape messages to mbtask
This commit is contained in:
parent
09574dcaca
commit
6cf5ac3431
@ -9,6 +9,9 @@ v0.81.2 14-Oct-2005.
|
||||
the outbound are 12 bytes log. If not, stop the whole bbs and
|
||||
remove all these files. Then start the bbs again.
|
||||
|
||||
libmbse.a:
|
||||
Added clencode and cldecode to safe escape messages to mbtask.
|
||||
|
||||
mbcico:
|
||||
Some time_t/int conversions.
|
||||
|
||||
|
82
lib/clcomm.c
82
lib/clcomm.c
@ -102,6 +102,8 @@ char *xstrcat(char *src, char *add)
|
||||
|
||||
void InitClient(char *user, char *myname, char *where, char *logfname, int loggr, char *err, char *mgr, char *debug)
|
||||
{
|
||||
char *u, *w;
|
||||
|
||||
if ((getenv("MBSE_ROOT")) == NULL) {
|
||||
printf("Could not get the MBSE_ROOT environment variable\n");
|
||||
printf("Please set the environment variable ie:\n");
|
||||
@ -124,10 +126,14 @@ void InitClient(char *user, char *myname, char *where, char *logfname, int loggr
|
||||
* some communications with the mbsed server.
|
||||
*/
|
||||
mypid = getpid();
|
||||
if (socket_connect(user, myname, where) == -1) {
|
||||
u = xstrcpy(clencode(user));
|
||||
w = xstrcpy(clencode(where));
|
||||
if (socket_connect(u, myname, w) == -1) {
|
||||
printf("PANIC: cannot access socket\n");
|
||||
exit(MBERR_INIT_ERROR);
|
||||
}
|
||||
free(w);
|
||||
free(u);
|
||||
}
|
||||
|
||||
|
||||
@ -400,7 +406,13 @@ void SetTTY(char *tty)
|
||||
|
||||
void UserCity(pid_t pid, char *user, char *city)
|
||||
{
|
||||
SockS("AUSR:3,%d,%s,%s;", pid, user, city);
|
||||
char *u, *c;
|
||||
|
||||
u = xstrcpy(clencode(user));
|
||||
c = xstrcpy(clencode(city));
|
||||
SockS("AUSR:3,%d,%s,%s;", pid, u, c);
|
||||
free(u);
|
||||
free(c);
|
||||
}
|
||||
|
||||
|
||||
@ -412,7 +424,7 @@ void DoNop()
|
||||
|
||||
|
||||
|
||||
static int32_t nop = 0;
|
||||
static time_t nop = 0;
|
||||
|
||||
/*
|
||||
* This function can be called very often but will only send once a minute
|
||||
@ -423,7 +435,7 @@ void Nopper(void)
|
||||
time_t now;
|
||||
|
||||
now = time(NULL);
|
||||
if (((time_t)now - (time_t)nop) > 60) {
|
||||
if ((now - nop) > 60) {
|
||||
nop = now;
|
||||
SockS("GNOP:1,%d;", mypid);
|
||||
}
|
||||
@ -501,6 +513,68 @@ int enoughspace(unsigned int needed)
|
||||
|
||||
|
||||
|
||||
char *clencode(char *s)
|
||||
{
|
||||
char Base16Code[]="0123456789ABCDEF";
|
||||
static char *buf;
|
||||
char *p, *q;
|
||||
|
||||
if (buf)
|
||||
free(buf);
|
||||
buf = NULL;
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
|
||||
if ((buf = malloc(2 * strlen(s) + 1 * sizeof(char))) == NULL) {
|
||||
Syslog('+', "clencode: out of memory:string too long:\"%s\"", s);
|
||||
return s;
|
||||
}
|
||||
for (p = s, q = buf; *p != '\0';) {
|
||||
if ((! isascii(*p)) || (*p == ',')) {
|
||||
*q++ = '\\';
|
||||
*q++ = Base16Code[(*p >> 4) & 0x0f];
|
||||
*q++ = Base16Code[*p & 0x0f];
|
||||
p++;
|
||||
} else if (*p == '\\') {
|
||||
*q++ = '\\';
|
||||
*q++ = *p++;
|
||||
} else {
|
||||
*q++ = *p++;
|
||||
}
|
||||
}
|
||||
*q = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *cldecode(char *s)
|
||||
{
|
||||
char *p, *q;
|
||||
int i;
|
||||
|
||||
if (s == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (p = s, q = s; *p; p++) {
|
||||
if (*p == '\\') {
|
||||
if (*(p + 1) == '\\') {
|
||||
*q++ = *p++;
|
||||
} else {
|
||||
sscanf(p + 1, "%02x", &i);
|
||||
*q++ = i;
|
||||
p += 2;
|
||||
}
|
||||
} else {
|
||||
*q++ = *p;
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *printable(char *s, int l)
|
||||
{
|
||||
int len;
|
||||
|
@ -2088,6 +2088,8 @@ void Nopper(void);
|
||||
void Altime(int);
|
||||
int enoughspace(unsigned int);
|
||||
unsigned int sequencer(void);
|
||||
char *clencode(char *);
|
||||
char *cldecode(char *);
|
||||
char *printable(char *, int);
|
||||
char *printablec(char);
|
||||
|
||||
|
Reference in New Issue
Block a user