A lot of fixes found with valgrind

This commit is contained in:
Michiel Broek
2003-12-04 22:07:33 +00:00
parent fab5a2edae
commit f0bbdba104
37 changed files with 2267 additions and 1427 deletions

View File

@@ -49,88 +49,87 @@ char cpath[108]; /* Client socket path */
int socket_connect(char *user, char *prg, char *city)
{
int s;
static char buf[SS_BUFSIZE];
static char tty[18];
int s;
static char buf[SS_BUFSIZE], tty[18];
myname = prg;
myname = prg;
/*
* Create Unix Datagram socket for the client.
*/
s = socket(AF_UNIX, SOCK_DGRAM, 0);
if (s == -1) {
perror(myname);
printf("Unable to create Unix Datagram socket\n");
return -1;
}
/*
* Create Unix Datagram socket for the client.
*/
s = socket(AF_UNIX, SOCK_DGRAM, 0);
if (s == -1) {
perror(myname);
printf("Unable to create Unix Datagram socket\n");
return -1;
}
/*
* Client will bind to an address so the server will get
* an address in its recvfrom call and use it to send
* data back to the client.
*/
memset(&clntaddr, 0, sizeof(clntaddr));
clntaddr.sun_family = AF_UNIX;
strcpy(clntaddr.sun_path, cpath);
/*
* Client will bind to an address so the server will get
* an address in its recvfrom call and use it to send
* data back to the client.
*/
memset(&clntaddr, 0, sizeof(clntaddr));
clntaddr.sun_family = AF_UNIX;
strcpy(clntaddr.sun_path, cpath);
if (bind(s, (struct sockaddr *)&clntaddr, sizeof(clntaddr)) < 0) {
close(s);
perror(myname);
printf("Can't bind socket %s\n", cpath);
return -1;
}
if (bind(s, (struct sockaddr *)&clntaddr, sizeof(clntaddr)) < 0) {
close(s);
perror(myname);
printf("Can't bind socket %s\n", cpath);
return -1;
}
/*
* If running seteuid as another user, chown to mbse.bbs
*/
if (getuid() != geteuid()) {
chown(cpath, getuid(), getgid());
} else {
chmod(cpath, 0775);
}
/*
* If running seteuid as another user, chown to mbse.bbs
*/
if (getuid() != geteuid()) {
chown(cpath, getuid(), getgid());
} else {
chmod(cpath, 0775);
}
/*
* Setup address structure for the server socket.
*/
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sun_family = AF_UNIX;
strcpy(servaddr.sun_path, spath);
/*
* Setup address structure for the server socket.
*/
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sun_family = AF_UNIX;
strcpy(servaddr.sun_path, spath);
/*
* Now that we have an connection, we gather
* information to tell the server who we are.
*/
if (isatty(1) && (ttyname(1) != NULL)) {
strcpy(tty, ttyname(1));
if (strchr(tty, 'p'))
memccpy(tty, index(tty, 'p'), '\0', strlen(tty));
else if (strchr(tty, 't'))
memccpy(tty, index(tty, 't'), '\0', strlen(tty));
else if (strchr(tty, 'c'))
memccpy(tty, index(tty, 'c'), '\0', strlen(tty));
} else {
strcpy(tty, "-");
}
sock = s;
/*
* Send the information to the server.
*/
sprintf(buf, "AINI:5,%d,%s,%s,%s,%s;", getpid(), tty, user, prg, city);
if (socket_send(buf) != 0) {
sock = -1;
return -1;
}
/*
* Now that we have an connection, we gather
* information to tell the server who we are.
*/
if (isatty(1) && (ttyname(1) != NULL)) {
strcpy(tty, ttyname(1));
if (strchr(tty, 'p'))
strcpy(tty, index(tty, 'p'));
else if (strchr(tty, 't'))
strcpy(tty, index(tty, 't'));
else if (strchr(tty, 'c'))
strcpy(tty, index(tty, 'c'));
} else {
strcpy(tty, "-");
}
sock = s;
strcpy(buf, socket_receive());
if (strncmp(buf, "100:0;", 6) != 0) {
printf("AINI not acknowledged by the server\n");
sock = -1;
return -1;
}
/*
* Send the information to the server.
*/
sprintf(buf, "AINI:5,%d,%s,%s,%s,%s;", getpid(), tty, user, prg, city);
if (socket_send(buf) != 0) {
sock = -1;
return -1;
}
strcpy(buf, socket_receive());
if (strncmp(buf, "100:0;", 6) != 0) {
printf("AINI not acknowledged by the server\n");
sock = -1;
return -1;
}
return s;
return s;
}
@@ -140,14 +139,14 @@ int socket_connect(char *user, char *prg, char *city)
*/
int socket_send(char *buf)
{
if (sock == -1)
return -1;
if (sock == -1)
return -1;
if (sendto(sock, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) != strlen(buf)) {
printf("Socket send failed error %d\n", errno);
return -1;
}
return 0;
if (sendto(sock, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) != strlen(buf)) {
printf("Socket send failed error %d\n", errno);
return -1;
}
return 0;
}
@@ -158,19 +157,19 @@ int socket_send(char *buf)
*/
char *socket_receive(void)
{
static char buf[SS_BUFSIZE];
int rlen;
static char buf[SS_BUFSIZE];
int rlen;
memset((char *)&buf, 0, SS_BUFSIZE);
fromlen = sizeof(from);
rlen = recvfrom(sock, buf, SS_BUFSIZE, 0, (struct sockaddr *)&from, &fromlen);
if (rlen == -1) {
perror("recv");
printf("Error reading socket\n");
memset((char *)&buf, 0, SS_BUFSIZE);
return buf;
}
return buf;
memset((char *)&buf, 0, SS_BUFSIZE);
fromlen = sizeof(from);
rlen = recvfrom(sock, buf, SS_BUFSIZE, 0, (struct sockaddr *)&from, &fromlen);
if (rlen == -1) {
perror("recv");
printf("Error reading socket\n");
memset((char *)&buf, 0, SS_BUFSIZE);
return buf;
}
return buf;
}
@@ -186,28 +185,28 @@ char *socket_receive(void)
int socket_shutdown(pid_t pid)
{
static char buf[SS_BUFSIZE];
static char buf[SS_BUFSIZE];
if (sock == -1)
return 0;
sprintf(buf, "ACLO:1,%d;", pid);
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "107:0;", 6) != 0) {
printf("Shutdown not acknowledged by the server\n");
printf("Got \"%s\"\n", buf);
}
}
if (shutdown(sock, 1) == -1) {
perror(myname);
printf("Cannot shutdown socket\n");
return -1;
}
sock = -1;
if (sock == -1)
return 0;
sprintf(buf, "ACLO:1,%d;", pid);
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "107:0;", 6) != 0) {
printf("Shutdown not acknowledged by the server\n");
printf("Got \"%s\"\n", buf);
}
}
if (shutdown(sock, 1) == -1) {
perror(myname);
printf("Cannot shutdown socket\n");
return -1;
}
sock = -1;
return 0;
}

