Added clencode and cldecode to safe escape messages to mbtask

This commit is contained in:
Michiel Broek 2005-10-17 13:08:43 +00:00
parent 09574dcaca
commit 6cf5ac3431
3 changed files with 128 additions and 49 deletions

View File

@ -9,6 +9,9 @@ v0.81.2 14-Oct-2005.
the outbound are 12 bytes log. If not, stop the whole bbs and the outbound are 12 bytes log. If not, stop the whole bbs and
remove all these files. Then start the bbs again. remove all these files. Then start the bbs again.
libmbse.a:
Added clencode and cldecode to safe escape messages to mbtask.
mbcico: mbcico:
Some time_t/int conversions. Some time_t/int conversions.

View File

@ -102,32 +102,38 @@ char *xstrcat(char *src, char *add)
void InitClient(char *user, char *myname, char *where, char *logfname, int loggr, char *err, char *mgr, char *debug) void InitClient(char *user, char *myname, char *where, char *logfname, int loggr, char *err, char *mgr, char *debug)
{ {
if ((getenv("MBSE_ROOT")) == NULL) { char *u, *w;
printf("Could not get the MBSE_ROOT environment variable\n");
printf("Please set the environment variable ie:\n");
printf("\"MBSE_ROOT=/opt/mbse; export MBSE_ROOT\"\n\n");
exit(MBERR_INIT_ERROR);
}
snprintf(progname, 20, "%s", myname); if ((getenv("MBSE_ROOT")) == NULL) {
snprintf(logfile, PATH_MAX -1, "%s", logfname); printf("Could not get the MBSE_ROOT environment variable\n");
snprintf(errfile, PATH_MAX -1, "%s", err); printf("Please set the environment variable ie:\n");
snprintf(mgrfile, PATH_MAX -1, "%s", mgr); printf("\"MBSE_ROOT=/opt/mbse; export MBSE_ROOT\"\n\n");
snprintf(logdebug, PATH_MAX -1, "%s", debug); exit(MBERR_INIT_ERROR);
loggrade = loggr; }
snprintf(cpath, 107, "%s/tmp/%s%d", getenv("MBSE_ROOT"), progname, getpid()); snprintf(progname, 20, "%s", myname);
snprintf(spath, 107, "%s/tmp/mbtask", getenv("MBSE_ROOT")); snprintf(logfile, PATH_MAX -1, "%s", logfname);
snprintf(errfile, PATH_MAX -1, "%s", err);
snprintf(mgrfile, PATH_MAX -1, "%s", mgr);
snprintf(logdebug, PATH_MAX -1, "%s", debug);
loggrade = loggr;
/* snprintf(cpath, 107, "%s/tmp/%s%d", getenv("MBSE_ROOT"), progname, getpid());
* Store my pid in case a child process is forked and wants to do snprintf(spath, 107, "%s/tmp/mbtask", getenv("MBSE_ROOT"));
* some communications with the mbsed server.
*/ /*
mypid = getpid(); * Store my pid in case a child process is forked and wants to do
if (socket_connect(user, myname, where) == -1) { * some communications with the mbsed server.
printf("PANIC: cannot access socket\n"); */
exit(MBERR_INIT_ERROR); mypid = getpid();
} 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);
} }
@ -366,17 +372,17 @@ void Mgrlog(const char *format, ...)
void IsDoing(const char *format, ...) void IsDoing(const char *format, ...)
{ {
char *outputstr; char *outputstr;
va_list va_ptr; va_list va_ptr;
outputstr = calloc(SS_BUFSIZE, sizeof(char)); outputstr = calloc(SS_BUFSIZE, sizeof(char));
va_start(va_ptr, format); va_start(va_ptr, format);
vsnprintf(outputstr, SS_BUFSIZE, format, va_ptr); vsnprintf(outputstr, SS_BUFSIZE, format, va_ptr);
va_end(va_ptr); va_end(va_ptr);
SockS("ADOI:2,%d,%s;", mypid, outputstr); SockS("ADOI:2,%d,%s;", mypid, outputstr);
free(outputstr); free(outputstr);
} }
@ -393,26 +399,32 @@ void RegTCP(void)
void SetTTY(char *tty) void SetTTY(char *tty)
{ {
SockS("ATTY:2,%d,%s;", mypid, tty); SockS("ATTY:2,%d,%s;", mypid, tty);
} }
void UserCity(pid_t pid, char *user, char *city) 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);
} }
void DoNop() void DoNop()
{ {
SockS("GNOP:1,%d;", mypid); SockS("GNOP:1,%d;", mypid);
} }
static int32_t nop = 0; static time_t nop = 0;
/* /*
* This function can be called very often but will only send once a minute * This function can be called very often but will only send once a minute
@ -420,13 +432,13 @@ static int32_t nop = 0;
*/ */
void Nopper(void) void Nopper(void)
{ {
time_t now; time_t now;
now = time(NULL); now = time(NULL);
if (((time_t)now - (time_t)nop) > 60) { if ((now - nop) > 60) {
nop = now; nop = now;
SockS("GNOP:1,%d;", mypid); SockS("GNOP:1,%d;", mypid);
} }
} }
@ -437,10 +449,10 @@ void Nopper(void)
*/ */
void Altime(int altime) void Altime(int altime)
{ {
if (altime) if (altime)
SockS("ATIM:2,%d,%d;", mypid, altime); SockS("ATIM:2,%d,%d;", mypid, altime);
else else
SockS("ADEF:1,%d;", mypid); SockS("ADEF: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) char *printable(char *s, int l)
{ {
int len; int len;
@ -547,7 +621,7 @@ char *printable(char *s, int l)
char *printablec(char c) char *printablec(char c)
{ {
return printable(&c,1); return printable(&c,1);
} }

View File

@ -2088,6 +2088,8 @@ void Nopper(void);
void Altime(int); void Altime(int);
int enoughspace(unsigned int); int enoughspace(unsigned int);
unsigned int sequencer(void); unsigned int sequencer(void);
char *clencode(char *);
char *cldecode(char *);
char *printable(char *, int); char *printable(char *, int);
char *printablec(char); char *printablec(char);
@ -2108,13 +2110,13 @@ int socket_shutdown(pid_t);
* From crc.c * From crc.c
*/ */
unsigned int crc32ccitt(char *, int); unsigned int crc32ccitt(char *, int);
unsigned short crc16ccitt(char *, int); unsigned short crc16ccitt(char *, int);
unsigned int str_crc32(char *str); unsigned int str_crc32(char *str);
unsigned int StringCRC32(char *); unsigned int StringCRC32(char *);
unsigned int upd_crc32(char *buf, unsigned int crc, int len); unsigned int upd_crc32(char *buf, unsigned int crc, int len);
unsigned int norm_crc32(unsigned int crc); unsigned int norm_crc32(unsigned int crc);
unsigned short crc16xmodem(char *, int); unsigned short crc16xmodem(char *, int);
unsigned char checksum(char *, int); unsigned char checksum(char *, int);