$OpenBSD: patch-src_cfservd_c,v 1.4 2005/10/27 21:47:28 sturm Exp $ --- src/cfservd.c.orig Thu Sep 22 15:57:18 2005 +++ src/cfservd.c Fri Oct 21 16:35:55 2005 @@ -171,10 +171,10 @@ void CheckOptsAndInit(int argc,char **ar int c; SetContext("server"); -sprintf(VPREFIX, "cfservd"); +(void)snprintf(VPREFIX, 40, "cfservd"); CfOpenLog(); -strcpy(VINPUTFILE,CFD_INPUT); -strcpy(CFLOCK,"cfservd"); +(void)strlcpy(VINPUTFILE,CFD_INPUT,CF_BUFSIZE); +(void)strlcpy(CFLOCK,"cfservd",sizeof(CFLOCK)); OUTPUT[0] = '\0'; /* @@ -272,15 +272,15 @@ if ((CFSTARTTIME = time((time_t *)NULL)) /* XXX Initialize workdir for non privileged users */ - strcpy(CFWORKDIR,WORKDIR); + (void)strlcpy(CFWORKDIR,WORKDIR,sizeof(CFWORKDIR)); if (getuid() > 0) { char *homedir; if ((homedir = getenv("HOME")) != NULL) { - strcpy(CFWORKDIR,homedir); - strcat(CFWORKDIR,"/.cfagent"); + (void)strlcpy(CFWORKDIR,homedir,sizeof(CFWORKDIR)); + (void)strlcat(CFWORKDIR,"/.cfagent",sizeof(CFWORKDIR)); } } @@ -293,7 +293,7 @@ strncpy(VLOCKDIR,CFWORKDIR,CF_BUFSIZE-1) VIFELAPSED = CF_EXEC_IFELAPSED; VEXPIREAFTER = CF_EXEC_EXPIREAFTER; -strcpy(VDOMAIN,"undefined.domain"); +(void)strlcpy(VDOMAIN,"undefined.domain",sizeof(VDOMAIN)); VCANONICALFILE = strdup(CanonifyName(VINPUTFILE)); VREPOSITORY = strdup("\0"); @@ -1057,7 +1057,7 @@ if (CFDSTARTTIME < newstat.st_mtime) DeleteItemList(VIMPORT); DeleteAuthList(VADMIT); DeleteAuthList(VDENY); - strcpy(VDOMAIN,"undefined.domain"); + (void)strlcpy(VDOMAIN,"undefined.domain",sizeof(VDOMAIN)); VADMIT = VADMITTOP = NULL; VDENY = VDENYTOP = NULL; @@ -1437,7 +1437,7 @@ switch (GetCommand(recvbuffer)) if ((tloc = time((time_t *)NULL)) == -1) { - sprintf(conn->output,"Couldn't read system clock\n"); + (void)snprintf(conn->output,CF_BUFSIZE*2,"Couldn't read system clock\n"); CfLog(cfinform,conn->output,"time"); SendTransaction(conn->sd_reply,"BAD: clocks out of synch",0,CF_DONE); return true; @@ -1502,7 +1502,7 @@ switch (GetCommand(recvbuffer)) } - sprintf (sendbuffer,"BAD: Request denied\n"); + (void)snprintf (sendbuffer,sizeof(sendbuffer),"BAD: Request denied\n"); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); CfLog(cfinform,"Closing connection\n",""); return false; @@ -1610,7 +1610,7 @@ if ((CFSTARTTIME = time((time_t *)NULL)) if (GetMacroValue(CONTEXTID,"cfrunCommand") == NULL) { Verbose("cfservd exec request: no cfrunCommand defined\n"); - sprintf(sendbuffer,"Exec request: no cfrunCommand defined\n"); + (void)snprintf(sendbuffer,CF_BUFSIZE,"Exec request: no cfrunCommand defined\n"); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); return; } @@ -1651,8 +1651,8 @@ else { if ((args != NULL) & (strlen(args) > 0)) { - strcat(ebuff," "); - strcat(ebuff,args); + (void)strlcat(ebuff," ",sizeof(ebuff)); + (void)strlcat(ebuff,args,sizeof(ebuff)); snprintf(sendbuffer,CF_BUFSIZE,"cfservd Executing %s\n",ebuff); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); @@ -2568,7 +2568,7 @@ if (S_ISLNK(statbuf.st_mode)) if (readlink(filename,linkbuf,CF_BUFSIZE-1) == -1) { - sprintf(sendbuffer,"BAD: unable to read link\n"); + (void)snprintf(sendbuffer,CF_BUFSIZE,"BAD: unable to read link\n"); CfLog(cferror,sendbuffer,"readlink"); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); return -1; @@ -2671,12 +2671,12 @@ SendTransaction(conn->sd_reply,sendbuffe if (cfst.cf_readlink != NULL) { - strcpy(sendbuffer,"OK:"); - strcat(sendbuffer,cfst.cf_readlink); + (void)strlcpy(sendbuffer,"OK:",CF_BUFSIZE); + (void)strlcat(sendbuffer,cfst.cf_readlink,CF_BUFSIZE); } else { - sprintf(sendbuffer,"OK:"); + (void)snprintf(sendbuffer,CF_BUFSIZE,"OK:"); } SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); @@ -2878,13 +2878,13 @@ memset(sendbuffer,0,CF_BUFSIZE); if (ChecksumChanged(filename,digest,cfverbose,true,'m')) { - sprintf(sendbuffer,"%s",CFD_TRUE); + (void)snprintf(sendbuffer,CF_BUFSIZE,"%s",CFD_TRUE); Debug("Checksums didn't match\n"); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); } else { - sprintf(sendbuffer,"%s",CFD_FALSE); + (void)snprintf(sendbuffer,CF_BUFSIZE,"%s",CFD_FALSE); Debug("Checksums matched ok\n"); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); } @@ -2902,7 +2902,7 @@ Debug("CfOpenDirectory(%s)\n",dirname); if (*dirname != '/') { - sprintf(sendbuffer,"BAD: request to access a non-absolute filename\n"); + (void)snprintf(sendbuffer,CF_BUFSIZE,"BAD: request to access a non-absolute filename\n"); SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE); return -1; } @@ -2934,7 +2934,7 @@ for (dirp = readdir(dirh); dirp != NULL; offset += strlen(dirp->d_name) + 1; /* + zero byte separator */ } -strcpy(sendbuffer+offset,CFD_TERMINATOR); +(void)strlcpy(sendbuffer+offset,CFD_TERMINATOR,CF_BUFSIZE - offset); SendTransaction(conn->sd_reply,sendbuffer,offset+2+strlen(CFD_TERMINATOR),CF_DONE); Debug("END CfOpenDirectory(%s)\n",dirname); closedir(dirh); @@ -2949,7 +2949,7 @@ void Terminate(int sd) memset(buffer,0,CF_BUFSIZE); -strcpy(buffer,CFD_TERMINATOR); +(void)strlcpy(buffer,CFD_TERMINATOR,sizeof(buffer)); if (SendTransaction(sd,buffer,strlen(buffer)+1,CF_DONE) == -1) { @@ -3168,7 +3168,7 @@ Debug("Checking to see if we have seen t if ((errno = db_create(&dbp,NULL,0)) != 0) { - sprintf(OUTPUT,"Couldn't open average database %s\n",keydb); + (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb); CfLog(cferror,OUTPUT,"db_open"); return false; } @@ -3179,7 +3179,7 @@ if ((errno = dbp->open(dbp,keydb,NULL,DB if ((errno = dbp->open(dbp,NULL,keydb,NULL,DB_BTREE,DB_CREATE,0644)) != 0) #endif { - sprintf(OUTPUT,"Couldn't open average database %s\n",keydb); + (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb); CfLog(cferror,OUTPUT,"db_open"); return false; } @@ -3252,7 +3252,7 @@ if ((DHCPLIST != NULL) && IsFuzzyItemIn( if ((errno = db_create(&dbp,NULL,0)) != 0) { - sprintf(OUTPUT,"Couldn't open average database %s\n",keydb); + (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb); CfLog(cferror,OUTPUT,"db_open"); return; } @@ -3263,7 +3263,7 @@ if ((DHCPLIST != NULL) && IsFuzzyItemIn( if ((errno = dbp->open(dbp,NULL,keydb,NULL,DB_BTREE,DB_CREATE,0644)) != 0) #endif { - sprintf(OUTPUT,"Couldn't open average database %s\n",keydb); + (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb); CfLog(cferror,OUTPUT,"db_open"); return; }