View File

@@ -303,7 +303,6 @@ int noderecord(faddr *);
/*
* From pktname.c
*/
char *prepbuf(faddr *);
char *pktname(faddr *, char);
char *reqname(faddr *);
char *floname(faddr *, char);

View File

@@ -10,7 +10,7 @@
* MBSE BBS and utilities.
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2003
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@@ -566,7 +566,7 @@ int JAM_Open(char *Msgbase)
fdJlr = open(File, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);
RetVal = TRUE;
strcpy(BaseName, Msgbase);
memmove(BaseName, Msgbase, strlen(Msgbase));
} else {
close(fdHdr);
fdHdr = -1;

View File

@@ -4,7 +4,7 @@
* Purpose ...............: BinkleyTerm outbound naming
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2003
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@@ -51,172 +51,175 @@
#define ltyp "pol"
static char buf[PATH_MAX];
char *prepbuf(faddr *);
char *prepbuf(faddr *addr)
{
char *p, *domain=NULL;
char zpref[8];
int i;
static char buf[PATH_MAX];
char *p, *domain=NULL, zpref[8];
int i;
sprintf(buf, "%s", CFG.outbound);
sprintf(buf, "%s", CFG.outbound);
if (CFG.addr4d) {
Syslog('o', "Use 4d addressing, zone is %d", addr->zone);
if (CFG.addr4d) {
Syslog('o', "Use 4d addressing, zone is %d", addr->zone);
if ((addr->zone == 0) || (addr->zone == CFG.aka[0].zone))
zpref[0] = '\0';
else
sprintf(zpref, ".%03x", addr->zone);
} else {
/*
* If we got a 5d address we use the given domain, if
* we got a 4d address, we look for a matching domain name.
*/
if (addr->domain)
domain = xstrcpy(addr->domain);
else
for (i = 0; i < 40; i++)
if (CFG.aka[i].zone == addr->zone) {
domain = xstrcpy(CFG.aka[i].domain);
break;
}
if ((domain != NULL) && (strlen(CFG.aka[0].domain) != 0) &&
(strcasecmp(domain,CFG.aka[0].domain) != 0)) {
if ((p = strrchr(buf,'/')))
p++;
else
p = buf;
strcpy(p, domain);
for (; *p; p++)
*p = tolower(*p);
for (i = 0; i < 40; i++)
if ((strlen(CFG.aka[i].domain)) &&
(strcasecmp(CFG.aka[i].domain, domain) == 0))
break;
/*
* The default zone must be the first one in the
* setup, other zones get the hexadecimal zone
* number appended.
*/
if (CFG.aka[i].zone == addr->zone)
zpref[0] = '\0';
else
sprintf(zpref, ".%03x", addr->zone);
} else {
/*
* this is our primary domain
*/
if ((addr->zone == 0) || (addr->zone == CFG.aka[0].zone))
zpref[0]='\0';
else
sprintf(zpref,".%03x",addr->zone);
}
}
p = buf + strlen(buf);
if (addr->point)
sprintf(p,"%s/%04x%04x.pnt/%08x.", zpref,addr->net,addr->node,addr->point);
if ((addr->zone == 0) || (addr->zone == CFG.aka[0].zone))
zpref[0] = '\0';
else
sprintf(p,"%s/%04x%04x.",zpref,addr->net,addr->node);
sprintf(zpref, ".%03x", addr->zone);
} else {
/*
* If we got a 5d address we use the given domain, if
* we got a 4d address, we look for a matching domain name.
*/
if (addr && addr->domain && strlen(addr->domain)) {
domain = xstrcpy(addr->domain);
} else
for (i = 0; i < 40; i++)
if (CFG.aka[i].zone == addr->zone) {
domain = xstrcpy(CFG.aka[i].domain);
break;
}
p = buf + strlen(buf);
if (domain)
free(domain);
return p;
if ((domain != NULL) && (strlen(CFG.aka[0].domain) != 0) && (strcasecmp(domain,CFG.aka[0].domain) != 0)) {
if ((p = strrchr(buf,'/')))
p++;
else
p = buf;
strcpy(p, domain);
for (; *p; p++)
*p = tolower(*p);
for (i = 0; i < 40; i++)
if ((strlen(CFG.aka[i].domain)) && (strcasecmp(CFG.aka[i].domain, domain) == 0))
break;
/*
* The default zone must be the first one in the
* setup, other zones get the hexadecimal zone
* number appended.
*/
if (CFG.aka[i].zone == addr->zone)
zpref[0] = '\0';
else
sprintf(zpref, ".%03x", addr->zone);
} else {
/*
* this is our primary domain
*/
if ((addr->zone == 0) || (addr->zone == CFG.aka[0].zone))
zpref[0]='\0';
else
sprintf(zpref,".%03x",addr->zone);
}
}
p = buf + strlen(buf);
if (addr->point)
sprintf(p,"%s/%04x%04x.pnt/%08x.", zpref,addr->net,addr->node,addr->point);
else
sprintf(p,"%s/%04x%04x.",zpref,addr->net,addr->node);
if (domain)
free(domain);
return buf;
}
char *pktname(faddr *addr, char flavor)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
if (flavor == 'f')
flavor = 'o';
p = prepbuf(addr);
if (flavor == 'f')
flavor = 'o';
sprintf(p, "%c%s", flavor, ptyp);
Syslog('O', "packet name is \"%s\"",buf);
return buf;
q = p + strlen(p);
sprintf(q, "%c%s", flavor, ptyp);
Syslog('O', "packet name is \"%s\"", p);
return p;
}
char *floname(faddr *addr, char flavor)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
if (flavor == 'o')
flavor = 'f';
sprintf(p, "%c%s", flavor, ftyp);
Syslog('O', "flo file name is \"%s\"",buf);
return buf;
p = prepbuf(addr);
if (flavor == 'o')
flavor = 'f';
q = p + strlen(p);
sprintf(q, "%c%s", flavor, ftyp);
Syslog('O', "flo file name is \"%s\"", p);
return p;
}
char *reqname(faddr *addr)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
sprintf(p, "%s", rtyp);
Syslog('O', "req file name is \"%s\"",buf);
return buf;
p = prepbuf(addr);
q = p + strlen(p);
sprintf(q, "%s", rtyp);
Syslog('O', "req file name is \"%s\"", p);
return p;
}
char *splname(faddr *addr)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
sprintf(p, "%s", styp);
Syslog('O', "spl file name is \"%s\"",buf);
return buf;
p = prepbuf(addr);
q = p + strlen(p);
sprintf(q, "%s", styp);
Syslog('O', "spl file name is \"%s\"", p);
return p;
}
char *bsyname(faddr *addr)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
sprintf(p, "%s", btyp);
Syslog('O', "bsy file name is \"%s\"",buf);
return buf;
p = prepbuf(addr);
q = p + strlen(p);
sprintf(q, "%s", btyp);
Syslog('O', "bsy file name is \"%s\"", p);
return p;
}
char *stsname(faddr *addr)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
sprintf(p, "%s", qtyp);
Syslog('O', "sts file name is \"%s\"",buf);
return buf;
p = prepbuf(addr);
q = p + strlen(p);
sprintf(q, "%s", qtyp);
Syslog('O', "sts file name is \"%s\"", p);
return p;
}
char *polname(faddr *addr)
{
char *p;
static char *p, *q;
p = prepbuf(addr);
sprintf(p, "%s", ltyp);
Syslog('O', "pol file name is \"%s\"", buf);
return buf;
p = prepbuf(addr);
q = p + strlen(p);
sprintf(q, "%s", ltyp);
Syslog('O', "pol file name is \"%s\"", p);
return p;
}
@@ -226,20 +229,22 @@ static char *dow[] = {(char *)"su", (char *)"mo", (char *)"tu", (char *)"we",
char *dayname(void)
{
time_t tt;
struct tm *ptm;
time_t tt;
struct tm *ptm;
static char buf[3];
tt = time(NULL);
ptm = localtime(&tt);
sprintf(buf, "%s", dow[ptm->tm_wday]);
tt = time(NULL);
ptm = localtime(&tt);
sprintf(buf, "%s", dow[ptm->tm_wday]);
return buf;
return buf;
}
char *arcname(faddr *addr, unsigned short Zone, int ARCmailCompat)
{
static char *buf;
char *p;
char *ext;
time_t tt;
@@ -252,7 +257,7 @@ char *arcname(faddr *addr, unsigned short Zone, int ARCmailCompat)
bestaka = bestaka_s(addr);
(void)prepbuf(addr);
buf = prepbuf(addr);
p = strrchr(buf, '/');
if (!ARCmailCompat && (Zone != addr->zone)) {

View File

@@ -127,18 +127,14 @@ void ulockprogram(char *progname)
free(lockfile);
return;
}
if (fscanf(fp, "%u", &oldpid) != 1) {
WriteError("$Can't read old pid from \"%s\"", lockfile);
fclose(fp);
unlink(lockfile);
free(lockfile);
return;
}
if (oldpid == getpid()) {
(void)unlink(lockfile);
}
fclose(fp);
unlink(lockfile);
free(lockfile);
lockfile = NULL;
}